xnee-3.19/0000775000000000000000000000000012332167177007367 500000000000000xnee-3.19/Makefile.am0000664000000000000000000000450712034647447011353 00000000000000SUBDIRS = libxnee cnee gnee pnee ${DOC_DIR} share examples sessions pixmap man #${LIB_DIR} ${CLI_DIR} ${GUI_DIR} ${GNOME_APPLET_DIR} ${DOC_DIR} share examples sessions ${PIXMAP_DIR} man AUTOMAKE_OPTIONS = gnu EXTRA_DIST = Makefile.xnee Makefile.cvs autotools/* projects/test.xnp sessions/example1.xns README README.debian README.cvs BUGS FAQ EXAMPLES doc/Makefile.am doc/Makefile.in ChangeLog build/autobuild.sh devel-doc: -rm -fr src-html/ mkdir src-html/ DATE="$(shell date)" && \ grep AM_INIT_AUTOMAKE configure.in | sed -e 's/AM_INIT_AUTOMAKE//g' -e 's/\,[a-zA-Z0-9\.]*//g' -e 's,[()]*,,g' && \ XNEE_NAME="$(shell grep AM_INIT_AUTOMAKE configure.in | sed -e 's/AM_INIT_AUTOMAKE//g' -e 's/\,[a-zA-Z0-9\.]*//g' -e 's,[()]*,,g') " && \ XNEE_VERSION="$(shell grep AM_INIT_AUTOMAKE configure.in | sed -e 's/AM_INIT_AUTOMAKE//g' -e 's/[a-zA-Z0-9\.]*\,//g' -e 's,[()]*,,g') " && \ echo "Date: \"$$DATE\" $$XNEE_NAME $$XNEE_VERSION " && \ cat tmpl/header.html.tmpl | sed \ -e "s,PRODUCT_TMPL,$$XNEE_NAME (libxnee),g" \ -e "s,PRODUCT_VERSION_TMPL,$$XNEE_VERSION,g" \ -e "s,PRODUCT_BUILD_TMPL,$$DATE,g" \ -e "s,GNU_WWW_TMPL,http://www\.gnu\.org,g" \ -e "s,XNEE_WWW_TMPL,http://www\.gnu\.org/software/xnee,g" \ > libxnee/src/header.html cat tmpl/header.html.tmpl | sed \ -e 's,PRODUCT_TMPL,$$XNEE_NAME (cnee),g' \ -e 's,PRODUCT_VERSION_TMPL,$$XNEE_VERSION,g' \ -e 's,PRODUCT_BUILD_TMPL,$$DATE,g' \ -e "s,GNU_WWW_TMPL,http://www\.gnu\.org,g" \ -e "s,XNEE_WWW_TMPL,http://www\.gnu\.org/software/xnee,g" \ > cnee/src/header.html && \ mkdir -p src-html/libxnee/src mkdir -p src-html/libxnee/include/libxnee mkdir -p src-html/cnee/src cd libxnee/src/ && ${MAKE} devel-doc # cd cnee/src/ && ${MAKE} src-html && cp *.html ../../src-html/cnee/src manual: cd ./doc/ && $(MAKE) all manual man: cd ./cnee/src && make man cd pnee/man && make cd gnee/man && make test: cd libxnee/test && make clean all test check: all cd libxnee/test && make test cd cnee/test && ./test_all.sh xcheck: all cd libxnee/test && make xtest cd cnee/test && ./test_all.sh $(srcdir)/package.m4 : $(topdir)/configure.in :;{\ echo '# ' && \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])' ; \ } > '$$(srcdir)/package.m4' autobuild: cd build && autobuild.shxnee-3.19/README0000664000000000000000000000274511313525624010170 00000000000000Xnee / README ============================================== GNU Xnee is a GNU package. For more information about GNU Xnee, please visit: http://www.sandklef.com/xnee/ For more information about GNU, please visit http://www.gnu.org Xnee consists of three parts: ============================================== 1) libxnee (libxnee is basically xnee) A library containing most of the functionality. 2) xnee (xnee's not an event emulator) A command line program using libxnee 3) gnee (gnee's not an emulator either) A GUI program using libxnee 4) pnee A Gnome Panel Applet To build these three programs do the following: ============================================== Building from dist file (e.g xnee-3.02.tar.gz): ----------------------------------------------- #Unzip the source file gunzip xnee-3.02.tar.gz #Untar the source file tar xvf xnee-3.02.tar #Enter the Xnee directory cd xnee-3.02 #Generate the makefiles and build ./configure make make install if you need help on the configure options, do ./configure --help Typically you can: * disable building gnee (--disable-gui) * disable building documentation (--disable-doc) * enable building of pnee (--enable-gnome-applet) Building from CVS: ----------------------------------------------- #Check out xnee cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/xnee co xnee #Enter the Xnee directory cd xnee #Generate the makefiles and build make -f Makefile.cvs ./configure make make install xnee-3.19/projects/0000775000000000000000000000000012332167175011216 500000000000000xnee-3.19/projects/test.xnp0000664000000000000000000000000010305557766012641 00000000000000xnee-3.19/TODO0000664000000000000000000000046711606352424010000 00000000000000Main place for TODOs is at the GNU Xnee homepage: www.sandklef.com/xnee This file only contains small notes for the developers. pnee: libxnee: xnee_info contains record and replay things, but is handled in xnee_record.c clean up in xnee_time (calc_sleep_amount) doc: Everywhere: Comment the code xnee-3.19/config.h.in0000664000000000000000000000415011445205262011322 00000000000000/* config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* 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_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDARG_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_STDLIB_H /* 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 header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the header file. */ #undef HAVE_VARARGS_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_X11_EXTENSIONS_XINPUT2_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING xnee-3.19/configure0000775000000000000000000206033412332167124011216 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Xnee 3.19. # # 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 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || 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 bug-xnee@gnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_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'" SHELL=${CONFIG_SHELL-/bin/sh} 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='Xnee' PACKAGE_TARNAME='xnee' PACKAGE_VERSION='3.19' PACKAGE_STRING='Xnee 3.19' PACKAGE_BUGREPORT='bug-xnee@gnu.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS MAKEFILES_TO_GEN PANEL_LD_FLAGS PANEL_FLAGS PANEL_APPLET_DIR PANEL_SERVER_DIR XNEE_DOC_DIR CNEE_INFO FOO_DIR PIXMAP_DIR DOC_DIR LIB_DIR CLI_DIR GNOME_APPLET_DIR GUI_DIR DOC_TARGETS EPSTOPDF TEXI2PDF PS2PDF PDF2PS DVIPDF TEXI2HTML DIA WANTED_LIBXNEE libgnomeui_LIBS libgnomeui_CFLAGS gtk_LIBS gtk_CFLAGS MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE X11_LIBS LIBSEMA LIBDL XNEE_XINPUT_SUPPORT_FALSE XNEE_XINPUT_SUPPORT_TRUE NOT_INSTALL_LIBS_FALSE NOT_INSTALL_LIBS_TRUE BUILD_STATIC_FALSE BUILD_STATIC_TRUE DOCONLY_FALSE DOCONLY_TRUE XOSD_FALSE XOSD_TRUE BUF_VERBOSE_FALSE BUF_VERBOSE_TRUE PEDANTIC_FALSE PEDANTIC_TRUE GPROF_FALSE GPROF_TRUE GCOV_FALSE GCOV_TRUE VERBOSE_FALSE VERBOSE_TRUE BUILDMAN_FALSE BUILDMAN_TRUE BUILDDOC_FALSE BUILDDOC_TRUE BUILDPNEE_FALSE BUILDPNEE_TRUE BUILDGUI_FALSE BUILDGUI_TRUE OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL GTKCONF CONVERT PKGCFG BASH EGREP GREP X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS CPP XMKMF 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_dependency_tracking with_x enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_gui enable_gnome_applet enable_doc enable_man enable_doconly enable_xinput2 enable_cli enable_lib enable_static_programs enable_xosd enable_verbose enable_buffer_verbose enable_gcov enable_gprof enable_pedantic enable_paranoid_pedantic enable_maintainer_mode ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS XMKMF 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 Xnee 3.19 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/xnee] --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 X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Xnee 3.19:";; 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-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-gui build the GUI frontend to Xnee --enable-gnome-applet build the Gnome Panel frontend to Xnee (obsoleted) --enable-doc (re)build Xnee documentation --enable-man (re)build Xnee man pages --enable-doconly build Xnee documentation only --enable-xinput2 build Xnee with support for XInput2 --enable-cli build Xnee command line tool --enable-lib install Xnee library (libxnee) --enable-static-programs make the Xnee programs static (defaults to static) --enable-xosd build Xnee with XOSD support --enable-verbose build Xnee with no verbose mode support --enable-buffer_verbose build xnee without support for buffer printouts --enable-gcov build xnee with support for gcov --enable-gprof build xnee with support for gprof --enable-pedantic build xnee with support for pedantic compiling --enable-paranoid-pedantic build xnee with support for paranoid pedantic compiling --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). 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 XMKMF Path to xmkmf, Makefile generator for X Window System 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 Xnee configure 3.19 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_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_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_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_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 bug-xnee@gnu.org ## ## ------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Xnee $as_me 3.19, 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 ./autotools/ "$srcdir"/./autotools/; 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 ./autotools/ \"$srcdir\"/./autotools/" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.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='xnee' VERSION='3.19' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. 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 #AB_INIT 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 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 ${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 #AC_PROG_RANLIB ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" 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 XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=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_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=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_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=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_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=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_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_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 connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=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_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $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 remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=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_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $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 shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=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_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_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 IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=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_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS 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 { $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 stdarg.h varargs.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 break fi done # Extract the first word of "awk", so it can be a program name with args. set dummy awk; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_AWK+:} false; then : $as_echo_n "(cached) " >&6 else case $AWK in [\\/]* | ?:[\\/]*) ac_cv_path_AWK="$AWK" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_AWK="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi AWK=$ac_cv_path_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 # Extract the first word of "bash", so it can be a program name with args. set dummy bash; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_BASH+:} false; then : $as_echo_n "(cached) " >&6 else case $BASH in [\\/]* | ?:[\\/]*) ac_cv_path_BASH="$BASH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_BASH" && ac_cv_path_BASH="sh" ;; esac fi BASH=$ac_cv_path_BASH if test -n "$BASH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5 $as_echo "$BASH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCFG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKGCFG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCFG="$PKGCFG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKGCFG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKGCFG=$ac_cv_path_PKGCFG if test -n "$PKGCFG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCFG" >&5 $as_echo "$PKGCFG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "convert", so it can be a program name with args. set dummy convert; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_CONVERT+:} false; then : $as_echo_n "(cached) " >&6 else case $CONVERT in [\\/]* | ?:[\\/]*) ac_cv_path_CONVERT="$CONVERT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_CONVERT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi CONVERT=$ac_cv_path_CONVERT if test -n "$CONVERT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONVERT" >&5 $as_echo "$CONVERT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MAKEINFO+:} false; then : $as_echo_n "(cached) " >&6 else case $MAKEINFO in [\\/]* | ?:[\\/]*) ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MAKEINFO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MAKEINFO=$ac_cv_path_MAKEINFO if test -n "$MAKEINFO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 $as_echo "$MAKEINFO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTKCONF+:} false; then : $as_echo_n "(cached) " >&6 else case $GTKCONF in [\\/]* | ?:[\\/]*) ac_cv_path_GTKCONF="$GTKCONF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTKCONF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GTKCONF=$ac_cv_path_GTKCONF if test -n "$GTKCONF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKCONF" >&5 $as_echo "$GTKCONF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi #AC_DISABLE_SHARED case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" 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_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" 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_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi 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 test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${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 test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_MANIFEST_TOOL="${ac_tool_prefix}mt" $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 MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; 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_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_MANIFEST_TOOL="mt" $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" 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 MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Add X libs LIBS="$LIBS $X_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lc" >&5 $as_echo_n "checking for dlopen in -lc... " >&6; } if ${ac_cv_lib_c_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_dlopen=yes else ac_cv_lib_c_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_dlopen" >&5 $as_echo "$ac_cv_lib_c_dlopen" >&6; } if test "x$ac_cv_lib_c_dlopen" = xyes; then : LIBDL="" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : LIBDL="-ldl" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lc" >&5 $as_echo_n "checking for sem_init in -lc... " >&6; } if ${ac_cv_lib_c_sem_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sem_init (); int main () { return sem_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_sem_init=yes else ac_cv_lib_c_sem_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_c_sem_init" >&5 $as_echo "$ac_cv_lib_c_sem_init" >&6; } if test "x$ac_cv_lib_c_sem_init" = xyes; then : LIBSEMA="CCC" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lpthread" >&5 $as_echo_n "checking for sem_init in -lpthread... " >&6; } if ${ac_cv_lib_pthread_sem_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sem_init (); int main () { return sem_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_sem_init=yes else ac_cv_lib_pthread_sem_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_pthread_sem_init" >&5 $as_echo "$ac_cv_lib_pthread_sem_init" >&6; } if test "x$ac_cv_lib_pthread_sem_init" = xyes; then : LIBSEMA="-lpthread" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XTestFakeMotionEvent in -lXtst" >&5 $as_echo_n "checking for XTestFakeMotionEvent in -lXtst... " >&6; } if ${ac_cv_lib_Xtst_XTestFakeMotionEvent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXtst $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 XTestFakeMotionEvent (); int main () { return XTestFakeMotionEvent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xtst_XTestFakeMotionEvent=yes else ac_cv_lib_Xtst_XTestFakeMotionEvent=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_Xtst_XTestFakeMotionEvent" >&5 $as_echo "$ac_cv_lib_Xtst_XTestFakeMotionEvent" >&6; } if test "x$ac_cv_lib_Xtst_XTestFakeMotionEvent" = xyes; then : LIBXTST="-lXtst" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XTestFakeMotionEvent in -lXext" >&5 $as_echo_n "checking for XTestFakeMotionEvent in -lXext... " >&6; } if ${ac_cv_lib_Xext_XTestFakeMotionEvent_+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $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 XTestFakeMotionEvent (); int main () { return XTestFakeMotionEvent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XTestFakeMotionEvent_=yes else ac_cv_lib_Xext_XTestFakeMotionEvent_=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_Xext_XTestFakeMotionEvent_" >&5 $as_echo "$ac_cv_lib_Xext_XTestFakeMotionEvent_" >&6; } if test "x$ac_cv_lib_Xext_XTestFakeMotionEvent_" = xyes; then : LIBXTST="-lXext" fi fi GENERATION_DIRS="" if test "x$LIBXTST" = "x" ; then echo "" echo " **** ERROR **** " echo "" echo "Could not locate the needed X11 extensions:" echo "" echo " RECORD" echo " XTest" echo "" echo "Make sure you have them installed before building Xnee" echo "" echo " ... on Debian based distros do: apt-get install libxtst-dev" echo " " exit 1 fi # Check whether --enable-gui was given. if test "${enable_gui+set}" = set; then : enableval=$enable_gui; case "${enableval}" in yes) buildgui=true ;; no) buildgui=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-gui" "$LINENO" 5 ;; esac else buildgui=true fi # Check whether --enable-gnome-applet was given. if test "${enable_gnome_applet+set}" = set; then : enableval=$enable_gnome_applet; case "${enableval}" in yes) buildgapplet=true ;; no) buildgapplet=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-gnome-applet" "$LINENO" 5 ;; esac else buildgapplet=false fi # Check whether --enable-doc was given. if test "${enable_doc+set}" = set; then : enableval=$enable_doc; case "${enableval}" in yes) builddoc=true ;; no) builddoc=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-doc" "$LINENO" 5 ;; esac else builddoc=false fi # Check whether --enable-man was given. if test "${enable_man+set}" = set; then : enableval=$enable_man; case "${enableval}" in yes) buildman=true ;; no) buildman=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-man" "$LINENO" 5 ;; esac else buildman=false fi # Check whether --enable-doconly was given. if test "${enable_doconly+set}" = set; then : enableval=$enable_doconly; case "${enableval}" in yes) doconly=true ;; no) doconly=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-doconly" "$LINENO" 5 ;; esac else doconly=false fi # Check whether --enable-xinput2 was given. if test "${enable_xinput2+set}" = set; then : enableval=$enable_xinput2; case "${enableval}" in yes) use_xi2=true ;; no) use_xi2=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-xinput2" "$LINENO" 5 ;; esac else use_xi2=true fi # Check whether --enable-cli was given. if test "${enable_cli+set}" = set; then : enableval=$enable_cli; case "${enableval}" in yes) buildcli=true ;; no) buildcli=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-cli" "$LINENO" 5 ;; esac else buildcli=true fi # Check whether --enable-lib was given. if test "${enable_lib+set}" = set; then : enableval=$enable_lib; case "${enableval}" in yes) buildlib=true ;; no) buildlib=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-lib" "$LINENO" 5 ;; esac else buildlib=false fi # Check whether --enable-static-programs was given. if test "${enable_static_programs+set}" = set; then : enableval=$enable_static_programs; case "${enableval}" in yes) makestatic=true ;; no) makestatic=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-static-programs" "$LINENO" 5 ;; esac else makestatic=true fi # Check whether --enable-xosd was given. if test "${enable_xosd+set}" = set; then : enableval=$enable_xosd; case "${enableval}" in yes) xosd=true ;; no) xosd=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-xosd" "$LINENO" 5 ;; esac else xosd=true fi # Check whether --enable-verbose was given. if test "${enable_verbose+set}" = set; then : enableval=$enable_verbose; case "${enableval}" in yes) verbose=true ;; no) verbose=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-verbose" "$LINENO" 5 ;; esac else verbose=true fi # Check whether --enable-buffer_verbose was given. if test "${enable_buffer_verbose+set}" = set; then : enableval=$enable_buffer_verbose; case "${enableval}" in yes) buffer_verbose=true ;; no) buffer_verbose=false ;; *) as_fn_error $? "bad value ${enableval} for --disable-buffer_verbose" "$LINENO" 5 ;; esac else buffer_verbose=false fi # Check whether --enable-gcov was given. if test "${enable_gcov+set}" = set; then : enableval=$enable_gcov; case "${enableval}" in yes) gcov=true ;; no) gcov=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-gcov" "$LINENO" 5 ;; esac else gcov=false fi # Check whether --enable-gprof was given. if test "${enable_gprof+set}" = set; then : enableval=$enable_gprof; case "${enableval}" in yes) gprof=true ;; no) gprof=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-gprof" "$LINENO" 5 ;; esac else gprof=false fi # Check whether --enable-pedantic was given. if test "${enable_pedantic+set}" = set; then : enableval=$enable_pedantic; case "${enableval}" in yes) pedantic=true ;; no) pedantic=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-pedantic" "$LINENO" 5 ;; esac else pedantic=false fi # Check whether --enable-paranoid-pedantic was given. if test "${enable_paranoid_pedantic+set}" = set; then : enableval=$enable_paranoid_pedantic; case "${enableval}" in yes) para_pedantic=true ;; no) para_pedantic=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-paranoid-pedantic" "$LINENO" 5 ;; esac else para_pedantic=false fi if test x$buildgui = xtrue; then BUILDGUI_TRUE= BUILDGUI_FALSE='#' else BUILDGUI_TRUE='#' BUILDGUI_FALSE= fi if test x$buildgapplet = xtrue; then BUILDPNEE_TRUE= BUILDPNEE_FALSE='#' else BUILDPNEE_TRUE='#' BUILDPNEE_FALSE= fi if test x$builddoc = xtrue; then BUILDDOC_TRUE= BUILDDOC_FALSE='#' else BUILDDOC_TRUE='#' BUILDDOC_FALSE= fi if test x$buildman = xtrue; then BUILDMAN_TRUE= BUILDMAN_FALSE='#' else BUILDMAN_TRUE='#' BUILDMAN_FALSE= fi if test x$verbose = xtrue; then VERBOSE_TRUE= VERBOSE_FALSE='#' else VERBOSE_TRUE='#' VERBOSE_FALSE= fi if test x$gcov = xtrue; then GCOV_TRUE= GCOV_FALSE='#' else GCOV_TRUE='#' GCOV_FALSE= fi if test x$gprof = xtrue; then GPROF_TRUE= GPROF_FALSE='#' else GPROF_TRUE='#' GPROF_FALSE= fi if test x$pedantic = xtrue; then PEDANTIC_TRUE= PEDANTIC_FALSE='#' else PEDANTIC_TRUE='#' PEDANTIC_FALSE= fi if test x$buffer_verbose = xtrue; then BUF_VERBOSE_TRUE= BUF_VERBOSE_FALSE='#' else BUF_VERBOSE_TRUE='#' BUF_VERBOSE_FALSE= fi if test x$xosd = xtrue; then XOSD_TRUE= XOSD_FALSE='#' else XOSD_TRUE='#' XOSD_FALSE= fi if test x$doconly = xtrue; then DOCONLY_TRUE= DOCONLY_FALSE='#' else DOCONLY_TRUE='#' DOCONLY_FALSE= fi if test x$makestatic = xtrue; then BUILD_STATIC_TRUE= BUILD_STATIC_FALSE='#' else BUILD_STATIC_TRUE='#' BUILD_STATIC_FALSE= fi if test x$buildlib = xfalse; then NOT_INSTALL_LIBS_TRUE= NOT_INSTALL_LIBS_FALSE='#' else NOT_INSTALL_LIBS_TRUE='#' NOT_INSTALL_LIBS_FALSE= fi if test x$use_xi2 = xtrue; then XNEE_XINPUT_SUPPORT_TRUE= XNEE_XINPUT_SUPPORT_FALSE='#' else XNEE_XINPUT_SUPPORT_TRUE='#' XNEE_XINPUT_SUPPORT_FALSE= fi if test x$verbose = xtrue ; then VERBOSE_FLAG=-DUSE_VERBOSE else VERBOSE_FLAG=-DNO_VERBOSE fi if test x$gcov = xtrue ; then GCOV_FLAG=-fprofile-arcs -ftest-coverage CFLAGS= else GCOV_FLAG= fi if test x$gprof = xtrue ; then GPROF_FLAG=-pg CFLAGS= else GPROF_FLAG= fi if test x$buffer_verbose = xtrue ; then BUF_VERBOSE_FLAG=-DUSE_BUF_VERBOSE else BUF_VERBOSE_FLAG=-DNO_BUF_VERBOSE fi if test x$pedantic = xtrue ; then PEDANTIC_FLAGS= -W -Wall -pedantic -pedantic-errors -Werror else PEDANTIC_FLAGS= fi if test x$para_pedantic = xtrue ; then PEDANTIC_FLAGS= else PEDANTIC_FLAGS= fi if test x$use_xi2 = xtrue; then XNEE_XINPUT_SUPPORT_TRUE= XNEE_XINPUT_SUPPORT_FALSE='#' else XNEE_XINPUT_SUPPORT_TRUE='#' XNEE_XINPUT_SUPPORT_FALSE= fi if test x$use_xi2 = xtrue; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XIQueryPointer in -lXtst" >&5 $as_echo_n "checking for XIQueryPointer in -lXtst... " >&6; } if ${ac_cv_lib_Xtst_XIQueryPointer+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXtst $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 XIQueryPointer (); int main () { return XIQueryPointer (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xtst_XIQueryPointer=yes else ac_cv_lib_Xtst_XIQueryPointer=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_Xtst_XIQueryPointer" >&5 $as_echo "$ac_cv_lib_Xtst_XIQueryPointer" >&6; } if test "x$ac_cv_lib_Xtst_XIQueryPointer" = xyes; then : LIBXI="" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XIQueryPointer in -lXi" >&5 $as_echo_n "checking for XIQueryPointer in -lXi... " >&6; } if ${ac_cv_lib_Xi_XIQueryPointer+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXi $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 XIQueryPointer (); int main () { return XIQueryPointer (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xi_XIQueryPointer=yes else ac_cv_lib_Xi_XIQueryPointer=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_Xi_XIQueryPointer" >&5 $as_echo "$ac_cv_lib_Xi_XIQueryPointer" >&6; } if test "x$ac_cv_lib_Xi_XIQueryPointer" = xyes; then : LIBXI="-lXi" fi fi for ac_header in X11/extensions/XInput2.h do : ac_fn_c_check_header_mongrel "$LINENO" "X11/extensions/XInput2.h" "ac_cv_header_X11_extensions_XInput2_h" "$ac_includes_default" if test "x$ac_cv_header_X11_extensions_XInput2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_EXTENSIONS_XINPUT2_H 1 _ACEOF HAS_XI2="true" else HAS_XI2="false" fi done XNEE_XINPUT_SUPPORT_FLAGS=-DXNEE_XINPUT_SUPPORT else XNEE_XINPUT_SUPPORT_FLAGS= fi X11_LIBS="-lX11 $LIBXTST $LIBXI" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ac_config_headers="$ac_config_headers config.h" CLI_DIR= LIB_DIR= DOC_DIR= GUI_DIR= check_program() { PROG_VAR_TO_CHECK=$1 PROG_TO_CHECK=$2 if test "x$PROG_VAR_TO_CHECK" = "x" then MISSING_PROGRAMS="$MISSING_PROGRAMS $PROG_TO_CHECK" fi } DEBS_TO_INSTALL="" check_doc_program() { PROG_VAR_TO_CHECK=$1 PROG_TO_CHECK=$2 DEBS=$3 if test "x$PROG_VAR_TO_CHECK" = "x" then DOC_NOT_BUILT_WARNING=true MISSING_PROGRAMS="$MISSING_PROGRAMS $PROG_TO_CHECK" DEBS_TO_INSTALL="$DEBS_TO_INSTALL $DEBS" fi } give_deb_hint() { if test "x$DEBS_TO_INSTALL" != "x" then echo " ** If you are using a Debian based distro " echo " ** (e.g Trisquel, Debian, Gnewsense, Ubuntu), try:" echo " apt-get install $DEBS_TO_INSTALL" echo " **" fi } help_on_missing_progrs() { PROG=$1 DISABLE_OPT=$2 echo " ** Suggested solutions:" echo " ** 1) Build Xnee without $PROG," echo " ** ./configure $DISABLE_OPT" echo " **" echo " ** 2) Install the missing programs/packages" give_deb_hint echo " ** 3) If the programs/packages are installed (and not found) make sure they can be found in the PATH or other environment variable" echo " **" } if test x$buildgapplet = xtrue || test x$buildgui = xtrue || test x$builddoc = xtrue ; then check_doc_program "$CONVERT" "convert" "imagemagick" fi if test x$buildgapplet = xtrue || test x$buildgui = xtrue ; then # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCFG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKGCFG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCFG="$PKGCFG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKGCFG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKGCFG=$ac_cv_path_PKGCFG if test -n "$PKGCFG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCFG" >&5 $as_echo "$PKGCFG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$PKGCFG" "pkg-config" "pkg-config" if test "x$PKGCFG" = "x" then echo " ********** ERROR **********" echo " ** pnee and/or gnee can't be built ** " echo " ** ..it is obsoleted and not cuurently supported" echo " ** " echo " ** The following program/package is missing:" echo " ** pkg-config" echo " ** " DEBS_TO_INSTALL="pkg-config" help_on_missing_progrs "pnee and gnee" "--disable-gnome-applet --disable-gui " echo " ** " echo " ********** ERROR **********" exit 1 fi fi PIXMAP_DIR=pixmap if test x$buildgapplet = xtrue || test x$buildgui = xtrue ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} 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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; 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_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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 am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc { $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 if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" 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 XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=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_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $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 dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=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_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=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_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $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 gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=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_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_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 connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=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_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $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 remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=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_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $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 shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=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_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_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 IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=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_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi GTK_ERR=0 GTK_MODULES="" GTK2_MODULE="gtk+-2.0 " GTK2_VERSION="2.0.0" gtk_CFLAGS=`$PKGCFG --cflags $GTK2_MODULE ` gtk_LIBS=`$PKGCFG --libs $GTK2_MODULE ` if `$PKGCFG --exists $GTK2_MODULE >= $GTK2_VERSION ` then GTK_MODULES="$GTK2_MODULE" GTK_ERR=1 fi GNOMEUI2_MODULE="libgnomeui-2.0" GNOMEUI2_VERSION="2.0.0" if `$PKGCFG --exists $GNOMEUI2_MODULE >= $GNOMEUI2_VERSION` then GTK_MODULES="$GTK_MODULES $GNOMEUI2_MODULE" GTK_ERR=1 fi libgnomeui_CFLAGS=`$PKGCFG --cflags $GNOMEUI2_MODULE ` libgnomeui_LIBS=`$PKGCFG --libs $GNOMEUI2_MODULE ` PIXMAP_DIR=pixmap if test x$buildgapplet = xtrue ; then if test x$GTKCONF = x ; then echo " **************************************** " echo " * WARNING, missing program: gtk-config *" echo " **************************************** " echo "" echo " On Debian based distros, install sth like: libgtk2.0-dev" echo "" echo "However, I will try my best to continue without gtk-config. " echo "Will not be able to check for gtk/gnome header files properly" echo "On most platforms this implies no problem" echo "" else GTK_PREFIX=`$GTKCONF --prefix` GTK_INC_PATH=$GTK_PREFIX/include/$GNOMEUI2_MODULE/ GNOME_H_FILE=$GTK_INC_PATH/gnome.h ls -l $GNOME_H_FILE 2>/dev/null >/dev/null MISSING_GNOME_H=$? if test x$MISSING_GNOME_H != x0 ; then echo "Missing GNOME header file (gnome.h), you need to install development packages" echo "On a Debian based distro system do:" echo "" echo " sudo apt-get install libgnome2-dev" echo "" echo exit 1 fi fi fi fi if test x$buildgui = xtrue ; then GUI_DIR=gnee else GUI_DIR= fi if test x$buildgapplet = xtrue; then GNOME_APPLET_DIR=pnee else GNOME_APPLET_DIR= fi if test x$buildcli = xtrue then CLI_DIR=cnee else CLI_DIR= fi LIB_DIR=libxnee if test x$buildlib = xtrue ; then WANTED_LIBXNEE=libxnee.la else if test x$makestatic = xfalse ; then echo " ********** ERROR **********" echo " You can't build the programs dynamic " echo " and not install the libs $makestatic" echo " ********** ERROR **********" exit 1 fi WANTED_LIBXNEE=libxnee.la fi check_xinput2() { if test x$use_xi2 = xtrue ; then if test x$HAS_XI2 = xfalse ; then echo "XInput2 not found" echo "To compile GNU Xnee you have to:" echo " * Install XInput2 (development package)" echo "or" echo " * Disable XInput2 support in GNU Xnee:" echo " ./configure --disable-xinput2" echo " " exit 1 fi fi } check_xinput2 FOO_DIR=foo if test x$doconly = xtrue ; then buildgui=false buildlib=false buildcli=false builddoc=false LIB_DIR= CLI_DIR= GUI_DIR= FOO_DIR=bar DOC_DIR=doc DOC_MAKEFILES= fi DOC_DIR=doc show_doc_program() { PROG_VAR_TO_CHECK=$1 PROG_TO_CHECK=$2 MESS=$3 if test "x$PROG_VAR_TO_CHECK" = "x" then echo " ***** $PROG_TO_CHECK missing, $MESS" else echo " $PROG_TO_CHECK - $PROG_VAR_TO_CHECK" fi } DOC_NOT_BUILT_WARNING=false MISSING_PROGRAMS="" DOC_TARGETS="info txt" if test x$builddoc = xtrue ; then # Extract the first word of "dia", so it can be a program name with args. set dummy dia; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DIA+:} false; then : $as_echo_n "(cached) " >&6 else case $DIA in [\\/]* | ?:[\\/]*) ac_cv_path_DIA="$DIA" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DIA="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DIA=$ac_cv_path_DIA if test -n "$DIA"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIA" >&5 $as_echo "$DIA" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$DIA" "dia" "dia" # Extract the first word of "texi2html", so it can be a program name with args. set dummy texi2html; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_TEXI2HTML+:} false; then : $as_echo_n "(cached) " >&6 else case $TEXI2HTML in [\\/]* | ?:[\\/]*) ac_cv_path_TEXI2HTML="$TEXI2HTML" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TEXI2HTML="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi TEXI2HTML=$ac_cv_path_TEXI2HTML if test -n "$TEXI2HTML"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXI2HTML" >&5 $as_echo "$TEXI2HTML" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$TEXI2HTML" "texi2html" "texi2html" # AC_PATH_PROG(DVI2PS,dvi2ps,,) # check_doc_program "$DVI2PS" "dvi2ps" "dvi2ps" # Extract the first word of "dvipdf", so it can be a program name with args. set dummy dvipdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DVIPDF+:} false; then : $as_echo_n "(cached) " >&6 else case $DVIPDF in [\\/]* | ?:[\\/]*) ac_cv_path_DVIPDF="$DVIPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DVIPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi DVIPDF=$ac_cv_path_DVIPDF if test -n "$DVIPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPDF" >&5 $as_echo "$DVIPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$DVIPDF" "dvipdf" "dvipdf" # Extract the first word of "pdf2ps", so it can be a program name with args. set dummy pdf2ps; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PDF2PS+:} false; then : $as_echo_n "(cached) " >&6 else case $PDF2PS in [\\/]* | ?:[\\/]*) ac_cv_path_PDF2PS="$PDF2PS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PDF2PS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PDF2PS=$ac_cv_path_PDF2PS if test -n "$PDF2PS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDF2PS" >&5 $as_echo "$PDF2PS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$PDF2PS" "pdf2ps" "" # Extract the first word of "ps2pdf", so it can be a program name with args. set dummy ps2pdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PS2PDF+:} false; then : $as_echo_n "(cached) " >&6 else case $PS2PDF in [\\/]* | ?:[\\/]*) ac_cv_path_PS2PDF="$PS2PDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PS2PDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PS2PDF" && ac_cv_path_PS2PDF="ps2pdf14" ;; esac fi PS2PDF=$ac_cv_path_PS2PDF if test -n "$PS2PDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PS2PDF" >&5 $as_echo "$PS2PDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$PS2PDF" "ps2pdf" "gs-common" # Extract the first word of "texi2pdf", so it can be a program name with args. set dummy texi2pdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_TEXI2PDF+:} false; then : $as_echo_n "(cached) " >&6 else case $TEXI2PDF in [\\/]* | ?:[\\/]*) ac_cv_path_TEXI2PDF="$TEXI2PDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TEXI2PDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi TEXI2PDF=$ac_cv_path_TEXI2PDF if test -n "$TEXI2PDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEXI2PDF" >&5 $as_echo "$TEXI2PDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$TEXI2PDF" "texi2pdf" "" # Extract the first word of "epstopdf", so it can be a program name with args. set dummy epstopdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_EPSTOPDF+:} false; then : $as_echo_n "(cached) " >&6 else case $EPSTOPDF in [\\/]* | ?:[\\/]*) ac_cv_path_EPSTOPDF="$EPSTOPDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_EPSTOPDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi EPSTOPDF=$ac_cv_path_EPSTOPDF if test -n "$EPSTOPDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EPSTOPDF" >&5 $as_echo "$EPSTOPDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi check_doc_program "$EPSTOPDF" "epstopdf" "texlive-extra-utils texlive-font-utils" # AC_PATH_PROG(DOXYGEN,doxygen,,) # check_doc_program "$DOXYGEN" "doxygen" "doxygen" check_doc_program "$MAKEINFO" "makeinfo" " texinfo" if test x$DOC_NOT_BUILT_WARNING = xtrue ; then echo " " echo " ********** ERROR **********" echo " ** Documents can't be built ** " echo " ** " echo " ** The following programs are missing:" for i in $MISSING_PROGRAMS do echo " ** $i " done echo " ** " help_on_missing_progrs documentation "--disable-doc" echo " ** " echo " ********** ERROR **********" DOC_DIR="" DOC_TARGETS="" builddoc=false doconly=false CNEE_INFO="" echo "... configuration failed" exit 1 else DOC_TARGETS="images html info txt pdf ps" CNEE_INFO="cnee.info" fi else if test x$buildman = xtrue; then check_doc_program "$MAKEINFO" "makeinfo" "texi2html texinfo " if test x$DOC_NOT_BUILT_WARNING = xtrue ; then echo " " echo " ********** ERROR **********" echo " ** Man page(s) and images can't be built ** " echo " ** " echo " ** The following programs are missing:" for i in $MISSING_PROGRAMS do echo " ** $i " done echo " ** " help_on_missing_progrs documentation "--disable-doc" echo " ** " echo " ********** ERROR **********" DOC_DIR="" DOC_TARGETS="" builddoc=false doconly=false CNEE_INFO="" echo "... configuration failed" exit 1 else DOC_TARGETS="info" CNEE_INFO="cnee.info" fi fi fi MAKEFILES_TO_GEN="" MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN Makefile examples/Makefile sessions/Makefile share/Makefile" EXCLUDED_COMPONENTS="" INCLUDED_COMPONENTS="" add_excl() { EXCLUDED_COMPONENTS="${EXCLUDED_COMPONENTS}\n $1" } add_incl() { INCLUDED_COMPONENTS="${INCLUDED_COMPONENTS}\n $1" } if test x$doconly = xtrue || test x$builddoc = xtrue ; then MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN doc/Makefile" add_incl "doc" else add_excl "doc (docs are already included in dist file)" fi if test x$buildlib = xtrue ; then MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN libxnee/Makefile libxnee/src/Makefile " fi if test x$buildgui = xtrue || test x$buildgapplet = xtrue ; then if test x$GTK_ERR != x0 ; then echo " ********** ERROR **********" echo " ** pnee and/or gnee can't be built ** " echo " ** " echo " ** The following program/package is missing:" echo " ** $GTK_MODULES " echo " ** " DEBS_TO_INSTALL="$GTK_MODULES" help_on_missing_progrs "pnee and gnee" "--diable-gui --disable-gnome-applet" echo " ** " echo " ********** ERROR **********" exit 1 fi fi if test x$buildcli = xtrue ; then MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN cnee/Makefile cnee/src/Makefile" add_incl "cli" else add_excl "cli" fi if test x$buildgui = xtrue ; then MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN gnee/Makefile gnee/src/Makefile" add_incl "gnee" else add_excl "gnee" fi if test x$buildgapplet = xtrue ; then # AM_GCONF_SOURCE_2 PANEL_APPLET_DIR="${libdir}/gnome-panel" PANEL_SERVER_DIR="${libdir}/bonobo/servers" # AC_PATH_PROG(GCONFTOOL, gconftool-2) PANEL_APPLET=libpanelapplet-4.0 PANEL_FLAGS=`$PKGCFG --cflags $PANEL_APPLET` PANEL_LD_FLAGS=`$PKGCFG --libs $PANEL_APPLET` $PKGCFG $PANEL_APPLET if test x$? != x0 ; then echo " ********** ERROR **********" echo " ** pnee can't be built ** " echo " ** " echo " ** The following programs/packages are missing:" echo " ** $PANEL_APPLET" echo " ** " DEBS_TO_INSTALL=" libpanel-applet-4-dev" help_on_missing_progrs pnee "--disable-gnome-applet" echo " ** " echo " ********** ERROR **********" echo exit 1 fi # AC_OUTPUT([ pnee/Makefile pnee/src/Makefile pnee/pixmaps/Makefile ]) MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN pnee/Makefile pnee/data/Makefile pnee/src/Makefile pnee/pixmaps/Makefile" add_incl "pnee" else add_excl "pnee" fi echo "Making the following Makefiles:" echo " $MAKEFILES_TO_GEN" #AC_OUTPUT([ $MAKEFILES_TO_GEN ]) ac_config_files="$ac_config_files Makefile libxnee/Makefile libxnee/src/Makefile examples/Makefile libxnee/test/Makefile sessions/Makefile share/Makefile doc/Makefile cnee/Makefile cnee/src/Makefile gnee/Makefile gnee/src/Makefile gnee/man/Makefile pnee/Makefile pnee/src/Makefile pnee/pics/Makefile pnee/man/Makefile pnee/data/Makefile pixmap/Makefile man/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= 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 if test -z "${BUILDGUI_TRUE}" && test -z "${BUILDGUI_FALSE}"; then as_fn_error $? "conditional \"BUILDGUI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILDPNEE_TRUE}" && test -z "${BUILDPNEE_FALSE}"; then as_fn_error $? "conditional \"BUILDPNEE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILDDOC_TRUE}" && test -z "${BUILDDOC_FALSE}"; then as_fn_error $? "conditional \"BUILDDOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILDMAN_TRUE}" && test -z "${BUILDMAN_FALSE}"; then as_fn_error $? "conditional \"BUILDMAN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${VERBOSE_TRUE}" && test -z "${VERBOSE_FALSE}"; then as_fn_error $? "conditional \"VERBOSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GCOV_TRUE}" && test -z "${GCOV_FALSE}"; then as_fn_error $? "conditional \"GCOV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GPROF_TRUE}" && test -z "${GPROF_FALSE}"; then as_fn_error $? "conditional \"GPROF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PEDANTIC_TRUE}" && test -z "${PEDANTIC_FALSE}"; then as_fn_error $? "conditional \"PEDANTIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUF_VERBOSE_TRUE}" && test -z "${BUF_VERBOSE_FALSE}"; then as_fn_error $? "conditional \"BUF_VERBOSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XOSD_TRUE}" && test -z "${XOSD_FALSE}"; then as_fn_error $? "conditional \"XOSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DOCONLY_TRUE}" && test -z "${DOCONLY_FALSE}"; then as_fn_error $? "conditional \"DOCONLY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_STATIC_TRUE}" && test -z "${BUILD_STATIC_FALSE}"; then as_fn_error $? "conditional \"BUILD_STATIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NOT_INSTALL_LIBS_TRUE}" && test -z "${NOT_INSTALL_LIBS_FALSE}"; then as_fn_error $? "conditional \"NOT_INSTALL_LIBS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XNEE_XINPUT_SUPPORT_TRUE}" && test -z "${XNEE_XINPUT_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"XNEE_XINPUT_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XNEE_XINPUT_SUPPORT_TRUE}" && test -z "${XNEE_XINPUT_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"XNEE_XINPUT_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -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 Xnee $as_me 3.19, 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="\\ Xnee config.status 3.19 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" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libxnee/Makefile") CONFIG_FILES="$CONFIG_FILES libxnee/Makefile" ;; "libxnee/src/Makefile") CONFIG_FILES="$CONFIG_FILES libxnee/src/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "libxnee/test/Makefile") CONFIG_FILES="$CONFIG_FILES libxnee/test/Makefile" ;; "sessions/Makefile") CONFIG_FILES="$CONFIG_FILES sessions/Makefile" ;; "share/Makefile") CONFIG_FILES="$CONFIG_FILES share/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "cnee/Makefile") CONFIG_FILES="$CONFIG_FILES cnee/Makefile" ;; "cnee/src/Makefile") CONFIG_FILES="$CONFIG_FILES cnee/src/Makefile" ;; "gnee/Makefile") CONFIG_FILES="$CONFIG_FILES gnee/Makefile" ;; "gnee/src/Makefile") CONFIG_FILES="$CONFIG_FILES gnee/src/Makefile" ;; "gnee/man/Makefile") CONFIG_FILES="$CONFIG_FILES gnee/man/Makefile" ;; "pnee/Makefile") CONFIG_FILES="$CONFIG_FILES pnee/Makefile" ;; "pnee/src/Makefile") CONFIG_FILES="$CONFIG_FILES pnee/src/Makefile" ;; "pnee/pics/Makefile") CONFIG_FILES="$CONFIG_FILES pnee/pics/Makefile" ;; "pnee/man/Makefile") CONFIG_FILES="$CONFIG_FILES pnee/man/Makefile" ;; "pnee/data/Makefile") CONFIG_FILES="$CONFIG_FILES pnee/data/Makefile" ;; "pixmap/Makefile") CONFIG_FILES="$CONFIG_FILES pixmap/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/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 } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 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 # # Final words # # # echo " " echo " " echo " Configuration of Xnee finished " echo " ============================== " echo " PACKAGE $PACKAGE" echo " VERSION $VERSION" echo " " echo " Xnee Developer flags" echo " -------------------------------------" echo " VERBOSE_FLAG $VERBOSE_FLAG" echo " GCOV_FLAG $GCOV_FLAG" echo " GPROF_FLAG $GPROF_FLAG" echo " BUF_VERBOSE_FLAG $BUF_VERBOSE_FLAG" echo " PEDANTIC_FLAGS $PEDANTIC_FLAGS" echo " XNEE_XINPUT_SUPPORT_FLAGS $XNEE_XINPUT_SUPPORT_FLAGS" echo " LIBDL $LIBDL" echo " LIBSEMA $LIBSEMA" echo " X11_LIBS $X11_LIBS" echo " PANEL_SERVER_DIR $PANEL_SERVER_DIR" echo " PANEL_APPLET_DIR $PANEL_APPLET_DIR" echo " PIXMAP_DIR $PIXMAP_DIR" echo " CONVERT $CONVERT" #echo " GUI_DIR $GUI_DIR" #echo " GNOME_APPLET_DIR $GNOME_APPLET_DIR" #echo " CLI_DIR $CLI_DIR" #echo " LIB_DIR $LIB_DIR" #echo " DOC_DIR $DOC_DIR" echo " " if test x$builddoc = xtrue ; then echo " Programs used to build documentation and/or guis " echo " -----------------------------------------------------" show_doc_program "$DIA" "dia" "Can't generate pictures from dia sources" show_doc_program "$CONVERT" "convert" "Can't convert image formats" show_doc_program "$TEXI2HTML" "texi2html" "can't generate html pages" # show_doc_program "$DVI2PS" "dvi2ps" "can't generate ps " show_doc_program "$DVIPDF" "dvipdf" "can't generate pdf from dvi " show_doc_program "$PS2PDF" "ps2pdf" "can't generate pdf" show_doc_program "$EPSTOPDF" "epstopdf" "can't generate pdf" show_doc_program "$CONVERT" "convert" "can't generate convert between formats" show_doc_program "$MAKEINFO" "makeinfo" "can't make info pages" fi if test x$buildgapplet = xtrue || test x$buildgui = xtrue ; then echo " Programs used to build guis " echo " -----------------------------------------------------" show_doc_program "$PKGCFG" "pkg-config" "can't get meta info from installed packages" show_doc_program "$GTKCONF" "gtk-config" "can't check for header files..." fi echo "" echo " Building the following components " echo " -------------------------------------" printf " $INCLUDED_COMPONENTS" echo " " echo " " if test "x$EXCLUDED_COMPONENTS" != "x" ; then echo " Excluding the following components " echo " -------------------------------------" printf " $EXCLUDED_COMPONENTS" echo " " fi echo "" echo " Static or dynamic linking for programs ($makestatic)" echo " -------------------------------------" echo "BUILD_STATIC: $BUILD_STATIC" if test "x$BUILD_STATIC" != "x" ; then echo " dynamic" else echo " static" fi echo "" echo " Support for XInput2" echo " -------------------------------------" if test "x$XNEE_XINPUT_SUPPORT_FLAGS" = "x" ; then echo " disabled" else echo " enabled" fi echo " " echo " Settings ok?" echo " -------------------------------------" echo " If the settings are not ok, configure again" echo " ./configure " echo " " echo " To list all the configure options: " echo " ./configure --help" echo " " echo " Compile and install" echo " -------------------------------------" echo " If the above settings are ok, proceed with the build:" echo " make" echo " and (perhaps as root)" echo " make install" echo " " xnee-3.19/share/0000775000000000000000000000000012332167177010471 500000000000000xnee-3.19/share/Makefile.am0000664000000000000000000000040510603163547012440 00000000000000XNEE_DATA_FILES = xnee.sh EXTRA_DIST = xnee.sh.in1 xnee.sh.in2 pkgdata_DATA = xnee.sh pkgdatadir=$(datadir)/xnee/ CLEAN_FILES=xnee.sh xnee.sh: xnee.sh.in1 xnee.sh.in2 cp xnee.sh.in1 xnee.sh cat xnee.sh.in2 | sed 's,__VERSIONTAG__,$(VERSION),g' >> xnee.sh xnee-3.19/share/xnee.sh.in10000664000000000000000000001572211150615120012360 00000000000000######################################################################## # This file is part of GNU Xnee # # GNU 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, # or (at your option) any later version. # # GNU 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 program; see the file COPYING. If not, write to the # Free Software Foundation, Inc., 51 Franklin St, # Fifth Floor, Boston, MA 02110-1301 USA. ######################################################################## ######################################################################## # # This file contains small shell script functions (bourne shell) # to ease up the use of Xnee sripting primitives. # # For more information, please go to http://www.gnu/.org/software/xnee # # # A script would use the functions something like this # # #!/bin/sh # # # source the functions # . /usr/share/Xnee/xnee.sh # # xnee_init_file # echo "hey, I will now move the pointer" # xnee_move_mouse 12 # echo "hey, I will now press and release key l" # xnee_fake_key l # # xnee_close_down # ######################################################################## ######################################################################## # # Basic settings # # MY_FIFO file/fifo to use as communication between your prog and Xnee # # CNEE Xnee command line program (cnee) # # MSEC Delay (msecs) before ket/motion is faked # ######################################################################## MY_FIFO=/tmp/xnee_${USER}.$$ CNEE=${CNEE:-cnee} MSEC=2 ######################################################################## # # Function name: xnee_init_fifo # # Arguments: none # # Return value: none # # Description: Sets up a fifo to use for communication # with your script (using the fake primitives below # ######################################################################## xnee_init_fifo() { sleep 0 } xnee_init_fifo_obsolete() { rm -f $MY_FIFO touch $MY_FIFO $CNEE --replay --file $MY_FIFO & CNEE_PID=$! } ######################################################################## # # Function name: xnee_init_file # # Arguments: none # # Return value: none # # Description: Sets up a file to use for communication # with your script (using the fake primitives below # ######################################################################## xnee_init_file() { sleep 0 } xnee_init_file_obsolete() { rm -f $MY_FIFO mkfifo $MY_FIFO (tail -f $MY_FIFO | $CNEE --replay --file stdin) & CNEE_PID=$! } ######################################################################## # # Function name: xnee_write # # Arguments: string str # # Return value: none # # Description: Writes str to the Xnee instance as invoked # by the xnee_init_file or xnee_init_fifo function # # Note: Internal function ######################################################################## xnee_write() { # echo "$*" >> $MY_FIFO echo "$*" | $CNEE --replay --file stdin } ######################################################################## # # Function name: xnee_close_down # # Arguments: none # # Return value: none # # Description: Closes file/fifo and shoots down cnee if still running # ######################################################################## xnee_close_down() { # rm -f $MY_FIFO 2>/dev/null >/dev/null # kill $CNEE_PID 2>/dev/null >/dev/null sleep 0 } ######################################################################## # # Function name: xnee_move_mouse # # Arguments: int x, int y # # Return value: none # # Description: Moves pointer to position (x,y) # ######################################################################## xnee_move_mouse() { if [ "$2" = "" ] then return fi X_POS=$1 Y_POS=$2 xnee_write "fake-motion x=$X_POS y=$Y_POS msec=$MSEC" } ######################################################################## # # Function name: xnee_fake_key # # Arguments: charachter key # # Return value: none # # Description: Fakes press and release of key 'key' # ######################################################################## xnee_fake_key() { if [ "$1" = "" ] then return fi KEY=$1 xnee_write "fake-key key=$KEY msec=$MSEC" } ######################################################################## # # Function name: xnee_fake_key_press # # Arguments: charachter key # # Return value: none # # Description: Fakes press of key 'key' # ######################################################################## xnee_fake_key_press() { if [ "$1" = "" ] then return fi KEY=$1 xnee_write "fake-key-press key=$KEY msec=$MSEC" } ######################################################################## # # Function name: xnee_fake_key_release # # Arguments: charachter key # # Return value: none # # Description: Fakes release of key 'key' # ######################################################################## xnee_fake_key_release() { if [ "$1" = "" ] then return fi KEY=$1 xnee_write "fake-key-release key=$KEY msec=$MSEC" } ######################################################################## # # Function name: xnee_fake_button_press # # Arguments: integer nr # # Return value: none # # Description: Fakes press of buttton 'nr' # ######################################################################## xnee_fake_button_press() { if [ "$1" = "" ] then return fi BUTTON=$1 xnee_write "fake-button-press button=$BUTTON msec=$MSEC" } ######################################################################## # # Function name: xnee_fake_button_release # # Arguments: integer nr # # Return value: none # # Description: Fakes release of buttton 'nr' # ######################################################################## xnee_fake_button_release() { if [ "$1" = "" ] then return fi BUTTON=$1 xnee_write "fake-button-release button=$BUTTON msec=$MSEC" } ######################################################################## # # Function name: xnee_fake_button # # Arguments: integer nr # # Return value: none # # Description: Fakes press and release of buttton 'nr' # ######################################################################## xnee_fake_button() { if [ "$1" = "" ] then return fi BUTTON=$1 xnee_write "fake-button button=$BUTTON msec=$MSEC" } xnee-3.19/share/Makefile.in0000664000000000000000000003521712332167124012456 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)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = $(datadir)/xnee/ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ XNEE_DATA_FILES = xnee.sh EXTRA_DIST = xnee.sh.in1 xnee.sh.in2 pkgdata_DATA = xnee.sh CLEAN_FILES = xnee.sh all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu share/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu share/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgdataDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-pkgdataDATA xnee.sh: xnee.sh.in1 xnee.sh.in2 cp xnee.sh.in1 xnee.sh cat xnee.sh.in2 | sed 's,__VERSIONTAG__,$(VERSION),g' >> xnee.sh # 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: xnee-3.19/share/xnee.sh.in20000664000000000000000000000110710360552573012367 00000000000000 ######################################################################## # # The rest of this script contains # automagially generated code # ######################################################################## ######################################################################## # # Function name: xnee_version # # Arguments: none # # Return value: none # # Description: Prints the current version of Xnee # # ######################################################################## xnee_version() { echo "__VERSIONTAG__" } xnee-3.19/README.cvs0000664000000000000000000000010511313526117010744 00000000000000Instructions on how to build from CVS can be found in the README filexnee-3.19/doc/0000775000000000000000000000000012332167177010134 500000000000000xnee-3.19/doc/xnrec.png0000664000000000000000000003654412332167163011710 00000000000000PNG  IHDR tK gAMA asRGB cHRMz&u0`:pQ<bKGD̿ pHYs<<)< IDATxl\ו2Qj7LNl7F̒&nkTdo/5U&$B024D#Bi&@~I22oS!(al0Ȳ@8$y>Dx̑$¸HPd.sd$ӄ 9ݘ\u=Ϟag=5H)OHR 5}ڸ[RfRLi̸dd@%iiFs&nv"f9 :YQO[ag0 DHDŽ;2-DM1'F {ɴ!!Ozd皙-\(; aed1L3FWڐ$n`jAt+!\8@=ϒ@a2k,W67Ap)g2CؔcrIםuDIISe[F3l23A 2@eciD nMl L;AeȐt g26T&C?6)sg+3sVhgQcN2(>$?SM9׮SG%ӌ>Ž֒;+ɾNpDr$n)vL7E&LQ3'sgB =.7wY$s2= .ʘ`uX#Ԅ\v ĭS${i"{3f#0&賦SPR 8ɺW7Ȭe戰=6]w5uDXq,2n%Bҭ6AVJadLQdLCDxEf9bŒfo']&L>2$9 f9τ%ByTQ>*JQ*%;qVwHCF)MlJ6ʒ'5zM_Yrzuͬfqq\[&GRLk„@Zz 2&ngLNb3&0Iwdecg`'43e ΜdLvnѴN^;n[s J 33w|¡[5CܻG6mMe!-F;~`Oe&ͤ{b:} ?"3f2JvBbYf mK7AeZ51t6R& ,$IdikDHd\leL!g¹d`~γTvEeZfs+\㚻`ìffY⚹AFƒg]1Krpgl "9-OND1c$ ie3D؍ ^:TPV3JF虜$cfgP+óv/)In.f;DŽ7xyLPJ0:$S. Y׽2N > CJ?h1}d+睒aV|ƈ vq!]xFm=w^G>= mҦ/k1Hʤ5}ymm!s ZwdYO3dd8\7[d^;Sv v2mYgN '8AX$ed-%7'EĽ R&sQJD+mH^xŒ2kifC{g~<%.q^^~`owFֺllZ )wdFʲL 2fnp 3"H29JafJP5C21/Iuq9lP|R+jg \oKEk*:=E]BVl'm A +KP^a֖sLfm5oGjM[*e3Lg+N9$+Fb H׸>?+LV)*S_i@?[}6U2U2UϦʦ4)[=ԀxTxTxTxTxTxCfs4v5U2U2U2U.mkU>FNVtl~~ny/JTGeZ!44HϽ3̆c}JPVHƩO"mȲySvS_y}ł۝]eS5-:W׿(oF~_ xRiYYGTz|J\Qi4sſw| 4BM{g_ʔBeZ9o~/xڃ_gw_}!_ۇMP,U⡜HUsc-k(#֊3'+bQ-q_{~׼=ִ$ݒQ56.7<#Z%ȨLKy;JYEG]H%s|Ϛ|>)2-CNC6lUa{١"U*BeZP?fWKR1*MhPUJL7BU*գ2 UEԂʴ"#TR* _*RVTSPUJLvHzPVEmBU*2ꅪ"UEeZ5 UEԏʴ*Ti*ӚL*R1LkdsHF2BU*C7ԁ3 ;>fHs*DeZŅڞ" 5zdۮ"UC[ӺoQT7k:Ji!NNv3***RipH2mroTiN]ن !tMzLB2RWi*>fPH ~ق<{;3z̚>ξ%<H28w,ljV}Uo_5R;;B:#ԁvߙL1^9Na;3*gcȧwy'8L/4ǰuJMz\wϒv1 #5HxJxD^Y&|<"8B(e6|.oFMN|ctStXlqM̨[»ttH5&;hzgs%Ӧv+-d=v1ʚ7}{k3o4]#6(0pGD8"Q!"2#enyiD'DlY0 dX!DAmDO&BUNì1 Jq'ǏU5 `[F"" 3y!"rSC6%)Ȉs|ws"nAAvߠ[siH:JVmuĂ;0ΔຒYԱ Otp쭩g{TEyNpIS,)&:&bݔ*qb*J="DYVB/og.gx/0>^2EI>A5}avZ7Q EkNf ʛD HPB[{*3z5nZ>Obx_ `5}cz70q\D# $ 43 78>` 8w?!v\"Aa3`Ѓp Hp"rIE<'8 puz-EqT$-jFdDGTۙmM(4vtzZnQC&Rpb2DtGdkF%N^v;[BqQu85-F [ԀL ogԃq}wN߳{YbnK8O9((7I'pM ^b۞2p[ 9C}ᜭ0ä9ApVp OM\lɨ 6>5 ^ZoklՌzjkZsx~og,(}F}P:3g6JyՎ:Y>f}Z.PVAbC;Foe qEw1AO2]('_+EJVJqӫ4 :*2TN Khϗ8au(*ۜAgݹ}>ϙ-*QIiSe;0Og|SbxLoӺ8AdknvÔ{l. ]1+i$ 1] !;n W3%G!}uq\Oǻc?ws(XdQ:,CQZ#<6\Qf~O0I>_`c8#⌧2&w$uX bPfF gZ7 ޣpn,|uNgyR227y)P!K@5'ĥSQ8 й gac cdkch^0w e|IaC[( t, V5+ H"ϦEۿT( u䜿P&<LVG<]3<{7 + &mQmQ)oOmS|L)^oKsgq6m]$衋ϙ E]2]t,rvb.T -e TVHU0{xcV\QݹP_:{/8f"T62!F*/Tgf/\M "Q7 OIwCE";?f=u?^bXǙ\?uoyƸ cҶ9GM[K nEwpJ7P{"ΐCtp.Dg9 ;%{)iFxީɟ!s 2;2 )jYp\4F<)9vvPTVϦ3zM8n!'ϰI +! i^n*Gy@sL vi˴D,5Yk&pœczy!d8`m9F{mC֣'-c8cc;qҊ!"mS.fGHs|N/-F#rƪEڦFD!g஗u lvn]f"mh;vMrcEb)IxΏyHm.iۉm:qlC\g`?gϫ;h{LRk?3e@tك|`=eڦ"]: vYV_(Ӷ)Ot0Ң1_vi[.]'L:=JqڲTQڋ6kM7ToxB1Ƣ2G| l'U2U2U2U2U2U2USRiȯ0ŔW(5pJT2M|MK(Jy!YbfXdA`om&4ìۀq/!QL48hg9p2ULqXv Ǹ؞|7,]mO|gIp$0p d8]$*tJwAM1Y**HHoHANI"2Ɯm>n*]blK.W }g 8 iIA"""2~n}GFDDd-ڔ)R E[4k6N^b,4}Ϟ,2c51O?6&a'=X#$ ~0|,:M/#:m2=y:$"=a-zS᪕iy7wVWLR H2P$]\u-7 @/s1sk*?R~Bܡ;oI}c6#Tx a{_hw yyKYKU2Mde3 er\2W&Ԣ2=Iubu.[<' ^W@VDY,y9gSV]6ʴNϺ]]VY8DY,| `ϰ3mg؍˺8A`˚3:+F(^aLw8 t,9dSI3 v)N w~VLq:2y'1āٔ?e@r}Dc \8@6>uGgtr!Ӕ饛oJwű58.<d8dP?uզ)1lMx2c{/q L.M &y0m4 %Q4K$K}gH! 'We~ W :M "Q1r劏o !;Û?;L$*<[lJH(;LTZܫPV%e.9`}c6K)ڐS~:v !淅 4QR5vmXorZNV7Kۦ?gmSV]g~WQwNS6:B1*gN&!FDɰ{}JQ6[t"QmrC-:9n3.0]~S4w Y~Q PA[SE <C+lK^-:nVCd@YUU(Jܔv"ɜU، |H&xTxTxTxTxTxTxTxTxTxtZx|P2Jsy+2 ~45z%hkZRR5ښ*JQ*JQ*JgӲ(^Te%ѫ(hmM%L%L%L%L%hiIL5h_tIG<]B^E FR'$C 52ƁC\:v,"E& d)G)hnl#O?FY Nq¤ (7K6--)[ Ga!p-uy;R.FoedH'10I.+HsDe̵N!☪l~ e ` +aN2yZ~jZ&|VMEeZIfO9ߪ&wDHdySFrR3sr2? 20ę#,=)fu)h '|P41Ee\`0+ 5}?Fd>ILg’2O2Ja9jʓfܦ8nf~I5~=&6)b:۶ɈI1D?ˤ ʘsJ^$c Y)<5%ceN]mcviy7tgSE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <*SE <:-|#A96FeghUvw# IQxTxTxTxTxTxTxtxCLDBjegVJ2-FܳjX x5-I/]6CՊʴ$ϑ m-xTxTxTxTxTxTxTxTxTxTxTxTxTM A bxl2mʫ,rLTCjoDNq 56ܮM)QjE[:I}}p0=ʴxn9 bp-M"F^^%'1b/{ ztKk\c;U>a{t6@t۰1 cR݂$E$)FED$*Ș-eLN112RJ#"HHBbCnȠ DtNA:%d"5@z$$loJ I Q::|.2.A⦭iݼA/0 <%s=+CEg8AAVXaO9 \ b0(+YeVHΐ[ ;DYaw3 fm+ypaC'7`2^~?dg5DĈWcLH6 e:ahM tcwU 7Y_wfjS?Gi&:.q\^unq[|ħխ GsnkVdC(t5ORYgCO:=`S 8;ثϦ[ʴL:DR. +jeQgg :'cW^sOHrK7|Xu\38/ 4iݤy^^(0gܲL| ?CK=ٿ_d6ny y 2G'X@Zi*ӺbrqJ zÁpIN8"QyI ?ϵ?p,/1vN?vslc&F\' jVMLRBrȾ>$!IȠHI ɠ1e]n1 ݒn=c,#r;dr#]4yB9ݮHv$<"Q;Z;dw"qFaL70'Sըѫ(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(G(]E5U@[bd mK " IQxTxTxTx[!wږ9Q?zLa*1**QWQeUh+wZi=5ʴFU2U2U2U2U2U2U2U2U2U2U2U2U2 1zHקҹ9i@x; & *SŃ4 e4WO#)Ņ13cߥI1$Tbʾ1N01/]ѭF?DekІ=QAt CdPDDS!F"""2()7ED$$bHǖ]ߘ}w[o4@|u.b~ÞEEc|ᢧ}v9`Cn Ip^8ߗl߿iME:)t60>[ⴾcmWE.KEmeTpشtnikZ릭iN?*'`7IS" `:`a?7dXv}JhȲ`(9C} gpD9=c\ds|w@fT!t"S ? "i^. .nzTZ5z|^(ػS0 8Fp)f8^%G/~i iӂL)֮8kRzI5uHLr/)qu&/2I<~JߗT^,D7<# W)4mN[qiqК~ ->Gȫg^آѫ(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(G'9h(]EeZUF?VFsJ%tEXtdate:create2014-05-06T16:15:14+02:00b%tEXtdate:modify2014-05-06T16:15:14+02:00?VtEXtps:HiResBoundingBox561x653+0+0ҺztEXtps:LevelAdobe-2.0 EPSF-2.0 ZIENDB`xnee-3.19/doc/Makefile.am0000664000000000000000000000655411406254072012112 00000000000000docdir = $(datadir)/xnee xnee_TEXINFOS=xnee_error.texi xnee_prot.texi version.texi xnee_error.texi xnee_exampl.texi xnee_faq.texi xnee_install.texi xnee_intro.texi xnee_req.texi xnee_synch.texi xnee_usage.texi xnee_general.texi xnee_start.texi xnee_intern.texi xnee_copying fdl.texi xnee_func.texi xnee_progs.texi IMG_DIA = xndetail.dia xngener.dia xnrec.dia xnrep.dia xnswinp.dia IMG_EPS = xndetail.eps xngener.eps xnrec.eps xnrep.eps xnswinp.eps IMG_PDF = xndetail.pdf xngener.pdf xnrec.pdf xnrep.pdf xnswinp.pdf IMG_PNG = xndetail.png xngener.png xnrec.png xnrep.png xnswinp.png IMG_JPG = xndetail.jpg xngener.jpg xnrec.jpg xnrep.jpg xnswinp.jpg GEN_IMAGES = $(IMG_EPS) $(IMG_PDF) $(IMG_PNG) $(IMG_JPG) GEN_IMAGES_TO_INSTALL = $(IMG_PNG) $(IMG_JPG) MANUALS = xnee.html xnee.ps xnee.txt EXTRA_DIST = xnee_copying fdl.texi *.dia xnee.dox xnee.html xnee.pdf xnee.ps xnee.txt \ $(GEN_IMAGES_TO_INSTALL) #\ # $(MANUALS) if BUILDDOC DOC_DEP=$(GEN_IMAGES_TO_INSTALL) $(MANUALS) doc_DATA = $(MANUALS) $(GEN_IMAGES_TO_INSTALL) endif #MAKEINFO = @MAKEINFO@ --no-split #TEXI2HTML = texi2html #DVI2PS = dvi2ps #PS2PDF = ps2pdf ### TEXI2HTML_FLAGS = -split_chapter info_TEXINFOS = xnee.texi CLEANFILES = xnee.acs xnee.cvs xnee.mss xnee.prs \ xnee.ats xnee.evs xnee.fns xnee.ovs \ xnee.tmp stamp-vti \ $(IMG_EPS) $(IMG_PDF) $(IMG_PNG) $(IMG_JPG) \ *.eps *.jpg *.png *.pdf *.html ## ----------------------------- ## ## Other documentation formats. ## ## ----------------------------- ## # HTML xnee.html: xnee.texi $(GEN_IMAGES) $(TEXI2HTML) $(TEXI2HTML_FLAGS) $(srcdir)/xnee.texi # PDF for RedHat #xnee.pdf: xnee.texi # -$(TEXI2DVI) --pdf --batch $(srcdir)/xnee.texi # PDF for Debian #xnee.pdf: xnee.ps $(GEN_IMAGES) # $(PS2PDF) $(srcdir)/xnee.ps # DVI xnee.dvi: $(GEN_IMAGES) $(TEXI2DVI) --batch $(srcdir)/xnee.texi # PS for RedHat #xnee.ps: xnee.pdf # pdf2ps $(srcdir)/xnee.pdf # PS for Debian #xnee.ps: xnee.dvi $(GEN_IMAGES) # $(DVI2PS) -c xnee.ps $(srcdir)/xnee.dvi #xnee.pdf: xnee.dvi $(GEN_IMAGES) # $(DVIPDF) xnee.dvi xnee.pdf # PS for Debian #xnee.ps: xnee.pdf $(GEN_IMAGES) # $(PDF2PS) $(srcdir)/xnee.pdf %.eps:%.dia @echo "creating EPS" $(DIA) --nosplash -e $@ $< %.pdf: %.texi @echo "creating PDF" $(TEXI2PDF) $< %.pdf: %.eps @echo "creating PDF" $(EPSTOPDF) --outfile $@ $< %.png: %.eps @echo "creating PNG" $(CONVERT) -density 144x144 $< $@ ( mv $@ `echo $@ | sed 's,\.png,_big\.png,g'` ) $(CONVERT) -density 32x32 $< $@ ( mv $@ `echo $@ | sed 's,\.png,_small\.png,g'` ) $(CONVERT) -density 60x60 $< $@ %.jpg: %.eps echo "creating JPG" $(CONVERT) -density 144x144 $< $@ ( mv $@ `echo $@ | sed 's,\.jpg,_big\.jpg,g'` ) $(CONVERT) -density 32x32 $< $@ ( mv $@ `echo $@ | sed 's,\.jpg,_small\.jpg,g'` ) $(CONVERT) -density 60x60 $< $@ ${IMG_EPS}: ${IMG_DIA} ${IMG_PDF}: ${IMG_EPS} ${IMG_PNG}: ${IMG_EPS} ${IMG_JPG}: ${IMG_EPS} if BUILDDOC install: mkdir -p $(DESTDIR)/$(docdir) cp $(MANUALS) $(GEN_IMAGES_TO_INSTALL) $(DESTDIR)$(docdir)/ else install: echo not installing docs endif api-doc: xnee.dox \rm -fr alldocs/ -mkdir alldocs -mkdir alldocs/devel \rm -fr latex $(DOXYGEN) xnee.dox cd latex && make ps && make pdf xnee.txt: $(MAKEINFO) -o xnee.txt --no-headers --no-split --no-validate xnee.texi manual: $(MANUALS) all: $(DOC_DEP) default: all clean: -rm -f $(CLEANFILES) xnee-3.19/doc/README0000664000000000000000000000130307773126256010737 00000000000000Xnee / README ------------- Xnee is a GNU package. For more information about GNU, please visit http://www.gnu.org The following files contains information about Xnee Name Description --------------------------- AUTHORS List of authors, contributors etc BUGS Known bugs and limitations Changelog Log of source code changes COPYING Contains the Xnee license DESCRIPTION Obsolete* DEVELOPMENT Obsolete* EXAMPLES Obsolete* FAQ Obsolete* INSTALL Contains information about how to build and install Xnee NEWS Contains information about what is new in "this" release README This file TODO List of features, fixes, docs, ... to implement USAGE A printout of Xnee's built in doc, 'xnee --help' xnee-3.19/doc/xnswinp.dia0000664000000000000000000000275410012122110012214 00000000000000o6W?EiR4 ٦mdHtla㤉H*a $Mt)}.Jg=p/0lr3{w$ooR$zdtћZ;/KJOI.%6|X[ Kf7H&EF<͋6I/zի׿|~y2Ne6Kmv=m*%\~_oN,)&&J:I7àHQJbE%RxQ10$غ<!!;'6ghlN9QHFE\?Nf_hq%XyLE#6CB4_&u@ !-%VAKNlͦH#phĈE/=lht,8"R@Q98r!X(/Tji*Q/nƩL ~LrP˚äd L8?fH]HJe%I8?'aJBBQuN>C¡13"r})0?p@9O@3// 'Ly„1Sr-,c#&ފm$HBD(ԅDDRvb??mF=j?xnee-3.19/doc/xnee.ps0000664000000000000000000303426312332167170011363 00000000000000%!PS-Adobe-2.0 %%Creator: dvips(k) 5.993 Copyright 2013 Radical Eye Software %%Title: xnee.dvi %%CreationDate: Tue May 6 16:15:20 2014 %%Pages: 53 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMBX12 CMR10 CMR12 CMMI12 CMB10 CMTT10 CMSY10 CMSL10 %%+ CMCSC10 CMR9 CMMI9 CMMI10 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o xnee.ps xnee.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2014.05.06:1615 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI9.) readonly def /FullName (CMMI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB 7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E 540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A 6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D 0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A 9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B 33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE 3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F 64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F 90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D 4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF 49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE 88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE 7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF 00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B 7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE 5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC 19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A 9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB 107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA 5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D 403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA 2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F 8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC 512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A 0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE 718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE 95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE 6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA 89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF 1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C 62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD 8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F 0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE 2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD 73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F 6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C 074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 44 /comma put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5C7018E5F1DFB86B739C4749DDCFB2F40529E1F15174DF4AE9833958B66ED869 920CFB9524F05AB2FA84A4AC41A02490699F277A3B4ECC3C31ACF79E884B979C AEFF660A8EEF118C79F8DA266F89F32078B1C333DFA5264D6B64371276ED4DBD 5A2DF213D85A56B1CA85DEA53ED0299C1FA48D463B11FC9A0751C986CAABB184 829B1133CA8422DC11C6CEAAD463FEB468FC7AA2DDBE2E708D27D89164B12BD8 B9A71A1D06D2FA9ED0B02168B32F6CC0FE765F2AF8A19C7196EE55648E642184 BDF993C99EF7C10AD2A7962DB9B7851E6EE24A0C53475186BB44083AE18254B9 F1CEA0B66A6581C81DE19DA8EEC9330A030F3384C1DF8216E5A25FB38C1B94F3 403C3541593A016CB5FD306F41F40E82D4561EBCBF76153BDFCF338284348755 0208360C5842FCD6B2D614387575B6E49F4B5A4DA281A352ABE8B76CFCD94A00 1C586D19B68D965BD8D7EF0DC87271478CB4D0D1633676A2FC51B36876002A9B F5D632ED778BA9EA1C3741FFCC15AEEC11C8E1544DA7358473325812E50C2135 84ECE7DCE281956681179C09C0E8DBAC5E4424AAD00FDA269BCD6412F1D6DCE0 2BC7CABF85AE803D620F5140C63DAC4B0E5F7896343973FBB99486B93B6DB58F 38ACBE8868CC58B3918C1AB4406FBCC7BE8496C78C9D628716BF1E306AA802D4 5FAC522B1EE90448387DB8E85235FFAAF3754E2317B693D567A488753993B8C5 DA3C8FA50A35202958FD0BF2900A6CE175920C2EC7CD449D4DB189A50958BF17 644345CC38250088A694CF0F482ECC55ADCD02E17B3CCE66213A6163B8B44C9A 89068E3B5301D2364F85BF9DF7C77342796363A7B6B294CE26DBB9179DC15756 E75B077DAAE47E6B8FB0946786A2B0ADFEE00096B5359DADDDF032F5594F4956 2C81507019962E71A46C3AA6D9B593548442611C1D1021B2730D8EEFB0BD68E4 2F02A658BF48E40CDA7E69B7EA5D75630FA4A3193EC28271DF44E0AF20D548C7 FDC96A1FB6D344D8C7EA482A13CA9B5AEA9F3A3D1AF8D92D1FDEE1D79081462E 370280B57C26A59CA55A1C877B2370C18668C8E2E18956A5BFCB7C33892E170F 88071E3405B3E415E94110BC1AA2D5AE25DC5718B8A5AE51C87740A803F46D7D 1C5AF6473E8A06A72065807EA75DE120EE0DD1D494414F27E4916B43DE809375 2E308DBD5780B136C1555443FCBFF10667C83C826A94C6EAF95DE8FAC49ADFE3 F918A2DFA3BF65CB3CCC7FF523B7AF7CBE4B9B052E39473E0CCA547A55B1CF55 796CFFF55D0B212D56CF7E8EE4EF7F2450F6F184D3214BE34D6534FB94BDF492 B4FF1E195C50F246011FBBDDF5462272E6511BD0987BE570B2117ECB12BD8362 DB04D04CAE667602CF8AAFA7F60C4F4B58D4E6F48D8F4AEDC967BC4EC0A38C13 471CBBDC10C83829314DF08AA86E554A2C80D8C07A65B14EDE6AAFB6ABA028B2 2AC5155685114EB84D26262776F808A2D798EE0972FD663A124EB6FF44225684 B50F45951E3037E5098E609298F9D2F7FB53504A414099BA8E0DA5BF7758CD70 D140B498BA43067CFFDCBAE4C8C42F53DE6F5273ECCE6F94636839CF10752AC2 427C62F2AB48FA18536395954F2E0C5118A050A724B356976F6D178AC0919BAA 073453B24AF1A8682B1C8CAD6C49AA65BD16E5C5990025AB1787CF7FCC637397 6838892E9CEF5B84F61C5C8986923EC841A255928B81FD502B0CCE54737DEDD1 4011D5473856B2DA63382EF0C6FE027F26BABF3AE38AF1AD4B2DB0F7B12AF06B BEAE2DB054047DED7283A98F0EF126DB0A9B0B2EFCB92395E80A77ED6275913C 139862A20129AE3E4BA0DD9B99DC2EA2FEEF11EDDACA063B47B65B53323F563E 8AD27F816B9EF8818187DAE14E79860B37EC433F04772FD86D020EC866FA8EDF 67BDBF4EB722FF4A651401B0B1102BAAFEAF854C1BC85C7E0B3ECB762E8C4C89 F0D79E60D4D08037BECD74C5B966225BB107B4671FF09BFAD3D54D1D32BC6E20 604144A3A7AFC2DE703261B09BF257495E2121B6EDCDCEAF38C0BC9E409A7F66 29E30A67846DD5601520D2F90EE566DA6FC9118B7A2A5F6A9AE430AE5FF2FD1A 26938EF0C1BB5FB41D61B0BAFA62DAD357B80D09C748FC43A09AE0BB74C698A8 70C13DBCE52042623DD0F5DAD9F375366425A3B88D7E8E426BA2387436943811 5CA7CC46D24DB46E3398B67489BB08DF934E5EF4B41EFC3A2883067F4B899D04 65B74F760AF5D24B2EB524C6AABDFE8BBC86FCFB1D1764745C2B1B7E3CCE9BB6 F317D1927FD917F1B46D68999731A8847C242711E6FDC00777FE1FA50E27B844 B3F0B8FCF31F6B7C0F456E4EEC7A6C46EA19917484AAD4553E035B5D86EECFCA 70B8A3417520FB95FEB69D59AA5BBFE3F1CBBEB778ECD9C731D0F06699DA05CF ABBCE8EED734C62EDED4ADF0F9B08C2C8A5A6AF3CF47CA3B8DEDEC5ACB4F4202 F5BF0A86085B2ED7EB3477A351B418284478F140DA37DF32E9A404B7EA5F36E1 0BBB5D3899DF4FD64D367C6A9241A60F06452F79B80677CC0638EA786BCF91A0 D493709B9D7CC3E44AA1EA09B9D216A0518CF3B4DE9E432ED70AD866E19FF7AF 32CC38F4F44A3A3C5EB2E087736F6913800D8D0EEB733587CB04290FA7F3B600 3D9C7841C05177B6D2B13F32A2E8F1F8ADBA864605ECC5E838775FA71C1B08AF 67D552C6F741099ADB767A3ACDAC79A73710C35AE4A5CDCD2BFFC753EAF2DF30 518A10618B2A2EB8057F1A3441009CAE8B0438FD6015D65E6DE7CA2AC522E1E6 3139A371C1FED77E32FA5495A40D3AF5D6F39D88E30A8814D4FE1233C379AE5D C798C6D503B91B86D2CA3CCAEE7AC6F499C77ED10BBCA3BA3F94CEF9F0976CFF 970AE833020ECEE7E4CC668A3967606A36DCF356ED9D9DA9B71708354BC61A0C F171111936838A24F84B16513E85752E4098E04EBCF5BAD1712259FB18AC9551 A61819290BB79DDE8E5FE2074849F069580828154D4E7234FC4901F5807FDD88 FF9823F5607A1FE0294C2157ADDE421D5F5174413E0BC6ECD9B2957CA80F2753 2D7A02AF28801DC72FC6AF80B6A53A4C53685686D4E219BA4CA7B8DA1E0B87FE A5FB0F746A83BC8F0BE1106BC2E1A3373F067F57C2CFFFCFBB085B362E1DF3FE 0AEF35C02CF27A1888855603DAED1ECEFA17591EED99C6B11301A981D503EEB1 B14FD6D8067555518711AA4A1B56EDDF60D43EEDC85690AA24C693F2E506A44C 831A38C8D272F3AD41064701FA7B3D270103FA87E88F8D2D628931B30BC87A26 C1E85506FF3B8A36BA3393981EB6CD69011AFAC727F2CE697A092442BC7E84D2 3766276C396A690CD20BCF0199D27BB608CE3203B5B7DBFD1CB34DED97DF8FE4 CF2BEF2B16E0428BAEFA9663606E5D31AD786B2146E7F92F4DF6764BB816C656 C18B24965C987777DFD4A84D6725CD7D57E07812549F5DCEBDDC3C79480FA75B 36FA14E4069D0E70B2C0D0035274655AB9730D83AD1B81375D7C9B6B1CA02F6D DD81D8B1A04F16826F1B26B31DBDB1BB9AD50205E128294D5342EF845595D1A9 BC9DC0548D5DFC7831E4F34F4DFD1ABA52120E6088A78B285AD569C8AC48D794 EFB03BEFD4F93555C578DEAA284FBE6CC770652C58074E99B51A50C5C52CA368 EB657B3C7047DFB326392C3CE0C261EA59F98F7A53272E8098AEDF772185D815 A771FB1FCE55BB09C9615A1964E9556DAFC848C750D510B6CC8F291199FC5C12 A3F6E971039E05B25EF620469675DDAD6A3882739321C75444E9775007EEE214 836FA00F4FD8E38A31B3C9C591CABE74E846AA8F67F99B9C758D21286197D0DC ADB0B332D510C78CEAAEDF8F2646C62C5A809863FA3E31BB297A4A26720AAE9F BA7E955432F748C0EA7C66281516201100F8F69672E7F5E91F266EE4A1E152A2 FEACA1D64A2DF211D7E58C2B1CB5633E8912DA82B7B5694C0D6F9EEA02C9F6D3 8208AB2273BAD9A300C671EB07161A2300CFD460F152E6A5DF8D564ED5C55F4C 14680584E5113622A26C78D48657E0B86CC24ED7B31B1E595979DF75CAA80CE2 A78585B89E78079596BA2EA55C98CDECD3C1A6F811116BD3244FCFCBDC189CD2 28C9B7CE8A027836BFDB2337A3B1DE763BE7CD78D6864F7B685E6CD9B34483A9 D0D0D68492768C7FE8D9746680A58D7D3527775FD21265F354A0848FECC69150 6376A414E4731A22FC99D0E7C453427597E9A3571A86F25494266907A94AA97F FA719D4B62D7E47F25AC9F04652D4C8141A15F0CEE85BE546B7AB9C011F76624 0DCA2C6156CF1988764D9EB412AFD07C524F7E2C71DDE0646E113F6DB9512397 02BF1A563FC4387D73CDAAF6C8B6FC69286526E3E9398ADDFBF74696BFC4BE7D F13404BCABCFCCAB7BA1AC40CC9775D667F073D73DB7482FDB4E90CCF7E1FC41 A4D2B0955A2EF92046F8F43CDC2533037E75A2C0228E1F789C15C8DC6059DA3A 59E5FE1F52A6818F68D80D0439FB0C0EB784C06EED639EFD7E9EBD91B962C2E5 48B309FD3C4B4E85EAE3595A64758EC195E5534C0652D89A68F57B2F4FF74159 3162CF8EB096FDC297E089AC2D8FC6AF1C59A078D26A3DDDFBB52020BF6E45FB 51344ABA626BEEE4ECC054F7DA1F2126151B1C306AE80C0F1FD2146819BC58A8 48B5E67E8C24991CD2F72C0631D3435133B9FBAFC56CEFD7629427D8AECAEBAD A3714652E5BCDB51851551C65B8E726FC054F6B91DA13E0EA56A7A337DFBD51A D3483E32345D77EFBB182EB152D1D6796AE0BA5B40BB154AEE390DDD7274A549 99A8728FA49A77DE9E7A741AC01B1AF8B94AA3FA5D75C568AABEA818E4C61EC7 6B27C291F9FABBE4A5E1C9471431B7A1B473B2E6076F6B6351291465B3A604E5 C14403B05BF9245CF40D6810A9147EE811A617B342EC92A2FB2E9A790062E9B4 09818967D707C08E308B93DB2D02F68F75FDD6177DF2B6561465FE219649C96C 4510F0AA13CDDEA8A33C2EF9E0CD57C70D5AEB0AF4E61F58FD55A74F908DC4D7 0FC850FB8BB24B8A5290B3C16E02CBFD1A53A913AB34A02B1256ED3B03CDF52E 802CD254EED2A7523EC068E741C4AB78CBC6D7EA02B95709E174CC3D351D1D5C 2DBF3EB90C006BA1DFBA2BF64919E24B1B6E3075FCCBDDF59092ED6F51AE445D 88D9659B81A1B69825987B318765DDA09F34839D533091E40E3EFEC5828C23C2 2141E097AA977929AF6728C04525A4BF3231668043CC21B0A0D259F8F8FACCDB 5AD2D36ABC32E59D05A0C2B0E5EF6FAE524ACC3BF8EA84CF4847E2DD51814B08 D8F35810BBFF442C360AAF3FE1EB16C58E5AAFCD78D264A37DC4380E998FC75F AB18CB21525251E2CFB857A4972BE386FCE67BDC1F96A0839034B691721A8A70 5B74E8A3FECD88D82ACDE790011DF2DA7300DAD07A01C5EC69466BA479B0616D 0BE773CC819BAA8890CB2B6140358351088B682779BA215158AFCAAB5C87781C AD930BABA598CEECD0CADC3E32C34C2316D975CE2B2FA9FB4E667BAB80C226DC D255FC29AE04E104C0DDF35E52BBF88BE8EDD70540952CA9717F2639DF7E09FC 5019810C4A10DF094EE9188FCFB3F504468B19A57D4A0DAEC6F46D08D41298AE 6B3D605A5C9650F77FCB6EAD3177C991F81836F6B74B9D7D031094826BAD5720 218A5D70724AA6DA8CE218751F1924DC41C38727A4F1437B61AA770EB6DA40D8 44B9EF16B1202D112B861FCCB198B2C9C15104E2F43979632CFDFA03A76B160D E686B1AA6E3A49B6A3D0225FFB898FB7B6C9E1E4C588743B210B9DE5BAEFA93C 511518902A7C56AE5A6714257938562B2203565F1DB567D9BE0D10827DC160ED D6C9C87408CF00886C59DB088D73CCB1D2A0412B006A73D9D4F298F4470ECA7F 1FC11537F6DF399D738DF8A8FB639DCB3DE1F6C2F2A8E70EBBF42E0234DD4C84 02CBEE882BE34621DCACC834E42BDD4FDB1779AC3E3989D0F9FC6304A0FC1E8D 5705EA1402C7FC67719A505F093EADA9D76AFBB6551B4D8B3BA25BA57C4CA722 24BEEE414AF293B10281B30D6801B100FC144F91C9DA871E1AFD97484D73B857 4B0B491B651339BD45F39F9E90253ED138B4992246C7DC345A85DBC0374C3628 E2FD981B3D34226326ED33B5DFE2A7923C982A00B29554DC74128701EAE81929 FB028F540493D10940C6C729492B02CFE66DEE9F866CC6E2E94E37AF42F8910B BF5A1D2F54E0000A3F71BB41323AD7CA1CC4899F1CE89EE3D75FC9E6A36DDF1D 08313E8ACD2A5E54C33678ED8973FB97FBEDBA7A6156EF5CA33454BA67F0C3DD 54A271B545DA405536562FFF26C1CBE01480828D84F5557705021071976C1CCB C70CED648E4E21C2E170840BE50E9687D6A304B54FB51AE3CCF75CBDC63C5712 C5F62EF2417686A11128F0AC8B4C7A1C5A6B378D04CEC4FF3CD61345ED722904 58A1D40A8DC57C1E2948B8809722D9ACAFABCADBC7ADC77971D0C9FD9A6DF1E0 1F1EB9E77D659E4887299966B7B503E667C3D23362134A85A9C6F9FD68186B6B C05ECDE85AAC4F572337C37DA42FC708FF2EF58E51D83CD20FF9EADA90B9CEA1 AB9580F8BA9115C602B12562C9EAAF3ED52674FB75A4F3E559AD1B397C806A49 B72735F0D6E9000EEC6183E9F49C3465DF8633F91344F936B22BF7B634CBDC24 06F1AA4A67A59C6C068C63D8F09D4E366C70C6B3EADED28F7321EEE51BB977B9 D61492EEE79574CAF585F81454AC7D544DB5B2A24FAD7F7EFEC0CFAA8C38B21B 582A9A00979B497B7D6A71917C5A131F10088F6EFA0A772652859FEB6F74D5BC EAE79D28D82FFEB09193F5339F6FB2A31349079E9109C3BCC96E6339FBB703FC AEC43ADD3C39846DCC5165E6A0FD98B4397B065EAD53C51ABA54B4543B5F5E99 E382AE78C1C1B5A44F329D7AC64277F6BBDC352DDD6E80CCD588B3C03FFE3C31 78BC1266B94E53B1EF1574B01ECDA888EB32B26A432471B1287E9417FC5E2C6E E4FEFB0003057E63F51E3D8F7F52261AD916014C59F74795B6997D1ADF04501E 58C51E931F6CA87BA0CD3FAB4B78C89403FAF0588CEA89E82D6AF6EC97E0479D 2B30F9B65CFC4296EBE472BA8FDC4A894A20FC03AE773BD3E049754429D7E553 1864C90F02C6D3CF770CBC6699F8CB9F769F97C6082359213E132EEF06F95A23 5820893663BB0E47B9B7264B82FA63E17165814D8616BCDA8CFB0C5A2574A3D9 75BD6CA08FC5340676DA9126DEBE379ED8986CE8BA5BE3720A4453323CF62191 797ADAF2CA45339CE2A7EF032CC6BE577C93C86DD915F9ACA52B3A506AAD90B7 8EA9698215382839AA7F72FCFE983C3FA470B6782D425B76BC102A5DDE756570 DC70803E3AE664ADE9807DE85363DF1EF884BB0D396E4F2F2C50D662072AAAF6 3A39BB74486AB1830DF40ED32088E2A10A6BBD7CC68B9F0D805874A8C1F859ED AD64E217D34623EB7D362F9081C26F7C83184C9BCA0279023C378A80551D5230 2B4C026E7D4E033FA6ECD090535591992A157E16BE6B52E02C05EA40DA081892 242ACB8DE2F48AA8858A67734D35083BBCBEBADA005A369FF71906B39604C517 A33254ECDA6C509C407EEC2B36DFAF3C1AB3291A4A02FEA2EDACE1BFE5D83A66 171E4A4FE842A79654DE1606CFF753C510B9667FE0CADC0258BF5F17C3B4CE6C DDB4BAA9EB65DA8446C9508EA656204F28FD6E6DA672A1151A16CEB4CCB324CA 85124071EC1AE0E72263FB1039CF42A820345978E3616D53D3474C4D456110DB 2A26F5F8EDD70C35FFD7F0E876A434C65A3F3E78B5D8883E0FF49A2B658A6453 4C47BB58D4E2DF1FD1094386E75A976B0CA9AA3D4066B51D3FB0D4BB717D7B29 801F6F6501AD1C3975AA91311C10AD96E8593297594657392B731039A9ACD41D 1F3327D674F0948B120920D7F8D3116DD2AA8C259E3BE490108C933860D8E023 8220F1E0ADE62061334AF0CCC3967308077C4F6CE2016621FC69583E275BAA5D 5A8F337053C1F5F8E57C73A97723DC4158B6FF6AC4A6987834CDAAFED243CDDC 5EABDD42CA5ACD81A7AF2A9933D2B241D47A26AC601E2A8842CCB23E7AB99568 BF3EA2F124DB4F5982C44D7DD3861B1B06E649C0798ECEBC9EC2349E110AE04B B2CEAB98B1E4984BC95E4F961A99074DCAB98D94D8BC8883DF5A5AA767665589 E4FD6B52CFD02C73B4460239FF0DF9AC061C81B199B12CC48EEF78C731FDAD35 FC715EF6D6501F29F7C5C9127C2482583ED3EFBE9E0BDD912719ABD7A25FD1B5 0141D267EC03A1597C4DD664FEC080ED44CAC31B8865582459E8508F7599B055 E6212A5336FEB3950BAFF2D759182CD9B712A71D9E8DD6E187C1B11AB1803869 1C145948FF2C83F363BCC2CA98ED49D86E77F15DA608C4327F7E791BE6E6B9B6 2707DD2D1DF596E7C3B53D287C682FDFF6247CAB3CE2A442AA5F5C169DB2E9F4 F98AE21F48CC1EDA599AA62B5F496E54A4BE33DD4802B81605AD022A9A6D4154 19BC9DF218EF46E5C32DF573A8160B8AB96C5D30768A4CB1188E2158FC15BC57 49D50658ADE0E002A4B5B96E5CE266F30C7B684609FDEBEA1414CFFA219486E4 04BBCEA319448C644E65C68A988D4846FF13DE7AB41BF3454C081D918858C3B7 DAA210A52D75317FB6E503D6FA4229A880D24B795F7AB58F3D1C3E9D7ADDEE79 025BEABF20F51939B13FB77F2210239FBC80124355A77DE81ABECACFC4ECA309 72578A7DA268DEE1A12726873F49651816D8B13FC8F7448AC5BFAF94C3604EA8 6518AD965BD31BAF6E7CB27D5BFAC06FBED322B6B28677008BBC608E2171F6F8 50A93CF77B97694A970C64D0EFB4888DFA19435155C4EDB4A44A10C72DC231E4 BF122D9DED02B84FA0AA9B7921775DE49BC8AB66FE85CF63332F15C5EA10B595 5D7AFC98A30CB72F2B4870C35B20E64E2D997C73B1C01FA5ABA3D2D3A8464222 0F3F5EA289E3C5C07BF507B21EAA2A7F424FFA50664A8DEAF98FFB8C1CF2B62C 1104784FCF2B260EB88831E535DB5CA9C0F70CCCD601A488AEF6BED5B70A3B7B B88DEFC25B78A2006CFD73568DB2BA926F9C9829E3AEE3002F5908994EB38034 0C8AE647FC4DE01A94591B014390D3E4F219B277BE9F492E4D137B0B0BA6A62E 1F328B5E69B4E069B7FB11857947A42BC92ED0190FF449C5F5A76A07228A8626 FA1592CCED650605A45C5F67196E92590438448B0DE72FB666EFAE0553DF2954 581C133417C60CFA6DA558988EECFFD02FA7F895B0F7BE93C8B4927C528A5682 1457332464B1638ACBAC3E0EBE458D1E0E6D51E9BFD8629EE694E377081ED47E E75FD200D18EEF1837D4C1D75D1AAE1F1F63E224963C1B00EE966ABAC8A68C23 474315824E46E5E20CDDCDADA23953973A1E9D12A2EF5F8E4F52C4286D40F069 E2FCA3488D36BA16E7AF22F1C957C36B56D54C19763AE6366DBE5DFB9B505173 42A015D6CACAEC65AFA2F670D9EA733012AF23ADDA2B9E3012B5208D678C4717 4079A55B0405312450A81898ABF944D743EE0A81411A4F866FD33EB94C6B3F72 880774E70AE6FC7A76FD6DBE9BA82E86C4AF0FA8CAFD51E27F16C0996598C324 8F3CABD8AE865B90E5CA368996BCEA48E4D04A8E6E24461EED6AF3564D14D27C 6A1D93B1FDE07D03E826354BBC583FB9B1109A22F1208F1CE2DE859DA75E3851 D56FE831056867D99439C414A2D5CB499C1BAE83425AE59BA24D479B12100C68 AC6A8AEE67D04CB7F0075E368528400FCF7583B15632D733EAE12722F9712F9A 886077FD1EAADA4CC908F66C4CC3017289E8D318B113094E18A06AFCDB30E836 953128DDAD5AAE048838A65568637E540C3ADFDFA16C677F8C4D2654BC600F41 9BB80129F50A4F71DA41743E915EDF0188A09252B119AAEA2FB551B79218E671 CE990805DFAC7C614F043548FDB27DCAAEBB213E167F55DAEFC17DB150471119 BF7FCBD379AE7C5C4A3FEED84E90CB636F43B90EC6ED062F348C3F5EBA5BA63E 22D6728E275BBDA87D1909D5833FAB8DDC2BBA5679768E40A126BD036ED6B279 295E4228808A5D3549F191C33261EF99EE442474E383AA62F59ED5FF8AB59EA5 EEBAD69540A04DC3801F98072FBA964B8E31064D9DE9DF50CEF206B37E317F28 91B79D78F9B6A4CC59C5D7625064AD27D274E8EF554D2FE72A76D6185A09B96E DDDEC4C07160A9DB0677473951405D637C4EFBD5EC55FB9B2EBF9947EB031D17 9FE21F7043B9FE87A0B4D855C0BF2C685DD80279352CA220BA595591FE52F2D9 6AA94EF45B187ACBB34ECC9AF2CA0FD48368C3033D0A0FB4B64CA1FA2CCD0B1F 903EB548FB1677C5604C87254478CD61A5FB50806C4FDE08B2DF416FF0EFC1F2 ADDC36087B31F2C807833FD04653541289B0FDFA968E7ABCB1CAB23F0998B8EE AEAE13ADB162F6DFAF197EC20CF97332A3CB8C439AF61C65123400733B3E5327 22D3519616C090EEE7F46FC2A811C4CA790CDDD460FFEF7EF97720E837AE6381 1F3D08665AA5312078531F4BF6718916801CD7F9F2EF7E6F5D9DF01AB94E5807 870D1D2F5AE17D3BF21E33B3B07167FB34B344F594A952257D100B05A2DC22BF 421C982054838EA0595441CEBEF4B8C056ACEF7B4C6FBDD9244A7B39F32E95DE 6132B885A2B1C8EBC75CC6A4BB46180EC3279D95128064412E2868EC9C8962FB 0A84A0BF2369102096B69C55A96D8B6211373D58FCC4A9FBB00C5A9AAADE94F6 D99ECA36AF6C4B4581EFCA66E2F1E4EEB41B0BEC48D5B14C6B23267E9F00DD44 9B9112182F8C1A618F94A230AF99E5F35743AA7112C4E2343AFEF83444C6D564 09323621C5743474F9BBC9778C580B44B251C589EEB7A1123E64C9BF1EA76F2B 8FF5E29774E297115D352089DE831B2C1D4D394BA083CF7482A6D3958C830165 24B304F04062702DFCBDF4F63CC8E50F0953E2A45C1CFDBF2804EC254DDCC0C1 D98AB7AD4346571AF782A0A9DC12650DE2EACF14AD43FA8BC39397E6BFA202DB 49E4AD7BC3D367829EE98651C1B5A352B5B8311F89CD7D2158514F61667EF638 3986C413CBF28304AC3A8E147E132AFE54A1F7714AF34173D60D9FAB6159609C 51C684A60B3C8564BB8181BFC55328E5DFEFE4198B1D4A1CA1A7B26EE1ECD28B EE65B194D5C11D9935C1087C01A748676ACC7517F7AE5452632ED0356C34D425 9EB25147B6064862446DD114F67DA5590591E8DE60F6B90020BC37A8CF83E9A5 D806CACF11D9519FF73A0E695B9C1861E36D17B2A828AFA262B93A81ABBFB5D6 22BD9A17D4796FCB7DD60F39EF92F89685BDE768AAE074D90257D2E422887C5A DF2EC15C866554BBBA883A1FFD2C7158FB8D7C54693A90F4424099194AC795DC 3AD2AB119751FDC915DA354D1D22B6934AD10A581153F336CA361D3251965DA2 69EEC588A8330DA6E129A9AB4AFCCE132C8FDE7CEC19164C732FC8888F3E908B 0447FE2F34DCB49E325E4E4E9D794A4F3446D5CEA8C0DB4D145B04627E954000 1CE7B61F46C0F5C7D71CCF9DAC8522B443F839B355830B5CFB05533432CFBBFA C9A80F509DB6A4A0FFACE337D8B583AB218851BED58FF84C3B19F13DC0BB2BA7 4302BD16E97CB852833810E2CC736EA13DE4157336E4D8E927A5643450AC3547 0FF5915C2A1F2C3E295BFF6F6E8B37AFB0705DB9BC22B252BBC7F7C8878DC268 6EC90609FFA54CEE77F044E9133A8E25E3B2B9DAA19FD3DEA6440E7B92751994 876C7D68A884174551166E28002F84495CFB3CA73C1D214EEFDFC2DC4E42A1D7 875468C5B70DF2C986E9DD69621D486888E0EA7ED74EA913DC2F7FADE2577DAF A40E28A8666F6052E97B53469E26AA0A45FE66E4FAD10387327DB8599418B522 2C40B45912BAF0DA8161DD27947FD0450F44B44C89D9965B569ADCE73607290C F6C9A61B14CA1030E573C6EC7E095E3F44A1AC05D3225AA0161650BC22D6D261 3639B487720F06D8037A505DAC2E37497A0A9062C56EE2EA1990E5255A4636B5 D850959E024E476DAAF214D8FDFD2D28082A17D863BBA3C4E786A2454B849C44 CBF136530F6660C728124ED1D2ED3835E8E759271079C4933616D9ED521D8F9E C360E32F9656C63A35DF7AE1C57D978826B676B0DE389E0C73B9A650EF9F5D82 F98F9F6EF05CE8A0C91FCFF340B1C6214C0DE5855B12FA43AE58247E5200ECA4 50C3EEAEFF0A78A9313B2827DF76F2B15C638CC41329BA0A63740087E7C570C3 7679FC41BD214FC726F68F6606A2E81565896D9F1426FABE59D5112F2CCA0485 1358945CAC649944FEF13CDB970C1201050252F28742CC671C22D086B7962467 CAEEB612D4F25D3CE2116F97D3A3F21A5B45D6ECB8635197FB415FB2B893F8CD F8C8B2E96D7D578CFF1A0059ED898EF991D16634A08C54F177434276185ACE0E 5252D9C73582BE72EA7EE0D84530E4D3A45035A2AC882944636249FCDC302B61 9098AAA9A425922C376769A5BCEA9E2EC13D42AD79AA210A42E005EF60F9CB52 08F7C816C1441427EF307C12D0A616B7FBCC6AD19F6C01E7E5C236F148CAC89D C46A0615AADC808363DE3F6450F6174D25DA2682006579C30BFA9B3D4E9EEB5B E996DE7C7A6FB79D8C459454F4766D4C5E5D5A7EC850827250E4D58E184E1B11 C4961966D3042685745A23323BB1D2CAE6AFB52C89E7138356C9AEC15CBDD5EA 289FF92309F6EBA756CFD4240D7751B2AAAAE5BBD2DA51D2D12D3A2EE84E5A07 C0546C668D287779B1D3C71CDC9C23B196609DB1F0D52570E67AB9BF5965417B 1A88C682558BF41DCCB94FF45A767A773DD8485BE40A22BEB42C1B0A34361A1D 78E6CAAFE878971AD9FEDFF7322842B6906CABA9144998666E994036A2012E44 96E44EDBB3FBB192053B2D1F5CF416F7765E1A76A2E04012C1DF79024C5B60BF A8F7279FE9D57894E4A880F6D32C2D50D33B6519649FE7EE7531D2AEB6716E35 A55C6723C0C739E194CAC2285B27154F5F05C899A6CA7941D036F76380A07A6D 981DC2B0B2D06C383722BEBEEE1A784F6FE31898C2E88246F7948E283AB6D711 5BF875E76916442140822DD6E6A86F16F2F50753A81F31ED289FDB89ED9FC50F B23C303BB3C5CC7FE8FF2B1F3F594413BB0637C3D9916C4DADFE9B3CFBB36B5E 158482EE9E15169BD87EDF75EE915D5C8255E75797591C8143685306D4F133F3 11FA09D1741D7F767ADE1AD1FAF0F1200FE00243BA8B78BCBA3536B5A15666BF 41C53ED0A81594EC9651A2B80335F48ED71C88028A66CD31AD5CC03EFA58B814 F4AB2D186BAA7DAB66C52DD201234F74A0F453CD396E0A2CCE2BB3E5645A43D2 D7A01B52EDCF881D1053043AE4628A2A37E47C2424410F90F9A185A6DBB93177 5EB169F9530F1680E90B1B098B3F7DAE6A867FCCE1A016C42B2B1CBBC4F49DEE 39122E91FDA635D6B4F814BC1C9C0B8CA3D4231EDCEE0F44ABC1BF105D4A8404 C1AE1DB80C420BE31485E0003E4FEE64DB572C51118CCF9BC2AAFD7069872362 91C381BEE843B546462949A42F650F237385AD5D453B64A3DCAB85B6F109C5E6 8BC3E5B352D545EA7CAD56702E64003C6740C7A61765642882C5152174249184 7F275CC9164072C33C2048152FDD4515CF58ECFA21ECF6F60C94BA7A37EDC3DC B95004B6E10BC140FED83F44BB55B4CD0AC49FE03002EA3B34AC259F84ACE7B9 AB1C8DECA324D090A8F0F5255E406249EFCC5F1A78AA3BD720ACFCBFB001986B 96D4858BE9AB15F5E6CEA77A7D757A45BC15D37115F9E6E927E13785A60F4057 D2D993F49CC076AC987C6616E866A578593288D61C72E9E861E8273D7ACF99D2 2740D21C7C8C94669499D67C7EC79EA720D14DEB79E9BB0FA8FCCCF970BDB415 91B4368298A4F45C90DD93899880AC405D31F805C757C67561286B152685F74D 7929FD1B64AEC27D27F24DCFCC8ABFF6F5E537E62426D75BC59611D816114DAA 9997E729F622D37267438B9E207ADC9E976402F513EBD92CC80065931A8685C6 545E61D6798E6A197F6FE8C861491B6D27468B00AAE7CEE3C5E5C276D2916F1C 49F38C508D94FD496564E9481F4C09565D013F1D4EFB0496A267C2D25741E09D CE3BD9FD1A5A95B9584B745F910C568FBB9DBCE6E1F52A85F3AE9ADEE7EF6CB2 D66C416C46D9E44FB4277FC50F38C53806430A0A1E04FB32F2C4AFCAA258C5EF 64FEB4F057940A473910BD42E8AD4C25659A40EFDA4260FBF5A246ECE911BA60 A44BAE42246F8B638E67AACFF08477365CB4144989BD1C77C8C7707FB55DEE8C EAC951A9C47A3B241A8BDF7383FE0901E705EFC2ED0F9B726DE08E52ABF90F1C 945BCE82E3F761E5D752CA59448F36D444BDCCB32D598EC3467BBC222DACFA21 61DF03196F452645FDE74A139906356F68C7356D62B4C7F3300145698277A611 1CA43EC6F8C17980236AA9B22706D7D4B56FBBC2BBA659B750962543620CF22B 7456C22B11FE3243FB97C983D4E116CA792E6EA06BFE27FD170586E657BB046B 5EE58939E9ACFCB059F60509D951277D29A00FFFA642E22D1167B58296BEEEE4 6DC7F098301F7AE0EA228A3100F5BB076FD99848834DDC6C7AAF74489605B324 B1F7C572722F24A0D65566BC45230AB1262263B4BCECA50FD3994E5ADF7204B9 917CF3944834F9EBDCC309BE9B4F18E2E55A8A7D2508538E48618B81162D1A13 DEE1A71A208785CDA93E0555FACB0210DA255758B4A585CA48651E7571CFD2D4 9CAD0F3245EEEC8F4FC24F66ED1B3CEAD18FC66EBDBE25B9744351564FD4E82B 5E2D8EF3BA3EFD3CB360D85C5BAC06AF9619B0DD8B8DC463BAC0EFAD721019C8 89C6D563D6382DD489DD15BBB8B300E4DAA4DDD5ED9441E9F44EB8035E752B06 5A6849C782A35BDDE74081F40045983F0337A09B0E3C34C247085DD424596C19 E1B1F5FB7C87314E58B86DF9EB0669CC40C02ADBB4A8F93109CE93F69257E4A5 1F452E649A99A02398477C49B8B9C04DDE2F7413234BFD865894604218301C94 621B7E2C4D38115F2DFF367A3D8FE5EFAE85B591BFE7518A3BA3A75ABFAF59C5 9C71AAC80F24D5F50E0D5D4EF5E4BD8AF88B04BD6114E604DDE267E5A80CEAA5 059353CFD1A75FDE9508B372F208FFFD1FAC71841488F25E123C0D31F10DFFD9 C80822AFF85002ADA3292032918DE763C4F778A4F086F39900973EFA662995C3 F417EE66BBD3EB03AB227542C424DA4144B086498FEA48095A34779128F86CB2 FCFF6FBE15C308F97C34FB4A3283B75A88D3BBB2772DF47B088E10C559B5B582 54D320E68707161645D01E523DFB346DB1683C2F25197DF61ADEB85A6DF841D2 510124F53FB1DF987A05DBA496DF91B516577F1FFE14AC8F98A2C5F1F166B233 37A2D4BB30123B99E2BA145DEE9F7DACD8321BF2119D4F0DB232921C14BEC6E1 D7AA7B801B5766B80354F0DE3C34EA7818D86F92D593F1BF023DE521278F6BA1 EAE8100D7978975B3927698FDBAC9D17AB5811D0C9185BBEAC42B50BC2A7E86A 768D46BADE1D08B2C9B766888CB971BF7F52A448E4C59C07D194E71AEAA23957 D796E82F6A42596C6F87D766BCD92C1E193335086A743A3EBEFB98D98E17AA6B CA479F8B7B6D160C92BE11549AD194D0A9867DCA6A37A4569D17885DC74201C6 4D624F60833DAAD82D362287DB7C6DCBCCDE6EC8F828054926D85EF3441798C2 C8BCDC385AEEA55CAF5E9C166C2FA6C0DF0B957CDAEEF0AB5B025F3853C1711B 7B940CAF487ED584B7732AF7B1C378BCDB26BC852F5DE099EE66F1364CEA9302 8DDCC39C084D92F0C00C1345613FE2A59539BCDCFA963C001D3DA3368784B4C5 5C58FB6AEBE86E20F1EEE216BAC5907954912EAEBFE9633616131615CE1C3EFB 11132DEF46BBC7BBF0CDAB7042367FBCBB9995FCB9DFD8493514ADDA8B2EBD89 6BFF3F6CE5A2F6B91356974E3D581DCA3862FAA364C27B619A5F2E92245E8197 0220C5917B59ACCDA547DA19D30BFA2C71DEFEEC8E2D99BD1625E2FC11E4D6EA 648AC075A4F807C05A09AA332F627B76569E1202857F4743CC83AAC4FB9E113C 07BB9AA1B2F3FC79FAAA23FEE90C54B496AE31BBFA16AC6BB78F2C7986AE365E 7A40DE942B749885DD93CFD80F58AA9D0677EAA095B8814A6379C81329E92A4E 650C2DE0CB95414C9703CEB77598AF16A0FC098BD5091FA13D85DF0C45F16D90 3D20177EB8A30C7E723215EAB1B2D5B558AE589D32BD6DD3C395758E1973746A 74041727A28AD55AFA9025BB4A23211A3D1A684C41C1CAC0F095C29B50AE4057 5FA22438FC1A0796E120C6D0AF782C0C46EFDAB26420C711A619B0A2F6BD203B 2332624AC5F5B50FB5A7ECCBCE69009EB52CC94F2FB4050B78F106E856A1BC40 39F2BD1F1B2A0E5FE7E8DC974CED7ABE149469C53988E03647C9EFDD9DA23C2B 6E8B9A0FDB76FED55FF9A26822522AB8C7B6E7C09EBE75FADFF426FCEA1A9A38 04C5C996BB4D8C47516B6AF5A98707463602001570937495F91E170F90FBD638 300BD934976F3DCDDD69C6CE76BF113089F4CD042FCBBF4E06EB1B4E37A7C2F0 A8F6A88A399796D7096594B95B3D8EDC0A59072D5D0E8FB4373AEE0E19CC51CD E610D008C0E088C44D401F435DD1E73142CDC2DF405CC6862B8FC209C940221F 1891A8EE592BAF607DB74E8B429A3CC5DB1BC5CC5CAED4C33EC99DEDA5560CBB 615DF422D64250F6E4F1BDF68069481B7178D28C37299BF1504D88F67B4028BF D38B24D60F785F96384A70A6BD702234BAAE23430A390AFB36347F75BC388A1C 1BDF74CB321E504DD45AF670FCD6B73BFEBCED63418B97948D0B9B6909774ED0 643F5304CB61E96A99DEEC576043C94B60CEF7432141BB2A5F77E281FFB2DA8F 6C940D955C009DCE4C8B77B02870228BFA92A21B6A7997CA79BB4825C8662EA1 7E3C4CAFF8F27939025A41CADFCABECF3FA5C5FE26302D94E94093E53E1DF4CB CEBB18DC1623033141E9007DA065DC32B07184BEE3209EE68898498C921ADDBB F3D81B3390A2FA2748CDB8A19D482474F782AFD6F6491CB4842763102A502A9D FC1EE38BAA9C50A15C1328F4CC081780A3C316C9D96B72C7A1470C06A8607BF9 D7208742BFE7E71415CCD91D6F716FC9E87E2128A9E7119885CF615D898CCF64 1E2BA49DB8511CB0D2F388ED724DFF3435C6754B993BA779AA9CB43DFD0E6C19 25D8D7F7EA2E799D38279A7A01F89A0B9B3EC0D1D7539C273A8C3243F277AA82 4B4C0ACB7EC2B7BF4A31D3AA96F62E92C13529894134134D061520960279BE34 8FC71B1F486ACDACB7EF15FF7CFC5F18B87ECCE3A0213EE566CB70C1400FA946 D0DC3CDC51D59035B843E1B79E2EE3C05D0EC10A0ADED78F734BF39EF8CDFB35 C76135B32774BD79A9924E95CAA0FF28098D4DBCB15F398163C420C4501F81F4 C1E5F250DAB32D9538988537E972D7069AAACB094B3CDF0FFEB8840DDBD75F06 60AEC51A556D56071140994E2D1B5774BBA49D6A384BF516744D2AD2A636325E 50445359008EE555DE1802474719A2CA3ACD60831A8936C038568204C467656F C49A13C748DAB65FB895CC26453B8AD682D98380EDA7330C700F6815F3D9733B 0233B92B9F6ED4430BF60B3535AB2F470E2FD7EC16947EBB9896358ECB101118 792499A0576533561C0DC622AD1CEAA557817F30C5543D403964AF8B2E63D682 0F88C1FFF9783C0EEF9AABAB3C0AAD698DAE0F768A7D6F1453BC06B2355527BE F0FE5F18B16563B79F106F62B25D84EB412FE0A5E7AA0B398961110D24C84710 27735BCC68C2D37706A825293167EFB1BEBB0FDCC489BCA1DBEA943BBD86D42F 2B4CC403ACE23BAE76CF3C9F8A04792607F1EE3D5F2E5A92F65FBD55F477B3A7 3822745AC5DD429B638D83B972D8499BCE4F99D53BBB3829336AB54DE56BA7EF 9AAE4DB0E8FE7BF1129F4B81811B769ED40CFD11B7771DF4D9BAFA02208494F4 584D87766BDCBAE7B8AB4FBB9B504C4EF01E0A6230053D42E850FA78514C3A3F 83C0352723533CBAFFE1654FEBCCF4A6F479237EE9E740038948B0FBF4857C31 3779E3FB1EB9DFCA57637994DE84EDA1955F1994DA47330257BC4AC8280733CC 73504B9B5D4070E0E3006D9B6B0CFEDC2241F293B7F90F6AF332B535E6CFB410 B585CEA6B52A927EC7D008969388719C38142559B15DA2D4AFA0103AB4C44566 F87C5B81AC1C421FE71C190F315677249226C4D4703BEC79A88C9DCA47994550 447B8656566EC2967A59CE538C2778FDA0A2EFDEBD76 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 99 /c put dup 105 /i put dup 115 /s put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3 154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD 9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092 40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6 A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE 002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54 810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D 637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24 1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1 859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF 6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE 2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858 89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A 38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045 9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F 774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9 75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC 660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9 2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C 8BC2F3AB0BF5A6E5619BE16DF43BB09D0E9D5FA4577426BE8A2F847C25E55D7F F67F71F3F7BEB60A2DE7183A562D7A8C97E96A43C9E06549B174431F4499FB8B 949498C1DCBD58F8C028B52BD41EC7950B2F3F570CC86B44382CB9F2D5EA8CC6 BD9601797B108FEC00511C0D50484F503C1CA95A766012B9BAD38F014867A27E D4564B02850D3892796717EDA0E3AF8F81B1B4404DA8FF7D0FF25B1464E75B6B 2A55554A12D0C032029C19B72CE17052E96D235A0825065ABB286814A465351B 6AA15EBFC67E9FBCA14D7B8F1B9AD6DEA70CDAE988751E1703C41504A15F25A4 AD04721DFDDF69C267DAABAAFD31ADF59861FC3A7D9B3EC7E65E424DDF65E253 7E22E3190B20B2221849EC1FF3DB635393446B435A51DFDF427C2EE6C45CC9EB CF142528D4F8869E6E44FFD471CFBEFD327B5D204C879BC8F9611D5B67383211 5224ED2DDE9A993549039A6FE27BA358AA91C292216E9AD0FBFB5C3A34F5ABCE DED5848E2F0E438737A9C1DB313A943BDEAEA9B30B1B224D81FA6C74E5BCC03F 032C3951F93F7291E5DD988B44DCB8E8900746AF88AB0D464DAF82129D29AA30 C8E6102ADA9C9D5F0086E13F8C33F09B9332242B98F6C635B4940592135C75FD AF697976371F61D88DE453D7BC926C68F4DC15189B85BA08700A5CC26A1590C5 EDFCAF063D28095048939FB2A21B6EF7D08E6189907A5D0D5CC24CC577104438 79D693CE13C22BC55612038F56A07C3BFAE2513905B0AB3F5CDC4808BF581D14 E1F3B0E771C0E7DF3CDC1A80002989F77EEF09DA90EC20CF2B1153598E7EF452 4FE4BD2CE3EB3E8E41041C42 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 101 /e put dup 102 /f put dup 114 /r put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B4C12515E844F0D26CDF0AEAD63BF1491BB50ED4D6D2 739930E80E26E9B425C25033121899AD22102AE6868648BABB7D5985611C95E3 5B8D365C7D034BA22E904A0ADB0132CE38288C127BBEA0825E600D18383A6854 EE28FD1B2F57AF704854AEECF985EEFAE0521DB38B0A7511C803CE8AE0D0BC02 50744F806B8D771AEA2192F982A96AD925DBBF62C2215C125C096A67A2FBF4EB 69F74623A2F57A397EDBB00B60E26CAD97978AE2FB098E1594CE1235307E0287 ADF56193C9D6D394F97DE4690509D8252FF39F68BCACF0E6176FA180415F16FE 29A4F648F945A5A6FE99F68FF4D14FF85DEFC9C080851B0E87D0C9E5362451D4 B63E23735306037D2B357B2F9165D369E934256DA1617A3B2F0E0E7017E33CF4 DA47D7E72C5B818112B4E6C4FBD6A3E26C0485658B84E62E178FDBDE158382C8 A1F9806D094E9FEC6192E9FC9667D81887F481A0F146C6EDC97F41F31144A508 20B53CD34EE5D66BDFED54EE1F77B0A2EA0C21057E4CF95F7E4F70C276B6DAE1 D42043053A6260B22C5DC56E17DE295CAC50435E2F463D2BEDDFDDE0E717AA47 8D603E3E140CCA05AAE7B71268097450B94637F54EE6FF66AB2C391B1EE143AF 6926E7C05521EA4B6F0CC77C7E56B5427E504D615187733890FB5003C392E54A 4417387771E53E87FEF44B60D2E8B29483635779F9CF9B937DD5E867D8F5BA9C EF1D1139F663D5770E6AFA80C96CCCF82547C680689226CFC4146DB2C607FAA7 60FE07407874D2D05BD2C95917F7A2110994E3E47C587AD38DD3C49DE65756C8 63C033DB4CBDD508A7718879CAE9D8FAF8230425CF7A6A8F0B64A320445CFD33 0C40BE6E12ADD1F2BAF4FFF5900D54CF71DC5B38195E89D237C0371F27D9FB80 683A3FD487B2E29D8649476A963C983B7B7FE47BFEF65AFFDB343A3ACB8E0C88 E8583809C97F3704A4A08436AE2EF59942154D6412689B21D6111273A905245E 2D6A201C94D8FB5FC6B75AF9E5DB153A3E7FDE8C83AB9995DE650BE1FD0892E6 7E676325324B25368A018C746E46A2373ABAC0D675508FDC5CB50D933258D54F D2D7E99113E0E5961F498288E55188CE43A7E06675F35AE4EF6E1980BD58CE86 BCB53D71D33C073B4A5EC8900E05 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 33 /exclam put dup 34 /quotedblright put dup 35 /numbersign put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 92 /quotedblleft put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E299575EF2ECAAC7649193843D694E 6CA59318C01132C361A3E43BE637B70B9966664E12EF4707F6B100BC37778D1C F1806B1DE081D2C9B995BF1EE3842EFFBB8416161FE31633A6EDA118E563BDC1 C42F403BE8A009FC756406669E34C6A08668808E0C31A589D0720BE32F3181F9 8039645643E15D25917F38DFFD8BD08A420854DE15AF291ED675A634C151193D 29AA6E04E84A598350AF17E71973854842AFEC3EB1B58E4D4433309BF5ED9D86 32C4BD136C89169D45718A88BABE25072D8E552AA4CA3F840ECB11519B06EB44 13026DD6800BFE15E90592641FE99BCD18039598DC7B08AA89EE6792B576B29F 787176E0CE92270D872A5988E8CB83661FE8E8FD331668DDF9A87EA0FCB904E9 FC2B5F090705C9CC49A85453967C697A72F27326FCF642B945A85944A34E460A 89B31933D20964588C89EC9E89534F6EAD9740814C283601A5CF1C41FAB7DD47 84CD74B34B93D25D1FCAB9BFC58740A672F654891E7F7951E880913C77200BF8 F004BA3DC28575853F1D4DA612CF18EC234666DE1A1CDC99FD86A83C0FC7D235 ABE5EF0A8ED1AA13C55BC9B3C68E18E23EDEF6D354861A198BB6AC1F98681918 13E4ECE6D689B0A0405DEC8A37F3E156F08EE45FA0A7AE36AF816B7789455AFE 294A8E9BF4A0F75FD2D4D9CDCED356241DE739034C879B02E0392E5AF9FB8507 3D6E89E7F708DB5A5C5BF9203181C17DC17D57EBCE1572CBF921D2B24BC95D11 8F3C68E14391D896D4046D0A4D6245014AF47F1E859A2CBDCC7BE01927BD85A7 7C81A53D2BD0AB800B022A9B59D28A4D6A8DC9109D83442F30CA70FBA66245CD 92E69ACAA786CBE7A5725784BD1667C2712C919A267EB063AAA1E730C8E6EEF6 AE97EB1D3DB2D31FCF61E8BDDC4ADCEF986ED901C96BDC70E3CB29A88C8843A6 0DC3B99D65BB40FBC00A9912B63DD61E44276EB66C79FD394CB8F70C13F7A468 8ADDEC5643F2F0A91D7E4B1168F9DF41060DC86A7787EF56EACA070B43C41733 DB7DEB5441C7FC3326E610D186D488471BC0E671A610408294D108393381A62A 0D2D3A7BB065E5FE2313116F217C42B2102A928FD76440314DCFBDFE5255133F 8E7F06D46E1497737960998B379B066DCF402F84C7E63AE29A2D57C3058B69BC 7579D5B9215809601CC71B0B547B7C363BD7FEF6D30C02A40CEB2FEE42B64FC7 5B4257C8D7EDF57D702B0F041A247298AFE1051D1F85618EC5E858CC3161BF88 0AB2CBFB7909C7B4B3B9F0DB00D1D6E42B545BF792E455E0BC3DC333680B3067 FD34D2968E659DCA948F18341306BD51E8C4B9E034F8C56C83706C1DF0C8F881 FE5501DDCBD9AB3DCC986EE324C9566710EBD812D550227C061BC6B4C7D79D7E 802509AB3472CE4734A0487AAEA2FE6FBBCA7D915592A91F3749504FF2328C58 DC3A2E27B9BDF1EE40110041789A85FC1CCE59F856A40BA5B30278204AEC5E3B CD025624C7B916A97B43BE2D07E79917A206865B001EC2C6190AFE9B31BC892C 8721F6917D30FA36FAEE98F622EF313CC8431931DD21AE51FFF051896FB41AE2 22DF8A67CD805EC551235BB385F7A70A6C3D6D39AB0BDE4E8A048DE4026A9D53 217E0287ADF56193C9D6D3D7ACFBCEEF302F2EDD4F7DB8EF110077844DBB889E A8BAC4CD32AB404DE0BF14EF07EEC57B27D58DB6445A99DE978B0D014B5CFB1E 43B6F7647A57E86A9FEE0E34743B8DD430D1C30BE0917FAEF2B8883F578DA057 EAEFC01DC5E6BD7A0BA4E8E4AB43483DCC1C7C88B04992AD39C59CDAD533ECB9 EF217B8FADECBFF190F604D26465A3B7C450A036340C0B03A5DE577885B6B297 2F6980E0A2F6C04F6E98581B5D753E6270D2BB657E7B291E803D1450527DD933 34DAD61B4EA09C57152495D44A790435D7FFF41299496116094E18D9C77CB220 F685ED808BA8569E5C2594A96AF822DF221264996510C908EEBABA4D157E7F72 707D77CE36676121AE0D4F67E397A244CB48AF46D832555D0C046A427ADF16C6 923FF89026B4F9F6FA14604C2DCA699355EC6DE0C581A268B62DE38862AA9F41 FC78136D61A9B9E23E8A366BAA2EB284777A242DF1E144E0ED29E4B3345182E1 78E53F7506E62267BD96C742897762C9284333EB54B7A2B52527D7E5A2418EBC 5B96912E91FA3F49DAF4DF2B534C587A76147894DF3726C397934B4BA18C0E95 A08161B44FABF57ADC4D7D461ECBAF365CC59375D0F61488AD740909AE58FA7B BFD240FEAAC8375EC34590267658C13E8FC01C16BF373060EEE77018B404BCD0 885539794E573B3849FDC53A8F87EA2346411CC1FF1956BC2DBAF36058A27392 657EC784AA3A3689003C680C6D776F9E6717A6A3E96327F9206473233FA5B2D0 B691069D804C503C7CA2D05701B1BA85DE427B414A39B0EEA40684C393FB071C A4E8028DB41AF932CB6E9F919EB5EF964EE053B78EA8C80BB272BA01A17A79B4 BED6D3AE3FAAAD9BD1A24D1A1265F45643D1DA34417085B8C4B32CCA227BEBD7 59D4299F4BF97EFC069977E88971C070FB5D0AF8452E5038EF014F06A3A662C0 8033300315B31861E6001D875718B7BD7BF3B401A723EE59734A18651CE30A83 24DD2A4873667C6C4D67A74B79225B3381604588C9AA433930B270C63EEEB838 82F597EB31772A6FC481E49ABE05931C0CFCEAE7B3B83B00D7D9EA3D9D72FFE3 D7B396B87DA2AD86E517267E421D33AE2E3BB1BB62E18C43FAC309B1C6AA82DD 08A8DAD07B762724E53A44D1725A933B8D23BE2AC55FF94F28538C06D85305F4 994827567F6B94A92794BF6099795E492DED03F22C208996FA2403795AB21190 34C81BF12E948905E2D8505D097AAE0A518ADD4D24330325EE19CED393112CA1 4C65D8E32F73D5ABCD1D494DBE2FBDBB4E975D12418AB9FF03BE7303BE254C29 6DCC62AD079088649F792346F010FA7B749170F9FE0B6D85C50D9BA7A8F2E2A7 53FE2409355B57382F0D6C8DB95363235155A2E98E9921D07C78A83E1A3D5B47 1CAD460BFAECF4A30E6E5F1D3AC47CEA8E6D79B8504DFF6087C73080747359F8 744EF0245C0559045C91E19F42871DF1B27D324AB5BA95B6E3584178FA6AA650 24D9B041E66336D12979C22DE6FFF8AC8683DDE98695B4188484CFF38915846D 6D62D5FC2B7B0E22DD7A11977823396FE9249C258156FB30BA45C4676F575013 3994CEE681C0876615B388EC0824BE2A6B90640FA3033EB782E275EDBFE0CB85 56DD7ABF7806C7D90F8C24E420BCBA71C4497394BE4FE127A6CF5CC4BC6FE5AD D1445210039E61598ECE5953FEB92C39C9EDD67D765425ED2DC447E0B473ACEF 9ADD03A0ACD6633B0FDA0643215958540EBFE82B94C8876399CAC9B467844E91 7DC961AD4EA71AE59B796B33CEB0A96B24304140FD4BCEBC9598A1164C54C888 F6068594B03BE0D5FFBFE92F4097595BC81074398D02C6023C13C1003EA18EDB 0EBC0391FC3D85580E60350CCAE1F1E4C8856600E0C233F98A71B1850BE0CEA6 9391A0DC2601FC4F93A701B15989B8C9955BDC3C107FB5D8457860F24CC6B7B5 A0BC20CBB47F105127C8FA6DCA0BBA0FFE978C918A1EA445A5651759AC07393F 12BD0925D091AC7DB2F5940C1AF58DB1FB9DCB3F6FFF8EB75481E14A339FC63A 949259C2F502F43FD8C05A7A92DA0FA5BE7FAAF20A160173B95A0509EC929483 1293105D38E74A9BF6C351B704F03A0B7FC190C41FA41851DDD9126D0A7A39C7 53283A59C77F7364BB75AE2073B61284E2EACB2B7D240CFD7FB20535B6BB9EFC 64C0DD2326B351F9301A930D1722F95F6CEA4642026CB672EDD25D6C14665C60 C0B97ECB7C4187EAA2193FA6D6C3442F5D37E803E488455F8ADDB69738CFE1A6 ED935B4AB780089AC2B4DCACE9FFAFA7713C26CBA8DCB4BBF8FC13DC9A85F106 CEA8444FA0960BAA75C7EEC7E5C86DB387E3A4C6A3259FBC272A2167ED02D8DE 928A2FB232EBCAA12C5A7FE684370509E0C1806E77CCB7D0FC11A36E2A509CED 424327146D3989D3F84EF1B037F6E8832465046C40114C366D9CE83C51CFACFC 5B28E833D59166532CB6B9C247D639124372C2BC93DD19CC41409088CFEF6350 5A54CCC640A57AF7F52A51C92185F3BCB3E4C94830361C819E5ED369C9FD9441 425168607078E62BF675C978FCA80A77BB936BA7C0B24669D2C8E2B69983F606 D0976BC6CD51B0923F17571885F4D4AC55BFB53EB52F2952CBC9D32FD482C74A D8CF75E9E8F443C5EE87D6C12C9437FC722D61478FAB68CC6DAA27FB7279FA09 966098754F32657FB3C5AB5CADB0978CD405815128532889B5CDC5B2C3B1FEAD E50C64244EF288320685C392977A97954AB7F6220922250430772D4301CA3DEE D27039C40D9E118D9B0DBDBA928D3BFD35645B53FC65ADEE6BCB9E8D287FDC36 191AC7A56FFEEEE82EE740AC6FA8461CB66903E036A35B16EA7CEB75BD87E6D6 AB9815DFD9C56658965231B14F876AF25E96058856A0A47059A0BE3EDF24BC9C 441C8058B0559056ABB40446DC208EF79ED933BD3D525B719BCBD16A61A21EF8 26C31FAA81B37AECDC54106E380A7AE3E5377121738F182E8437E6B65EF8BC12 996A4AB5EEFC7B8205752347FA5032EACA8AB71879F03CC30B180746A85D82CF FE40AEC5F99A0B7EF3757227AAB7B5572FFE1EC47F9F6841AC8BA1AD35220C9F 8CFED3C768549F666DEF2760BCD025878AC44DB91F33D815AC9DC3F442979BEF 7A5AA2B6E08B071117DCD7428127D527F2E6BDA5588BCB8A128AD5C148C72A7E F39410EEEBF42BA0BEDFCA6C539E3D687B46C3D311F7D0A55511BA8DD89FD108 7079F2F6FC2DC7B3C4ED70CF0BD9C852D1A1B3460E92EE65A1CEF67C7BBA87E8 93C804D23FAE8F47CF918A39DED8AACC34869895F15FD7D1720ED87A9967F7BA 9F7F9713F521697F092A8672D90D815597F7EB6EFF1655E9298E1C34F45A09EF 84D171BE4B505A6337219D3B6548BF6FB5C8C1B20D1A1EAADC52B48F459CA8EB 9960CE79D16F587AB155F6CDF053585739C741044E12D7951CA0458885631281 EA961C946D1BC27FC871E287C704BA71963D65ABA8D146CB898B55EAC5CBE5D3 BA6EEA0A92269B42155A7E4D19848C6C66903D7F5C495E6CDA68305A2839AF85 CA83885CB990B381E8D1F9F14A57FCEE74A04A33798217AF6BB013375C7DBAC4 15EAC8B94387D678F74B9675D7F64FEF601CF97DC70ED2E4355DE38F1C0CA856 18EDBE7D6F0F805DC763613B3DB11FF04A0DE7ADD7F1C3DC48B000B7054E5C5C 8915ED127695D6FCAA503F4F51F3BAABF4A72936A02C2A86EF3920E7234F641F 6A8DA288A4B0DF14589213D347C364A62850EC30441F3CD7B1C0EE5DA67235C2 BEB77FFDB1C145045CCE6B679349A27B9E3EE73C80A422FB25F3CDC636F2D330 4E24BB6D50EC098755F4BE5B210EB22DCC4E87F0DCC7A78FA7351F0F81A11A05 C9F1E30C3BE142A530C6F8E6574F7FCD50B28668B5EA6D1A722483C67AEC5EC0 E8E4A010139862932CEA28EEDE18874B276F4D2A43A8DFEFEB4F1BDFB1130C9E 108DD52C020C304540B89BDF35DC4FE9E2D6655C3B73DA5A426B75A3F8F67DA8 5261DD7E970103B17234C0CED5540D60453C3300E6CF2648B7CA577885D5B0A1 CAB9B7B3D03347CF332FE748CFECDA13727D59E203D1A2A46ECDDA709D5B132F 75DDBC74B21C041871735C9678A5BF99AD2EF7CF6103E54549CF40E010541F5B AFC762F2BFC803B271A9BA45EF696F61000ADF73D92F09EE3432A34385CD4EB1 3A2181360686CC6099E41D5BED2DA23807B7215F302AB8D82DDC9583398A1729 70CAB11EF4DB09DDE7010BF0A0EB20CDC14C1725FB27AD022F1F2DC2F06B3FBC C3E007BD5E77CC10082860DBB25F4BB015BF126D162E0CEB3DA504F31633ED9B 9CACD0A7F3232B5A7D41E8EDCACAAF67E0F4077DFD67E0DF9821559A35C705FE 41BD3008613CC71384D1EE659485EC6C5885A0EA15F8019041CCB3DAA8ABCA2E 3B31E3AF4EAE99F022C482F9614113A3C6B98109012C15F40303FEE1416FFFF5 34A3CD249C4D6BE413BB4D286ACA18F341535FDDD7495FBF2627241E749240E2 C34E520E7D6E767A3C86CD369E6A5FC4DAA7C153E7C0C62C0F19D72BE1F9A1B0 731F069F60506F034BA729C75139DFA15AE9F4FF5BB990BEFB1C917C505F3041 69615276980C9D58D761374CA20EF4B2280B80BF9DC2E57F2B944C8C67EB09A6 66C1DF4C81889404449260864F2875B45BDA5E152004E745C00802097BA42A05 FA48563A977B0C3300AE2D9F7D7CC29DFA1C9F1A70836BF2DFDF757234A66F44 66C02E50BFEACC4BE03AAB4EF567588EBFF8977BC6DF74FF039A7E3661F25FF4 5EC53948ACC79D401C011111624BBD60DDB8A58018B3C085CCA478B7957BFD81 1E6ED2493A409E23CE164E9F6065DF519FDB674AE0A01EE09B6BABE05B79F6F5 AC44FA5358837F7C61CE857A5E388091816723DE3FDB3682F63D969FDF42F602 51DFD9A509239996F504B62F02371AEB6A6961BC58263E0D0F92D2E95765036B 65194F2E613D3A7958B4D17326C1592E5918032FEA1D7839248582FD08D571D0 F0247A9F8B82F2891E81EE999678738EEDE1D4D66C318760332FA490DCD9DFEE B296284CA4D34C8F576C3CCB9065A754906F71F0F55B5AD2B619F995F0FD3D85 45E7BFB690A0158C1CF8DA0FE87DC072DA5F36CED4DEA8F8242E137D1C854E35 3A5825EF921CD931CB794E49DAF7291EB3C883C9E89FE228B2850BE92E7FF5FC 91675B4CB5FAF40EE646A70E852C4A941BF9F5A8C20899B8DF9BAC3CDD2C99CE 3FCE93C7CEFD7C7845178C5C2DCA767FEC040174ADC04C7C6874EAAD1E6D260D B857D7FB1773B32D9609EE097291E5EA33991B1A04813E76A4EA0A5A02A8B48F 3D8AF805FBD321D8CFE4961E7662BA38943644C116849F23E69FA3CBC0EDBA80 56F7B179643E8FCE0EC460D36748BA138AF335ED454D9E1BC0FDAB8AC2443F14 640D35FE2A9BA3564877FECAF5FC93B3E10C10E2565CDD97C37828ECC4A255D2 5708B793525233AFA7FFD409C1D36CA7701BC415D65E9450E9F95FE8EED42C93 46AE8DA5B3F0BD2691F2B317CC296718877ABBA38BF01A698A18653A0AA44B12 9CDFE04ABA87073DD0BCA617688C61944E9C1F534EAC3BCD540EBD60E5E115A9 7F532FBFEB5304E90BCCA71C9B002DD0C7C99267EBC6924BE4501C63799F9753 E5F96D434E0FD7A6AAFD6A6251904BECAA4228717BA23ABA578F46026A1AAE41 7288DD7FA51A18D3385E07B12E937303497DAE3B687DB7AC5A5732D6B3B62A9A 762AA0997FD33A1D125976B754AE6F681B947BE2879CC951F51C404B94679419 9B422B8FD9240BE868D9BF103063F5AF8BBA8BB197637BA3A87271717EBDA483 24E92A0A79C4F40C92650CABAA14607D8F9B3185ED6E3F4C0118400EA3BD96A8 9C229E77E14A8C03088C4F28C9B6C7AA094DFACAEF2C34A0F497FF258963D42E 25CE1DA50D1B83EEED634A6885894CF1BE15CBB2C757837A439D19BCA2CCF637 9580547C7A2A2CCF46C3477087619EBC13F16C0CE8189773FB20E742843A532E 590940AF4416C560114A6193DD13B3A227AF9349B223DEBD5FD164157BC1CA62 96A667F6F4F953DD9E9B8A0420D0F3A666A438DB36EED26DB7CADB3DB95CE2C7 4D55945480E8E276B7018E4FE21FA1D35D698086966EDFED93ED5E325BBE2427 9007682C740C9268354817A5838BE69EF669C981E0277940ACB04281EA86E038 95A8B2E501C2B480678397D8C660B20D2CA392EB3F46BE4FF50204168D7F4A0B E2C626DF5415EC5847BA0B4163B3007F117815D4DE194D73DA36897740E4696E 90C5DDE686FAF581F7AF2B6778C625CC286F10640023CA45485EB5F72BDDA482 7E21A828846C5C8228928989F0749721F8C80E7BEF53CA322511B19C32EC99CF 96E0B00D6D3A222FD083C721BA3B8F5BEC06EF188BDCA5EDBD64D583B82EEB6A C9F0F10566D35F0BD72235798BDB9A6C73C0F3A39A4321FA66331B52ACA50DB8 01EC108E769CEDF4408E8EC07F0A2A4BD15502DE0D0C13DC55DC5C95432EA8BD 5026E2D26963167A476231B7F72394C6CED0C6B723CD8D75A8AA12E1327705F0 29E5863BC99DE30BF34E985546A40D83C5D8237EF4D09A256B7BDD08ACFBA26A C8EF572EBE549072E485C74A8812C7DB0589CF7E7EAD4F5952E9A65E59013BFC 86E24019FA2DF748D8E8C2AC18A21DE0A5E6563E8751060946B5D535FCE3D75B 87BFBFFC55B6276319BA380381293A542CEDD275EBDE1529DCF014E1F176D022 6FD0C6C6D684BBE7562E43FF09516E28DC562991541D876D8EE0557BEE39DA71 738C0703E4AC77112D1CD99F7FD8B4175FEA5C2A0978E43964CE8B8DF0021E37 0C7685CA1EE41C6CF6F6618C375D1EC39D960DE8D1CA37499602F290BFD8EF2F 7A44F2A33D2EC8E281399116BFA9CCC01ED886A41379B0ECFF59CED3DED82BD6 17C80EEB2693B236B30050D1DF20503F4EBFAE6510A7119AFC4CF5D97E5C253E 0E54F07AB357F177115EE3E286DC9E90EB4E473182AC0664CF131E86865EAD90 C073F33BD54CCDFC0D36A3BAFBE86FE82FA04A45F20E35B44B2270F921EE9E38 F40DA26DB122E834721AB3F52E58840A1A610551A724AB0F2561AC09F4FBC0A9 461ADA71A9781FD6147AD1F91643A29D97B626A037515CF0E4AF92C0963C8E3F 62DFAFFABFDA3445FB4BE419E729E5EA5B760514BF2225B6B0361825B8A39C73 010CC02D65D8E96CD71D771B42A8D868843CD381FB39504E7332B76E05F7C374 102404B156E132C8AC62A579AF437E22DC8E5D9DFD795CF917DD7D4837BDCE8F 5403C149B91044D0485588169CC7AD0DA2BA36704C3D384379D341A8AA6BA28B 708106A23568201711254695932F94068A5BAFD0C267619CA40F8EA46516B9E1 F55083406BB655A0821D51FA2145275CEED8C09A44A1EE1A83E62D1A2144FCEB 4F351B2992627F8375678A4F24788C5E9BD8D4BDA854DFC2C68A4E66EF5A56BD 20CA9237ED9452C55EE635EE7D536B7B42140FBD83E5D214D00A7FF64F31505A 185C52C7AC10E5E2760DB6D2589E1D70E53983931C972E0FE486A8CCB82D6838 84090E2C1B876A35EFD9273817645BC9F8CBB3FA454C437B5709A16E0A1E2A3A 1BCA9FC0704D85F8E8A6753CA1C7657FB86C5C8DD70A03CCB4C33DC22A5CB5C4 2C2972E283D2DF9556A7B35776E8E4674385A26C15323C2B06964AE0F487076A ACFC9BD9207EBAD74476B894D67388C9E7194B86B69825746C5828168808DA84 154CFA3A384C1F9D8892032EAD56A65119F56E985525909980241C2C62DE7A2F FD3151C8C1AA4FB26305A24FBD0A00C44F7C07F3BF1CB87C0E35DDB3F89A7F3B BE1469FC54AB1FBC341DE5A3F364C24788C1DF67670665B17126E800B9A1A13F 44C3717A26DF57E1C2E60868F2A343C74CBE85023FCE71D9ABF7195B05468196 2E1266202D4C6B351F85F3ECB74BE917FDE6ED9138A53B0AB85CF94F56CA476E CE27097630489681BD470C3E0A76A62E1A4AA12BF1217E9DB02F13D4AC10656C 10B917A86613474685735F1C4618F27E64E1906B0AE4AFFAFA24B54769C3E4AF B777CC856FAEFDFDFF597422D62F8C585288E33503B27064252CDB6077A5B42A 94F7C5B1C79016B340842C7C81DE9ECDC7D866E5C4351C685705B97297548B89 F691A791183277C0F676578E1F7322697C44623549BC38B425C71C653B0D26A3 FFCC441D7E9993D4F92A562AEBA43FC562242A397EDED1440AAB2BFD496946D6 CF3BB3DF4C78BDA72BB7A0CB9DF44A4E4BD3101C7074BFFC6047AB0ECA5C157A CD05BC0F295583C68AF87E5EA65EF234D75C59E2651A1E54D96C35BCEED05350 C34EC2358A52395FD24375098AEFDBE2B30E738DDDA4F9549B8C6EEE1D1249D7 35839372C64A35429E34A8B0790AD15FA4C92D136F4686DDA18D51413F25C952 BB891EF63415EF10816C633397F0064C55B391230BFE3F36B8A0470582687F63 128ECD733C29B4EC1C021429783B1201D5F6CBA77AC4ECE82F8FF4B77AFE2024 5C7D090B163BAA4D710C9D0933B71865A6078EC3DC87E8D3409F23D53E6E4B21 BA39A12FDECE67DF4AC3EED05F431710D9F2036729ED1CA862A3C37700E831B0 2B16026BB0F5A97DFE97F331B8115CC8D72EC3ECE80D5DB414893D427BB8758F D43B9805F2CC7013EB5F003052B8DCD54634BA0CA9CDA2E0A036864BE7672774 3F5AC7055DEC999361531DBDAB306DE3ECBA6FDB79C57A83386AA85C711BEBDD 724955E263A9ACE8D98D40BACF69106F68A4DCD77566999D7DDD1B43FA35CC76 7B6F5B8928A08AC485690839B96946EDD111AE3983F8C2E3906A28D81D2DF4B8 045F2098DF13FD17F97F3A90998C1B8B06CB894BE378EA50A730CC91C4E0CE0A CD8EC2D4647F9CA086E1508BEB54C1117E72C96F60B442F67C37511E1EFB834E 823B48D1321DD7D32E47E1FD24166F2C0E2C0C9D4CCAC7196F2AB574615A05D7 5012FF76D84BEADE4CE079ADC931B2D2EAE040937A03FE378E4495E50A3911AF E1F8B9C86AE698C70F0A128B321C8B9D098A3772ED8C5D5BCBDAEE3DB357ED20 26F707934C6A5A5889A8692BFD204187C4080AF3C91C00A713AD9A457B86F5C4 03C5A91AE20F1A9CDC00B19DCFBBE3E2302A8B64D19509E6815CEE24D033B054 C25B0E005BC353ACAA63DA5B409CE4E7C20EC70C5D48782FFE73883514C64D76 8658B2F9725C5F0496030B8C2E7A18D653EA15E0E3F8E3916B33F8FD1B80B82B 5E471037779ED8B51FB468218EB41821EC26FA1AF1D2B1CB027BBD6259AC0139 05408DB4C7635531E0929F84E01BDA51E3A3877152B305C6F39FF9DC5254B517 9917899B189AC050BA99B97433F828DE8110D5E3C989156849A9D1AAB3D59354 66E1B375CC53B05A23E659D1ABC8E5A398EA6C6AB321D21F17BA046D7615AB4E A8C71548510BDFE96A554E2F6A30F09977F6F1FD3D054071C184036EF3AAF71C 027C8FFD0917C2D31C193B81A4AFF1B6CDE2A4B0925FCAB0E9EBF4ABFCA486E2 54421C23C511A63ACBE50B779F5EF57BDC822B305738071594565C1A413E5CA3 4363BC35D052DAD4A38E8C6EE0D3776C7F6349EE4D909B2B4C099C00053706EB 60B5DD977F3E0B59F8979DAF7B68953407CFB6CB936B164CBB596F53C7ECE2D3 5EF34155A87D40081C621493DBA2CE95CACBB0C04A4835B313EF6321FFBA4DCD 34940B7FE7D92A8CD4A58F16F2463B3AD4286A4D376518FD10E23FE3F14CB334 882D90BE26F134EE7EF4B593C5F3CFCCBD88347672FFDBADAC123A5B892DD065 93871D5E372F82281E4FD84A59425F0B8E63F67B4103774AA7B79DBA30731A24 6A56CB8E134479AFA960E4534586539B9F5DAEB6F4B0365DA7E0379E1F89D476 82CB1FC7D9A59310E8907B72A9E0BF479EFD578431449C7FD6444870A38049DF 3A4523A19F9702D5B57B7AB830AAF8FFBFFF7E7E4289FE80A02A53C1B016B7CE 4464ABDDE34772793D22118EE330D33953C9BD87BFAFCAEA118E2FD8169E18D4 56B455E1A0E5219A9219AED47BCFF80B19F55367862948C830F95AC7312A022D F433EB84703AF09EE50F313CB200CCB5FECFB63C438282BF66144CB972470FD3 E4C0D279E0F99C17C4C144B20DEE97C7C5163E67FCFB66212664CC314DC5F7C4 01B7FB8C164DE5B3FE6574D0AE4DBE89C3E153BD5CE0D30504A08B7329E9FA73 9A2E6443BD7962D388139C6E966A44EE725873696660165259048096D0395BAC F2CCEB153E1613EAD8450B4BE1E19418D50C0F16E53C898868080E93AC6C9E98 6649EEC4101BD4A6D412825E8552FA2CC81F1BB156EC834D699F914BD9484621 3F6459E4995C2EBBAC9A5531257F3B7D4C8ECBABAE6208478C6B547BEED9847E D9A9DCA382DA763389AABD3EC5D666970F39E1F015EA3C27B75256EAD951F489 931EF938413BAA92404DDCDE57DD0724EAF561391D13A0C241FF3048879E942B FE539C290B8F885E17EB099C3DBEBCBE8CB077D831DB931E24A80E306E682E3B 12C1AD2C4EC83F952DB555CB184ADCD753CD55D5DABB13284BD07967A7670990 2793D5087C4FAF0C47E0E22627C1D23FB1869361D6D49404B738ACBE38FD6712 81BA0E03FC3ADA5BB20570D31FD1EA24923AE615A02A961677DA0957DF0985D8 F070A804539183EBF9B97F97C8F748BAA4256065AA5F07D796C60E023EBB8E5F CE88DC8C7771AB88E59FD2413ABEFE0F569C0988D747F36732166C368AB6DE73 DD78CFD51556B8CC21C41F343396EEEB7C4EFFC8395DDFE386865C7014400B9F E1A837C34105FC0BD64A26797EA1D78E6CEDB94259760AC5EFA134DDD0A230BC E22A26B31A5A82B64F3E50F6A34BD0F16C47B904B34D010E3DBE3E03A02A5104 C5E652F61D05462417329C7449F7C32CE9861BCEBE08630E2BE8BBE507A92A67 DD65E58A390301A0509E866F2F137A2C4B0CD385E0437E2F81C86919227D8BB2 C482A0EFAFF6B0C9078CF9B047A39D8952CD9DD5244266D471EF229009DB3D9E 0D5348E1F9035CF1CB8905BFFD9B42A081DFF63E121799CCAC32F77DA5CEE274 17A15B09351699DA675168F44E00235BBBF2D7A7339F68033018F3E93604F090 D504D7FB89B8D909C5D7AA16D68DC37B44E1A8212162EBA1BF0850A6E6532258 3D97F08B9B01B535B0E2E9673AEA4D1439720F10DAB57680498C6BD3C5684600 FBEFD68EC132BD90F6560EC23A5E7A26123BB673D25E55BE88CFBBC13EA77434 0324087EB9BDB5CB9131A76DEAC1AE4EB0795BC1294B1A3C3A3EC617EA92CA95 94678D76159265A150DAC79E42313208797AE96EB28479C055AD9D30817E9B21 B4D801596A0939BF1005CE7D6704318C47E77E2BD46D2CDCFAFAD519CD080092 ACCCC310AA218B7A741C268D945A4A372DD4EDC1A8203919D3DD519BDC8FC572 B9F5624E3259CD30C8155F443F37ED127A2BCCE16590E846AF03B56289A661FB 1686F8BDFC5F4A410C1CE8A3B3CD29CDFB5A5412BD9E142407C25C2C7129E611 53269511DBD0A1E71F4A2C67855720E9156A6B407891F216DCA5A69EB60FC9E2 CDB023B346FB49BE3D02FCDF8C4F542D25A83A8EEEF0D5A2B6B84A221F841737 7AAEF8312F7E4A497BC0375348F7215C73FB2A1416C3BF64AD89661B0DA0CDCA A9F0E8DD9EFF70C1D5EAD01467A22E3BDF45B8EBFC8C6324E5F4B3C6A1409A02 89DE1331772CA566250DCFAFCD006C413747F2D302FD4E61AE93BB9389B4ECBE 336FC330F5E20C16173202ECF63BCAEEFEAFFBF49BB6D8188C2C1B0E3C3C9C43 4F80EA0C8D3636F39F349BCF8A300B7B1BBA33B5BA637DEB0C3CDE9DBD6DFCEC F6FB03BBB1036E827D78246D1079FDDCCD501CB7D080E19593DCD1E2E1EF179D 76EF8F1E10314ABD206DBDE897B2E3303F3463C11A4D208368EB85112CA128B6 F5C5493E2BA571E8102C72771CF7A25F199E860362032492BCA63487283BB7DA 9EDD6DE17B6D15D9F7A3CB4BA69A672C39A66C75A4BA2299074E853FEF706DB6 69638DD472A26F3E90C759E922390B0361B3A5C9C04E70380A69235035B1D7DD 88B0C1D6D4921FE304E4BC5BC6AF3849E8E41335A28A2073F35A7AFB3EF09E20 AD7A450A645FFA82CE8399085CCF74E78EB129CD373627B35C784A370757CD2C DACC470FEAE767382063A56F8240ADA3A6C05CB9EC4C2E9BC2A0E6A4C5F781A9 684877A57E0BF5684FC8B43953226FC7785C0C46B259ED2A311C17F741391895 4DBD2C212D2CCFA156922879DFAB9BE70E287AC17B86174042188DCA0D33AF77 1AE85339CC4FB50E457AB8BD39EAB05D1E7AE1AF253D959433981EC16C23918E D0C70B86DAC4293EA29B38D33E946BB78F39D344E75CD85AC18F8CF250BD4B62 A0E6F57DF474CD49821DBCDE44E78479A7D7A832DEDF6C92574AF9B8C17696A6 B78A02BFDF560307E48FF3B71244415A9569B8BFFC4A78FEE82D9776E63E149E A56A941EEAF723E664F59CA754DF7A4D0FC4790CCA740FC8BB69D01654D5DEFD 6E72A1DD2A980606C159070D01A3157F8ACEBA80E8E117EEA6CAEC4C5F29761C 8ED7CA47D8B77C9E42A4703CCD3EAF603F995968830695EF05CCB6B912AA8FCB 1FAE385D3ACABEBDD7B353ED046DFAC0B5FF48B6942D780CC4F8CCB4CB1540FC AA07881EB1BADD8E854050D1F9E9B60B943702241641E16E0D660BE2BC53815C 31CD235A42F9B67FF2DC0A597018CC0E204C2F5246FACD7FD3E09C0EBD1303C9 03EDEE68830FC5E2552A658B99A8EF3C5C0948343AD93D9B518AF89B32B02E21 9075D8EE96A93EBB5E1B5A060134379D1A12DC6E612BA64BEF270A9806C45ED6 7B6DDB844DBEBAC235D8653E7AEA28342664B73D601E37701B2103A25FE29D9D 5CA2D3199FED6D28DFB346551034F15F18411BD551E7BFE45EA46D440D82844F D8C7076FFE4771B59DE1A9AEE59B1B4C3E2D6613B67472AA7748239389B4CECC A613F95D2B97DB11852FF0CFB7E5722A70C7D4F4EB816146C1BFEC9ADB8C7308 4C67ED128FC157C4693FE7F63965BF26189CFC6FB5EAF47120A368CE3604B17C D5FF77F98FB32B7EBECDD78AFCEB69EA20CEB558A2B09A183528D1C76ED9EFF5 7B57CBC042DBC90F7DD4D721C9963A30F45BA4EF5C2B015D8A10D99B443B1CB9 29F4293D08D9FD923E9C246E8856749D04F388391223B38DE649F6E2959DD0BB BF4622965A3C4DB7EED3ACC22F1BB4D900ACD45A20BA4038D35BA54DEDF134DE 5D9C0D52F94C0389F0FFC70AB5FDB62C85BD975F22092873348F0CF3B92D01FF 781E3B141D7DFBBCBC80E2EC0989E262907313E99185C24DBBEB9E6CB9B5F6FA 5F78BA2B12219DB9BB8CF9098B2C27454BA6BED3D452767B1556E14E49ADE55D C52F4D86E1022777ADFCA835B41362E3BD430D65989D8EFACABDDCA06DC96460 23E874B2F529AF3DEF50749F93BBA5A628849D3C9D73585BAB6196D815C1882C 70A227F4684FDE602980F89417763A9FE749AB039FA291C2004AF5249380A1E5 65CC5C731BC65303BE084D66BA1093539AD3096101C382DF8C49CEABF9D2F91F 5EB1E72EF579E72687AB81B6EAD458F1791CF7BE9D8BA8CF058CA075F972BAB3 7D7D05A1035F0EB944EC2E9CE8D9A4A67556420D93EDB83C521E5DEAA6D9C19C 3E9D592BBF24E17719569A10104AB927F9EA64A232DC2909423D6AAB6F77F99B B98CF0ED3A5775D7DCAEA3CDE8EAEC3D514546AAA25C7B0E9F1DCED3168703FE 8B6F83037A6BE285071AEA178DEF68D0C582304892C81C9FE8EF9CBA37A257F0 6ECC4293338838252D080A79F8C9E214D210C6F3EA587B206B3EA0B31334DA1A 45DFC290467870C116A0C8F2B164DA82E9626657A8261D4DB789E8E9BA2245F5 EF5E8CFAB4CFF7673865283E3AB6DB4F6B5911AFEF9DF0C9712AEFB0CF0C068A BE831158E86983DB0B6C4F28ABEC0CFA46B9220B5C812F9C8C3BF276F215AE1A 9348108941C5B0DABEC8A14F63DC0CC842D7547DB4A46421CF1B9CD9740E3FD4 6001FDA1CB7CF6E921078123C19C7DB0F62A3FD852FFEE6B0691EB7A30A3E9DD 8E6A792E0E05B7FB910C7102464F64806DA04DBB81BB532BE1EC786A1D5917A3 EF86542788F404CE60E50CCCEC0C1B63DE768511953D470C4F509EABF1E88086 DF353B4583DF0DFDFCD73F9997D6F9ACBD972EE29D9F325802BB0E99A8D2BF2A 286D74E34A60A35603C46457E3559DA6E1A47B6A267FD47E60F077BB30F7B4AE 4731E29D2BC29CEBD23BADD5C489D967B3EECB4B5137957645998ADF90F3172F 1A9DCE4B922B47E6FC2DE10E77EFEDBEC3D7BF2330D5538FB37CD6B095FE3051 5DB7C58D67BE2F1D16AEFCBCA6716413A07CE39A2E404896D9E27E7BCC3BBED5 B70A96462D9B9E2BBD332CE7C98F3CF90B0ECEC93E99EDEEAEAF396E0163909B 4A98C28855B8DD39F948171DB576B471D10BD5C1D86EA1EB074B72AEEE43F377 F5B8C5AA08C5BD7A467C3F6D2BF10828556A7CAB396F09A699AAFAD7A02399D2 E2F3A9F5A8775B64A674FCA7963887AFBE524B4E0AD62A2F2DD4EFA04CD49191 4C36FF739F46E6949A634A3FC54AB6BBA80370F54A3ACC7FF4E3A95912CC3F1F 274BCAD99EE3DF58C2E8A0D55FA8DBC3DCA4B4A8065D2D638EDAE2F997CDD6BA 340C725C4FAD00492803DEB1FFA490C6C90CF2BDA82F869FB9F72F80D3356334 C51A098FF4C57C9D97154C54E1F4FC84898E006FD9FD1AD09E360598BF451D40 C6E31374B02617878C5D19DA586735ECEE7307573488ED6DB5803EAF74920BAF B850433AC3953A8C18461BEEB212A68C723CB4BF1032FA7B31745FE3C2A76F30 1090D9E7DD44404DCEEFE8E1B343656EABE0BAA48271534DFEEC36653938B5AC EB3F370C493C8614CF889BE3731D4F2678E58102290CE27302F18BFD6019DAE6 680F57CA320CD1B317846F8EF8233144C3DFF0EA6D452AC5F200B8149BD1345E F77EE466B8E35AA48D9CB40DBC7D96C382307A593DED303322A0D02DD1930E9D 2B4AB98482326071C111266FEA506A52CBB61300321B60D9250C1DB232333BD7 60A48B69E08231643E1F85C895CE26D36DA661740BC9286DD53D069D6589D2CA A1467541182F7269229942B959217834A4E561BA2E510979592ACBE66D689452 2DAB9EB794A67FBA320174BC0021C98C684BC87ADAF1C62B37028D1338A87782 7C35636B67CDB419D9CAC06770515512116616286AD7579DAA3CCC6DE48B9A0E 1EEB417CEF79F9ACB1C3AD10C631EA9BEF7CACA3942E72EF3EDC91087D7C7E27 B206446F1988603B73CE93E83F1113A0EB952D8BF365A32CFE456C27BF25FEC2 8A9F672D0D1F91FEEE3F0F2713AD2138E5F588C8BD76535C74D4A11BC17C2819 2656E9DD4F7035B1E890E5D7483D9F82FABCC7B3BD7F1C2EC2E785642A290940 8DE1F66B835D65E8452497BF8746C185BAEB352B2D00F08826C80A834941AF54 E251816C0BF9A70A3D618A7D07611B2169BC3F5C21954F4D4E2C1E8BAB3D4F45 5F9E002AC5419C8FC04285E6487FF2FC97172330E2F6368DC22AEF6FB5319B91 4AB002E9CED2E426C7BE382AC19FF82A476B5F70AC6BD99D182F28314B3B3416 6ED0966ACE8BC3C43199D637836B63BCC65722CA95199D1F268EDB5400745FFD B4EC927EE4AD3EFD07E50CF4F58F7CA50BD0BBA1E6997FE6A3F8CC84ECC46696 F21A62D242C07A7C8821747991B709E8D4D2CB84B8DC8CDC7FA5343FB57B1D5A 23D7053822AD5525C326708175C5E76171B41D0D2B8C4A4C39808F0207F6697C F926F1F951AD2FD967017CB8F99F7B0603BB62220FE0EB0EB4D6864263DCBDE0 11226C7044DEBDE6ECECB4B1A15C477B5E8B2E3B83690B61604FDCF4CCC23DA3 BE83419F3FE3DC4437DFE3848C70E9456F880EFB2B91060B98710A4963693791 456753E19684C0A64FFD94CF3ABC804A9B0D600138752476393ABD2323B4BE7E 72078AA35532C22CF92952C941D20C73E4B767DC901A92E5E399ED4F1F34B3A0 730EEAEF242508B7219577B23A5AEB652D54E35953246C973D19D1A91589C018 2DAB3BE8A3BE1E9062EFF837E44011CA8283D106339346FD831B64E69507109D A644CC1F3202717EBB89A594727B2858A501241C5E3301D17FCA992F957C822C 59780B3023A66BA44D0252884B575D64F1089385057AC676F49D9C16FDFB1E3F 8C6C7D01EB10092B6ED7C5D9524F444A15EC010145FB7419081CBB390EF7F2B3 2CCDCFC261841BEB95150003AC246D3AEF6A81A875AF143B7B27B93698F15320 5198285F101C585D48B203FE2C22747F87AD1E1FAB7A7E641AD2A32B38FB92BF 2040534DE6A3B0B8AC3026FF40831E3F7CE250174A661C77E3105012FD1A9C16 85F6885E5DFA17144AECDFC430A37C36D5B162C6F8E10C3B4AD516C4F4C5E87C 4C827BFFECCB5F39EF7E4A8FF9AF495C3181CFA76EAFE427BB38B8DC36B8317A A71B76514CC30822A0665E8D30EFE6CD7B134E9ED121F6FE5DE72603C6A4F099 C9BF938985757921FF90071D62BA326EAEB0F817A12654F6E62E58C539466E64 ADC7806F69CC455489509C5DB405AD351109853F999D46BB26A22B0069E37B2F 6E9E2C51F8754A0DAEE80949A7EF4F071FAE78EAB4A3E6DC2A26755EAFCF0B46 C8D5C19A71F47B684EEA4645F5C9F430E3688054F6E5CDFC6471738AA591EB66 A544763D68330BB6AEF0CB7E00F7A71E06CD2E36C3DFB06DEEAAEBF3C04E2F5F 5D37AE17F53D10F94780404078C3A181EF2B1A13F8AA4565E57F3471AA0B7F32 38439E3D39114569A3C5CE6360B2720CD42A1633DF9C6890D744AD44A02185DC F632EA2791319A771D77B92D3FA6825E700820E42AA035E58A9B2C1CD3BA66B5 2D8B20A911EE6951738436943A598DB339D8C432C22DE14A54B73867DEB735B8 234D7ADA8CC382C2BB42EEE979BB079F92993AF736B655E3CFE8B5673DB5CE0D 445915E49D0D2E0B7F16F6DDB907CB620B9844B0F06FAC8962E219B565C6D954 0EF968356C6FF1E16BA6FCF131097E32AA064D1FD6A111DC580EC4F6BEB5CA11 7D0599EE987A7BAC6BF6A6CA39BF85C3AD75385EB3D9A185F767A7BEC5564EB0 4DE0699CB8D23E868E4AE9AE95E5D796579F2E4446A3A43D3260CFFA852AC7C8 47076DE7EFB555D1378B860A7BC424C86798D333A174977627A4E7B81FC86181 4B5FE0A77FAE64B6AF56B3D368620CBCE6DAAA5C2254B1DF5CBCB6DCFE4783F5 A3DB1CA8E0C60C081B26F59795E38B93CEB3C95BDFA8628996CC7385E1E3FAF4 A6763AC5755A9356BCA4C12B1203BFEB868015BECA3E28280AD2CE576E60CBC1 836A7ED9F2FD1BF6C4DA4EB66CDBD024123A3CE8B15F7AA83A810118AF535FEB 1C374CAF2C2AFD5E8F53600966F54DD0DA48AA6F879B03F0EFD56598F4761F5A 109E87F2CE0561D1B759ECFABBFD6B8434D22E201EDD3E6BB8FCF6C0B5FC005B 3DD2627169C658893808C36FEA3456C081704FF672C1C67794EFD470EEE36FA1 526C2572AD71697F1DB6E55F2EBB9DB89835E10D12EBBC6248AC95429B61395D C68AD2E56E1A38BE2431DB95BF1A5D96F7D483EC9A2F1DAFDBC2EDC71C78DAF9 9A48030D3DF15EC468E59410BC049BD949B04671BDF77981FAC980CEFA4E7D82 EA2660A5906D51BDD287CEE44B7CB52D92FC173C0C9F04FBEF460A5F92E0F550 8D1DF03F63036BD91AA039B96B8CED2CBD8B6F084E2C4634EF8091AC9C00C8C3 1D7AF12C0D90670A510DEFFBCD6D35FCC219DFFAD9A7F70AF0C5EBA53723B135 A049C4A721AA14E44D1B25745753A3EA7B075000170E01E9E14D779090667267 97A7AF24C055B6642DF08590D80CC8264BA45FC89C3C29827C90DECB04B517E9 75171EB34C67F4B61DB8BB9A7CAC056D2DF06100C9C0E7E1CEBC145498E39766 4AA2EDE26D664C857EFEB7979F25DA20C722CBC20AEA2E2C1D769FA0053BB6B4 CD3A35CBE84FE5A1BE522757988D43159FD8147CC83D29AE8C1042E0DC36BDCD 5DD7121A0D5CDFAA1B57A9BDCD89C393C012985BB5A672D71ADEF31042BEF030 52AE93CEF8000852ADF78DEB798AD53C217C52EC0C8ECDF8D3AAAF5DC85ED4B8 5D93213E506F3DC8F52095CBC7092A135F4BA6DA1C441C9C0972D162EAD956AD E1A695DF6289C9A8490D52CECBC51A9BF191D752141BDAFC6F05B8C9BEF36A55 17BCCD53A0115248E9C3839C96F6857C2082289127B74237C06216DC49B1ECAC 3EB5FCD4C563AFA3129FB1D32395F76792F5B6310F710745953CDCC004432B3B 0ADE5D26F4B5E7DB40D203EAD6099906B0D195E9E9F8D2D52B85976813A14B41 BEA6153973732BA6AB7BD2A971F0244DD073D8C259EA282ED87DDC9A56645E0C 525A10C58FE799468D4EF3BC0B33E60FCF2FBCA53B32EA7C07F6B667D5ABB8FB EB8B82160988C3D23692A53316E131AD3132EB53D4789B322757A2476A95D9FC EACEE83FB4DF59B557384731CE28BDB1846AA4F7D704FFD0ABCACC0A9ED6DF39 0608EDA129ABA30E4855C8ADA878D88E29CD5D26CA52E2230403414679A14554 168F79927A6276321E3CDAE599D5D7C717CE558C0233647CE74D6A63CF771750 BB86EAAAFF94694A7AE6C95908DE290BB600AF6A424F1184C4D423E542145134 17F37ADC50F4C81230FE6EBAAB17013734F07285FC0F9D84F7B3A02466EA10DA 6F67BB32C9C86FF1BC8E309AC6724FB0A65AE9F2ED56CCE914BD102CD8B68B2D 2E22D9841E7C2C9504B683EE76C4A8153EF35C066EBC1D1F0606C2FA33AFB0AB 00292959003B71C4D5C14170C38FCD25C81C18359448E13F4A26B23E07912A7B DCE064E198092771925213B7C2DDC645C0DE89BF0EBDF3458295F9E9B54CA097 DB69AF8134C61B226614D772C8CFD943F2ED0B2834D23F0093B73ADFA2DA8E4C B2A255FA26608641E1EB75A797B2639E3765806228690BFA54BF57808E1313CB 96C7E6D4434CBEB78ACE752098D4B0410F6E667FF1BA9B40633DA00B9239B0FE 94AEA9C57AA2C844C508DE77ECCBDB3095C936EB386D7920D2814982A2DADF8C F712F0EA16E989F11639F9201FDDFA12449B5342824753C5EC10668F9FA1841D 4EADEA04AF3FC87495B9F413F3C47DC51DFF8E39BAE443D4A79B61AAF9708E10 4B9095625CC60FD467D135532232FE5FA24DBA176D11220C8113F934FBD7598C 2DA46BD489211B4BE8B6B76B92739E670A59C5B436793D13A800E4C80506571B 1A81C02B8D04A1C323C274506B7E50D9BDC3C94B6FA035AD1CC0D9F470EBF2F6 FDBE38DEF337A5F11F0F7A0DD503554226DD72286C2EA7A1E84A7FEFF980A140 5E4B383B5892AE748B3D69547F0300D8F801EFF1AF3569C06C36A1CDE49E883D 4387BCF7104A3907C333BD09316331A5EAB07656F027B6146A868A2DD3ED207A C567D205DCA978D589E3ED50B643818D784E4B0B8BDD2B5C5D13EE3D64E33E16 9B514B077E49CE66062977A358CA22DD0EA46BEF8AA8A6B856057CBD5DBEC602 055E7CCE9CD28D18FFE8AE5F06E8DF7CB672BA77BC6A4AFD14E0DA745CE08C1F 7C77D61AF5CAB3203A421409B8F3E39124C2E5AC49EF2266154E81027C1C7DA6 2BD9C322B8AA83AE2B91C0C602490DA1D3BF565A06F0891673E12DE473A90DCA FED0247202AF43AFD125F48E2C0D550FF94DD4353C03B771723B9B8AEF173247 A3DFED635F1A78CD100124369D660136BB1234E2129A95AE94D0D2F772C29078 C11C8133449CC9105E23549A55175D7640B674BA263048F98D96F53220921EAE 4F805C110DB3BC23CCB0A9D6D3AD47AE33D0A208319BD82E7548D7E7D109345B AA731378A684088214708107D4D262D4B1272FF4CEF7DECF6323C32B6281C843 ED6F2671B4FE7E37E6109078DB84EC34ED61F5F9C896D2E20F0C5EC79AB0C300 53E8ED0DBF9072C5D5383196B8843DEA2A7170CA655354DBD6DB061A45F8D5A0 39D254B0FF5E167B38DA52B20276354CD128B5814FA247946A52ABDAA8951194 774A2CF8065CC2CF22ABD4E021018DB75563A9158784C6391C19F57B56C2A031 180FA73BC03E850F7F9BCB3D980E5139A4C0BF614340250FF927D3ADB48F44EB D56F88EC406BC4E0FDBE9CEDBA63ED7AC1E3E39115E4FCFFDA3B5204A4A0A022 A76D3AC9ADB879448D36D99C5BD8C57AFABE3921031BC7DCD773299380126717 5EBE0C92D07074F76F14E7C44611C2840B740AF158E1CA9BD492C3E58E3E9D70 702BD1335E08CE7818079C55F60B461CE690F6348DA7BA1FA788D97F89B9796A 90C76A6A15119BE73E1FA14B59CE946941290715ECE3F5ADF01BB7DDDF723CB8 6784F007A31715F860ABFF71094AFB0AC6EEFF715948C3CE76B0CB25E5EF1C5E AAF231C6301B8B04C6EFB219055834A91C3DD897B98AB0BD3BE259BD3095BFB7 E01B63D097D8467D0970A4CDA3B41162E07C8D58D13A38FE4F75DD2AD240195A 19D1C1EEBBE1EFBA8FAE5C402E0BAA97CABFB9821712CAFA1BCDE758426F00EE 6441BF9E9A731B245C10E8DC6FC91AA3712EF43DF188CF700BC5A30AF01ACDDE 74B988A3FE63B2FA0C53142C60700631E360AA6DBA1EF4271830BFF955D553CE 7FD7D8695EC8198BEC6D9ACD7E428ACDDBA2B2CA01595D1FFF82A1EF40637B2D 697CF912E411DEFCABBB8E52323A1D84D76571DDEEFDAEA9B728801763D573F8 C5D06E5911FE15836F8EAEC919A3A536E4199084B089383DBB9C342DEF1344D9 1EA18C0A92FB155594D50167E8CA0899CF8624431F3E3CA09667F6A1F02FCAFB 59FF0B6ABF3E2981CCD2CD1DDA52CB3C77DCB0654162D14A4B320EF92DEFBC83 6EAD904F575493D9DF41776F41EC25AC51EAE25623C760E1B4E191A2E03372C0 7EC4D6FFF73DEECD5F236E8BD34A09EFA7775535DDB34DBE440C4E1CFCC40658 79516C748CF1B626A62CE11900CEFB235C6757C8F76ED0038BB67242AAABF879 33AFB966006EDF63C2573321EBBE0F86D08180036D06B7462E278DFCDBF2E1D9 043242570B13ED6036DC892409FFF16609B83E09D1712C8AD02A3C386C4CF2BB 8A443277B889EF7E10F738704022A8D8033F9318DB2DD8FE8A02C9F1CE0312EC F9811201279AF66A8F4AA7DA95B6F3105B48660CA2F4D99F61E16D0A0384207B 3C26B65256D57BAF3ECB0F8CC7856A16C549155B4C34E328E35BD70C9362C191 F1F82F188C03A0436D9E48293902EA451D8B2EA5BADE4B7BC18FEADAA797DDC1 03D92B00E479D32C32115585C919D8376A87A85954BAD5F5B5BDAE8C7564A374 412C7D976C7F76F24F064317C11DCDEDB7CD965091FD8334219523D70B16BC2A D7982D77E3FD38DF8EA814D255717B43BAEFDC32B5C7D49BA3E2FE2D02391120 4BC5DF9C5B7C788E18D996CA709A4402165D9D0D8C1F63E10B58825720A748B8 031EE0524DA96DB7B4D904338517E2EC8E0242B8205F86A03FD03E8CE6496166 6FCB95A860FB5DCB88159ACA8A83CF00D1F12D11DF2680CC650018B974AD1AC7 D5D4602D905FCB4C8A87F6AAF181F5D4AD4EBF7AB2AC6ABFE2D8F6F9CBF794E1 2BDCD5A935E29C0BA6F234C5C1E6AB8541FEA6774A1F74C3D4187C21F9914F87 E55D049BC5E56449A21D035725994023D518745A4402593AD90C4E9AC3CABDC0 D143BC2A1C540BAE996A50A118466E6F20FCB25863C47A22BDD803D2BFC027B0 793EA6634B1E2874DEB310B954D97975D559B79DA565668DEA107493C469972B E960065F96EBEF63FE7E74A49E3499DDB13B02424840034D02765CDBE49D0EF2 6679215FA12AD373C16BE5309CF91E7B33BB52E62913BABBE2438B3949721A0B 29F6F28E9698632BAA666FB1169159CF758DF7A6A01E0C5BC1A1350DEC402DB5 EE4D3861AAA9CBD832E94E937AD81B79830F3106B97107691C806E19D6937DB5 261AE17B47B8AA290E688DA37FA391E0D40C7FB95A9A94DE376A4735C1CE5179 9B2246B82629D0F22857F7AE49ECA4C28F2DF842AC1EF3511AEB7E147FAF06BE D0DB8387A95B9AFE635FA699BB668F9D399AA42AC74D8A821687BCB1698D07D4 147E218FCC2CD0B8BFFBCED6E21F4A5D73D7458DD179A7D6A8EAA315BCD77EEC 3B57BC0D551F12BCEC48C68E94E47D7F6EE60BE04D10E6AB10DDCD6C9E7B5974 BECBDECCCC5FE7A1D7507940E40551D894C05783209861C4550C8C23294CC241 FB4D164BBF441C8438D352A43F4E99517805304524B6D8D15EBFFC56735B7621 2D758216FB686E4E116D811D2F894D61EBB21F140000318281FBFEF39E1E19B8 512C1EA5DC802300631B10BC112284E74C4733CF9A1587ABBD9D2E80BC37AEA3 8B580BE520EB1B93D13874CC7400BDAE62956CD20511463CE9D658FCC64BC947 C02E3D1C41FD4655BB42466E3469A4A34899981453CCEA8A39866BA93FC70835 AD219B952CA69E2B5656EE844E7DFD762C6300DCAAFAADB37A7F96204B0F4F84 634E71765EB23B467B303BF16999E61B0B70C17808392024408872B03B5D5F03 67240FF79D87FE97834634FDCEE87D9E1CD3EB438B5568F7B943F1A76C0B508C 8C2EBE9BC84325EB489A1B9C721A30467EC15319032332252367642F0E304E0D AFC40504B4CAB04873186DDCCDE39A0D307BA0DCC8A5A284445133F6C63AEC1D 2DD084FB6323DC9EAC4828873E517542ABE952D1CF0F08EEE71F431E4FFAD505 A4D47DE1E93BFB6DD6B5847F9CB4394FC3B0CA1090356B040B4D476B21AF180B D793D92458F579498C3E51AD8FEC4D80AEA33A588EA89A0591E35A972F577887 09B537A4F513E07E1C756F07E269CD17923AD8B60C3721E2E938A7A86E7F25C9 826F60AA577F02E592BFAC80F53D13F21C0DF58AAF0030039983A0EAD2E13B6A DCBE013F6A0F0674685BBD97F784C5BA1417F0B19785341CC6BDC541C15F229D F64598796A1EDC095DC8E7E916F20A5B83526E099A8A139A0D77576204A68C0F 8DC294C348FA21DB08F64307A4BD59ED5F0C12EF9D146D2CDCAC65ECBF87E1B4 BAB3EE42F64FDA87EAF7492FF633CBED97196746532DE4AA3DF953FD47593C80 713CB4CEE6F5F3C845FD69C462DADCC994A47EA3CE15F37D7A9EE010E64D372F 14E95B0822D8FD7DB84589C4A9786D0952DD6D668E4B305569958AD3FC70548E 6F1520E8044A186703206FBDC6EE2F3A9BFFE9491B83A21E4AA418716BA08919 4477E1E449A2119D30CAFC99827E84651CA0A36D5797E637445FE11F31E32A32 37CBF8AFE1F04E1D7FE939CFFEE08590ECD9625457E317EC0FCC12FFDA086349 1329EC8DD41ED6CE17CDC08EA8A41B1C4F982F393780DF0B19072F6449157504 CDEBC09DB419C72C9FA79AC8A9F3BF803F7800FD4B7BC40503BF1EE98766BDA7 46919BDEFCE4B7EDF9B5E505A81A627E7AA9AD696604D641BB74595360B8FACF 8361C9143835942580DAFF1521266C5E98F84B1C9B560136CEA9411095648AB2 265133E40610B569149E8E3F978525930D65789AA655EC000EDC17C971073679 0F50331310196E74B413457CC8C4369E45EBE19C3B69F6362B5639EEFE36F41F DA79466A593BBC93F6BEF9ACEF1D217970541219AFBFABAE4AF3878355D59899 6ABD20CFD39A271D6920E461D0C991D9B07BDF9A65B68F01D8B783710D1F61BE B8217ADB98FD85728630CEA46AE01154CB4743E39959F386139BB7E0BC3E92DC A77E98378EE2FC962E7B4AC17BA7F32B2FD5CDCECFA98915972DCC8A780C680F 449CBEABED12BEF53C89C527059EADC86FD6165122073175AD4A7879D11D7434 B2CE53EB2448C647F9AB0BC1914643BB74C6ABE0690A12CDAA983A72A176B354 9C5CC577474D390686054C702257C349123E49A8F79288F6AEA37F1B02F7BB88 838F08BC7DFAA36F5B90848AF3676AC778F625958195EC1C9ED7BCDAD6007F23 647C05B37B424769AD11C53BEDA507BE83059E742CC248E85660BD6C8002D99B BCFB3CBF2B43E49221947F96B97F98845724735BDCB16130AF97937979987CEC FB35A77EAE79985D555B251648B29B79995C19C8DFB471B514FA90A082D0D113 2131A4DED2391F79D709A685BB9523CC07C40A49E4D0488079E4BC0DD381CFE3 9B1AD0FD8C04B1610E70773678EE7C325C6C01250F2173FA641600B709229A4F F07A6B21E3AF3B68CD27095FDF9D9D0D14ADFED537B756F179854CD112B7BDA3 24897677801D5CF0C125A81006268CF4F8C52317ED83472FDFF3FA013C24290A 4F09023E23E42E2ABDF8DF65EEAC68F94FA23AA8B44CD707A7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put dup 15 /bullet put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B15A0 657F5ED27D204449A841ED19E01432CFFE928E921321113780D036D34F2797DE D4459CFD15BB117B5C9745EF3CD2B296D91FAD48C80B136D94476967E255F808 AD2B5D522ADEC64176833756510391815A1D4A8DA1D0AEE7CAD36A1D161889F2 3347D5B6BC503300FDDD48F594F391D5FB42C42113C538E707C16EE24A3F375E 7C506E8F49CE50FF9DEF3B4A4C1BEB3848EAA3477349833BA22D2A9012287D8B A8C4CB4307A1188ACC0E6E9338E1559BE5FAFF381BD82A6C71C267409468B3C0 2C1A29F4281D565836EAE57F680490FEA4A952FF64C8CD11C377C294DCD1EC25 CEFB2B6DCE959D0208F85B6E32E9B44FD455F9B134A5306D95EA29F37BB8B86D 9E592159338E1293F449380E13C21AE42E6861DBBF4AE99A7469F871A3940835 FFBE7F316FA9BB834EAB18625F0960352C75105A92F175850289B1AE177E0D52 E43635C41B85F75CFB706BC92B0BF90367E180A141703EF69FD064C0FA34618A 5D9684895C3EF50F4AAF6E0F78D483280942D3F9C1A18FE7FA657928477AAC74 ABCC21B622EBE2C0AD9EDEDAEDAA9A6E3D96E01CC837668FAC44FB52307CE618 BE8399078154C80E7DB52F0CD16717DC59203497E89D69B390E9966C19D36188 E47270673493F7DFC14C72B5B4737AD52783C573B5F12D50E9D54AD65C2C310C 72BAF2A8ADAD81ACF0C49DF971775F2DB7404FC9AD6B30C947A348B28B0C042F CD9756359BA6942D643D8B7BC54E6047DFE25215CE5EE74CC3076975A3F324DF E8D80F42AE4A1C00B155FE56A61CCC09924E4D7DA7EE07987C2EF9E91AED55CF 524C54E553030B5F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505 27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA 1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7 4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46 F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F 2FD466826D4E666E3A835B98A1D4AE5D17053A6A648E26E77BD08F9A3E02956A AE82C4929E9666F539079846527D0E326FE7CBBF86E3722BA3E53F8A5121080B ACF8D3C67A2A1DF624B9DB92105D3C833F5A6ECEC108E799E71AEE8C115164BD 9BF92B1A79C9C70903BFF007CC14BCD053321843A4D058E2997B621F6D78BE4E 21ADEC73B8F3419AF9EF712C7A6FAB507E212AC5A560304D2F643942BFE29E3F 8A8873877CF1862E8A87CC2D6C522235B8CEACFD77334E1940F6DD4B00229774 CB734E8779D7B2796AE96053CE2781877FE955EA898F62B6194A7288D60D4889 0417E77171ED608E6A6E337CD94CCC389ABE6AB60356E21973E1A20F5946D926 6E07CB7693FDB817C8F07BA06AB56C94687DE852259567578C90CE30A316B6DA 281FB3A63A6CCFFC30819DFE30F7C1883E86B7E2A4A7A0FD040D3DE5673DF56F 9631B620F822CB58C8E2193819D07521C7A3A8D01276AE86066ADB2606E98D1B 386ED6C9B2125DA806C51FCEDA70DCCB3AC95CF69BCF4D56586A4F9FD0C5B9E9 F3A14F1B5D16CB4B1DD064AE9ED6008AD58B113BE8F545B6418FB8F6F84A98C9 716255D0799A3481FFEFA725879CCA52F9B35F8DF952ADB7E4D249E8BC1965BE C4C7E7E5E54ECE389A6D7CBB108D67CE1B8FAB94230A55126506EAC393D92243 7C11F714D416AB64E6BAB742B1E842D5A02976B3D68DC841B7F6830D6771F1DB 5D9583699F819A9F755D47E7235F43C9D5F48BC15D9DD12EB2FE7C11602CB8D4 C3AFAF72544CD891E6D19119D90A9AC25F6C5921F3B67F8C126E1AB2C565802E 373EF08611004C22AAA09378DD641CDF0C045917C48B6223DCD2B64E23463A33 0D4CA9BBD74E647D7714701D75D3F90259F31FCD8CC2FA66CAC34B1162D2AC2B 1DAC3D42C54C6567FFCE9E09CADFEA759F92EB033E4163F001A4A49CA2BE2794 D6B6F9B06369B56D7B0934D43B9A24F527914FD7FE58FF027FC7002251A6E0E9 E786B448BAD6E29DB8D4E2E59869CE944E49D59702A6B3E3144818A779E2A67D 5C9C5EA5011C5101043E6247B8823D214AFF349511B9B68CADD3CBB1CE596A0A C3140592A721D4F4B5ECB139D387513E36A1827D36C34AC14C42BDABEB3E3B73 37256C6A801B16C81DE1A9EFD46C1F594E1E2713CC49283902CC3DB9DD14D55B 3EEB8532DEE1A8C2B197CD7C8BEDC152A189F6D7F922B85996FE1A9A4907A83C 324905BFD1ECAC5B50C15EC1CB3366815937509951CFBB3E23E96C714E6FEFF9 F2740D669A3DDBFC85CC55140B2BE258F4D7E8E5ADCFF9BEAFBCBD073B0FCA30 A16024761028BD444DD1B0EFDA76E9DC24294CF7AF486C8299E963A2882C10D1 EADC6DB9D495E4B533A5DB6E0CC76939E993834C6B53CDA53FDF95EEF1851E3F 1D2345F56910B810E8E46BE9689B962871C1E45300A295431ADB83B1E0B602FB A3CD3235A91F7DF8E32AECD81E368C012360EC5FF397696338EE760A8C80ABA4 CB4ACD628561D001133E1BA1C524D105EBB9A611E07EFD6044AED5261F40E4BC D0752ED2E819C5518FA2385EF98A70B7B30649231A610C2D1F1925388373EEEF 0D2F45A5E7ADA5E7A9E8D9AFFE49AF55E9D6EFD6258C4CD634EE8941C1B19FB7 31A68582CF3071FA28FB27EE7D6858FD8EB1142A4D48DFB0E4A0F6FA4243815A 6A8A99AAFC1A4965F05C15252E0030CD1DCE4AB6E7671FB2372FEC09A9F7E9F1 D3A59080D2B75CAD8653990EA69614E7705663AFD1D8AC4AE02BFB5505446BA3 E0131ABAD4A088ED8FE47EB485C618ADB7097D4CC612D0DC8CFFB2DFD83C25DD 196E4EE263178835A407E9AC4490635A5F447B7797C5875137EA26A156A4BC69 F49BBC06A195663FFB3A12357E56DE0B795F0A8DA4AC04C79167623C505BA7A9 4F44330D46565DB20B7C30DC0E40C2D8A661B65FAEB914F8C7F7B32C6B37C881 BE05B62DCB58755BED92EDD65FA5C735EDC975CEC4849DF7C7C40C29C12DF88B 75FCEB22024DA5CF1F78C47031C0A85B64348CC174A091791F27D67F1E8FE2F5 136DE30940CED4B349B9CF47DCECA8F2F974074C595625DD74ACAA44FE71EA9E 23AF80AB228F1B774423F8F9AB30BC2073A5FBF9F09C8266F18F7C2B8810D01F 7456C58AEA498BF279BC7D14F9D795064BCED8FC5E0B2D694190EF8654066E1F A2F2BCCEFF899AE413FB9C4E745C05A789B1A2C478B388D27A6DEC10E4C3211F E065F6E262500B020960330870B5E437990F034A596E50C6BFD39F3017CF1568 CC9EC7C334FDFB7E7B6791DEFDA49A37473D1979624C0DDB3D61638660B3FA2A 15EBF740E06DC3E4D89A93F42FF002695F6234CE02AAA6FDEC4F0855DFAB248B FE242FE7F5651F7D6977212900AAE39E289C1C575C5ED8A01ADFE7EB5B27A2E3 580153F441E4793D1D6DECB13C3B35A01939A87B6C8DCA8CCEC9515E7BEF228A 1FB04788385360709D053B7B77C2CE9B31D8CCFEEC95EBA4669D47D4CF5673E8 5A0616A8AB4F3C6BCDD7B8E2474758D2E81F023026F034BF957D602180678D9C 6B8093164393E3E3AAB35398611D43319E31C49D28F046566141F32EA5DD6EC4 7968EF7E17116174B746903048A99CF7C5C62DF833DB9B6BF050BFAE5F5FD038 7AFF3894F42FB38216962EEEA711C4842ECF7E9DDCC72C99BE8CF30635D40CB5 CB604F5B0B3B1A59FFE130E1D3857E03B3B6ABE7341E3E50F54186F91277DF34 4DD936CD687FD4D7ED56178AADCE056F34036D4B9AD3A3F6FAAE2944158A3AC9 3E48CA1269C492D76E8CB8C53CD5551770120DED4C112B8E1D0991501B802B17 D20D892EA2A74C78D51FFB6C7EA20ECDF9FEBE424C8D9C0FCBA9200DAD96A4D4 007425897CF61087CF9C77C957FC5A44F7DCCB05FE12F2C5F2F692C1519B20CC 68B1D6BBCCF4BC9514B445840AE251C5AAFDD058EA857AF62CCDA0B58E104D50 5D52B05CB4013D0846BA788854B3D2B283EEB4ACA10479B6805707F95831BF9C 8B7EAB24E81181E4727EB3DCFC8C374382A48BD53137F552909646B05455C40B F724E1F277F652C0A5B6C9601D4D9B859D1891EAAD1F9DC33172EAB8545F43AF 07A0CDFC782280B8E68C0519BFE4D4FED59F9FF038FCCF747CA3BD8091C5412D 5437FE60BE75CA1834C82546B0ED45F560EC50B781CFC8F3F7CE5E3468DA61B5 CDFADF464573AF6FCFBB99F4BDD2462385C6FA297AF19EF72FFAEA089E1CB687 7D172D9EF815E234A492C4A544E4AD7999ADCE1538A142DF6CFAEBFE1B2B615B B45BC2FA87AA4630C09A17FE6C5FBF0916B26FE476AE6D91A89AF85C039A1549 783141226592B3F9B8E9E2D85E62497414EA8862D9EA4B357E17AF2C3B1B9E8C 8605A0DF338C294D305F98F8454C3FB3DCEA9A5A83298BB35FB91B1CC7B0E47B D02496F62FB0774FF850657C5D602CEFBD6EFC72598EB86E4CBD987A8859185E 7831EE878CF060E1B48F6069790B1FEC3FAE2B2834FCF354A5AB20B2779F6CC2 44528487D668726A525CF36CE4F14884E846640EA799DDEE7AEAF761BC19524D 7696D69428C54CD2CE5241EF44C4F76FBBDB2BF2C847E270118B3492C9C086C1 E0B107B0708163AC3E18391F7D1D12BC917C1A133E6836E96192FAB5A59D326C C700C7261174AA657BB27319101D6D56D633086542E88D6DABCBF92A16540017 8CBD3F83F5CDAC59D01F8A5FF8C6E707E8B7DBF60FD0870068B8BAF61B034ABD F46E12AB47AD6C5B7B6CA7A781AB3060750813D20A94F04604645D98CA81AAE3 695D0B0F54F92F5E9B6B7A56EA10BC375E716087F4A62C57AE858FD49798AF07 172C84A94803B9079DA745AAFC8A2D2FC1974A6E19F197D351A2037D00AAD196 3868A1782CFDC61575588D9853FABA37D2ABA903BA3FE464149C810FBB21727D 9D144F153BCD3B0814D92A84A5E2E924AC9044DD22A8ACAB3FD288280E208363 1235D702AF5D5C96F89B66C0A5560AD1A4FF575150BB68082DAFC041BA712CF4 0917CF8E593F6E039144C0032EA389F836C9E076A3C327F3C1A0CAA6F6D9B5A0 55A38073E20AAFA9AF355905ABF0302FE52DC356DA766A142E89E6EA90FCE6FD 0516E6019F494C039CE8394655DCEEA16C8692F67CD31AAA7FEC1442BC12E770 CC0ED1BF593C183B19961BF2A0826B4A6C06640C98D5C8008D87CFF4A0A11C40 62C17B413105182ADD72B69B5FFE93727792353108C24171429F55198FEB4994 B3C23A89ECA2467DBBC0A2E99D7BD56C03C416D1F7D15400C407C7B9D7D0AB51 C4E169B1B5F5BDD4DD667AC0A5078BBDF2FC4FF3BA8A9C9DD61F9585F10DC21E 5B55FA6EF7360CF0108E276EEAB53141DBD716A78EB831A66C11EF69D1CD479A B176EE40EC0639BEB7F11FC6AAF756A57C1121C30C69C1CC8D047EB870C1D017 A57651B9D212D9E364CFE138ABA4B206EC0A69704FF47C1245970A9D7872F88A 3D3F4ABB6A9A214BBCB9742FC859420366EE77B33F69343D9EB440A321978751 8DB46F3C7F3E875C1B01078C90B6D3A01AA2DFB396194B61B7AF92D7C2964C71 F1DF5D71DF4A2A1D332B51419C27A4139BEEAAF8977106C494C722B7852EBC92 5A4B164A8AF4D7E4E5AC635B08DBDD59A2C8DD296E50F37BF43354946267D581 427F6A729D2443068D3C25E3A4D716CCB280C4F755C479539106AD808829A8C3 B57B8C5AFE2D7C137A1F29C08BF102003837DDDAE11EAED3ADDE60124E3440E8 D8D617028E7C500FA8DBA4BDBE83AE2141A33F4095E361E01341D605B5D45C69 05C42AAD14778F9F61AF74EA9A7C5F30E3207F9F96E18E5817ADAA433AA2599D 30F10CD517B32BCD32A6EFF34E56119669AB888325493AE9D4F739FC4FFE058F A90AECD48681ED8A6A12C70DF53E5FECEC25C55724C6935DCD8ABC04BE4EE590 0DC31B1992351B3713D8791D481D17DFDF65FEADFCF684C649F65CA60EBBD889 6D8183E532FFCC160E41BA8CF598B5F8EE3BD7C85C222D2817F1B6B4645A790B 38AC100F921F0AD6A5EE9B63113D0B350197903460D6C23C7C415AEB66639D00 BCD51585F6DF942AA61BF7FF7AA0BBC961478542765CD9E87961C7BFB062A925 A5FE9C50FCB3EA7658172349993A63634C52CD23FAC7E2B86EEED53C10F70596 82F99DD4A9FB11E75C178C40FD7FADE8195CA2F626BE42B3E8E7C3221B995527 DC000A6505ED8DD23220F505243760753AA444438C4F4992D315B44CE5D54CE5 40899D231DE8563BF074EFAD634A85E8D64D8A1CC617CD4DF54359B6196C2B14 EAB8E04E1512DEBC683A96BC14FBC9AA7F81979ECA82314291382F725C16364C 1A48F0A7B30BAB8317C2D3921642077CCC9158B0503369F37D9D5ECC53BB5AD4 7F2A5CA19CD29DDB9E1987C15F77F4E2432B5F2ED854907389D07C00446EBBBB 72198A91C09EDD7A8E261EE0E947DD577157834B13D47067321741F8B321D155 0C15C0E4522FB51E1617F6D285E6C036B7539F523CD62368F99768082937EBC2 F907E4CAAE3F8DA5A7D3A54D33211CC5A31A0FE1794E35AF148C74EC3D64E2D8 196E93F673D5FAF9E195DDBD7BAFDE8D1FE22D31762C696C2D183646764319D5 BFEB590DE62C06E58C54240B0BCFA0F0E07A4A3202647DAF08F9D7097C33F4A9 15A8BD3514BFED9367013CC075EDF8F81F9C714D7760DB1F4B8A24CEA4C39C16 AC54A784AC4695D94DB932C98FF39CFD2C82693BAD5E6BCFB957FD11857D6CD1 E0B3387775924F96C9AEBF24FE35DBD4147F98AFA7DEC7DF739AAB432A525A13 7AEA36EE6F49BB51647AC8775DEA96E466CFDE1DD32051C68A520FF792D6923F FD65A2DA9AB41A59AC822864C20D4C13995806D025C0314A14886963E979F922 3A3F59B27714EDE327684A0DC26D233DBD29056BA081F43F8A132B40B3F90D73 A1897E5473E8F1DE0138F92085942D58034DC2EFE83CFCF5EB4CC30A15A2C955 CA111EDDB1D4BC80934BE3CCDC4223D79BB704FBB1C3C4A722592C3AF329A50E A6BB9469A1283F84541F9932B3948ABFFE033B44C1BC6C0F95EAE9B47FBA323E E523D8CC405DF55B23CBA363CD7215E9879B2E99655C8DFA65BE7355873C9538 BA8EA9E6A5BCA519EE6D5F44925C33579D3DEBB7057DAD66C409D6F15A713542 8BC8F467A1933D96BA6DD381AAAF699245C27C7DF8B316E63E5D49E05D6E455D 3CC3CAD8074DE006AC31FBACB5521D31700400D523C5F0C89523715EEC3FC1FC A4756DFA5C378FA66AABBF64B21B63F919E3B8BD97796FCCAC48D9528DDF5D62 8D26F62804875CDDD961F873A8D9597918B0456003B9703119C2082C81F9FE29 1D05EDBDEF6FC134C68CFAC9F085FB4BA4A275C7D612696D2D019A1B2C7BCC7B C2EB3E2E68F587DCDE329AC803534891DF909E182FBF633ADC74FBE2128BD523 DACAF55BA0292978A81FA5B6435544F4B5EF83F52FEC68AF68C0D1245D9BE10D B291169ACE616BAFB54B00702F9DC1BC35716030DE7894613E5CBF87F971DC03 C857542EE5DEC71E46E4626BF49985A0295064B05E090E8234D5895BDB73462B EA79935CE091AC088989399826B51F11E371F6C95A37E6536637141C06759358 F0DC6B123E14528B9AD30016E1CCF63199820BBA971D8A899835189AD9EDBBE0 9DC5E6FB2196B859ABCA60498BBE51BF4680FD1A49EEF74AC17BE47DF2C23205 F2A5126C4852E60486C7CDA6612966DFAC955BD9BEEDC4F2B119596850D5DB88 1D608CF20D2387D36ECA4ED62DCFA5A8A77C343B645717A9741EC87C9A5981D7 EC9C9F949210D22A66D7EF911BAF657E90F987F2BB150BDA642CA67C96D45B95 CC475CC2554284E6E046CBA0E29AC30BC2FAC7D84B2DEBC9845C9DB04BD992E9 2C60A36C987A939A98318609642165407EB857D872FBA53AEBCF3D330CADC495 FE539B2BA3AB00BAB6D6C7EC3E138B7E4309BBF651B51D6582742AE8612F4C43 A1B4D2CC6D2B571B75DD8DFC77A52E3B8DF21A460A746964DE676D950BF555B3 A426937A5F97A549900BA92FCCBCD2D98314013CF4526553158FACAC8ED46FA2 EA4C2719AA185D4F170EA0FEA34B0A235EC048296C5BF21274B84A3CD49E4A04 9357059DEDBFEEE5D65A034E9ECBA7DE8C69ED7F226EBF30775037F010D1E6CC C39B00F44D9185C27D9F45C55CD4FDF19CE9AE78D57EC6665D7D9A9899FB97B7 464A92190E97CD6F153A2C12BF0229D4392B5CA2E21B13AF1BFA586F033BC4AB CA25D97F41EF785462F1EDF6DEEAA7402C4964A2A3F4EFF8853BF5E49DC0BD02 C0AD8D0AB71576EC73EB92E3BB72CBB15F329721150D1CDEDFBC0AB82226FBED 9302E328C5EF3925E52BA3255276131CCA1D48A784CED2BEE9375D81CEB759E7 CF8086094E840D0E7223AEA25F55731AFB8D8574F8617D077E1ADB534884A7A7 EC599F6F93A9E312988C0368F9F9C5C33770A370B44A0A185341ACD2A86FD405 870AF3A5A65B8F8FD7FA9A0C5F9410B094B835EDD092DD43CCB86D045BCC8811 1C0780246B61BC4F70B1C79F30B58148CAAA608C6129733A97AE053C9442B9E8 003B5A0154593640234269371FF779818C7D804E34B7ACFF3C578C63D91A3A25 3B1CD6D571338A1508995BB44261445050B3E1FE016CFCF18F6431BAD8F4AB06 87F7ACA68681C7239B59ECD9AC14442AF507D0757838979319A70D3A2C2002E3 EE661D7F2580C82293C79BEDC3128D6BA54BFE23DC570C5941F83318E765E83D 33F8AF73E48B78747DBDFB8B3C691423B8722FFE0E473D87FD7A037F58BB39BF F3C76201AD63BB4357E15F918DD138E5D6FFD1410C8E3155324263A8B56CCE0F 203739A6ED2E05C716549DDE1989714DF6C72357A33B2C3D078740BDCD19AB4C C52E1021D8009B94041F09D34B681E4F7BA90DCAA2D5D0163F858B75A2A49B76 1AF15F476A2D4F44D95DAC9168F330B7E2FA65F0C08DA5E0E36512BC9A0A8781 C6EF8F748E7951A68D81C475FD24FE6EE30B99A6B94B45F502D8B0C8F394D7EF D49AC522D7CC83B20DD42B9EA225A0957D45217D0808DA8E61A60F0CF4921824 E9FFE438A579EBA81C04EA4C77E61998E5FBF5336B2CCF63CBD6E68E65FBFD50 82F18B8C5BEA6FEBCBB47237116F4FFCC3D386566E7883F8EE644DC27AAE79B0 92DE499C67B6921A35FBB769EC7A43587ACDC6B1BE1193602D06717E994B01D0 DFEC2439762E048374A6BA9B53DD74703C0CC2D183FAF02DF53B7E2F4316412B 96B6C49108122041A0C91B813DFA6BB821891A8E53D4AA34FC383DDC6C1C0373 34F8E4D742F651E6119B4CC9F3E48E62F34059CD19DEE504B833A5C40E7CBB79 8F4015D80D90EB98FDB6FBA72320657D05869016BE48F762559E09F8987D0FE3 B82A7ED04B0B2969BD4299678B1C38C9BAF0C74D08DC44D93B75090386048E36 8DEE64B79AA301EE7AF33868BC3CFEF0BF38B8C133C078B05D075BC34A41D75E 4129E742AE3484C2EF66E3A094CE6368270E4730F5B19C926C0B2B7BCDD41491 345EC898EAA2728C2B0985C065B0FF08BD5F2C4C05F5E1AEADAA40BAF4511B73 F50CAF4CE4B0CEE82AE53816B1B2ABE85CFC1005B733F5E96BA7805A8BD2D881 04D807C68D106102BFEB99B1FEB7DCD931BA8602F251B10312477589056F1A12 854C59E5C5F453440B94D8A099B9E7810B8E3C438507213F180561A86CD517F8 F00352A24F9310FBA0BCE8FB30BD577408E257EBA3C53D2D80172E8B703FF000 5C7B41CE3BCEBCF07AE8433F88D12C7BC660EF3DDBCB245B8F2E13FAFB742EAB 236E8EB4516E2A939FDBF6D2A10DFB3B5A91E63CE4FD5939C7761B72506F36BC A664D029DF0EB6BFEF34164C043CBC88996948DBE124DD40881EFBCC49726D6B E6CE93D23153E196C6B9EA2069D24E86E70C49C88C9E8E71F40F4524C2AB5987 0F969EB6B88768E97975F0E1B6C95BDA04E56ACE4D980CB15E6B679BB34463B6 C0EC435EA8E63900F3EE53341E072A115C0DA4F9F5C661C18FC233DBED020D6C C4C32CE81B5A6CF301479F64131A04056DEA91D3ED9BC3F53C7031FF2ECB238A 3672A45A925F85B03611C70027D71371F81F35FC4E652068FDB3B2DE32D71285 361CD18DA4B5155314E84EB85E2A2BE6B00CB777119F15C76ACA8BF6E90A3BBB C0210456CBABDFFDFBCB6C911828C76BABF774F65F986786A2E0971C2E0A96EE B67B009CF8D48C1C556E9E186647A141007FACBAC5EBDC99249AF9453F87FA50 51ABAD9AC230CBF32CBE31F8D69F22E8166567B233986B5C5538724F1ED7F757 C202000E6918FEE6B4CD124012B87B87936CC40546EA5B41DD921355647E6361 B24C1C2874504E4B91320857994A0327FF02F9CE9DDC2ACB707F80283FDD98D6 1A97299E805C1F0853CAC2C43BE546D469D1C319C81A1A0B50FC119E3522D98A 3A2FB64F70B5D20D7076A6FB8BA02F8CAFAC6CDAFA365EBE96688C4366B04AC8 81AF36686B4278EB9F5C1DD7E1004DEDA2CD9AD1A901D6705C0B343CDE9C92B1 960DA427D2CB00C8E0D9B723FF6DE159C1A51863F51843C4DB43BD9FE4E50084 8F2B32F17ABB51B75793985C643EA4BF21A71C0D57366CC73E73716345D77469 3C95AFF22030E4B6EA68DBB765B6B900047FBCE1B839586AF2A0D23251AE47A2 D10939A49AB84A8BE2CAB7DAF909A5628A671B5F9E4C7A3B21B1A147FB5EC376 0507EE3933973F04CA79A2AF3302A77CDB29E45FE765A97542844DFA815E1F37 653987D44FA400606D569135CFE658834E1040D4CB0622D4A49E9D748517A8D4 0DAF30FE3647DF6027B7D0B320931042DAC48D74DD48FF884550D61B6AAAE3C6 C6638897B25C8CD9414F9A5999A6612BB7640AFC21975FCC65FEB07AC3E361CC D3DBAC21F3015DC3A4193FC39A62FCD41B437C4DF413D899709B9BED8D36AB1B D3003CD80A84898334DC5A0362B071D160BE59CDD5C400F331D149639E6955FF 6F09CC32C72385B0FFB78E1B6E1C682B93DE4A288DD8B54ADE431461FFA02E64 402013783AA44ECDA385DD7FEF1E88507DB72B6116C5E50362407A7454B6CC21 22EABC8BA247B9418D621D9829F5EA1E540025C64CA1A477571E5C7C3CCD5803 2B1DFB3C18BF0C1676079430DA61C6AF98B2DACF65AA319FCC462A769F25570E 9A4F8E030FE6D6B512CF2B26EB4195BA3F960044F3C288212CA86035AF2D0F48 4545365E32B3C6EE09627C5A7AE6A0C6DD1133BF7604D941FCA12A818D4C2411 25BA9F213E434EB61087834B45ED67F3D6EE5223BA23C497506F8CD0788318DE 7C223C704B894099981FEC3CC0BFCAC9A7B3E31B703F48940562546F5EBE3DB5 8BA8C955ADC79E71506A599B83D88ED0975EB47D646CD61A4B4C68505F5150B6 FB0E384C6C44E924CEABA285AB8689C8A20C0F95C7FEC87430A8B4FB05E70DE8 2EFE45E9EF514B37C8106F7CAEBDDA87D0AF374F256E25163C139C2E868D4F35 ED75B58DA6E037AE8DAA0B5D80809CFE06F2FBF5E14610B0F4FBF360CB7BEB5A 311D8AC159A1227B717D3E2A53E03A9FFA37C659FF570F13109A806F2EB72991 5861F4F42B5EED4B39168B792BF656C4469DA0833A9D11B1AA02EEB0411EDE32 EC793695AA982CF199345CCD5AB67F89C551FD8DB3B2B62FD4013EFD762B9961 85E723E9BC6769A9D33BCD50D6895592E8B02B80E4E2A0CEA310D96B489F6768 A0237777CE1461A62993FF90A8C9109057131E004F7A1174432575D55D6BC4AB B0E0FF53772BF22F5C858A6B7811C65B9F75FAF59A0BD8CDAC486CF515C5E10D AD972522D0A408B6F688EBC426BCF30E5B8B8ADCBB193C22822181C4DADB9D3B 98325D0C18C86B65F5F3D7FB1B5058BFD749F770CD456F3F1ABC3F4809CA4A81 1F62BF1267150755C7A8FC7D0482067DAD3F0C45DFD49D382FE27BC0C6D8458B 6B508DFF46EC94277420F761595D1A40C7D709565DBF52F5BD17A3B51AB7386D EC1D15FF6B4750F5D0E0B0F95D3C561E0CD846E5BBD8985749DD3072AB50CAEB FAAE43DD3FD0F074BB1D71D348E075E2841DEEB1CDA35D47E0F980377CAE2777 1F8C1644C23E8EB1D9BAE76258FC29A393769F786E298952C492692BCEE29C90 D90411AF397EDB4290875069A2FB2DF21D045ED37F76695A9393E5FC07B5B889 5FA2EAA34F5AB0AA0D874CC492B5CE7FF582C8ACF9BF56CA606CAD0CFB62DA7B DAA8533BC3FE0F372695AA7DF484E59B49EA213D0975DAA838AA0455AED1CCC2 6141AB56F7BF6024B301A0EBA4E76A59CB4DDC8247F7EF3E91FE073B33F9C936 12584C0090E92B1C78B28EE4E492E66CB776DB325EC5B27EC3052CA4B6D9562B 4DE758AC62E54A016586152A1F404167DD0E365B5EC8B1DA6C9D5750D33C380A ED2541F0AEC2433C78A6DE6513546919BA04872C9823F9D526CE320FA660EE59 F96719C118C69095DAF3FF6DC7728D30318B223647841771C106B3A31CC7F39A 257B6736DF2D52764555F97A849B8A7803207B82D6C7E7EE52EC5A8A0AB90F15 9857BB021D633107EF94E22C9B5C15EE9632D9CAF82F24A8D31062B6EA503BA5 44B93930E35B905A57A53460758431FAFCFE9B208123DA8A3EC6960C8E046382 1652292ABCFFE0A61DDE1D29A32292F96206B2AB9585E10A2BE39CA6C6D57E96 AB7D3682D84F0667BC90941DA4E867FE545C1257128910EA978B23CBD8071A35 C7EAB3C1DB588976F5F4A32122168731AB31211A927A1C769CAD4A7B4DC1F7B2 9367092B7B9685B3E5AB467AA5E85AAEA07C0CAAA57932CC566EEB39A4F83BB8 7A59DA1A7E92247694B37705DD45EC1D5090B13D2B304589DD68BF61279C478E 2BFD7FD7278C7F34749C124B75971E1B221FCB94C4D41C2B10B9C5816C705060 6769A17587A95004427756FFC1A652104FFD1778CE23C063338AF85AE2FDED49 F6E17612605BDACDFFB33ED243AC0E00B8B673104856F136E925B4B2E6289208 F9E3F3F31421A4D2872B117716D58C09170CA660A32C1A493668CA8CB120CB7B 61AC6284B613CE6C67F67495538111A4F536494F766F05E081E7348388683982 FFB064E1B144D195C9F87C83E11BA5018B639119514B40ED4357005BE5CC6F53 CA7C21914D3F0ACB719F83AB3F2BBFCB025E56DAE18D7DF08EEEB075025A42B7 5579BAA580794E78289FAF8E9BD1837A2E1D6E2C22AB0E998D50A1AC1BF2E07C 4A7524FECA647EAC19DAFF8617A7B865510896B0133C19DE5724A9106F8D0A8C 7434913FCE74628356EFA1D895EC77D2092564909EB02D92CE2F846D7B491D1A 3A3E06DA3DF1AA906B8A87538A4A657F02DB4808798C5202214EAFE8CC43C1FA 109E30D935EA65D6F2FB4328AB66F7CE36998354388569958E37A1A4813814FA 7970AB84C7572853F3433D664C4260FFCD520E8F235D41361B62A502A63CA235 08265C6350079E5E761FD1B45F0FCA04100D4BBF8FD0852744A3E8628A5849B2 104A4E0A461C4820EF5C57C3E1C8802B8D4F321A80C0EC75A82566F74F5515E6 849D498D689D158A0625A78DAFC9EFBD88FAA985D75CEE87AA19A75EA065915D 3CB913E0F0DB31776F9AC0D796D693D287C2B543AF1961C91FC44DB43BA744ED 38EC3E7304348669C350BBC19C0FCF36A3658F607333EAC23F4E60667091CB05 C7BE404A12D675404F9FBE2FD28005964AC708520EDF615AB35E961BE7322430 19DC00A183B045F935662FCDF8F2CC214A128E4F9FCC593B6459BF8B6ABC091A A1DD58FF19631565E010BA7DFD835335128DA3E282D808DB5AF4B2B9CE194C5D 94E8A8312D295315E4CF5D9D15B51950A15B0978DD737ACE847D69317CBD072B 383C2EA5E2EAB3521738D481A1098B3BB1B4C377CAF70EAAF9F8C37D31FA6C83 2C38008D9EC8EA6B95B3DE8FBC95714B25955B55D71893E9DE3FF5270AAAA179 18392B2CD482C1E4CA09A7EA47F8522981EC4C324D8E211E3CB63DF7DD9383A1 0CD7CFDBBB74D01FD6B43425C801C67904D060B3E677FEF0694795EB1067577F 4A64A6C4E822B8A9CA4E0DFC8B749BD339F866881B894FEFF61E7E3536F0AB01 A5AD2E619F4CACA874EE1030614FB8BE31206B193DDD1127C01B838388A3C4DC EEFA1F30E3CC3C504407140E557C198FBE4063D460C9EA5A5E08BE57087AC3B8 D5129A138DB1C9D458EC21F98FB4AA41905D3F10C401B50ADF258339FE6C790D 08A7CCFD62D81CA49A46BCF3355DC4A1425A7B0DF6ECB82586EE5F552DCC6AC5 41D01D4802D4505DE59408F6552AB77F8CE9708331EC91E3240A9073E7EA9406 10DCD42CC3DA3D99B420991B2B6F82C3D98CADF1E924E63ABA7EA9C264B2592E ECF98D8ABBA538BA36BBBD37B8D45B96509155D94B14038340158C7CF1F8B107 A2A620F135D87226FF6B0773D8B1FEAAD954CC2FE1879011CE1207826FA51664 DEE79FB43C13E09BBBCC0E5647C14174088120E3CABE640C7965455AC0EAE7FA FFD2E21367624144DE450421E39A72C993F790390D87DFCF76F8AB83E68D6B99 6B57B6D3D5C0660DB5E17845E30762EC8AAF03202871C12739DE38E10F2CC759 F5AB00B80370B3D34EF99AD642B7388EE480CA027CEB6C8AA0748D00F21E1B1A 72544FADB9365C55ECA313B4F442FBBE87BE6E4D5D549ABF4500DA1056F45F14 FAA2585427087244A3E97428F0653BE7ED79612C1C832C5CED64086C8CEC3AEA AB7353EADEAA415F87B04DFB25011AA3C9CEBB2046BDA8062D60B4823C5F63E8 B38EDFF272B9A6A91CE577EE970A2B5EC83EE95B066BF95887E6155A2C6955B8 D73E8C2D8AA2C98FB86F9D25B1DAE276C2C8A14421B970251341D511D9A1BF37 0D9ED56B6F1E70D9289C3A68B83B842A5F30CD42E47E62D69348A49AB8BB724E C40D08220B6FA61A9AFA91E1009B1C152AB9AC6F744B40FAC5975AF209308182 E29B8D3888AD89C6E0C8C5C240E4C325C169B6FFE371A1290785619C924B327A A6C092C5BA3DAA6A26B6DE423A1EF22B2D9671AB2AD51245942FF9A0896524E3 431E52082A5B54F061CBED33D35E89787EB14C3732D38BF363AE46381D010AAF C1D57D4127FA9C40EF23CF31FEBD235B38D16FC7405740E08E1979F892D4A7C1 560BE505F5F28812740AF8F416ECF3F35DADB40404E07112ADD9B8EB3F1A99B9 825B9F03965F5925E76C255966E3C63174D44EA7AA4979DF2628A454623C7881 41F682DC610089CAA3452BD57C34C9C2C73F9B855C01263B1010D6333A0C8FBF B8973926420A079D49F08E57427D16A33A55670631FB4D7A060AC4A4D87724BB 5CB6C5D3DFD18F2C947BBA865A31A8B07FE7B51D8C203670D7403DE1D71D781B D8282F76E3F087885865FB7E8C8D1B6241DE4B3EBFF68743C6FE3947E4FF2B82 960815D698C6B965CA50B0EF558F670DC0EFCC4991AF4D26283BB95593AE74BB B7CF1CB7A9210EE5D4BCE25A6AB3FE776044837284FC600106D4EC96461DFDBC 1F5A468B0C3FE441F744DBD16A61490D00F9244371EF425E45BC3913C2D2854C 70B190E26707CDE0E17BCA8302EEA443B8AEBA0E9C4049DF1B0873E368EF99FA E5880D2AD17A8599F3FDD46E943CB7B6F33AE1F10F9AF37C991CF56B6B1C6D27 550097C6B5919959038FDC25AAFF5171A5C46CA1870077DE34D0E18B468EF532 014D8DF3527DFA5AA8678166FE6FD35819C826FC6BE58A7E06CE47917F61D836 C0BB1FA36AC8496FBA7761C949FC569BDA98246474181217EEE4A02D0751B854 1490B73D7D2F166A110BB92D24F8B4EEA77709271283C30312944DDB7BD24C6A C5941950AEC16940AFD5C5E02850C6D3B9D4FB901FFB3DEFEA1DBB1D7E41F5B0 97BC17C60FE727119229E00577D7A5682349CCD22D7BE2142D2502B95AB5D8BD F72070CC74A6AED1DBFDB74A530A8F2AA526949AEF3819846965808EE3B6DA6B 596F1F6380A948CC2553A6C2AEA43E40B690CABEB53B7C4C2A0638CA811B92EA C2F1003AB6F3455B7EB6AF02575124D95526B9D3781B85A1D4A80D8D6E2BC6F5 2C5468D08E61A3410526DB0DED118EC4B89F1ABE9CE1A8B2C5CF2AA6CB0DFCF7 6D4815D1805DD4648C2271BFD9AF424739CE57CF46CE0C4B9CF8FFA8FBF2B62B A390C3FA016C8407B13ADD1322A0DBAF33543C3D697DD307BBD6B3C11B840BC6 1C34377CDC617371105FAD1ED95A54E0580B79D74881AE292C968AE217E57BA9 32BF899A1CC72D2FA2C7477A594F2966328644B6D247A1661D656C27C486D3B0 DED2EF6303ABE5A7856F3EF74170D2B7C98674BE945B62C2D7AC03994D81B22A 08B459AC84063F1CFAA8970CCBB0CDD819418E072B5BB528353784794772F262 552E95D73CFCB72049B146808277258522CB224E239D3D2D66E47C68212BC544 AACF8283B5AAB96387DCB1FB181B4F7ED5CB4E9225745D1821EBB199A1EA1A19 1425D310C17B5F13EF541614BB404B3BCF60A5112A8FD7AE12890ACBA98E83FE 9AA46EC30C57D4526F8DAA18E6B0B5DD20B1B547F9778D1D5AE490459069CEAC 3E534EFA3719A89168250C073FD6C8B9A949002DFF401C298A81C276AA53F290 9ACEB5FA29F5114FE00F8F1A0D70574F43B5DC80A9E900139CAEEC2E6A10BCEF 13BF54F6650A72A003E1E5A0B5C8B29EF94E609756533F5E64ED7764B67F9EF0 E78003B0C321243E5164D40D1C4E412BCF4F4CBEB03D2531A2F6F939B1328CDD 64C1848725408006DF221F16ED896974B517563E07C50DDE68C86A4422743D1C 8B6B46C062361D398DD9C3421F2A0E19934DC70A1F851052DC2189A48E02671B EC900031AE29D61C1DA78B0DBFAC2E2E8F22069D4993DF15789CE543084CB92A DA2F015621BBA5DE5DD921250E5F16CB04B8EE48F53D6C6B20366FE5AC0D0AF8 466DC90C0670D6969DE3C0BC12A0EB499B62AF4DB11A9548DA054FF3F5CA636A A94825909155C60AD3A7F6C612FD95CB4A1041EF813606B96544793F286A527D C6F8AE90B20D1D2F2ED212E6F42B21E9719395BA7115C31CD177E7AF6FE9F9D0 14054906C7A797C00BF6871FAD07C4030813EB308C689EFA68FADFD7A3C519E2 04A8876DAD3A3433F914555ED623EA352427F8250CB80BE0911872F281D93066 A4EB89CA5267BE2B8A5FDCA83DB931040926F9D86297EB4E2212D87CCB9771C5 FA2581EEE61CC6B0AAB8C7D82905C8A4B0DD786F9E51D8B4A5B7FC4CCAA49306 545DAE42BAA1A8AE8378DAD4CF8DDE9D840A27CFDE51F0D4CAAC042865FE2CC6 6C7315161A66A682B7D08E592D6BA5CF65388F280EFD0813E6028E58B805B197 1C39C23B0C26DB93AEA9114A47C77CAE43D8066117A98B7C9BCAFAC637107A30 CCC2DFC1316E1CC54AA6BA2AB7ABD0A933688AE659233D051A478DAD100E2A4B BB8C5836EE10F8C96238C48BDEEB82E6AF4E94FF0D5D7247B7234B6CFBD50759 CE3DBAA6ADD3BEE285A0E3ADE07A42DEA7F95DAA5B4C9C4F7D3739724F7866A8 D87F226EC5806C59B26DAEE73D9F55DDCE37BEBFFBF43ED8D6CF0E48A0A92A15 48231AE3D091BCE72693F80EC415806E805477C60F2A8DA0B5386EA32C86777F D8DCFAC2E9BA8752130B66586975A7B6A6E997A600CDE3E53AD56EDD8BF274E3 BEDBE81BF52879892F0E83CBC08F494EC36D716DAD7B3AFF3BC3CF1931DCC858 85D0E069547A882138B74E8F71588B343EAA88B46137A39684BDEE91544DA442 59B63B1C2C1A7C8F24DAB926690DD4F59990A22F155790F7D4F3C059CECB4388 BF91976A044ED47242ACBC7C93F4F49FF1083BB49F1C13C0A2ED1CC4C2F29E91 E3D3476281D76B278C2A02A3419C7F5C4D9D39848901A9A8BE8E488B12E51F2E CC86C7CF078BC2F9E2C3233B8695485D889F380F36A037CC323367E36C9E338D A6FCA270EBA2E496093E531320C3A63375FC991BB6A771829F5314A2E54C47DE F0787678988274CE2AE0A2DD567FA5AF8C71995859D336158CD4411A57CC7B2B 7A75F2145B08FBB00E47C9D8655179BCF824E80049558D4555D276D267927411 A45783E1822A499A65E1D94EC763ED09F70401F3A3E1E48EEB76488284E41B9E 9AF9D28113C22724B9AA35A39232D21ADA5B74784340ADEBF7F492AB161F3ABE 4F59FB2477189797B5FDE70D0435F82F3982CA7982B70A2E0A76F6312FED1479 1685524B3DAD970D32FFF0FEA5ADBD10E802DCD6F4CE5C8925A95572EB00E9E9 CE2D8A08988119FFC488020B4B4FBDC1CAE73886CE09C46ABF51A8FE90840AF3 F7BBC782C52BC9936577314C656ADF0F42B02E3199438D4C54EF5FC2F02B8062 BFE626D834C6EB1641AD6E128EB5EFF358EDDD8A0B9617CDC6D2B71104E19AF4 1E89414DD3616A7ACB616448B0D94CBDD46B877EBC1A3943726C48F38A5AB311 31849FCC0AA793FB873A434D8443636AD2611437C0B9F304EE0477968A3E834D 3D79452CCBCAC0D20CE98407B9A94852354EC396EC4B240CDBC933B016E42A22 8299BE2C29937D40943E7A1000AD75727CF271E0A9264D0BB6461583CAF7D494 6ADD5FC0546FA79D57886D7F7BAD9B212DA68D9AA7912185006B7EF7AA53439E F9B612D6581D39917EACD2B6B01E3D4D459A716E9A350F3B6ECC77B93D098C97 8B47F86CD3238F712A246F8B7242C2CCA5DF20AA23006DF18C522F8CF4895B9A AF6C43786314CB8A4B48F6BB9B00CB097613AAAA95FBAC4B70E7E8DCAF87534D B8C51F8CF780880DCB1F4E90EE0661E928E15FF1150359B5F9120FD5CCC688B8 5F21A5ED46BC06A9B0570B92501B432592118AA4A6DA94BB1F686A6625CD8C32 96C1CCEA1A190E4BEB3A5AC9F05EF7EB54BE1692FD57789F7779D81F72531FB9 EC93165E16A3E3B346671D5A1D5C1FE3A8A4886D9D95756FB1A9B6B46860DC22 8B4100C4A66144F836F8EC133582EE36F202E5A155D36985C9EC6A9CA6630841 3D8D5116CE9C5E50B3D2E7CB43339A6B3BFA0AF7FEDE57FA243C5BF437662C83 2AD96870FA1CBD2992B6F3D829ACD90169C109EB18A2DA6ABC674A8A6DEAE3BA F97F4A1011AF3AA51DA204CEBEA2B3D12665094E26761BE5BC035E87202FF49A 46C753234AA224952AAB281CC96CFAF72A0CE40E3CC695EB8BEFCA9BB8C6F187 56774D1F3C78FD81B114FBB1D4FBF4B79D38F941F72BC96E31E44CFC3D6D52D2 220BE7CF0EE946E3255E2C71B2D8D212DEDDC7812F6DFB2BF5F9F226AC995A00 157FFF6020DDD99F8F3F29FE15E243CC58F9BAB538EC6CB8A7610EA72B9847BD DD69B11E66834E6B04B8A343AC30259E60EC2C488CF2C7D574A6C36D6780B565 C0C0E9B0B0968D017BBD8B9233A13E86098D848A3F63374EEE8C40415408547A 343E1B73DBDBE39292C57A299195822A5E02E01BB623BD08A367C278AC7BA96A 93E1E091DDE354195A2563759D50ED599CF9345B6BE1DBCDC45F05EEE45320B0 154694BDB3E258852C31D9B58AD0699E4C13FB248C5DE94498EE4B0E2077DE58 CE4E5A306B1070AC45EB99EB4FC0DF86F1B25CA68AC8D53D81F31B4180C8D812 797E43915AD24A2838ECCA5DF6AA5E8410BA92B24A782C12D8CFACEE478C6C1A F51D861425049E9AADFCB165C950B44D90F11504ECB3B3DE25158CEDAD6D244F C85C28177289C8C69797FC5D8B2B32EC6A15D834303AC60DFCD6913F7FFDA4A3 6EEE6AEF075E4E6C7E072C0275BD2CAA0A60CC415E28C0AC69149F1FCB0CB5D9 226436D1E96FFDA8FA70A0FE24A5E50B190710DAEE2E53A36A48F7C490BDD236 06282D0E31E872E1328AF5DD7145C6E64628D13482C7D8F692B12794F676BE11 3002448AD4288B4401D4A02ED0BD83EB1F6287D9EBA3FD832602DC5027B4CD6A C7DCF4630CAEC7259D4E98BEC60DB1B1552FB923A43060022A60854891EF7B07 D35A8E4D9EC5F4E0E76EEBAB6B95FB110EE99562AC13297D8C00B82ED73E3B97 911337C15E59CD4E616046BAEABD16FB055A2BC8F6F91E5B211CA03C48D05529 5C2B508E4EB8C7B9E1E0CF0975B6C7B00CB566C4C8FAB5877248ACE9DCFEC2A6 7E42BAACBCD48FFB452D8210DB5C74809ECE5C74F27FE401E79D5D00E0DF9E89 46CF75B0410510BF90E170583B13FF4D01D913482C88DE61BFA0F4B62C70CA57 27E74B9F68535B52A4B5BCB6901777C3AEE30D48A31388C9756B3C9782C035AE 2713FE13FACBA233669E1D9F459EA1B6981115C851237ABC768F80DF6F27CF1D 16871307B105EB38FDA3DFE0D8B675E0A08A3116B977718E0AA53F462B778614 6BFDCCF111CA2361B53DF9CCF0B54BE6BB14F34D8CC1EE2C4A28C3C0E4D9B04E BF78EB4478635CFD0C94AD87BD69502538AF9DC2417EC95EDFB9B50B61B23125 8899474F1B8D8B8FCAD10BE7291E296538DF3E17643B4F94E11CC11323A021DE 130671945E5AABF5683C9A4635A6C7729511B545C574BF48CC81AEAB3ED00189 DC81FF599A36F304C461FCA1EB69152D797F74BFBEC13058F553D9C73A002E8C 61E7D42A5E889B307BBB6391F0575B2004BF0A3F1D47CDF15AF9BB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 39 /quoteright put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3 C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055 531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13BA 6CBB27085F3E9FAA6F6AB25CD0F9B879FC87D5F6BC8BC00A44123626DC9CB159 90C6D14B7BCBA095CC2BD04A7126DDD4AC823F4AC3E225DFDD7CA9031023CBEE 603CD1DC2AB701F16FFAC44FAD5A50EC402F70F4C2B403772176979C11032728 BF872DC77347FC43F28CB71E97BC0184963FA54A8E161D9B51EE1B89F32F409E F01F82D09B739A8C31BCB73E5DA40B937286E7E68A2C3CD4C6CB185352361539 C164DB729E9EC9B6AA11AB7BF074D4B78B6A9B633AEE407922AD93149CBADE2C 06CBDCBBA3939F10BEA7C3947D770DA032465003A5310E849F91E16A1F210ACE FBC6C56962D8A40065D910943A34F777007507EBBA4A253711192DF847E39E11 9D02E4CBC741250CFD45E79987C938DC66D765045CD0F3A096D22027D978A092 00F45934BFC4302186D8D2F83C3D39DC4E96FD416FE545275393B96D20D8A87E E2E392E78930F8D5BF6D578F94C29BB63F37FAB33CF265FD59D17B211BCBD1FF CF9DF2A94B948D12BE4DFE1CC80EC59FC159255E766BEBDF0AD13503882D1C79 F700814395936E90F95DF7DD33F18953F28CAD4DEF633EF304022DCB4446DD06 C78B9CA1C261A974A7C653A40C36E87A2B8373FD616055AE55A673B73645143B 7701AF708D2B7AB152B8574708C9B73EC9EAF42924FF68CD2FB4B7D9B2089C51 AEA3EC1E00FBD9D583FFA5A908B00C4151267591555C83FB23FA94A1BA4FCB52 0FF935F7987487EC55CD26698C9833CE0741A259862C87106C0A06733138B4C0 1DE1FC0F9E5E6566CA4CC925AF01ABB6404CEA4C3ADCC57B11C8DEFDDCA89CF3 C36A649E1D0F2545AE70BE10C76E0EB079238FACABA91630FA87E3F6D78D4E56 882A34B6EE73878F8EE25C0FCED45E0D811B3C9AA153F6A9FA44938B564AF698 91B03C5FB808FAAB95F9E7CA00A76FC6886982F003D8578FCBE29C62B496F13D 00D1780C687FC84181CDA85695AA5E95742ABBE53E358D839E6508A97D21749D B08E297336DA251D2415C27B10310458A986C7EDBE95BDB9B8C28A5A1F88F427 047128B8E5BA63EEBEA359D72FC4D1BF61B83A533738405E9B7AB64934B8B59E 8DA1CA48A6592A83B6D802C082E4E0D3EE0DB188BBCCA56B9AEC29C5BECB767F 9FE3045D57945A929B2835F6C5CC0D8BAC88C486F27237FC57DDB7C13297BD9A F29BAAC2216E38252B676698CC22B5D7B4E8E9A1C978B826FD03E8582DB5EE2D 681BAFB87C646E574ADF05B8BC3777114515A7B280EB559729BAFB503DC7CE36 B9E81DE47C5029D98C443E3A81BA6245AA6C28DA12D147FFF22514C348ECCF20 4C0145C2243DC1D01326B908B7D19776EDA7FB76207E9A0D06A52EDD96A0D3DE 222D3CE21FF3A424281D8DB86A63AB1E82260DF983B7C52C7610451968200E79 43EE23A87E5C41A2489FFF6A771BB00A2D1595F81BBB3F743CE2B094ED80B7DC FD58902B6371412301FD623DA09BDAD28842251804138FC9184F00CB0D9EC5AC 723FDF050D3DBBD493A0D47456D001B8E7BE78C4EB02A90BD5D7EF9DC3A37765 108BF9854B9646806A2A68310A60E29FF26BB7CBB24459328662C53A9E0D015B 4D14E4C4FCF67BCC04BB52563D3AE20349C0E1E181EDA4F6D9025CD063B0FA99 3DF811AF7D0A61C666D31DA32897D063036EFBAC33606E9E9F9680BA754019C8 6A98D2571A6B7317B0795A8A69942FD9BE0D7C04352CFB16FA6ED5E1FEA411CE 4460E79DC9D197F0732BD5463B3D6D05E45412E95CD484FC81AC89D9C166B112 8D9853167673D6C297729B0B13D9504FD2C9EEF566D45E3F7319D3FDE5CF6176 C247BAD867F53DD20B470247E3705A0BAD03E94DF66886A27F63E6F887D08A53 1CF214800248981C164519B8A8D03E64F255FE41615ACBB5AC1F068D739C09BB DF9FE151389580FB16229E3BC5CA0B7E9EFAF36C7AD9FF7BE9110E9C8A861FFE 499D7BA6F4A2DDD34F1F6A7AF66D2C3D895838ACF40D16667FB7E2994030A618 9B151E148D4742A3F21F88E584C2ACA7E86D8909969D5C5D552CBB92211FA5FB 69A9EAA2F33F3417BBB0AF2223554D9859565A2CAD026C25773B30868557BE04 914A1761419543885041C56AB0F413BD3AD6DECCC9569A277697D4901A8C9A93 2B1C3CA821AEBAF5D0C7E8E72B26BFC3456EE1DE0DDAD0EF42FEBF15C9857AD6 44554AC865A38DCA9EB6FA5B5B093840A54CC90B45B739FB8B05AAA09B565D13 B501A8A5223EBE73C89A389B193DBE55DB95CE96CD51D0A860D0E289B71F944F 71DF29AAC8D0A9009677905E8A4B6DB5A6BB7E509120AA55ADD3B3D2E913AED9 C1C6B6015F8D2C7C5DC039DD829AEA47BDB14A7F8675EBE1966C41E28D9E3336 7835A0232B179BB9FFCF6B90011F831AEB80DAFA06123D4BB31695B9E391B8D9 B23C7074644741887E8A4ED00733F5EB24F6550BE26C1A2EE5111A541ED1156C 68F30592E2C78CE22DB80FE54DA81A2F4B69DC35F6AF3990B2BC8099CCC92469 9F6043D166C2D03D8287B386DA38EB7CCC41C22CA9CAC8F9043A70E84D0D7364 D24F7F9C3FBFCF8ECE4E8B08D6D77D63B6D4D23488D3774E88848173844F0869 1ED2D7B74A414C205732374045820BC9374278D1486C481CC37D378ADBF9340F 82F0E079F1C791195C5D6ADF9064BF81E69481686F84AA4008DDF85ADE123635 140090E6DC9F76839AAB56281EFC00EA7912F142112FFA4802DC30D511D5A977 82A294E41E6151BE05A9F005B8D56A0C6BABB7257E50BF3586D786E5E9CF6546 5185B339BB0BE9CBB068DB772B8918EDDC092A0519488A2B71F5A4D32EFE8776 99997FD9231847C6F47F83323E884FADD413010CBBC16BE37DDD002D5708E1AE 5F01C45F5DCEA978E9B1E076FC313D6A101898139B648FD50495048A2F37EF94 4F5C20D8A45AB8F3D9F797BB23144EF92AACCDCF5677C0644E951D5EACF95649 3A0B9EAC83F717A38E5C2F60DF5AEABC594E85A49D65BEEBFE2DA5023681588B 978FECC330BF9046937BC8C9BA9195EF84F6C637D1ECE797DA5DF0E4BD324F95 935A9717722AFE62DD13B73C821CBCCCD7B56944E6545958B0907D88C3648122 9891A6897A0D8933EC562B16374796EC8566BCB71A40450289AEF2B8EF5AD017 9E0431E5ABFB8EC640BCEA9A81D5A3AE8174446ABDB0D09E1DE2B6ACF73D8430 8D833AEE382C38548A77DE1D90CF6537744A1F59BCBE4A0AC08FA50EFC57C94A 11624AE99CDEF445AE0495BA1B08FFA1A513F3932E0EE19EBB5033A21C0F261F D9344B7F24FA4C8EBD45DE063A07928211879C423CB9BC346452ADF78CCBF683 48D63837F887A41E11F77DEE799A2F6EEEEE5C21554B7136B38DC0B4E7CCFDF8 E285628090EEC31E5EEA08A559A76ABD746404743F5C990421F61AF6904A3FCF 9E89D2B33979807CEFF3818703475E9A59E9FF0CB9BF68F4F534424DA0DC7109 9D935DE41321FFDB3F4DBA744C2EA5969C47BCB70E14337718811BAFF560B215 C31010D3F856F63CA26EC96EAA4DFC01FCF4F4DC56412937AE42D672112C989B A20DD4995A622BAF47F7BCDEC272DA200BDEEDDF72EF932ED629A58BA9ED6C97 5FF1EF1C3AA558F518F02A4EC22F1B6E2A56746078CCE2696A175408629E9345 F85D2CD34C7971D33A62B8FB6FB7803A99AE599B1DAB25F613A153692250555D 6ABCBF55854110D2C7DF25F0808930B55874966B3C2488A00E9830AE57AA8D10 14714CCF276261C05EAEB0A6FB1F4EA589425CCC78972DE6928124C72E83CF99 EFFECB76431B271EE65AA94E258EBEBAC6145E7CCDA563D58754544BF54D32B9 AB95B5A429135CD7893D4CA99C8E6670FF4732948C3782A37A7B2C720348F883 089D965A4D3CC10E765166EA53720615E6DFDE2CF9376E4B968A87DAEC7BEE8F B893165F8BFE15BB9850ABCD5DF92FF5761C8BC93603775432FB465220CA3EAC E000AE9D4F8ED35CA0199B06FF4BE183CBCAADE8930FD832E8337129E3B554C9 F5021EF6B801F3FF50A73F66832E3920063804C8E61BCEFB7B852E9953308A28 021122E962CD756D26B39F1C492974509BCF44ED4D3D61DAD221D26AF3A37AD8 45C2FA08803E4D775BD57094DD4E72085F770D67262E8C62FF1B956F4FB2D7B3 290E17E6C8371AF1ABF8C759D638F8CA3064552878A583FCDE28352031F2567D CC7AD94DDEAD95CC586DF7C1B2F44C239BAE3F749692BDBCBB952A11DB004584 39D689626A95FA43C12D8E7C41F503D2ADB671C98AC83F84614EAF521563BC50 2D6C029831BB056519FF432CEAEA63876CC639FD49CB4691F794A611590BF0D2 90F116D68B5E8F7A296C6722FBA85D277294B6E066E3F52D8D342A3B0B90E866 1B20ACD02681501F00F4E8A77803AF7185ECFDABFC3F04BBA4C81628E0033450 C4996BEE8736B6B22625E84D68449EDB4F284509458F0AC34265AC1B2610D72B F5C039035AB25F578E808067D25104B1547B1ACA4F9057804418DE05C7981A99 1F312F2601C08F8A9886C6B4713F33A22887C3FE66B85E8DC38E7D3DCBE9FD2E 56A957E2D4A9DFF0A0AC6E36FBE7AE6B7A10E31F4B5939EDF448A245A36B3A10 69406714C7B25A24F35847BB519A12043D3657DFA8C841B29EE521879E4F5A11 F084678585BD5F2B9D1A92CED41EFE393CDD7EA90AFCE578C0427F7496A0A2EB BA427CD7CC17C3289923B5D0B3EFF51577C014D883A02FB112AB5AD6AD280F0D 2AE23513873F9780DE11CD4EA275E4F8F3B396DE355AB1E89EBAA5BEB9AF0235 EB8645AEAA146E55D125D5DDCFDD268AE191E5386622764AD5C6A747487EA0F7 7E46DFCF5DF5C42A758E811EABEFB7A0E981E67A4B499454F54BA10401F11590 1A36F80755B757E6CF5DB05D3A7828DA65A3B349521AF6C68C1F31B6EB9C00F8 7CD1F0ADB81CC01E1FA6CCEECE40B6C13199CFCF6B1E4AFF9D5A2580471B5302 963450333BD9D0C6B1ABA87D416B310D2359D9A036639E849F9B130C12677DAD 3EE0528B937390C702543517DF5A475E680386512CA4C2A1AB3DC2C41F47D6CC 1BF4B866EE2FA1191542FC1B33A83F6B781A64586DD406F228BB8A3FC748854A 79E2681CC111CC0F44CCFD68A80227B361B5AE33F9488706E79C73A8D40E23CE 73991A8AAECDBC99669B490C4B7719EDE7070F64ECB9A6808136CE50B3CA985A CC7339F6CC24C2DD99C6114994681F2E4AB627D9643B56F0BCCE077B55555557 5F0882DBD55C251062065EF1234A1515F3AFE8F08CFBECAD08206A57858AE38E AB516A49880E07C1A262C1AED47D66DF3B565D61E5BB4327BFD785AA8EFA37AD D5D2ADC88053C880D7E6BB42BF3BAAFFED28393761119852377B6947A2F875BD 4CCBC1733CD6BC7F2D795787B516CF2481F27028A8F17C0052207DFE21FD6D89 5D6E0BEF6F64A4879A58317648E0E0F5865360BA778A2C52278A382D608283D1 9C83C7DE5DE9FD757360A21461C6B947BD9EE083987A9CC954D29644F62D8893 622826042EDBC6E9DEF545A2B1FE29F188C65AE0B2C10BE19D53894DA876ED53 9A6A6B4EB5736DF73C4918200B7BA271234BC69DB74E8E9F1E481C760DC0EAF6 7E7F531A6B68E46E51CF7D3DCD962F1B2428880CCD4F8FB75689A6AC7CEDC928 E877CA4E18C2EEB892773047B6749A9500B0F0883240CC99B3D0ED0C0EE5549B 7B2AE093D3BB8CCF5392377C072C183D495053F82663EB06E75FBA0A100372A2 FBF8A431213BAFD7B016880809A118D4637BB5E3F65AABA6B0CC77CF3D3E0C4E 6708A9AEC54B3233150E265FBDF3061C970FD023A167DFCDE26752D1FD202DDE 80A52911DD4BAAD77857FB95DDED70A6F5EB82BF254086E9F72A602AAF3552A8 F62DC394A5A514CEA9FE66E051FD81D4B2097DAB1EA0579C76BEFA6846CBC92F F5BCDFB557B258CA75069EAFB23A42C75704817342255B82A3FE3B4DA7125EB8 7EEEBBB40F8DE6A6D834E4131150E0560FBAC7F2F288AB789C75FEB6014756A1 44565CA166D258631E285AA1B0FAE7CA91C260B5D93574F72D8287F8924781F4 D28FC54D83D220858728DE61FDE88EC1FDDDCA12142C6975E6CED4D18A898197 575814924AE4CA36F3AEB5914A717652344A9524F85D26298510FB8DFF7BF396 2C52BAF9B8240D89D8FE85D3B7C56F85C85ECB2BDD025E59D95FC2B84794BC75 F6D3260173398882EB58E3ED81324F96E56020F9F10A7637290745FE0B75AC33 76C18CF9B7CDCDCF6FF8694F308618C7165C7DB163FD6BA4B62CAAA1B35A2650 A62E0970405CB7CBFF47C6BAF8AB7DFBF9BF7C2D9D65FB55DD8C8B01F5FA4F3B 99CFC645B285A3FC408861BD2281A6A4C1104F862339C2C7A3415FA230E79D55 37185BC0C6EE49703F8942DDEDF2A86EBC251B458247D328EF40B4E30320842B 6E9F18C621BB9DCCBDC4AA58D853149C9892AA75F869450A874444EA10A7990F 0F06F089B1DA1284DBC9823BE3AD26BD5703629BF9A53C1CD85C59DBA7B41961 0D5A67A9FFAB91FCA853D7CB424EF14A93448D34602DB3F78889A6EBF60694B2 1168B5D407BE72FC06D9277F79F22D45062591770DFC35C5F2CEB4280E21715E 442EE369E881B12152014E0B45B0A5258015EABF277178DE1FC3372180554A51 3EFA5D108B77C4FB222A96BEA78D0D380EC8289A4F1FBF4874BDF65F5A849A1E 40AD92AB111D934C508360445094FE327B0ED18F6FA1B7F7CB7F84EE936AB74F C5B238C60BEDE464167B348120AA4043D3256B93215728A38BC058219001ECB3 A3BD45502E6AAF74830FC8DA8D2B6C18D05D2AB83ADAABA6F8EF16120D1FD2B8 511095BA4935384E524DED2A9DD3423274EB1C133B3B026DB694664BA6039911 BAF65C7E75D3DF620C2AC841AD523514CC5540437C0FD5FBEE1DE34ADDE95EBC 23F0F169645684146CA193B3C2AB19E85FC4683E334C7A49BDCF83B7568C58EF FAC7D6C92D7C052863ACA1475F40F668935028323A6C10FF5110D29825B21B09 7DED7FF0DBB0BB5D59A5BADB7CBB5F55B9520167ADC4938BFE15B6B5F62DB44F AA516F645D8B136B5CB7AB403487C4AED6AE1DCAF425988801B246AEC0FB515D 53B4AFDD7079F8F2368FD862BDF1E6BEC48DA5DCD6DDBA53BEAF4A7FC7D84FC6 04D29E618A8D0D6DB812F04788D6FC26167643EFE43A983E1293AE95AD27E928 64F91BC8F2E6BD751230F947019B95A4BE1A80B742E97A1185E9DCA64CDC754A A85C5360B6DB8489AFE2EED9AA1AFBE08222C478AC775B10B4F7BAB4F656F8F1 5C72F73838F8C7E34A77F2022CF60A9CCA9ED2812B6FAFC2BAA6B31F53AD21C3 2584A38F1E13BAF9C5AF0B03E92671FD3D584B34F8569E539C3240482EF35F2D E7EA1A6BA97D13693B4D7B0EBD12E34C01F921F2E9D55714A206F8C800712E0A D8BABB8A69135C94C65BF31BB97904152AB99E166FF11C1B1D8579A60651BE96 8453B152F43403206A3D7D194449D6B384612196D1B76C29411A9CDF96A21400 6A5A39A09D78A6B8E0EDAE1196995F3502A8D6C8B1BE43F5A75942BC33F90AE2 55584E804084B0632076DCCAD43166E16DE2858C2E888A0A106F111AD8AB136A BD1A7ABAC6D2226365CBD59902C2F8732FECDA47781E6C8FD684268D5132452C 760B7D4F278645DA2D3F14EF447D7E09A12C477579A0159F328F44A1D0D31325 488B028A6FDE95DC1AABCCE372DB25DC9CB495D828B9A2665DC4A9D294D4C702 BC058761651D24F814B2144052D9AB969BFDB97ED90570492D91ECB7985577B3 C7D7C1C2ABAA80951CBD820FF15A15FBF238D064950AA33BDF414FD42005D076 B8E6CCC3BCFEF86B0A0C555A655CDF3C068C8FD904A7B65B0B16392573D13E30 87BCB25F89329D8BA21C944539DC097CA4245E534C450952612DA1D727A4531D 437BFB10A3AA4D8E2B2F83C35DB811C66234EBCA3407745BB58EDB8F72DE8D0F 0D93133DD2DC58824C23323F0F0AA1CCBE7CE786E5AC2AF2433F82AB32F27F68 9C61AAD384B4120191290B3ADDE84603F64475E49465D7E8670460E9819F01E0 31F0441F3278C6D5CF491665A809CADCCC73C648189B6C03A15F2DABCC6E1C72 DE7DC666A58739896C0FC90F34EC90535390EFDB3F6A6BDE95BD394F4B773FCE 7DE2B6BA7044D260C0C16CB0044CEBBB4E783E4A9A1F6D70CAF1E3DF9C95EBA2 2A30624D1C6BDEB5779AD35A42B47C87FFFC7D46CED31F5E2F315FC4E0988FF2 8EBC399F01D2208F5BBF5EDCB28F6D0D6E11B3FE263877FD91833DD4AD4C579D 31A569282184C2B42E3D969B9CD6267B3A6F46C00AE2B20D10546F394D26E4E7 050742C09A4B26C5D71280244CDCDE4B4A0B9431CF3501A208554A10B03522D9 D3D8712B9C77E0FB8F3D8FD3E708D5CD8C8AE1BC4B9FF3D3BC037A72CA847AC8 CB497F9E4BABF59A017EAFA92607F42BD96D43C2518671B8D6440A2892AE0422 A735276D059645D60FA288BC951C2909939C014E26C0B87BC80D08C58A355B38 D5502750482CC7914D651B56A5F482C8BCC713CDB8D0D8CBF2F7B212F4B161CA 404027F4B89AC1FE10AD3F18BA749F1464DDD27B9FE44B703C50153CC1BADED2 9E9CE9A72CA5F29A478FB7C8C801F6F829550E19E4EB1DB3BC47D43C8DC895BC B4E99A85D813BE666D8B63D88700F74191AB4B68ED9D4B40A7A737D5B5D88A5B 5158C095F4D4DEECEA2343D556E1B49941467B182CA3361CA5079A32A6C623C9 7B7FC904A04D45AA119CE0CFF598BC8BB67F62FCCFAB5B56219957DE82B1BF0D 0873F367F5E9C9C6545C62F5B0761B0893D231794CD505339F2C264CE54C5970 31A6B6DA46226A56697FE075FA54AF1DED26763BDF577156874835B228AB612E 67FD8C40F155D84F51EBCE5399497ED30FB8B7B42F80E67CFEE53AD0D60D6C82 90298C15312A7702D4362E39EFD16954509605DF52AE0BF7A3B9BBABD617B34F 0543B97FF53225E9FD9108C98971C99A4D82FCE8E0955CBCC6F6D27F4E0BD809 0648AD550E3C87CDDB6DE0332122092D07D0D2CB1EE44D62B430FA480BC7C4E0 86D92284CDBDF8F0E4A129F2986B2419965BF9F70D48A08EC65442FA8952E03A B46E0A1C3BD812278C3C402156512B1B02E08E5F8912030E267E55DB5F9533F9 90137B35FAB777BDB9154524EF737513F0434F366E6780B4F06C2A89AE22587B 0E0E872E42E31F32A976C12A6A165F23C0D95948B64281001B153E2B6B5BF69E C8182FD0629E0C2F3452758DF8DCB78268F436B20674DFD96AAB7C954F35B978 A61FABFB569C0368E7BE1B8808C0A6213723732556D717B998E12FED1298CB8D 9E7A8CC8C324E5F5C4F1F850E9F4D2DABA15B27E56A3DAFB2EC7643F18091AA7 95FEE08DD7C01A7B7ED5F048F641A8B2E034B1EAA8FB1B7D3845616C4DB00AAA 2F9AEA4E0604D3A39F9498E7BF5BA2B571B946E1DC38C362287D541133D11A53 6D90E03A6BD0B798EA9EE8F6BC21A261A62D69EBC42F7D171889529AF1C5CC37 0A273B9E332CE85E102654CDA892B313F6D24EF6C00061A7C70D4C7711BCC26B 0ADDBB43AD659EAA3673945FF0DB71B404B69E8A27CA238E62FF1BBFFF99319A E4237C67E7AC137A7724D0F1461E4E534B29663723E19E3B0B440A9F2460F4D1 1888F22F1E8A8B495FE058E7EF2697B890C3DB04873311CCB1322F08AA1097CF B0831A384362A4947F765EB79D48E9B409E91490522A76F29531F9D911DD7043 71F57CC96F1D8D2569BB93624CEA30A3AC802E45D4620FA659C3B70CC33297C7 5D328C707AEEEF49171207484A025CF5DBDC83E42BF5B97F6768F6C8A6040000 AAC8A03EF13DD69412AFA00DCEA524CCE732A4FDB7E2B7B3B26F41256BC3CCF2 58A0B1DE132F1BF1D988CF1EADF2D6F4B7C62CD4FBA65884873804FDF110449D 0B726946D061DC2A5C5F2861351F67939EC13B1E81C514BA40697C5B0549CC5B 3835B2E015E98FA28A311E02E90179713D7B2995E26416C52773665DB8EF6EBE 0F758E6CAF3639B50C7C39F723DA7FE1EA33EC9830C5D653916C3797A04B9EBB 111E12474CAB4FD7FC486E3E3806ADFFA962AC2249455A7AB79D9CE9CD3D954F 7C38980A38968FF9B81540C7512A55369D7B86360000350CC668264F3E2D07C7 1AEF99DB2113218034A47F9014EDE7F332079B20216E95BF58A294F05FC3F0C9 4EE7078CCC8B84AD02ACD548842B5FC376F7FBB40804F722C7780F11AFDBBED4 C105F1E55B32A3E6429A14B94CF897D34BCEF26B09B610D8E8176011CB553FDC 3A71CF29B2A472186A6720191DF4B16DC2295F0611C483716E2A09AD7AA0472D 14593840F9DAC4C74F727C6143E98D72DFB81C1B551FFE10DFAB6D3ED1F097FC 75B338D70684DC12F6C784DB9DB512FD5360B751E68C79151F8B26103B4EC2D1 32A627EC0D2B464F4FE9F986F51D7E2B71DE9D6CF2B5B6400ECE4846B7989CA9 5BFD174FD740B5E92385CDEDAAD49713AA81020C1A92470E3AD7F177079406E4 E7B557FC561450440F3C12BDBAD81086064A59B992802D7B25C128BC1BF31759 18696CB6E2CDEC230F944653EBDDF91277D1B0BFF8FE18E3C37FBE2AFC10828C 5324FF877ACB47647D083BE7EB937CED9C91A9AA4DEAD1E862961427C763D81D CFC5380BC244E3A5BD99BDD467A3D21CDE0AFF85FCE3202E2E381D2BBD2DD844 473D6D40B5B910E41AF4F9AE45495C866E6ABAF773A82AEEDEF1889C8A518B27 6D65FBD9DF3CEC23FC55FA3E1186F631D8392A8A004C1CF049EF39AFF3C664E1 F2CD3F8AAA3EE3B096B8B75B31EF9C36925C3C5699EFB3B1CFFA2CFD1B0AB8B4 CD04CA0C2A53052430A41C685DB89EF92AF90238D36387BB3F8C16F06C444E2D 38A39C45B7A88AA74738EF3D351002395148E0AEF15AC8B522628A55DDE0BB7F AFD231B6EBCF7380A66A0A0FA7F5B7C0AB731972089294E26BFF54D30982EE0F 33B7BC81E27F51D1BE3F2E0EDD8D31CB676540D3DD8D7F6FF63C1F49120B7066 0834CB22D8496CF6B972A166B9ED4CEB07EC5A5EE4FA108FD945E7DB570164C6 2D523B31D3CFACEF540F7AA5AF44B59C4DA458F84D14405ECCAE61623355732D F85B77BB2D98D13817ABD08BA3A98C3539558236857EFC44B7FCE9FE69045E07 2126E485B59035EC5B6561F769CD3CC4FE3B4E4516FF8288CA325314CB17C2C0 C7B4D7F7CCDE2A2B59EEAF4FAAF7BED8AA4899D78CEE07B01B62EB632E9A6FB5 7B25314759F556AA5208C0EECB5B6D5DFC5B64D03422810591F85C4EC5D9C3E3 10544B83292A833435422A70C6EB7222A9ECB6DB4A68C863571D11B82FE5FCB8 B4524EAABC19957126C1F104E4E8506F6EF11CE8DCD0B705AC9FA2B1A470C06F FE9AC4CBAEADE425EA5AB1A951C947452F0DA2F511C6CB9466696F7AA6C2FB11 66664F6253C3C88A47AFA85577E3C734C110EE1BCB8EB5624247ECF294FBEE18 36A4E242E4E7AEA7AECAB38EA818991CA0CA1866C05512B06132878EFED1CBAC D7A4FB9F82FB46B6C4FC6714F3E315D719BC23D2108B67BCF09F1CA31537B7B5 E0E41ED8F57E4B004F7A700199A409AF7B6279E633794B8673B35A818515EDD3 C4616A6CE47CE7C97374D1002E47250C9358846B8DB6C4094F008754BB1BCC0F EFEA0C01CDF95DBF27B8A95ECD4587F07B40EC52ED0A4349E6A2B1C5F994129B 6FB475E6881C3BF4ACBF07AB3A693E36F1B2362F330B75D01A8CE0E30D93E2B1 A0CA1716DC3427F563B7DC963D6A7454E737887E73746B4845C1AD657548295D AD27A94C7A7B701A91BFFC95E3B8581BDCB117B82EF5F5C705068A181152D80B B4CA334CF5E3855654D5956935085B06D1146F00CEA4AB8938A4BCA820BED728 80C77E2621356A4725A283A1FD1FE6BCBDE4AC31A8FD80B568DDECF7DBFF7F41 1E57679ACE5EA4A1CD56C61F47B5C962D0269333E3D7A77668BD531EBD40F60C 293B33E8BE8F5095D2661D9AFAF63EE73AD4D5DDEF0F4276A8BC50E6A3E839EB C4395BC433E3EADA2B573C4CB7593EE957F6AE2A1D003242430EB65A0727C5C2 223294078948D2A8AF25FE9316344868961991C80779EFF7F8CB4CF0D6A97E9A 00D80BF9D75D50508D358F6796CB863C2BBBF9A2470BF280699C018BD671E00F 279FF9420295FDCDA612CD6FB346BDE7ED3018B2C7D28FABB4F4CED2EF16A8F9 2092CA83CA403538AC88C55D85520559F8368F3A83AC62521F128EBB9814A067 505D300F36954B679FD59B0EC4E50F941936DDD80AD2CB53DF94420F6F599F95 4D63B5D6F298B1462853162A05B355901A46F3B833080E3E901EF564D299AAF9 5E62F6AA3659389DB19B4C3E0B3849BC2EC741441ADB9C9E16409EAC1EC14EBD 6231CF33B2A411A43315A2E778F5F674983961F1B6482F8923F156A479D0ECBD 819DC7E2CED6117E6D94CC34A4E8E375FC69221B2A5DE05B623CD9CCE7A2C04D 056433038E255C4E20EFA5A5FDE6F11865AFB7ECCFF087A5456C8A87086ED81F 3EBCFF83375807C5396D625702FA33B85FEE76D83C8C6D8D7ADAB436848C3453 9414B8B09E0C07D2D1D29CDEA6482251133B3AB52F2E45492FA545817FA629CE 079C453BAC2AC24865F13FCFDB23414BAD9C2D246C32640DB2609164F60CDFA2 1C7A49FE36380A5DA44BFF28C7F0C238FEC4121B1C6D4DDF515BF4541C3A0E9B 1242EFF124A6B90183A4FEDA6EF9902F6D8D8F197963A35698D71D650D931227 36B2726C021AAB73B5FFF727895FB0D3D4C3DCCA018ACCB7B0DA938416606411 BBCD053A4F5CB531D750AEAEADE7345854181949B75E3D11AA11E108EFAA8C54 677F6CD7553725E36105B823CA53F77C74B5EFF320F3413BE41F7B7549C98672 372943D190E94031AB91BE8E9462AA498D8150273846F78C926BADDFE874DBEC 99EDAEC1A866B4DF238E25C5F38A1CA2E477696D7541722A2C9EEF4DD28269F1 24A3A63689E24E967AE2ADD4BCFD83F4E6FB7C7698A7F73119CC9047792504AA 4FF01081550501E3F75D86EE88F6CB100B7178733C357815690E709B9AA8D873 076DF31D144A65641A54BEAE99E2CD6A0FE5CB32018D0A4FBE87CAB54E1EB446 2A22A917B63C3FB773C78A3D360760FA9A81F810893A57700A654D1A9FE60568 F40C50757B2F409D17B189246C7163AC7908E9E4488161CC7521A98FCA75CD47 0F2A5F3E12F1E1FF7DE5346BD9A4269F40DB41029F141E673F1BAB19CAA04E95 D2291478C3FB1D398CD399A52CCBA7349DE5EE6E67F64B36C58C360915B1ECB6 6AC63335A4B9E25200E46646CC11C5D982D622B3268A7059DC0FA2589EC6DA07 BBE39CC6316A09561BF8F0C9114955B3C11D3B51690A3F2039EED957CD9679CA 693CD9D55C5C116E3505912E1B1A11650C663BC0C22873241D89D9CD578207B7 7D422FB0E43DADB16C99EE9470FC82B6D231B37E8F3F8922C1BA858F6E3667C5 876DDBAFF40DAF7A2F77BAA97A5F221F5CAB742222E1F59B43F5464CEC254736 B9A1880CA96C7AA3FFF32462B43034F4F1C3021900DE08040A5CB9D640A666DA 89A86E5D0035496F66A4851110086433C8F10BA8950DAD745F37AF1C5625BEC1 D3917844945C46F5099F037C745EDC43AD929F8E5905352B215C405FDF6F58BA C434E418356A6C85F4847FAE5154A320D2FC5D016FFD2005F844DFB772C1FC6A CCFCA617E5AD59F707515CC1DB2CD00B324BAF020B2912BF44BC00E5587F9ACB 43C66FB02EFF3B8498D26A019869FE4EF11A29478DCED86990FA8969858A464A A204BBCBB113FA0BE1A807D640F7EFFEF00DF9C1C4FF5363D04E9C58B388097C 2AC5F5CFD2B85765C2EF834EF97A8FCFC713B2969ACFD65B2674181B2828EBEC 829610E74FA21060068579FBCC5611AA940FB3BACE7729184C78A91149DCB032 76819D6B62395AD65937802430DA0CEFBD7C44C3AD96389F1F1C0CCDC14E9375 55A077E8DD3E430170C638222811C77049499D5CAF06DB733EAF9F802D7E8F70 510E5605E34D913559E848E31659536C746D375CF3AA1456C9876BA69C9FAB04 E870F60B12DA109854BC67EA65756169E08ED7DA70E45F869B8B68D84EAA8351 D93ECFF54B9B8F6CE28F5CF81CBCFA1BB8FD1F0384AD081F54AF635B118E046D FC0B5CB21E4A52327C4C1F04C05B39416DD86033AB65BE1287B609FFC25A40C4 91C1B8D627D8CDCF3FE1A38326D4919BD297A704C28204EF498F367C3F727408 F86D2892EBDAEB216737AEC81081E3CB833647E80C161F6621BD935033AFC249 66570786BC960EA56E961443364DD3FEA404590D2A4703008F92F85C32D0D297 17090C264758D2F8E0D81A394DCB4B9EBEC9F6CB27843C62453A5D45FC54ACD6 411905D55247D02D8343FB00A646F2899F765BDF77B841093305736A3317A8F5 6A3CC7409884F052D1DB428682A0642094F04B048C100627A93AB882D300C07F 23A0A4A4AFD280B0AD1D4D833DE44BC3043B700D05E0F25CDE92264D6A1879BC C36F08A4BCF527AA8F21AFCECBA6F9399A311706ABC61BA1292763A24CC66F08 28B092FF4C127928F74126A18BBC64E4E50CF6787769EECBFB57494D2E36BD75 E3EAE1B1D6B139F5FB595C2D26480271A028623B6007F3BDDD495AF6CCEE20BB 1E08AF3CAB06F26B2F26264351A31C2BF89EFD34BE5A3E9DC938B3972DF9618B 254902F46CE12A454FAC3BDDE17CF473CD1EBDF0DC60A5D4C3C5629CE9608B1F 2024A4AC0EC79A23BCBEAAFFFEB795A4BD55F00265DA873CE440888C3B579CA7 EB09076FCE277867EBD5E55C65D8674F752BEBBDB2CC4B9BBD54BF37AB0EB49A 40A7B80DBD7E45493D43B7D488EAFE37AF3126CA350488A68AD3714B9163EF1C 2B5B3F90981E65DF81B5DE98B4A4D6F249E5CF702ED94CF1544FDBE533F65324 58F76FC4528AF7ED1896EAE4D9CBFAF11B8090BE9225B7AE981FE644B4147D92 76F7119DDC57E2DD6800E4E3A0B210636472F5845AF5076165A836B5F2AF2838 5A5F692E8D23508FF36CA6749043ACB01A17AC7B7F090E546FF035DE93FB4B35 42A023F838FF629B822CAF87CDD5073A7916840139F8B4BCC1A58A765CF66DDE 0FC7A955D67968693F6B03B4CA47DA771F227761E82693338A9E668DEF41E0CA 8C68E487F433214D94652A54F9C43FD8234283C1764C90BE3584D686A7677308 AD04F62FB55D18608C777E721F2A85AFF0A0B7876EAE58F35D9AFB2D03B74D06 4B04E4E44A2C5ED3B4789F85D3FF06C01FB18560F77FA579185B430FC6A7BA6F AC76B16D19679C38BF42AEF1E8BA875F5115809F74F331FB900AA460031AB326 9324A565451A8FCED5B863561163F4EC71F5C360B84A0077D40D926DE6007720 5464FFAFE4486C96B383121403BE7ABA07604609110A321F250309424F8DE39D AC0FCDCC230C34812CAAFEE9C68F813331964F94F75D37633AD6A50E9EDDB81C F20DEF83003F8C9080BD3DCBA824FF9889300D4B8496D2C8AB77D4B8AE7CCA03 9261E2ECA1ED89614DB184947F6FCDF17D4F5E8A9BC8D930FD8D702257F8DB0D 7F38A1261DEF541F98A297E5458317DC83A58AB43C2F4FBCFE08AF57FF03FBB4 711972348E600D401009CEF42431726A37510BA403F924FA9C9B5491214797F7 DC6816F682A4083A1FF10EE003252ABF99486BE81AD39E5A1E3F76D52B746359 4756A9BAA2874931E78CA1E58B5F8653772FEE0FE8688C06444B141C71FEC6A6 9293E5B4AB5EFAEAF3F6029CB601A84B51C0D726C4274672CCF34CC348C49985 A776BF41B38E417FDEF51CAF027342571D8940962BD9F777C755D236195E425E A9D63C064A8F59FD97F1DFDC78ABC36133EE3E7FF34FEB909C9533D6FC2B53E6 EC691B6295615CDF78B2E2A1AA1CAE5D8C0C74180F8150FE3D782A57CF024B5D 161061287ADFF14DBB4853462313299D6E3075CF6418CD65C3C6C41C4E14042C 20E611A928C439249D8C962A16BC560E9251B569D688D82C13EF1C8C011ED21A 832AF4EB865F4EA8142B91EC805EDC9A7A369CF49068B51910174F7CF4BFEA6B 34F61495910052B8CE6AC537AC34DA01C30979C80BB6588ED2EEE48209C876F8 B956FC013DEE1F51D197A89B84EE4C8896CED53BD0507AD5871AE18B8F91F670 FA1B9E1C7F994D6ACF0309B286CB2C5F040DD6D205F19509352E268699FDCC8F C4B302C890B7A3173F3A0E1840A5AC04F1548322E9E9B62A4EB520BE618A4052 9638AA5DF0C15ECA2BA79B402C72A502C896E4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMB10 %!PS-AdobeFont-1.0: CMB10 003.002 %%Title: CMB10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMB10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMB10 known{/CMB10 findfont dup/UniqueID known{dup /UniqueID get 5000761 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMB10 def /FontBBox {-62 -250 1011 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMB10.) readonly def /FullName (CMB10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 47 /slash put dup 49 /one put dup 65 /A put dup 68 /D put dup 69 /E put dup 70 /F put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 88 /X put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D432E1428FB6D5BDAF 3F02C975AA4E0072BE5F8CC7D3D59BA3FD04709FC9E52189F55C7747056EDBF5 F85CCBDB1DDE9F9163AC7158EE8DBFBE8D94A46510118ECE6A280C4872F448F2 E6A6B36AE3224FA448DAF204D1C998D010C6BF52DDCC45831DF1EC22528B00C7 70525CAC9F6BAD892E7D5C81295A2AEFA8A5E4B6BA2C4EF61FD3FECFA2A8551B DC84DAC597222341E762620D3D3C1A4AFF2F6D68C4813004318FDBBDE23AE224 617F7BC1F3846943E915624D6BBFC555E2EDD013F190492F03CB64E5F2403723 7A2D4652BFFAD1FAA1DBA4538F2C3E608367BF95E09B853A2BBF9930D9B3BE46 0BFBEF05DA75DF3D8E11A09D472A9E45C626428A1A599C111ADDEC7A4E70407A 014F792395A2A12303EF51698D487854EA15000AB08BCCA8B2E35A5018F5460C 9B223315D7B838BFEB224E8D1DC9A0C1077DA31F5FCE0D9D499EB0507B90E9A0 1F92FB5FBB8D40568C1E8B8CD6E1DD27CAE6E107AEAC5696CFEB19091B40FD77 7A4B4F0F261702BFF5E2320C62EB5C6E9DDE142E9FC7DEAB99D90297AE0F15A7 04C0E3B39FBC85CB6B92BDA7917698230B5374D9159807ED1D07947D95802693 A856C84812ABD3EBA336B88CC8F37288CAB59790B0882A4ED6815FF6D7A1BB35 5C7B7437D2ED76E806813478007886ED1009A1E73CCE210FFA69A20D6E05A713 F6EFAB133D146B0EBD547CD29FFE7870973C1E71854C1C643BADC69974BE360A 4CF84FAB098EA3DCD2DD8B2FAAD19429B0ACC7C312B03E6446F1C1D51E6AB45F 72F11FFA078DF3196EA970B24B1BE607571795A2FDC2EE7194E9422C483799EE 23E16A737951BB935EE2C2BF008B6190E0138D551E75C9E6D0EA48E64E9750C4 BAAE32B894BE25D092CFAE894230430E43C585D0F06636C8D56BB80A4597A0AA 547FBCF12821C20F0E62369E1A9CD2343B8A8647B2FBB1F4C86CAB1F7A14669B 69DC857F9BC7538A864E523C2DF7C830315E0907CB17C8FB6E412A2A9E88317C 0026A6A402B36BDC433015AEBAD775835E5ADB4EE75FD8CA06C199E000CEDF93 00692F29C5394DEE45DFF2D42872B1370C8D4A14E144FF36163C849F9339AB97 EA87BD445733162A34E609BA1E92DC92F9AC892E7A0B39AB0FFE517856491695 56155FF0C2B231EF1314CD4A146EDB1CA9AF7DD546CACDE1E6B49BF0D4ACBC09 55C85E2D38DF84E0B779642F7E9C26CE19EDBF328104B9E803D1B03F3FC24C4C 9EF0D27C8E5AFA420A63981C000A0C1F0B3D3F853FF300EEC524C586376AF998 DF4ED5AA16D8E298C159C2A3E33048D4EF192A11287F69B11BE24D49A033B334 83CB8783383F92EFB9E3BE84CEF37796BA4211E534B0360970B9C57EA7CB54FB F582789A83113ADD2415B3F84AC4ECA15DC70878A32559198DAE67B083B0EE6D 68A92511FA8FD6BA88A42769E3FBBBBDFDAD61F99A6C274B48CB044D16FD5953 44F1503D8D1D6DBAC41C1246A71EBCEE5B1F0DCE3EE7E3A99792DD8FFBD94DD4 3A5ED347A62D301B6739AD2BCCC7C57378C29FA5A83759E7AC6F1505DF6C0E16 71587914F698608AD93ABEC43611DE709ABC3F1C0A1343CBED5F09DDB4FACE0A 8BBA9DE5B85FE9B4365358DFE877BBFD9AF08BC60BAD7C41433BBDBA17EA9A7B 92F76358612FE44F43A85588DAACCF7846ECF5C58B22F18120F895317609AFA1 06E88CA1D73C4CD5098CF44093207C31F46977B6D22665AACAD5A169906640F6 3DFFEB3937BD6CE1501C52783743F8F6110DF43ECF512D49A55379432CAB1C33 7C38B7A38DDB91F0683A052378CBED8BDE4E6DC32FFF6D723A4D1469D32AEDA9 FBF89B9604656DD0D44ADFAC39BA893808676E1E08444CE56F6CAFF3E93D8D41 F164049193BA11AF94B43515BC79D6A538C00B08FB518EB67C27E73380A651DC 4B244E8A2E4ED405EA5C7EEDDB09D44C458A883C839B98D9D6A2209516E0310C AD777536190ED06F47EB2ED61C53A2E0AD0CA4E4035324DE75F272B1CA6BC1FB B912807B7331D932DADA30F1975A1C9A8B55604EEE8A0CB514C6CAEECAF9C46B 5D5563E8934B421EA1CCE3B96412D78DBEEABA59FC603CC6ECF65BDB5B66EAF9 14B852CC04286EBEDD560713090BC417A10BB834944E007F45B61AD6E6150B9C 10A6FBA56C1B45EA5F9A5379B1A0788513DD4100B82BD61D89E6841A26B362B1 D4762EAF4FF3BEABD882700BE9832115405728C5292BE942F871661EB0E6B29D 430CB271A090B6F5399184F21ED6728171B1783C982E61DB7C0BF90CBC1482CE C6982B4F0AA39076B64CCA5A71BE73CA65F2CB60B89AFACA957EF8E6429F2182 CA36220F80EEC5D01AD7061DF45CC5109D9F0B7E2B6DB9D6C6326A45DC6C05D1 E81B636A82592D99C7B7ADA0E958A0D7570BFF1830017A6241AD62C53D4CB36C 583672FBA265142DCE545F4855CA3D9E528143AAC66EBC9527B76EE43B4F4E2B B209BD265D6AEF18D168CA7BA2CEC40DF86FF352029597A5A3B2941D467DF229 50C788D4276C5B400F360AB596E35983262A215047C9714912B2E69CABC0DBDF BF6925E19EDF3A6638CF5794722C8B92C6DCF5853DF288B9DA52A2152F98227C FC04D3C318E7D942E9D33582A490888F0C1CC1A8C4474091B4956222DE467632 33CF5DB7DA165B59A648AC6945687B0ADB83EF5B286CC469B2C9E4AE92ACAE8E 86E4C62A092B8F6C05EB2ED346DAA7C573A03760ADB3CD55B6C794FF4463BAC4 2F4A738F9C4237107C503A7EBF4F4BB4380DBB64F5F5C9B268111752FD2204CF F25085683D071FB4149A64426859D407936A3D1E2C627652C126D8F9264E2919 960ACB9DD61BDF973492CDB1FD20EA81E06BECF5E164A8ABAC12926DE1CBC0FC 6693737B4875F465B5623C899FE129B3A52A2BDF104F8B8429890AC870580C7D B078A9E26C322D1A8AC1C6B2BF340813D989EE8D054882B965905D33EC3F4278 DC41BE055E0E5F73B5A1F45E9E69718F5E155B4EA30B28BD28C52C6C322F2E84 674CE600D699CEE1D2CFB7212BD8168B45824890273A0AAE4757D112980DF2DC C3026300B4BBC9B081817AC7F4D48B309E66CC7455708C772A08EF6FAC829363 E27AEBC3E7D0A91984C05935B16E102E81D6AAAC347E38EBA40125543263BCA6 9C6F4AD6BF8C3A90279FCA4A99D9290C3B8E0DEBB4B2DF932F66FD47AAC3094B 7582FF8265CFF8BBC7F79C8C74B1FF94B26F3817A39B5FFC6BB562BF6DBF9CEC 31CC3BE4D7E431D41D55D96C4F020486F993781828E9E8850192F9F6BA350AAA 5E292210B0EFA4061EC8BD6EE15E3FAA4AB2F54110D17D29BA32C0D28559FF32 D164DCC98EAC78822D6D6AC6F4871D47290A11C83670374F072A9DC723096C89 EA584D43BBB13584D9B8B1820C415DA2E0DCA1B50655E81B47B9AC8343DD8FAF 95F4771ABF81361EBFA9259EE8901F31C21E95DD22FE04BDB77D23DA561FFCE5 A7708647AAF65FBA2FD95E843D839E5734D4C08A215180C7244924E002A965D8 AB29470A1B86065B4133A9A6EBA05EF1AC67DFB5ED8DD8C11450233D2624EFEF 3E6D3DCA7E23ADF174BC83AF25A1D7529E52D39C27DA86A2DF4BE4F8A96361CE 7025BC1954C75A765ABC95B4AFE0AF5474653E6808F85893BE6ECA1A37F8B666 05A9E9FBAADB0DD86848D6FC48A1000FAB396F756513798E09D29ED6DBCC8466 40181BB71C92CAAF8E240E16304DB9F4B0FB6880004A0F9AF6228E60646647D1 669577DA709B4FDB8721B95B07B4599652A303FFCEBF858A41F08BF3B83EBD31 74EFA947A8ABFC7467D6CC544B655A7BD4B6A4F5EA9BF11CFC9CDCE14FEEDEC5 9116A3FEF962932F8B105BC4C51744916E8976815AC286B1E682D83091E9C533 839223A68B9D977C41107F597E05C3D8C1C3E79542A990B0E8E22F34BBDD8E47 B6C2CAF54B72E8F0E8A41DB343934FD2C33B6D77AF2E9061C4E76BF258CFD615 30AEAECE9D04569D358541C346C922A01D017BCE85D4F083AA9B6939D85EEF29 335D1BDCC9E6D5F7F58EC2BA2D8CE50CCB38AE6A2DE2F695B76831F8F591BEC4 EC6391563D18E4169151F552B5E1601B1DDA6F93E5C8B5F4FE63F5E002AA3C15 E0C8DE2C735EE00E9A2A01530FF37B7FEB0FB182A4E381CF1BBC80D743209814 F99002980CEBCBE3E677005766CE1D0AF4DCC9F103499D1961771FFBF01B833F 1701EF6EB1A381A287F73E519C01084241335905661B2E8B86B398C88F39BBC5 09FACC1344E15CC7685708BCB3F43EAD4E24A84AA0687FCE0A2178D9BA84EBB9 68E8A727DAF9A0B28A7CA3B119798603F9BBC6728C5A6B4BFC84C95DC4F36839 C2649E364CEA39A4EDBBA4C0E27C61648D38CA46B64E8CE797CA3464C80214EE 28A1E58B387AE0A663A39F04F57899ED62FB0E542EA108AC32490B4B2BC068F6 2087BE9C9C3CBFDD80F2E632BC4C971A79A0A3C3A5607B997223A9F6373EE51F C58EBEE7756A391C91758A1F6567F532A5EB762A2927F57CF9F0E845E4F66B3D 8100D1795B706FD32944CEF24A054650EC911A54A22F4F35E3034AC70F07C98B 8DD43BE9F7D68C50D6449791F5331A189706D9CD18417348B9F296D8D01368E3 2523FCC0EF33B998FE925B4CC7BE329B32D6AF791BFFACB60E4874412C8C8676 34914A453A592C7614AEE5001DF3E5E8D9335A155C65174B940E1AE61ACBCBD8 A41D7E1C6FC0680E094ECF65C60CE714E6EB2A1897D8A3F39FF58D64EF7E9A41 4CD8E55BE32CE8CA29239A9BE3FD6B1DD5CA5A035AB1FE57CAFACB8A39B6A877 C853BE6BAAEF5714982FBFA414EC128B61326B60D83076E690FDCBE3D2AD256B FA7A15B804402826684AAD933E94853CD0CDEA3CCA7DC833E486F431EC4764DB F3FB244DB99FA0CA2FA14DFA75A326385B3AF92AF8E4C6D437DC3DCC07FAF25B 6C0F270333ED377B08E498BC3004C25C7A991DAC9A3E0D1FC43E2EB6996C7269 7A864CEF35FE312DD8F87E37AC69490299CEF9B059EC7E7492D1D6E5640E0AC6 35B97F7A629B6B7CDF3BF86D2B518EA807B03E4F79DEA59C84D98E4C94102EE3 71A29649ED75F5ED02EFEED8064E2D54E8F9CA0C4284B987B81B7F41FD7DCAC4 FB9C3ED70774F9FD09F3321CE1D0319C1129F5868DABBD183045984748C8A3E4 53E085818729A1353B13C78E63E837DE483E9E2ABFDAD16534420BE4D7976D35 F56B86EEB90F663E9778A6E0CD698E6324EC2D19901972B74EDAB8F4073E4F37 89082F08735E8345BA167B2B76C77703C586CA5DAF41C0DD0E231184DECD8A9C DE8FD239B6CC636507A5BE6EE5283C06A1D8D59E98A31AA76F4D358DBC641DE2 ECE3D9F2D262FE2E878E909A950A7642A3F59995519D541B96D459F24F12682A 9AE61FC08CF436D9DF060DAAA90884A1281B370A2F824704B5347FEC65E14E7E 3D212E29723427BBB12C1CB91B28CA47D6FA8259A875EDAE4B49C33B2F73938A 784C1E7A7F21873CAD55A868A1451B070A3F259A983293289B131E07C903D7A6 3CC66CEF8C4D2B6736282896A2683EEB944B67240CAC5FBD8A1392A875245A9E 2611B511909A041846063E465473D41958104E92519C0F86706AD640FC6CEA10 620C9718C4589D9D562D8810CF6F461B776D5A1B040F8272D43C029C2A695D2E 86CF508C4AB11104E575E13C2EF56914E241279BE0558CD3D59D25BF13CE8212 3D7AD1F25FA5A9155AA06306C7CD0F49E3498856318B0ADF279731E1769839EF 98657EE73CF07B0585EECB67F5FF609E0E3DA1B78F6A8FBE2F2E0C051237AB4B 1587DD72BBFD962E865EAE0CAF1A5C592F5019C7533BAF297C0F78F3287838D6 CEBFC8B5969486A5134DA76B4961C8056E1EF1F2AD17F19D7998175D66B3149A 2CF21CCABA281EA0345EF50C1EBE7004ED495C6D03963B639A66638A43C049C6 DCD311B5F86EBC814BE42D432EEC87B861FCBA9C8729FA5AE87E20C5B30B8E5A BB41189A42B9853CA408BA01A559CAB722AAC3DA28E70AD79E1BBC8B6FCC937C 180B5C2E20B03D3FBAC60C83F765CDCDB3146FE5C0B02911F6E120D63EDFB0B0 86CCF83C2AB62922450206D3701588B54A8B232126BE120432E6BB2E25C50B13 708D742A44E20176C54FF89F4589B10D5396C94625AEA1914AC168899FE7AE9A 7D90DA67A5EF3DDA25CCBB18DBAC3AF4AB889528A381542185821B96CCFB4302 987611DD5B5B8514FDD7F5148D1BAC9C34567F75EDAB317E0B8A7A76604A42F3 1D46332C4791006DD1AB657308CDBBC7314592707EB163326E345C2C5EA05B33 01FEA5B7A346E6B1B6EF58B692150C6116B149B6A26B493674337A9C1CB4F42B A7A80AC587F9BBD7A487F407EBBF9978840A01B5E7E772DF7EF28481E7AD14F2 424816AAA958320A0E6F318C757A474F7B05AC0F570094372CDE877B479AE3F4 90C257A2B3F443DE43D8A58594BE8D4B5C7E5E075ACFB1AFAD4C06415266E168 FB38C1CA256287953EDAB1D40537A3633CB52FECF3D35BEB8C2C6CBEECB54BBA CD6E043EEF68A21D7639FAB8D1006B1119CF92350D9773502F7554B4B3036EA3 D747596506FC674DC01ADEA9B45ADC43B9E6947235E9BA30FF462252038D91D1 D908E9132A946FD03B86A08885AC44CEE72F0E27AA63A901F2DCCB86D87702D9 A66F35F06D6640115B075B0260FB116E24E795E24DAE988CD48A95FFD3116E92 63D02221D272531186E2AAB74496FB78A4064C9C9772608C49D46E40FE28088E B5109171E7AF69599BD8BC1186C196EB11FB4132F5C9FC1395220392E17B66E2 32215E54E9483196341D6DC691FCCEFBD00DFF4C095FA8AB36A374BD5E1F5082 730A698AAB7B57A5399196ABCF7B7963E2970CCAC5E9A5EC552CDBE1E2EE1968 B81CF5BDDFF9D385C9C1FFD726A0C52A4CB0C8121E77AEA16157C1EDCD1AEFF5 5607E8F5C44072DC54332B95AF28417E2D45B4685F270821EB6C455AC147F938 50CC9F7F2006D933D0664AADBF5D7E3E6DAD57527AB59DDD13BCA392B059FAD2 E7833AD00F62EB89CD7BECA9DD479F7CD7C981859EF43CBB1EC1681081B58A39 2CEC9FEC039082771E1BF48968431F72817C8156D0D6B65DD33D472BCC49496D 1F5FB1796892C6A45BCC65BECF41D8604B811824739647D87A7B28FDB3574478 9807DA2557F411E0BA7479F31B9E3BBE6F3CAAA653883A9D2BEF2073F47F057A CFD20BE1371F17F5B6F0A9520F2EFCC3C04A24EC272C43E1F587ACDAFEAD7076 6139D04FD9A50F67301D7765109C76D6270D2DECC94017A877EF386AC7F625C0 ABCA9A6D15D71AF7A5889403DDB83EDE87EF5A69EEA97995CC1601160B296750 32AD8D65A456F5471AD4536F1AF41A4D370203F897686CAE7C89577D3A843E90 9C08CF3E3D489625256DA5E0984BF971E0D8D251AE5B09C17883CE07750051DF 770B920AABB2E80A4944EF613891B4EC3F9E214339AEDFDD5DD15240933DC82C D878BCB743ACBB562A41BBD86191E1129718826681FD12981D4159C7432DC3D9 AD4C6C478EEEA0A34030BDD0B9122E8AE5F0B473AC5A48346D56C2DE42815D19 FE378D252960D3F56654B31C58CBBBE0D634FF6EB81295809AF12222C58345C0 4595590B2DAEF5F3CCACE8AD4CE8585DF4099665B05B32FC49160ED307573D18 6C4D88C07CCD1BD4A0179BDDE6524D8CC9A70318578646EE6F4DE040C56C90C3 C5C5827A77DB584E95F55F083D07AF133B31DB611D1831D93180F66A13E86AAD 573C57B42DA521764563F69E7D4E26057622C17A135716EBB2552F644065C733 451295216950B589D09E00FE06779D50AA82A4653649B7CDCA11A1FF27AFA7FF 189A798A6DD355CE23F77BF90DD88672ED1AE3C262A2071CD9E6E8710E44EA18 8EAF3FC2FD7A203792FD5A925E03F5FDF5FC3C0D975724B9C0EB5891CFFFAAF7 AC4180C714BFB1BC100B055AEC13D255FDD48CDE21EFBBE6A2A5CCC75DEAEB75 CA1B5C649CF209DAF2ED786DC4D0E02F1AEFAA8A7B2B96971E35DE1AEB60A508 1ED443E0F90CC36D65011B11A30905D41DE632E4E2ECEB0193067098E1C05272 1DDB3CEE3AD374DC008C531099DC3E94BD8BEAFCEB069D1FA5B70BFA2F88B093 D6A5D0312C807645285FC1E08BDCC97443C9ED9C0E667DE1D900F22956C56FF3 DA935E025B2C81F7C4836ABCC018298C87B403EDB6BED266D27281EBA9CB145A F2365A08C9B642C0CF1F29CA49FD3C550F405757755FC1E41A6528F216DFDED9 A52431F6D58784934158C9586279A28173D35DB63598A977F04C81F95739CAC9 E26DB81FAE3E5EE64C8D83CCFFBC80AAA96F4CC7A4617F4F3629826E4E780131 EC636FFC30913FE74C1352AB6617A42E60DB1460854F82AD4872A8CBE712E035 F641C446F44EECFF09EE2FA45022EDC1FC5B50ED04E1C7FC9F0FC323F6EDCAFC ED1BE81F5646C2199FFA3572F6077586C13A6DDB423B0F2C514640A45CFD9A76 4D9D4D2C02AA87557CE23988C051076CAC955F494E2633730A93C513E2C243EE 51149761904E56C80F409F45C696B132AD08F057BFBD21AF57534A1CE033A421 4DE7E71EDA7D68D8624DFDBB3875899D63E04B12FA7816BA0F012A7777902A27 D862383CA459F1FD82D1ADDD7DFAA127C7B8493146378BFF8B885F61F4FA5387 88D9129CF095F41BBDB1204A49752003C00AE62F68B3B31EBB7DF722E2774828 7874E7DB59F07D5ADDB84C77DE9DCE6B06360602C865CD7405A50D664AB1ED8A ED337C6FA21854F9ADA0396544F60C2FB0CE9A517C46B76E723E9C76F02D4C98 66B95D6D2DFDF83E969C99AADF62D2EF48D0519E5D0558E8C4192A8DCE347CBB CB200A86D65991F7D0CF6F864010B249050CA2D4E4365C903C88E0921796CB47 335532658561C8EDEC9CA2C700D3BC30397AFA97A623144DAAD773208AC8E510 ABBEBF275314D757642E649F7B151D6A81699087832DFBF465EA830724545FA1 6FCF2D7947DD5B3E8C3DDA914FA772DB76EBDD3B6D382AA4D8A6C464E2201B08 9F2CB61A4A71F0F12067BB59502DFBC8AE1CEF2B8B1D34C897ABBC844E137474 5459BE1DA6F7480290E9FBA72392FA0E53EB5E6F3744195FB3377B63BFC65571 ADDD8A2A637D9CB1748989E5817C64EE493513ED9C2FDC2C9AD6DF7CC5310A42 C18C52D9650C0D8D99FC075C603E6097C018D3095C7BFFBFF887F16C7E26929E 29E4666C365614DC1B15DF0E55F69E50253304AFD4680FE13308F3C2ED31032D CE85915B785D32331F2185561392E05D8D82C353C175D08ED655D5F8C91AED48 1D3FA29B837D378B69160780909E65B41BA738BCDABF008B858487F0C368D372 A6EC00457BBF1CAF592841DA495023D4AC78B893B2F96BEB0FEFDEFE5BF2E602 BAB648DE1C516CABB00D32492483C78CAA0F60A88DBF84C09047E63C5C75318C E1D1825824FC437ECAD91F286FDAB55FBD50E533C9BF277D9B33118669533D69 E47E5A086D74DB3C2185D57B7F6EF65DA45B15EB3E96261B68F9ADA335E74A72 B5EDAEF52D47544648B7D57378F0C2730EEA17AA0B28327D88987D09432287A8 C5EB25043A1832F1DF04F3D07DB6672A406803DA9D68AF036F22FB6EC4054D93 4346A886A92843C2CA899A33A4397156839E10B3B38FC8A915B542BCEEFCF39C 61F46FC44BBDFD6EEA8F9FA2772755524901987D6CF7091BF15239AC4E997218 44CF9486C82C01715CD4E071F167A87C7A15058F9C35FC4DD382BA338DF80598 1EBB1F0E4658670483FC08428181331443D108998FC4781F13667E8C3C27D3F3 B318C5D814D8E5A6567046F43612AE3EF09A9784082CED2A5C3403DDAC8FFAEF 83D3B556BD0530C8A76E85F59E1C83367420B856352AA324FCDD160A38B7E0D2 B631DD012EB6B0B3935F3C87C379101CD796ABC655763DE8CC2AC3B0D4D06A2E 3BB69FA87174D0CBC20BFA3AF489ED8AB88863CED659233D2CDDFCC671AB9BD0 FE252680E61829E133DAF008B225478385B9E173848D3C9D565F831AACE8B31E 2CB06D5DB1DCA219073C73E267FED95487C9E7541673D3CE2667BD000C1F8359 A11D1ED3CC577F16E2AC1FB86A0A3107C1F25031ECB8C79A5DF9520D5FD4FA59 7B637B86EAF3B8AFB98F06702EE6C2E0DE5415B533F5A39D7B7ABC579AA2AB3A D123A05A8684E1DAA4CE6EF4997CAD8D3C8F5FEC5C4CB7CFC9954C96189860D1 B5107AEB499AEC47555A80ED9D9B92E0246483A595F90F2BE6C6C1B18A31257C FDEC0A9BC865F35E777EC46B4F8795DA0271E0A95357A269D65053BB6180338D 9B5F332EB3416CE36B965396AE3C9DF375B7FB80596A2E941F10FEABD09BC282 14DE7C58D787EC5588DA767532FC7E2FB3CC3DAA20BA35C187C1E048E37A61E7 9C18C24691A24560C2310B593678AF3E97F188C271326F86906B7C319A0EA51C 9CE898F79B43C113B4AA4B7CD6552EA4BE6B036709A23DF57849F80581E7BA56 124B9847158591FE0CB063C7B5FCD323E8107F83FC61749DA96237E81980C18A DB2AE89BFC7DADA0D6850D9F139023FDE45F18E1CEEBA94E0250C64EEE84A5AA C978EB0DEBDB246E233A8D4665866D8F7F69823BAC1B0B676ED69E1A67EF315D 7D2F402DF47550DA0391AD7F8DD33A6FFB8F56D6F7026A2DB3AE947DABD1299C 1CA99446C0A926B42CA13758484841EBF77A8217D6619A76830D12B960BF2507 DC16819DAA9F228413E2780F35C385B1893C73D10B199731563824B8CA8FD476 C495AF18D64A997CF7C8ACB3D3D5D9684938B961CBFFC8AD564D2F1E7022C153 028893199CAC15110E9BA953BBDB273C44162F53FBDF24FC9AB7E527F1FCFE4D 68896F7A51570B6A6C5FE5B0145DDDC134B22621C0288098356DCF2250EBC783 D8B138B551711B01046FD120212B277A82852705DFC40EDB2A8C6CCED10291C0 32C5E5F1CF034EAD4B0FF3779D39D33BEC4D348916B595E8C4F27C2968691C8D 35192D85D915A1BE1ADF21CD395ACEBAD54D462000A39613A9C501F42F9537E1 6684F530BC8EE33B2FCB6BBA28722218B3A9B414DC4471B3F12B1E3B3FFB4A18 EA802F8A02A8F8422EC50181087190A8F9159C2340E0CBA8E20DC7EA1E73F692 253B19901259D372AE42BF06FB98F6038E8E3B9189C3889C6E0EEF24E3AC2088 ED5D37F3F1DE0397848FC9DE0A938884CF039666AE011DF303465F6A99B9601D 365B3CD683791A38638E996E58FFB200BF4C6465559ACF4289DCD3B4E05E47D0 ACBD2578CAFCD5D4D238F38CD4F2228E4448389B5F437A72C8C43983524B3719 4D7DCAE5CB1465A5EA990C8D00B40E175B33B0E9A2A93BE5333362A27BC28846 AEB17F59FEBADEBC3E9AD591E5E0AFD3FCD7C3F64123FA6245861CA0166D88F0 754C89F90293123E9895361766610F3ADBAFF053B0A12321458ED6D8A4FB3CE5 8D9D219BB19DEF46BEB2E1E996B06F787DE114A99757856537C06F75BAB0EC02 1903707A0C15C1072AEFB34401F2AB2720D8D20F5695195DB5AA6D016656E5C8 CF52EC196EFBCAD24797098FC86A0A26F4B3B50B38F50C079E2BEDC43109B32C 180C0FDAF549E2172CDEF0A237B3C3BB85847C259908DBEF9E949EA23BB5EF04 726ABA6B6A86788D0F92C3146712B910C013C4710DFDA670049DF034C3542264 D40A2F490C7829C9F681A2F8170C1877DCD019508C53723DC939C89541BD40A7 BEC66A5B14D11A34E5B00CC03EBABCA4ACFD2EAA2D6539FE30243A8CB49CB761 FE479427C4DDE7DED01CC470A32CFCF7AC312839DC6690FA02D72ED1E03C43C1 EAAF9151E9F57F8B5F91725398A73C063CACF40B2C5FBCE586BD8037FB7D24A9 56BEEDA1F55E09A30ABF24E8EDD1F2CD3F6D00E3E6EF636E3A0FC37EBCFA8401 BCC959F4948241827798ADA0002661EF508468CFD4C8BB1E82D3C35E7ADE9DD7 CFBC2D8044BBE74C2BB5230A2D2FC0839CD4C3FA76B6C996C44E712F8204051E 4751B4B051BA34DE741D6A27C58950CBF9E8D90292DE59BDA4A7A729DA97626C A9C0E5A26F3FEBBD07E9F371907A260A528B587D52EE1A731C79577B645C1705 63FADDB4E9A2CAB5B4311754C0BFC9F8F8CB4279D9CD41BF63F9CA83069FD7C6 7638AA8190811211C34D310754AF25F4968088996366C074492E41ED4349BA84 DEB33AD0948BC3FFC36ABE366DFF55B5D81D975223FA877A4BB45A9620909F50 EFB75C06EB74488B75CF07D25B5CAA460ACCCA8E71A605502399D431529AEBF9 06D34361872061D2AD775F381D6CBAB6B6AD62372869EFF66D31E4123D8A7B92 7F64862F53DEDDC115642642F016204AECBB6371A6DA89EDA365FE69904B4046 C9A176C23B225902F0A8620F8DA74647A8A775017E26A7F5E5E4E591758E2B62 2BEF5AB53B145935F6DEB9EBC7D2866D3FA92BD43CFFF6D00263DF0154997DEC FB080A5CDD630B300439E0E26C5039DCC5A18CF21E50E8EA4642F7B681BD584B F1C809AFF147B42A0642BC83752AED31723DB2A8C9E3304D2D40601CABE4E141 863C2DCD3FFF8CFB2A8B2A10652E9F3955EF667FE7ED88B0A2C109D99465B957 BCB6770C7E666752BA05165CEE1B044EC717E5857E86FFA6DBD6CDCB732F9167 2F6AC3E768A2006A26A7264388A2857C7B345C1770EAC39ED55DAD235B83E0C9 FE0382A00EC6B6D7BE41D94293D97DE4FBEA41E75245D10A1144E695660CF45F 9D59FF39806E352993F6DF12BB2B0D1D73684D72BFDFE523A47C70EB22F92117 7ABA51C3903CFD214D345EB3BBCA361259E880CEDA76CA24972E6F201736A099 9FAB4855AC1028D81633F8272949BAF2654853BFA4D8961EDA189E9DA89A41D2 348DB2B6FEAC584308D8CE7ACC9068ADFB4092BDF2FDCE1B7BDE4046B1131F51 5A11220D1034428F91F1149BA1C33F7353703788F31301C28F09F54E52FB10C0 CDA9B95DF41BD0EA0A0C7A8C635A31661CD8AB37D4FAF417595655B238345501 3B94E70447E57E25D22B8BD0C023B73CA3974C6FC8CAA1664804A32F5A83526A AE6FB14BEB52A74E4358F2FC35AD5E91B52350854138674972E67D7E82B086C0 4D6197C62942706B8109C516FC089F04807C6139C0E060CEB54A000BC3BBD037 F9DDB09D73CFAD85CDD9E35ACB9C6C53FD1829059B507C3B51A86849F726F3D3 72CA2E0C261638269ED1A5FEF27F3B2F6018BA835F6117B0C09699BCFC8957D8 5648DEE61EC33C444021DBBC002671B4373A99904A1FAE3859B5B562DDC75607 F9E5696F13AF3DD944B6D8979D54D0B8EA3DAF2A2993A2A73EF43C299EB6584F 1048F2BD273B3720657CDBFC4C62F98A98B7536C1917E98584FA70A3870D4A8E 592BE07A552DD5923CBAB52729104B8B8C256DFF0A9B887DD55F2892BC9DA1CE 2A8E42280F7B4F9DF39E5489CBD0EC01325B4B6A1A0C22C91CF2C7CC21A13A29 961E22D9FD80AB69A440A48D0654BC8A106DABE2E62EA7CF85DDBA88CD815D48 1EB769CBE7DD81BE7D657B7DE3BA001133F9EBE0F6F660DB6DD5E0414CA919CA F953C0DAA599B7F6F47A291A1745CBB67BF49D7C971388AA3D6FB7B018704778 F5C9788D340664B8544AA740B692324A84F9BD57DE9206C6E44BBFEC0731A5D1 A0D908A1BCA3AFBD5069A72BB9D1AE8239389B0799EB1893714CE94E1DA9B6B1 9795E61FD1B237376E815EBEEFBA00698AC567538189D24F1F644BE4D828C82D BA39A890DD9CC0669EE19F170D474A396202DCBF67089E2241B736E4FC8CFD4A 389C4BF73654112640295E40002D144B3214EAE17BF48592FF1CB58AEBDAE81D 1E8943E7C83ABE4CCAA5059770FEDE8D4CC5952C21EB1660CE9F6AFAC69BC5CE AECB473416312AA8DF79247D9C1C94FD4F49D909FE4EE4BBA848F19CE32FD07E 980450B95152639CBB4313EBCC6C5DBFFA456352E32E41DC9176489EA368451E CD6B9445ABF7EBBAD213F8797C7BCB36B2AB8273B0C4462B652D36D3341860CA 4106B45966A9F6C2FDA03DA578ACB2409ED65E2F5A039A06A07A720C1CD4BB74 B3D4F8066C8678BF373F23128DBA181E0900E1FEC35A26194E0AA16A15F0C5E7 F2ECF2A4B0742ACFA88D5D81BAF9FFF7931228300074FF4104A489BB27C73D0A 08A383AE2AE478AA42ECB7D7965F456A7CF9DB99D811AA3C63D32C23DDF80500 D6BD9EDB88C1E1574DEEF192FAEA9E3852D5BE8D08ECAC1B29DA95C792F0F0FF 8A6DFF6E4D17FB978F1ECA6FB1FC70AC32FA4D7A801D943E564E78615A047DB5 6F7F2D277FAD0E908C48A1B86D2ACA436C0723986BDEDA9A74ECDAE8538BB179 62C3490B14D6086FB97748428C9BD03992D2C7DD9600E0D88B343B6E4F563DE5 9C233BCA0E7FB88CA9CE065AB3C30DAFE7A53EF5BB2601615D5E7863D3B769AD 792C2B427448DBAE6E2137183C2E9C33D35F843B70A3502F68D23F1EC0C46D8E 58AFFFC758A7D9280586CC0F5AC9A5E837B22FAFC64F190C44B9ADCEA4D22D92 EDED1E59FDEE72FD5FE0F8E4E69082236E5837165C3C8F4CD152D8CE1991C829 2CA8CB6F0DE901A678169E5962488B11014D4FB8074C148123511339E65743C8 2A4E8EA1B6CD825AF2416E005B9574A7FA99B6B6B13D1C3F7BCC93E923CDB479 D6A32FE62B8489F2C940EF9A37DC72DDCB20AB6BFCBDD95D9CB5CB2633CEB9CA 3AD8B7BE57E65D210F14058DBF1E0156ECA67D0A359627D28AA1F1606DA430A9 3152FD1D38A9FC32BC2176D7E770D7A9E9DF63A6F620343BE7DB9BC6F6EF7EC6 1B01A944EB5DDB2869136B0C266E6BE7F09A82F63F7592227890B04FF3E6F654 2C4FB4C9DAD965013B358E5A33C8893A42D4648BC30B1C2607B003B1B24EFE48 6D7CCDC212EDEA6073B0FF550A99F9349CCEC2FEC3963B50C50A1C8FC2663F0E 990BCCB843187F8A664670DF95794B3EF1E08111CEF8D4478817B7C887E93F0F 10CB873609FD12AD3E7AD4748C1DA52ADB5AD916CC3F754E45E74289BFFB6052 F9EFDE2A1009286114C80DE96089708703FEC15BD2284A6C327B0FCE99B2A277 884915DE31A2705707EFAB1A84CA4A3D6EEA6E0D362733E74F9273F89F0D2A2B 97729FCECCC622A9A9E954075C89F0DF5C8944E11BEEBAAAAFE2449FD23F0EDE D3A2BA7D9248E2D84389A6A4DF55BB9FAB55CB93F5C13EE2A22F76B3FC5706BA 1504934F559BAD1CB53052CDD1CD37F2A03006593CC6409564BB1ECD1249F02B BF6DB4ED8AFDFA50EDD1F642132CDE34422CE2EA823204BEA280F5A02F43184F 20E3FBA8D692200BEAD63F4A01FCB13D4B94225D6DBBF0412C894FCE8F407A22 E19399073508E3FCEF3BE4993F2D62758500B2535E1F163C7B8D45F2A0B62953 1736C3C039F9765C3680B477DD25DA5C2934D7B8D0E96FC1D174FDE2856DD783 E0A6981B208392AA1A370F5D30DA52A82599317497B1D6DA7D6CD70666C73183 C58142105DB2E2A624E7CD6B579C5B85341486044B672AAE4206D06502CCC5BE 14C16490B4B45072CC5D81656E84A5A017D4BFFD6AC5C041284B1E2A8F14B259 6FC5DC731C0CA2871661BBBEC043FCC2C68363D0715424F101D83B0C8435727B E7A77CDBCEADA4DFC903CEDC317FA795716ADB36059B58BFAAF620C069E55E7D E8C69F68B3F4661EC0D0966243EDBA2F0A367C9A256106AB2BCB3CC4EAAC8255 45C3D3BBE5694204AE85BED86E32F9CD9FB7FB9C8D12C333CA1A9719AAB7B273 521DCE58A13C0142D06DFDEC679A578CE16D6F48A97DD3B8485AC32225E459E3 4D0ED2DB29F63C0F52CB8E1964E6E52ECCD91CE45425938B7E4BFFD25A48E806 D9A920CE3C90D87593E2E01009BDCF3F741E9E01F13F06A31AABA93E68D159B0 AC93388EA77A581FA523E7F6D29BF086AA20E62AFC11544D8E69467AC64D7631 5DEE5A4FE7DEC95329A9D86BE7CED802EE2661C7E253D0F9D552E7603C99904E 29111C174AD2034BD90E36DAC00F7A7329D4FFB357A5C5C843341B4E08D2EE4A 5DBAB4F9887F57283FA59D0FA9BC9D78F6AA0A8AEC9A9EBC9996DE94EA920C19 909D3C434C94ED4B19C6A86C6E36C2B36BCE56F13CD4897733C320D61811CE49 76FE1A83384A9258D79B070DC2DE76AD7F179763F451941FAC41F4FA0BAAB0E1 CDAB2B145E9FA34E2DD0A4F53DA06A689EAD943B5020F8574CE0C8115D228CA5 5C504BC818183F6F6185C9D167E11DDFEFB02253E02A009A8EBF6B88D30A8A2A 90B2D8D3A6D8E788EBB4533B9335F9E030AD2B4370A42EB640DCF08E3DD1251F 8D45F2C18B9F191E583B9E405CC5505D0EB1436CBD5EBE31D20CBDE83954B8B4 1B5E68CFE030B98D19EE3AF739E8AB00AF7B99C6A04371DCADAA746D67AC1F6D 7B38FC58B80E716B44CFE876EA80A9FAAE84AC98C1427A553AF1D14A9A5DFF02 C8D9E6443FE2F0E7EA2726A4876AE7187654325462F52902A5B61110AC296B37 3A5DD4023EE1A7D04481A415C706D53A651F0806FA6376822C9A11EBCBCD9FE7 7AE12BD0278EE8465880F22279EF71066C0EA8A368BA0EE411DE56F2E188B70F ED785BE9D9D66C242F7DA8CE9723A3CD00C7FA62E0CC5CC1C08C97F0C4E34068 475EF1CE64D2213DDB73F445FEDFAF5E0AFB37830EE497F25D37E95DF67FCA8A 2548EDAFC569C31C47D285139D4AC7DE8D016846057C5DF558EA3DD6C71800C3 1BC67F0B13E5386107F4374D17BF235C4881F94DC6CB9A48AF1155E824A199A1 4576996E0AF1A02A48215E3BACD1C9780AA0F25F0339FA6BB497E11251EA6FE8 39F7788D15B162896FA64CFF30BC36ECFF9D37AEEF2D19730A60D33AE9ACBA55 82424347FF3F7DB87CDCE0C7F3AB0819FBFC733B76B1975A9FABF45EDB967231 661A32463F19A322209DBB969257D2380A86E321B2E353D7B3FE2BDFB5ACC9E9 245E9580722BAF00D02FE37D6973A901DEE3BD1904FD57DD913E0A31FE532558 C2ACA00AB40A66B6BCD5B2C9DFACAC7D9ED1D0BEC3F8A157D03A39DD134B0AF0 C644D393DD4DB2259543E8FEE00F8D09BD9D6560F12CE74C0FCE0B1AF4C69C64 82F829AD8F288699D2E35E03BC91F9E6CD6D60AA4E43D29ECB92AD7BA204DFAA E9EC45BBC2685A6FBDF5875423EB589DC0181F45458FC85B2CF48A5F18064A9F 1827249749D1EDA87C17F22FDBE063E7821E8EE971284C17A85A8ADB9927D21B 1D57928CF00DA71CD0C80E0AF498F19C0AAD5CEE624CA2086769E144CD9D54BE 6966B0D2F55667327912FE63DD500F7901D4A5DB90F462F0232203A05945374B 68B1636C3605D6969A75636DB32A061FBF1FDB57BC70EC2499B38BC2C35FB033 06055D9D7BEE3B17996B4077776FDE30FEE4B135B2F582D99BDA74C6B88164FF 4C24FB536EC290345C646A41ABA12F76CE5290040923651D171EEB5A4C0AFCB0 373E034D738B4AA264F37E7F92F74DF4436736A97FECA12813DA3342C1D79E01 045C34D46DC1879E1908EEC4D085834AF0C773D27F311590FCE9461BFCBDF4BF 2613559EBC95C127E59880DC2900CDB39DE767FEFF5D6D1A7333DCE713151BAB 7D5841DFC6FC9F7F1E40730A98831E785395CB64B73849B940C4187B8D5A11A3 6B1422F63F0C63C213F2D91D688670780F7E4FFBBC7E84A2ABF445531E71519C 777B9DA4BBAF4D8320F1FD726A5DE7B8B368C6DC6DE0A8A042A750C043AD571A 532D026AC2BA7EE9B42A21DDE3BD44F72F4208FBCB2491F4732D36E7B93D31F4 5A99C5D9C2EE66394920A32DD426822D8072E1F7B76B49E02AE855C22C5726DD 004BB8F6D62E9C9F3D54FDDE87DF4D10FD12AFC537B9540268C9A251BD4A1FA0 A163D2DA78E36F306FD9F0AB316F39264504F7E44C2230D2079B2E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.0: CMR12 003.002 %%Title: CMR12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup /UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR12 def /FontBBox {-34 -251 988 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR12.) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 67 /C put dup 69 /E put dup 70 /F put dup 71 /G put dup 73 /I put dup 77 /M put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 88 /X put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B 8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A 966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E 56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F 847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E 3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F 59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A 323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB 5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D 775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E 37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F 89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C 5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B 8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B 08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC 3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E 748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA 1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D 6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D 903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B 6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E 51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E 512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A 2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A 3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A 845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D 6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F 95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F 53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A BFCF3BD739E32E7FE909AEE068D50FAC33605FFF98C7D0115FB860178FD03DB9 7985B78E0AC21F2EA065FA841F5928FB85163B2E2D8F850DC7EE313912C45C28 2783F6762C67882EFEDDC7E7567F91C16B16FD8D5A1ABF35B5586307701B91AD 54984598F2AD46FEE3D68A2731BEAA754C8E730FE0E84952EF77930E4118F8D7 2F3AD753B769F886E84A7DBFA2BDD79223A6D81F1FBA5950B4805A716C21B0F6 2735379ACF33095D67A3CF60AC55075074C229868FF485F11C41F0AAD3273533 F059BB4B15E6DE61D1B3327C3558FE6268289685E99E89E172CE435ED36A5686 463A1943E15BB4FAECE7CDB2AD685E28B13915D9A1C23E58F393A7E023139E9A B4CA918311574C5252FA28A3017E65B5C92B3A06ED401C49011E0D1F07E3EB24 77AC9C91FCE85DD99098007155F8DD5E79490D4E36D96F5A2F2FFAEDE6DC21D3 B23C3B2C236552A5C748BD54BD35FB6D08E3A226B4EF58B59432CF79DFA6BA6B 99949ECB190D3C7F054FC0466E939EDE23C5B69325F6A236A3CFFF6326DB56D0 81E9D94460D1790D35D8620DC850B4BB45BC13BAF9D412AE12FB579A030FBA74 AA2E8647C4A6EE5C663304A86625DD5CE11DD1271A05DFA7E2D790900B572279 27CD70006EE08677BFB2A99FC9E51A259475B4A3C359896361501866C6B58AAB 9E3735448E0B8CCD3C4D76E396EFFE32BC48E927C3126CE5FFA74442F6BCCF33 AFD55F792E7E4C9C9F0CA43AAC24BC1ECC621BE902B25DA3453B9027273F36A0 B46776FD42665A0668C04FCA772E0FC1676D34677A5DC7DA7B6DEFD9E76C6D98 02C00FC9238CA8E5CC69C6B4AFA99D3218486742D5312962467E40425C80A14F A377B394AD902EA3DF697BCAC9497202EB8725D1803E50698EFEFC0DEC4AB6F9 E98E3BFE81AC3886ED9812FD74447A32E5FE30A5B6752B71965F7F3E5D04E519 B15AAEB5E4829C9BD8DC28BBE6E436D5C356519AF24D830C31AAD2040661D76D 8DDC8D7F00FBD0D8837FC9190BC7B6B21897C9C37E4E662C78CD6055D35808CD DAC9FD315C926E70755BED1763B854EC450C59913D96647C30AFB2D3CD4CCD4B EB80C3005EE8053B3737BC4E541AFEE3B4A64A587798E0E5AF13A3BEF4A57BCB 4E11DCFF1EC1CAAFE372EBB3179B9EFD16BBF1E6E6A4D381FAC3EBBCD2DC4708 2A2013F38B232B801A4787DE45E1659EAD294B19BB5A77E981471A8B392AD082 05DC136BB8C62F8F389AE70D6D1E617A9FC24CF999FE37D4767433D45B3C3D70 130A0A9C46C3B6348B577883404E80F165F866309928B815FA4ECB2FF4BE442C 1B910B1F46452DA45A8ABB4C6220A9245DDFE5077E0DA54AEADF9D1031000EF0 A390AFDFB21B4D85AFD72F087631D498A70D15F48C2F61CB084F403057E1F572 A4DFAECF239F8965358DAC5B0ED984DDE5DE1B82EBC27E4BBAE71AB339E2B258 A4976B64837DC023F06ED9133DDC1B41F3910F1AC36D4F7C1F8AFD52E1F76E68 658EBB919F91795ADF4DDABCDB49FAFC615AEF5059F1FD126B6E233C74D7F6AF DDE06BF06AD46F84D55049D23ADA50B7BC34956619B2AF32401B34D9D49904C6 7220C17784A426F6C28E03B339687927722EB846EEFCF5AE27242E27F21492F8 388DBDA464756CC47DB134DA0F8CE9BC403B048A141A0F94EF0E81DE7E6D7C50 F5C92CB53DE2A271A527E2C534BB63D9FDE648343274299791022E5798DBB489 5074FEBCAE9118DC839F49538B908E019584033E24BCCC5A9D87470527DD437E 8CA3C015D8B0211437D9E47038CA50655EA6BEDB2CD7FE7290B139F8F9EA579F F456464327802161FA47999569F2E6946464506651570039F381A30A7184E730 6B89E988C4922E841F8CCD8B7C800E107DF8BAE62F707276DB2BE28667A7A1A9 A107AD0BA97E031B5CFE69434BC6447F47EDAB8F4860A45FF4F286839B4609B8 016D21D1840B7C3DFD4360904E922E5E77AA52D7B3B451A18827A3CDE742F080 B07193A1EC3C9E15DAF2EA2E7E0591302CDDD08856D30C16E9ACC41C39D49E62 DD4A3F6A33DB4A817F4EAD5944C09A743CFC82DFE26B3839EAD9F2D4B7EE50C4 87BC84888038333F6079FDED4F17AAEF29B1E846AEAB19919D7A948C1522063C 29D46DA1BF79CF3FC7294A34BFB4C68E4CA1010520BA124715CC03DC522ADE86 0414F2CC882366EFC3614FBD45C76BB2B530F10B66694D28533D7983B0C00751 B0F9023E2ED56D59104A9E90D20D625DCF5A85069D1DFCAB25887154B7A2A4BE 011A5BB32A3E7917C1B442206018863212B525825378617D255608472153C09D 2A8DD3E19FC560E24CF17D7BC3B2CB7E88A660686049CE8B03B7863FF7639B49 57EA82075162A80C5CBBC0DC4F4B2DB5DE69E4F4E38165406C7A55C78212EF7E DADA98CD7B6C0D76EDA60369770C3D8D50486A7E6D6DF301D2844A3BA16C33F2 37649877244AA7BE307CFA6061938573A702B930393348973F9251FB0023311D 2DB228BD1BC3C6B3723B63020A1A9417D364FD1CD3D7195E8C4EB5D77D9DD139 AB0C7CB620ED6E83C5EFCDF111632554307A6A311C56512E87B08E90AC2F8DB8 234F076977B2A0E8E3DB752124B0507FFF031C6E44BED073CDCC58250AA4A3DA C1DAB8D79A65C715DD52D81C1409B30B7B12417E076420D5624CDD4095E4C601 FEE0DDD761CED4CE1DF5F484259C11FAC2D64FE16273667F0B23FC400916A1B2 76BC197FD2EA4D60827E6420E945AA1DB515658C2F9699EFB2EA91CB467A68FE 7ABAF788EFC54876DA0D8BF6E59521F0B1381212DE307805F3C4EB98F7537DE1 D09E7B13947DE15D89C598A05B1D10242D5E3515EC4CD4DB9DC469EEF5DB6AA5 EB4B55310D9EA0BD11878050BFF716E50101712A5B30888FE2C274B6D9388B8B 58A7768FA45214E1FE87443C99FAD00BDC9F854EAEEA7CC481F4843969F9D5C0 6A8CC757C6E03994CC500D22C8E140547F0429CA721AE1B0755C6E1E784A07A7 23EF85A33A97381C6FBA40021E836DDF7EA917D4A32A8563894049F803773D15 C3918E21B9832B35AA942E99086EE587C9E02C5024878C33320527AF024A341F 4ACA90CE3F66AA8C7395210E59D0EEA9C3FFD78CBEE774B7C385BA68B0DBE3A8 FFCD12C4B8D41F5B95D33A8DD022459EEECFA62BD5AB74A190A30714B9A74EFA 3BF72B4E2F16FB6773EF5F2FE63F71DB1AA248AB979A5CAAF3A39D097076E926 7F48F44AABA16BB152C3ACFDFE4554F536270D118CB694550CDCF63112A8A79D AED4CC0A31A75B4B028CD066C2ED886170A8E379DCA39BCD7DEC00FD78230381 DD8FB10705843CF99356C02C171C36806C10B60A14DDC59D4ED93A1E40C8383C 456C40FA84908DFF9A360ABF805144BB951241884D9BEA6CCC6133FD290C0501 E12AABDE39D1AF49074EA5FCF8B9893D7244115EDE8CE872142E1455E2CA2A26 A4F7115FA27648A55253438D645CFBCD09465785F973B0B2BBAC18ECB7410161 A7165FBC20F0B77F7FCD20FA9891A2966A8FC7435F50EA488C150F7FC623E436 4C3C74F334C4E5AD44BF7F7F564454B21CAA0487BAAA9BDD0525A26DA72133A1 C022BF483429BFAC29401E791D3CE095FD02105F86468520AC467EB47C2BA483 54AE70844CF9525FB0FE5BF4F65013988E1E74AAEACAC24F8C7F649F5EDE0174 025892A3C76113E62FF199AD125243F70CA9D0938A5DF506D29BC4D5710F0818 AC9334AAE1891BDB01ECEF29D646A65600B6CE575A5A4AEC21B70A0D9CFF8B18 54BB870FCB19E913A4BDE25BF299B2B3F1636FE2DB905A6CA03C9E2A7F4AD028 5C399B6EF8BF9E6F57350F1C4A946F5396B6627F7AEAB095863189FA8B4FFCBC 7224A89F5F96D4283EFB65F89B0ECE679380DAC7F13BC248C9B7F8FF21719030 2A854096BE120AA4C9EECEDD74C2905DD0B0B5A2CCBC5A9293BBC0A56D949A23 96B27A1CEBA8AFF43431F22CF53E13DEE5C06FB08E9160716F5561D54CD9BD7C 02469455F8B7D73272D98197B0CAFD9B7FA94FDCFAB498D69B6EE9BF214CA2A5 5424220A4FF6C88F08B90A0E1080E3A5CCE79B5DF606F017DEB2FDE70DBC87CA 273D67E589DE38FF1183295417472CA58A1B142C88E0FED0EBF8756D6A93C9C8 743D88F3091689784CC72AFBB003E6CEB7F28B3EC1C9CFEB671529C9A0842F92 4BE9F1C3A10FE69D88887FF23AAAC1A7F14A387043BD66F68D80E6C020CFBFD5 A6AE834D6384E4243B4A78C378CDB7227E0B66CBFC0191C3AB08E2739BDD0312 9BAFBC638D841E12D3E2919542B8B45782B27A7C387DFE1D76ADCBDB22C5E25D 3E8EAC159CAE5551C10036CF8A26933F6DA782DFC322583CAA0A0BE7924CC6BC D9D4BB05EFDE2B84EB0E950A278E2115C025F443E2994B44DF7554135622F041 C1ADEF810FB21145DB6AD9F99C606753EDC734AACE15D6C9B18141AA96630464 9FF197B0E1C663C0E6E8B8321C2957A5711624632EC17774EAC4F81455581ADE 23B097FBDA688E38353B39DF017E75F7A81EC02B5244D13C69E7F0E339A0C1B7 A342E005AB229E41FBB47DC610C2DA821845D424DA7E9431E5732B5D62873ACB E3396AB7A15A5A8473BD96DDB6CC56A43D7E60A4307F05063B5C71E8B9DFA4E4 FFD79CAF1856470AD967921C199FEBD6E52740A87692321766398D987462EF8B A8CE852E3CAE46199EA7DBB9DA5E955D211934F2812CC8EB60477088F88C1A3F C907A8603C250D21A748AF625B55F5CA5DB57FC61DFC8A3A55C1D79E5B5DB497 321440A498A59EF49DDB27FE0A1E67B8D5AF72DCC37F5F33770D0B54E612DF5C BDDBE8B3FC14DB1930B2BEBE2FF32E476EE89AC218163665C251832C0652BA59 80F4BAFB14C881BAC8EBCA0AAF05DB31BC24152FD6318CDC35BA1B26096C9E1A 201696FA1CBFF3BF0531831C5AE7A9CF5724B30B61FC1F7524797A8A5E27F951 D22A1223D16F3DAD7465F96D99CEC3DAC0D9E917DB16328BB581B64F9B97D11B FE61423AE168F55BA00E030C070AA4A581D9EAA5A3FBE88C59AC30778CA7E659 448A4D45DF3562BA415C770B18DEBA7DDCB721900E4280089C77B688E9CC650E 1A99708017475A028A1CC0C0585B90DEB26E40BA4C37AC46E0D4FCB458DF8899 EF08C279521AAF609502F3AB71588497CF8E96C4E2C4FC1422F083512054D3D5 09385C2A890850418F0E9E0A0A46064D719258E0E47FEBA01AF55F77FF1E4523 07FDF7C07F02167C05C9E2B41143CE69510348A00C9E33818CDA9A67245C3AB7 9E0EDCAC37E8E4A29BCC42CFF02AD5C3539126ABD93EB9E17D5E5A0FD069CAB3 0234AFF025E33C6F977BD74BA7245E8B36B802CE844BCEC21927C96CE9479C99 EA305F9BFB8EBAE3DC838B2EFB86A7EB3D568FC8DF7DBF93046DF069A1D9EF76 D5359554F2282D55DE93ACF6F94235CC3F7015C6C3F163CF13D58EE29EFEAB61 456381E72D670493AF396EAE53D546DED0CB0F21235519239F9982523E6B2E8B D0205B7B19924EBC409A10493B1AEDADAC4105EE5437CF31A76795FB43E96F6B 450BAD5ED1884D57C08C54FA8370D2DF747285A18311416D63FF9A5138AE7016 6B0430B75D2C2C99DB47B2621C75B197C2D1C7A752DEEBBF32B68163F978747F 2D7DCC8270C6581673184D61DFB8C3E0957B79567AB86F9652CCDC51B9780DB6 323CB6695C4BE1E0F65D245D898A53BF23449049DF008839539FC838F26A3AB6 B94316606FBD25DEFBEE9521D06347597251399FF7D70ED9089CF0231961A2A8 DE8C813ADCC8034055BEC382409704DF99E6F246F11A78AC7784039CFA59456A 5337180A0DEC2C62AEE1D0E5F0D61FC9A979289BC51374C8559F715B43573A48 8CE868668EBF72EB858DE9724E5EA06258DDCEA591F4695077F14C7FC1A82642 6C962425F13FEDD2967D4C0767A0FF740C49B6357CA4814220CA51206B58A24D 55390AAEF34127F7794731506007E9BDFF3B2352DB2E38D9602A268B70985A3C 4A52CEFBF1B67BBA63AF5C9CABEA715B2546A0B5B0D15848A2193F5F23885D3E C92C948E0B3207B3043ED672C41E8B20B9331AFAA5A08BFF5930F569B256870D A3997EB9CD7FABE391AA1163C02FBC2FB131F526F2C48862328DD883270334EE 62FDB0AE3FFEDDEEB222133B5D8F9ECDEDD554E1EBEA954DA6B39725E543564D 5B8B7C596BF564B7AD847B8A56F10F391C9B6C395DE64BDAE17D8FFB186B745C 7F622348BF2EC333A02E949A0974E98932F96E30FDF21C81FD05E1DF102DD360 28BF9D3411B82F100A04B8FB08E8C7CFB633CEAD34380226332ED5281770A4C2 1CFC6C02C6F6B3EC757B6BB7730B8F43141F46BA8916C0A16D6201C5E11A06D8 25E9E469D237FB471ECD577FF330570F2C3DBE0565C3E174A5BAB717CB244E7C CE4310B486F9D8B00FBBC7B97A76FAFF0B905E779C22CAC70DA030DCE446923C 2ED3DB8C60BE4B948BEE7885726B39F7B10F92DAA0C98AE34B5613A36B27B7E4 19FEACD0F6E59E6C922775674B9E9EC075FED56245F9F66E1F2D0CEACB245615 11DF19158EC34EB2FEF6C8E6D0148CABE3324EB3D9266626DDEC57B8E52E755B 186C17C7EECC2FEC0C0648247DC27F1BDFF0C121ABEE563D4A2F6E417EE93C38 C357A641D6CAE99B2F0CF373AB4976454AC0EE49F007589A2A084C8B81335DB2 84565433BEB5D00CBE8C5B9A8F2D37F5C8CE17CB2F7FDFF6327E6755F027E685 FF5F45A36D549A3FA22F731E7B66A3E14C0D3E96C4330ABB52CAC4D65AF716D0 9AE3B6DE0C212B6D28E5C3C320A66CB9B4EAA93FEACBD68A221E04F1A7351E2C 66762FB0AABB0E40541E25A478ED0B959FB1211D04CCAF2B190496FF618E0C8C 30BFB6A0C0E9715ABE11E67F6C27913F12E65575C21AD344184EAC42405C1D0A 9C046D45DEC8AE656F6EA9A013DC45F1D8510E1382E0D2468D777AA5AD69C954 61986305235F547B75C8808B240A0D1E6FA9A96EB866EBE7910722675A670773 3A87EE24591E671656F1BC3170C7CEAC99FB09790AF67A4B9BB30178054B6111 B8C6627EACC752AB4742489B97D11BFE61423AFDE556B6A5C5222448CFE76EFC 4A17A8F1C5D7670BAA64E54EDA0A6042CE6B906AF6BC276922900C9BEF76D6C4 7331890DF4CC34D9A77C4589E181121554F41C177C587F832ABFC80D693ECD95 8126F9A2CCCDE0EA426C81998B5AC32406C962E7486AD7FE162EF208F7781585 594778C10831A84DE99BB4116CCAB159DEC6C7C439987F2D0B1E5B959BC7F6EE C9870412CC2EE52BC66C06F0DA892A65EDD90D411641E9A8F74ADE1051E8E13F 439C77173FAED30DC7B7102B2DC322C988248A92E675D8E5E80555E68D3AB914 71C14F99CC644BD3E8845DDF2390297C4A60D722ADCD92292220903225F04BDC 01594521BB735ED6444E0726622159B44AFF530044856B61A3479893B23C42CE A4BDD8315A89FBA386CF19A965D67A37A61BF1792A17DEEF47730A1294193C44 2FBF138A8B7BF96C4B7123BB285AA14431013EBADAD1B79B6150249E71926CCF 0EC63D7EFD38B7922BA882842A6EE9C0BD688B602027898EEAC2A48A4DB87CC7 F76DC9A78853984A93A18DD2A57B293B2958AE171C18F08761E0A8594F3CA421 CE4C43A64206739406E19F4C6E997B300B9985E182C8842E7CB1326C9831C80D 354ADF1A2281DD112D0D13B6ECDA67ADC86431B28AD0E662F2299DE959A3366D 23624B9BC386DBE77BD92DDE8771549FA05C0A66F323ED0C393E68492ADA4FD8 27C775D965B1517A750F1A43BA155BACA65A9FC98E2AF0F8B3A801E93E62A9ED 180DA86E2FA57673A185A8869064523E46A9F6D3D05E254A018CD8F753E98152 C6CF8E6F351F22F272D65886741463E26AD625E00801505C4A37681C4D552BCB 022053034D0065EF8927FE0E282C14905B6D6DE203BBA6335F8979F0DDCB17A0 6BF493B10999FD4AD9BF0BFB7E85EB063902553A9E65BA647C02E78273AF807E 73F0ADC3A609C812062CF6968AC6752326AD4C3C113C03095D6D880ED8E4CDBB 7AE6279A0DE608BC83B88A8687C6D271497F87FAC8D4F60CCE9B66F8DA8ECA25 84BA3165325AE4E5435C9B5D87471E19D440CA86B2C34FE6A730B78FB5B2CEDA 1D2717DA30DB60C4259DC3A3C16DA5833E48CDF26D701D87F403A1B13C3F0B68 8974006E8999BBE011B34424D6487F1F21E2C9DBFD8DA34B8269DA66556AA6A8 5B419676F73719916ED592F3E84DC8557F22C923FB87D127A57377FB8E9E27C7 2EC674EEDA298889B77AF60B07D96C44D7615B691C7EBDEEB82BA807E0A82C6B 437E9B9BF15D60DCE1D73F673636F7FA78B630FFBF5778F36EDC3FA6C990B0BD 99BB8FBFD237F522DE9665544E425FC30DE46A887C53B1B7D22EAA476212F899 CADA519C7BE7876316CAC625733A99C45C53D6860112656869EB5505A76CEBB7 03C920C816716C5AAB80FC0324C666A024D670CB6F49D55F098B999B53E05AE5 CF7FFDF39377BBC010D943F5F9BABFEE17318743F0E92636DFBCD288ADF4A2A1 BC869BCFDBDCFA2C34E63D69E48A436E8C0957316952AB67B0AE1F58F8AB2E38 620FE9B81DBE2A0775F252CF58AA959C7932B8E5C9157FBAD13350BFEF08977D 122C11DC397339F7CF246F397C5A163C8245E72060F9F9D0C55F6F3CCEAA48C8 F08C67D05C76995CF4CADD87BC49D3DBC81A98E1EE3E7117091E62F82C8437D3 A7B98741E1F69B1E0C3DE86E5B18A3F75092D0F7B15D65560745838E94705862 EDAB7A8DBF780E06554F81E9247B308F2095B0B1105E461A3EEFE80D813200A9 FA5B950B894FC00693F6D09C6CB176ECD39A49F727A8D1C0AA68755B66D9CF65 192568017A7F9D783DBBF39DC76700BFD48536CD62BFD23D29BE37BCB7FDAAB1 85C6E138A0FD951CF6E0A6A41F74AC87A27FAAE3EF7B31F7BD1463A010B545BC E95EFFA04E3BF34035F7A9EBDF6B8F2544C11C29D379F2DDDF33982C7EA0AEBC 5295368AF8D2F7503B2CAAE01F48C7E9F34DECDB3E1AA3B6886B8658DE836047 C0D579C17E039377DBE21ECDB106E428F9387D62F6B4ED51775FA025E8CACB7E 6CE8BA7A6145DD965F758FA778EB73313F5ECB2B2C648425EFBA1A60B1DA831C 7956C49E418B6AA05CF7C15DEADD3872FAB2DDC3C92092184620B60D5DC1160E B4E0B7F61EE6F370FCEBEDE89DE33B88EA2A105F155ED01EAD4FC30750C56244 98AFFC418170BD814C4C906C7E9C604D67F25E90A9E0F5A36C8966EE409FACA7 B6CD44AA5D68241AD5ECAB54DA1A6F332BBB70366BB7F92E9534254C62315E36 554466E48AAB52E7C66A5A0D04F487263589B25BDD6CDED6B9EC3CD01F56951F 4334E89FBD824AE503C062A8AB51EEF2AE14B5F8F8525453C771C656B79E44A7 B85ABF1850D39AB1C72BB54F9753A4D9FB6C1D628972A73B5B989BCAA1738057 9A72C3464E25EAC8AFE27933CCAF180D3AF01E55645C561339C79CD3A3E2CFEE B3C0EA3DA9E420AE30E5B38BBEC844C4EFA1457163E0FB2311945B828AAB22E3 0B60AB3724EE6FB35EA3FD87978363EE3A372E725531101F73912A57EC93EB91 C921D0A572BB38DDF5BFB99B42DCFD569E3865FADA9E0FA82D98042C70A08D92 308F2BD9114A3C878CE9C7268745E254BB1BAA4A3FAB97E9A62507C9FB83B4B3 01CC9BB4D954BA779BC88C8EE19C41E998DABD571294FD6F700C8D43E1CD4B92 7426E7D1E45A5FA32C901D15DB0EF93C5BB9652F09E20933D1022DF225C87505 389471E3B3DBFA9BF544462E5C21C869459B0E2FF4ACADA140599CA72EAA12BB DB78249507311DEB4779478CCEFBBE20132A6D96D5C0478F714EA085AB6C4619 D8304C8B6248A4BCAF43D87CAB81508476B5C145C9209246F666E6FFC0A8884A 93227831EFFAE24FCD515A033EF8D16E90975EB617C6244ED5E5D2767DFC19E0 BABFD14C5EFDDFAEA8B8D641F202251042BEF94EF0FDFEFED1669A77329B03D5 3760A8EC63FEDFCD9C2CEA3A18C1445A23EFB9A2E7F6AA8EA05AF73E4CE4E3E2 DA74D956A494FE96B80A3848212508BBFC2413B65B55862F6387CB7F45630FDA 6B96CA8F497ABE244AA7377DDB7CBF1BCEA6B4A343C4DC353AF0F8B683D3D674 D13EC8CE8D491B782B4223EE52FF0401EE11E129C9E98FEC9A7A093ED6B73B6A BF2B7A20080DC0FB1FA9E9314D98B88288F11EA89FC1A6A00A8B6DECB568D667 F32E1976D79EEBF525882A033464895E88DDC368105154C2423F7046B6BE5B07 C6B830D419204EFC527C7D063F1DBF8397EC70A9078BE6C59F9C1633667A308E A40A2A59D4C414F9793FC773134028734444861439616415BD1F6D6134CB1A74 E7539FBC1DC561C4387197956F320D3CF2C72C3992687EF5B1176B5475E08A5E DC65B966B407FDE3EB50A4C29F13B4AC717182DD982C13A906D9E0A81AE48104 65029EEF3F96E03ECC2E018885C8B92FFDFFB2991153EB5FB3A72006363F0874 4731FBA6EA0C3E97C0435A184FD6959EC202C1C859E838232A732EB571E1A594 00BAFC479EF5B536F1B05A50CF76382D7F542EEF316DACF75D3686267FCEEA64 88FDFC8610F061F5B5BCC824FB4AB4553F9C2A11285B2CCBA74056656CDCECE1 36D339CDED135B247271AEAC29FA235BA1804F96BC28A7475F529AB777EEB850 C7481BEA8326A5FDAD69B3EA7BE1D2E702A3F159A9A24472832DE7EA0AA4561A E3B23154749E99136D56BD9F212E13C6F78634027405E405E2B2C10C02EF8946 E7C9A5F960930EDABC881B67FDA5D0C3DC8C3387A642F0755E6AC9AA61055958 4A7F9448C3BE1C69D2F759049E0FF7B037A2BC07639A00CB8A2C847DBD3E2E0C 065F69BBDFA38A415A4C9E161259CDCFA683C5E8969E54004015C33EB5936528 B9AE24F7E1AF2AEE1CED1FC91735F0C71D1F68C66D6A64A26E74627BB86C700A 9B198FF95EFDD24F60041CCF599A70692A628544DE51EDF6EEF4A99259186044 15A62C8DB4E8A4DCB4906C46FE0C3C995AAFBBCD945E5464C07F48974ECDFBEA 067206D2F895FADE034CA4A50D799CB8F80D8A762FE12E9A3EA85864B57955D2 209DBC9B62F9F8C95FA28B80CF4C373EC8C712B162AB185432EFF87E6CFA4E52 4C28764BCF5800CAAF2A46E2945FA7D292797BDFA096096B67EA623BACFFC640 AAD9AAFD9028838767E2AAD5EB13D9FF2999892C8378F9A4A855FC635469D867 E8CF5BC92C11F9DF9CE4444B51A80D3915AF99C56927EF9249E9ECF0BBB32730 FED4D08C1782A8A801AE7532524B259C73CC98E3C50C305EF7BEEB109082DD7F DA049C43B46932F2B809BFD9C774A7C88E476436DA6D319093132C92F67A59E3 D786620F6330E10F64000428EE049B6D12A488ECF290688DD52EF2594ABC14D1 246B0373341F76E7C55C1EC46601F4FBB9859633CD4687C50C9C94192CC30127 776E033F5683C170CBE166B6999DC52812CF0CC181C8A94D52E6FD30FF777046 04558B062CE2FEFD3D4FE799E2ED1A07800C8142F96897B0D3D6EFDC74474854 7D55BBF56A1E70A6D37BCFA58A776587BB6BCFB532590E7B126DC20C7C5A7770 805EEAB0AC04073C0F5C6622245AA7D03A6FCFAE2E996F433C0455196CF633E1 5A9EC26476D48B71088ECF81B6AEA67AC202A53E1699255DE636AB8CE9A86E11 822BC163104846512A803B056CB547CE8585A24997A29B47793CE02FDF5628B6 8C202F8DE2478AB505E3A2019B8F4AE080F7F43669E5D52FAB44A4E2975AD972 986603163682277A08130319430E4819A92EC9100E913E34E3C11DB0ADBCE522 B02073F24DD125A78518766F22160BE15EB5CC3544BF7228E737E116E88DCE7C EA2D8B85BF2CC8B5E5928D35C127364B5CFA4BCA4E57436B135554709CDACB25 BA81DC51F940F841A9CE5AA0E7329BCD87BB603F346F5C0EFA9D77FC215E80B1 90549EADD3C59D31A82FB02697A0F59448EBBA04B72CCA3B0E456812790D296A 8DFEF31012DCF4848FC28AC2E6BD4E08333540D48A7C2EA1958410A8DEE06010 58DDF11CA06B45F69CE347DE9270E8E6F325C015508707130471503204710C5D 155E100C7FCC06192818FD3BF678718AA4EF6A2F71885A12938767DBB54EC38E 3A3374310F6EF1757100CCDB5839B240114D70F4D68F4601689C0A440D1B892A D89A15C981224E96AAA677CDE35390ED9BB55E7DCD1F2093D054EA7213A58D26 700769774485B8BDD50C6506B73737B141BC61FB4B9C977061E920710CFA09A5 0C0EA6C229F6712A7A2F71233A43FAC262ADF10637250C723E8CA81FE3066143 F77CA0F9B569230D9F30C9EEA2E9BE09F41C67E5BFB6686F5E9D1296B098C8E2 446300C05362328E09AD1ED8A9FFDD589218CDE90A21CCAEC637136A6DBDDAEB BF7D2D9B021A4E09BF90749275284038BD38A46F5C51103722F4B31134036701 B56390DA59CF22C3546B98CDE03EE1FB62EBF09310F1B4DB1163D26A677A9685 86A9831A1D1BCC471CB7048677E4E722D3DFB946FB2B803C23 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (xnee.dvi) @start /Fa 197[25 58[{}1 90.9091 /CMMI10 rf /Fb 197[21 58[{}1 74.7198 /CMMI9 rf /Fc 134[41 41 55 41 43 30 30 30 41 43 38 43 64 21 41 23 21 43 38 23 34 43 34 43 38 8[58 79 58 58 55 43 57 1[52 60 58 70 48 2[28 1[60 50 52 59 55 54 58 1[36 5[38 38 38 38 38 38 38 38 38 38 3[21 31[43 45 11[{}59 74.7198 /CMR9 rf /Fd 140[42 9[27 5[54 1[56 97[{}4 90.9091 /CMCSC10 rf /Fe 141[36 11[28 40 101[{}3 90.9091 /CMSL10 rf /Ff 139[32 33 33 3[46 4[23 1[42 14[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}19 83.022 /CMR10 rf /Fg 240[45 1[91 13[{}2 90.9091 /CMSY10 rf /Fh 130[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 1[48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 33[{}87 90.9091 /CMTT10 rf /Fi 134[65 65 89 65 68 48 48 50 1[68 61 68 102 34 65 37 34 68 61 37 56 68 55 68 60 8[93 127 1[94 85 68 92 1[84 2[116 74 96 1[46 96 96 1[81 94 89 87 8[61 61 61 61 61 61 61 61 61 61 1[34 33[68 72 11[{}54 109.091 /CMBX12 rf /Fj 134[48 48 1[48 51 35 36 39 1[51 45 51 76 25 48 28 25 1[45 28 42 51 40 51 44 8[69 3[63 51 69 1[62 1[71 86 55 2[36 2[57 60 70 2[69 15[45 1[45 35[53 11[{}38 90.9091 /CMB10 rf /Fk 197[33 58[{}1 119.552 /CMMI12 rf /Fl 134[85 85 117 85 90 63 64 66 85 90 81 90 134 45 2[45 90 81 49 74 90 72 90 78 8[122 3[112 90 120 121 110 2[153 3[60 1[127 101 106 1[117 1[122 7[81 81 81 81 81 81 81 81 81 81 48[{}46 143.462 /CMBX12 rf /Fm 134[51 51 70 51 54 38 38 38 51 54 49 54 81 27 2[27 54 49 30 43 54 43 1[49 8[73 3[70 54 72 76 66 2[89 3[35 1[77 64 66 1[70 1[73 7[49 49 49 49 49 49 49 49 49 49 48[{}45 99.6264 /CMR12 rf /Fn 134[71 71 97 71 75 52 53 55 71 75 67 75 112 37 71 41 37 75 67 41 61 75 60 75 65 8[102 139 102 103 94 75 100 101 92 1[105 128 81 105 1[50 105 106 85 88 103 97 96 102 7[67 67 67 67 67 67 67 67 67 67 1[37 45 5[37 26[75 12[{}61 119.552 /CMBX12 rf /Fo 131[91 1[40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 3[45 1[56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 1[43 1[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 1[45 35 35 25 71 76 1[76 45 25 19[51 51 53 11[{}85 90.9091 /CMR10 rf /Fp 138[108 6[108 1[54 6[88 3[94 8[146 10[184 77[{}7 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: a4 /setpagedevice where { pop << /PageSize [595 842] >> setpagedevice } { /a4 where { pop a4 } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 1385 2414 a Fp(Xnee)65 b(Man)-5 b(ual)p eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 2108 a Fp(Xnee)65 b(Man)-5 b(ual)p 150 2175 3600 34 v 2430 2271 a Fo(Xnee)31 b(is)f(a)h(suite)f (of)h(programs)f(with,)2238 2379 y(recording,)h(repla)m(ying)g(and)f ('distribution')2393 2487 y(capabilities)i(for)e(X)h(Windo)m(w)f (System)2442 2595 y(v)m(ersion)h(3.11.90)i(10)e(F)-8 b(ebruary)30 b(2012)150 4408 y Fn(Henrik)45 b(Sandklef)150 4543 y Fo(Cop)m(yrigh)m(t)32 b(\(C\))g(2002,)j(2003,)f(2004,)g(2005,)g (2006,)g(2007,)g(2008,)g(2009,)g(2010,)g(2011)g(Henrik)e(Sandklef)150 4653 y(P)m(ermission)g(is)f(gran)m(ted)i(to)f(cop)m(y)-8 b(,)33 b(distribute)e(and/or)h(mo)s(dify)f(this)g(do)s(cumen)m(t)g (under)g(the)g(terms)h(of)150 4762 y(the)22 b(GNU)h(F)-8 b(ree)23 b(Do)s(cumen)m(tation)h(License,)h(V)-8 b(ersion)23 b(1.2)g(or)f(an)m(y)g(later)i(v)m(ersion)e(published)e(b)m(y)i(the)h(F) -8 b(ree)150 4872 y(Soft)m(w)m(are)27 b(F)-8 b(oundation;)28 b(with)e(no)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)h(no)d(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(exts,)28 b(and)d(no)h(Bac)m(k-Co)m(v) m(er)150 4981 y(T)-8 b(exts.)44 b(A)31 b(cop)m(y)h(of)g(the)f(license)h (is)g(included)e(in)h(the)g(section)i(en)m(titled)f("GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)150 5091 y(License")p 150 5141 3600 17 v eop end %%Page: -1 3 TeXDict begin -1 2 bop 3723 -116 a Fm(i)150 299 y Fl(Short)53 b(Con)l(ten)l(ts)150 540 y Fm(1)146 b(Summary)14 b Fk(:)20 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)45 b Fm(1)150 681 y(2)146 b(Getting)32 b(started)21 b Fk(:)f(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)52 b Fm(3)150 822 y(3)146 b(F)-8 b(unctional)33 b(o)m(v)m(erview)d Fk(:)20 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)60 b Fm(5)150 963 y(4)146 b(Installation)30 b Fk(:)20 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)61 b Fm(11)150 1104 y(5)146 b(Examples)14 b Fk(:)22 b(:)d(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)46 b Fm(13)150 1245 y(6)146 b(Xnee)34 b(Programs)24 b Fk(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)55 b Fm(22)150 1386 y(7)146 b(File)33 b(t)m(yp)s(es)h(and)e(format)19 b Fk(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)51 b Fm(23)150 1528 y(8)146 b(Xnee)34 b(In)m(ternals)14 b Fk(:)21 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)46 b Fm(31)150 1669 y(9)146 b(Xnee)34 b(Requiremen)m(ts)16 b Fk(:)21 b(:)f(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)47 b Fm(35)150 1810 y(10)97 b(F)-11 b(A)m(Q)15 b Fk(:)20 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f (:)47 b Fm(36)150 1951 y(A)122 b(Cop)m(ying)34 b(This)g(Man)m(ual)19 b Fk(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)50 b Fm(40)150 2092 y(11)97 b(Index)22 b Fk(:)f(:)e(:)h(:)f(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)54 b Fm(46)p eop end %%Page: 1 4 TeXDict begin 1 3 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Summary)2707 b(1)150 299 y Fl(1)80 b(Summary)150 639 y Fn(1.1)68 b(Summary)150 798 y Fo(Xnee)35 b(is)g(a)g(suite)g(of)f (programs)h(that)g(can)g(record,)h(repla)m(y)f(and)f(distribute)g(user) g(actions)i(under)d(the)150 908 y(X11)e(en)m(vironmen)m(t.)42 b(Think)29 b(of)h(it)h(as)g(a)g(rob)s(ot)f(that)h(can)g(imitate)h(the)e (job)g(y)m(ou)h(just)f(did.)275 1045 y(Xnee)g(consists)h(of)g(one)f (library)g(and)g(t)m(w)m(o)i(applications)275 1182 y Fj(cnee)f Fo(-)f(command)g(line)h(program)275 1318 y Fj(gnee)g Fo(-)f(graphical)h(user)f(in)m(terface)i(program)275 1455 y Fj(pnee)e Fo(-)g(a)h(Gnome)g(P)m(anel)g(Applet)275 1592 y Fj(lib)m(xnee)g Fo(-)f(library)g(used)g(b)m(y)g(xnee)h(and)e (gnee)150 1828 y Fn(1.2)68 b(Xnee)45 b(features)150 1987 y Fo(Xnee)36 b(can)g(b)s(e)f(used)g(for)g(m)m(ultiple)i(purp)s(oses,)e (although)h(it)g(w)m(as)h(initially)g(designed)e(as)h(a)g(test)h(to)s (ol.)150 2097 y(The)30 b(most)h(used)e(features)i(are)g(the)f(folo)s(o) m(wing:)275 2234 y Fj(T)-8 b(est)34 b(to)s(ol)h Fo(-)f(Instead)f(of)h (p)s(erforming)e(test)i(cases)h(for)e(a)h(GUI)g(\(or)g(CLI)e(program\)) i(o)m(v)m(er)h(and)e(o)m(v)m(er)150 2343 y(again,)f(the)e(test)i(cases) f(can)f(b)s(e)g(automated.)42 b(Simply)30 b(record)g(a)h(user)e (session)i(and)f(repla)m(y)h(it)g(later.)275 2480 y Fj(P)m(erformance)h (test)g(to)s(ol)g Fo(-)g(If)e(y)m(ou)i(w)m(an)m(t)g(to)f(sim)m(ulate)i (lots)f(of)f(sim)m(ultaneous)h(users)e(in)h(a)g(net)m(w)m(ork)150 2590 y(\(or)39 b(a)g(lo)s(cal)h(mac)m(hine\))f(y)m(ou)g(can)g(use)f (Xnee.)66 b(Simply)37 b(record)i(a)g(user)f(session)g(and)g(start)h(m)m (ultiple)150 2699 y(instances)31 b(of)f(Xnee.)275 2836 y Fj(Demonstration)36 b(to)s(ol)g Fo(-)g(Y)-8 b(ou)36 b(can)f(use)g(Xnee)h(to)g(demonstrate)g(the)g(features)f(of)h(y)m(our)f (program.)150 2946 y(Simply)30 b(record)g(a)h(user)e(session)i(and)f (repla)m(y)h(it)f(later.)275 3082 y Fj(Distribution)37 b(to)s(ol)i Fo(-)f(If)f(y)m(ou)i(w)m(an)m(t)f(to)h(send)e(o)m(v)m(er)i (y)m(our)e(mouse/k)m(eyb)s(oard)h(actions)h(to)g(another)150 3192 y(displa)m(y)31 b(y)m(ou)f(can)h(use)f(the)h(built-in)f (distribution)g(mec)m(hanism)g(in)g(Xnee.)275 3329 y Fj(Macro)36 b(recorder/repla)m(y)m(er)i Fo(-)e(By)f(binding)g(a)g(k)m (ey)h(and)f(mo)s(di\014er)f(com)m(bination)j(\(e.g)g(using)e(xre-)150 3438 y(bind\))c(to)i(repla)m(y)f(a)g(recorded)g(session)g(y)m(ou)h (will)f(ha)m(v)m(e)h(a)f(Windo)m(w)g(Manager)h(and)f(application)h (inde-)150 3548 y(p)s(enden)m(t)c(macro.)275 3685 y Fj(File)j(ret)m(yp) s(er)f Fo(-)g(Xnee)h(can)f(ret)m(yp)s(e)g(the)h(con)m(ten)m(ts)g(of)g (a)f(\014le.)43 b(This)30 b(can)i(b)s(e)e(useful)g(during)g(tests)i(or) 150 3794 y(if)e(y)m(ou)h(w)m(an)m(t)g(xnee)g(to)g(answ)m(er)f(some)h (command)f(session)h(without)f(ha)m(ving)h(to)g(record)f(the)h (session.)275 3931 y Fj(X11)f(proto)s(col)i(sni\013er)e Fo(-)h(Xnee)g(can)f(b)s(e)g(used)g(as)g(a)h(sni\013er)f(for)g(the)h (X11)g(proto)s(col.)150 4167 y Fn(1.3)68 b(Bac)l(kground)150 4326 y Fo(In)29 b(order)h(to)h(v)m(erify)f(that)h(a)f(program)g(do)s (es)g(the)g(job)g(it's)h(supp)s(osed)d(to)i(do,)h(certain)g(tests)f(ha) m(v)m(e)i(to)f(b)s(e)150 4436 y(made.)40 b(These)27 b(tests)g(are,)i (IMHO,)e(p)s(erhaps)e(the)j(most)f(b)s(oring)g(things)f(a)i(programmer) f(can)g(do.)40 b(Xnee)150 4546 y(is)30 b(designed)h(to)g(reduce)f(the)g (programmer)g(from)g(this)g(burden.)275 4792 y(Xnee)k(started)h(out)f (as)g(a)g(commad)h(line)f(program.)52 b(During)33 b(the)i(dev)m (elopmen)m(t)g(phase)f(the)g(main)150 4902 y(functionalit)m(y)h(w)m(as) f(brok)m(en)g(out)f(to)i(a)f(library)-8 b(,)35 b(called)f(lib)m(xnee.) 52 b(The)33 b(command)g(line)h(program)g(w)m(as)150 5011 y(renamed)f(cnee.)49 b(The)33 b(though)m(t)g(b)s(ehind)e(making)j(the)f (library)g(w)m(as)g(to)h(enable)f(the)g(writing)g(of)h(other)150 5121 y(clien)m(ts)k(than)f(just)f(the)h(command)f(line.)61 b(T)-8 b(o)s(da)m(y)37 b(there)g(is)f(a)i(GUI)f(program,)h(gnee,)h(and) d(a)i(Gnome)150 5230 y(panel)30 b(applet,)h(pnee,)g(that)g(uses)f(the)g (library)-8 b(.)p eop end %%Page: 2 5 TeXDict begin 2 4 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Summary)2707 b(2)275 299 y(By)29 b(using)g(xnee)g(y)m(our)h (testcase\(s\))i(can)d(b)s(e)g(recorded)g(and)g(later)h(on)f(repla)m(y) m(ed.)41 b(Xnee)30 b(comes)g(with)150 408 y(other)h(features)f(F)-8 b(or)31 b(more)g(information)g(ab)s(out)f(these,)h(read)f(the)h(In)m (tro)s(duction.)275 543 y(This)g(man)m(ual)i(mainly)g(fo)s(cuses)f(on)h (the)f(command)h(line)g(program,)g(cnee.)48 b(There)32 b(are)h(ho)m(w)m(ev)m(er)h(a)150 653 y(sep)s(erate)d(c)m(hapters)g(for) f(the)g(other)h(programs.)p eop end %%Page: 3 6 TeXDict begin 3 5 bop 150 -116 a Fo(Chapter)30 b(2:)41 b(Getting)32 b(started)2478 b(3)150 299 y Fl(2)80 b(Getting)52 b(started)150 617 y Fn(2.1)68 b(Getting)46 b(started)150 776 y Fo(T)-8 b(o)31 b(get)g(the)g(\014rst)f(feel)h(of)f(Xnee)h(some)g (simple)f(examples)h(are)g(presen)m(ted.)150 971 y Fi(2.1.1)63 b(Simple)41 b(repla)m(y)150 1118 y Fo(Start)31 b(a)f(terminal)h(em)m (ulator)h(\(e.g)g(xterm\))e(and)g(then)g(start)h(Xnee,)533 1250 y Fh(cnee)47 b(--replay)e(--file)h(example1.xnr)f(&)275 1382 y Fo(....don)m(t)g(forget)h('&'.)83 b(The)44 b(\014le)h (example1.xnr)g(con)m(tains)h(k)m(eyb)s(oard)e(ev)m(en)m(ts)i(recorded) e(during)150 1492 y(dev)m(elopmen)m(t)32 b(of)e(this)h(man)m(ual.)41 b(When)30 b(repla)m(y)m(ed)i(y)m(ou'll)f(see)g(what)g(w)m(as)g(t)m(yp)s (ed)f(and)g(of)g(course)h(more)150 1601 y(imp)s(ortan)m(t)i(y)m(ou'll)h (get)g(i)e(\014rst)g(glimpse)i(of)e(Xnee)i(and)e(its)h(capabilities.)49 b(F)-8 b(or)34 b(information)f(on)f(where)150 1711 y(to)f(\014nd)e(the) h(example)i(\014les,)e(see)h(b)s(elo)m(w.)150 1906 y Fi(2.1.2)63 b(Simple)41 b(recording)h(of)g(Key)f(presses)150 2053 y Fo(W)-8 b(e)38 b(mo)m(v)m(e)h(on)e(to)g(a)h(\(v)m(ery\))g (simple)f(recording)g(session.)61 b(Start)37 b(a)g(terminal)h(em)m (ulator)g(\(e.g)h(xterm\))150 2162 y(and)29 b(y)m(our)h(fa)m(v)m(orite) h(editor.)41 b(Mo)m(v)m(e)32 b(the)e(p)s(oin)m(ter)f(to)i(one)f(of)f (the)h(terminal)g(windo)m(ws)f(and)g(start)h(Xnee.)533 2294 y Fh(cnee)47 b(--record)e(-o)j(example2.xnr)c (--device-event-range)e(2-3)47 b(\\)533 2404 y(--time)f(5)i (--events-to-record)43 b(20)275 2536 y Fo(Mo)m(v)m(e)23 b(the)f(p)s(oin)m(ter)f(to)h(the)g(editor)f(and)g(get)i(fo)s(cus)d (\(e.g)j(clic)m(k)g(the)f(windo)m(w)f(frame\).)38 b(After)21 b(5)h(seconds)150 2646 y(y)m(ou)30 b(can)g(t)m(yp)s(e)g(whatev)m(er)g (y)m(ou)g(w)m(an)m(t)g(to)h(record)e(\(20)i(press-)e(and)g(relase)i(ev) m(en)m(ts)g(of)e(the)h(k)m(eyb)s(oard)g(are)150 2755 y(recorded\).)40 b(W)-8 b(e)29 b(are)g(done)e(and)h(y)m(ou)g(ha)m(v)m (e)h(recorded)f(y)m(our)g(\014rst)f(session!)40 b(Lea)m(v)m(e)30 b(the)e(desktop)g(as)g(it)h(is)150 2865 y(and)h(go)h(forw)m(ard)f(to)h (the)f(next)h(example.)150 3059 y Fi(2.1.3)63 b(Simple)41 b(repla)m(ying)g(of)h(y)m(our)f(recorded)g(\014le)150 3206 y Fo(Start)30 b(one)g(terminal)g(em)m(ulator)h(\(e.g)g(xterm\).)41 b(Let)30 b(Xnee)h(rep)s(eat)f(the)f(stu\013)h(y)m(ou)g(did)f(in)g(the)h (example)150 3316 y(ab)s(o)m(v)m(e.)54 b(Undo)34 b(all)h(c)m(hanges)g (in)f(the)h(editor)g(that)g(w)m(as)f(made)h(in)f(the)g(previous)g (example.)53 b(Mo)m(v)m(e)37 b(the)150 3426 y(p)s(oin)m(ter)30 b(to)h(one)g(of)g(the)f(terminal)h(windo)m(ws)f(and)g(start)h(Xnee.)533 3558 y Fh(cnee)47 b(--replay)e(-f)j(example2.xnr)c(--time)i(5)275 3690 y Fo(Mo)m(v)m(e)d(the)f(p)s(oin)m(ter)g(to)g(the)g(editor)g(and)f (get)i(fo)s(cus)e(\(e.g)i(clic)m(k)g(the)f(windo)m(w)f(frame\).)75 b(After)42 b(5)150 3799 y(seconds)30 b(y)m(ou)h(will)g(see)g(y)m(our)f (t)m(ypings)h(in)f(the)g(example)h(ab)s(o)m(v)m(e)h(b)s(eing)e(rep)s (eated.)150 3994 y Fi(2.1.4)63 b(Simple)41 b(recording)h(of)g(mouse)g (motions)150 4141 y Fo(W)-8 b(e)38 b(mo)m(v)m(e)g(on)e(to)i(another)f (simple)f(recording)h(session.)60 b(Start)36 b(a)h(terminal)g(em)m (ulator)h(\(e.g)g(xterm\).)150 4251 y(Mo)m(v)m(e)32 b(the)f(p)s(oin)m (ter)f(to)h(the)g(terminal)g(windo)m(w)f(and)g(start)g(Xnee.)533 4383 y Fh(cnee)47 b(--record)e(-o)j(example3.xnr)c (--device-event-range)e(5-6)47 b(\\)533 4492 y(--time)f(5)i (--events-to-record)43 b(20)275 4625 y Fo(After)30 b(5)h(seconds)f(y)m (ou)h(can)g(mo)m(v)m(e)g(the)g(p)s(oin)m(ter)f(around)g(\(20)h(motion)g (ev)m(en)m(ts)h(are)f(recorded\).)150 4819 y Fi(2.1.5)63 b(Simple)41 b(repla)m(ying)g(of)h(y)m(our)f(recorded)g(\014le)150 4966 y Fo(Let)30 b(Xnee)g(rep)s(eat)g(the)f(stu\013)g(y)m(ou)h(did)f (in)g(the)h(example)g(ab)s(o)m(v)m(e..)42 b(Mo)m(v)m(e)31 b(the)f(p)s(oin)m(ter)g(to)g(the)f(terminal)150 5076 y(windo)m(w)h(and)g(start)h(Xnee.)533 5208 y Fh(cnee)47 b(--replay)e(-f)j(example3.xnr)c(--time)i(5)275 5340 y Fo(After)29 b(5)h(seconds)f(y)m(ou)h(will)f(see)h(y)m(our)f(mouse)h (motions)f(in)g(the)h(example)g(ab)s(o)m(v)m(e)g(b)s(eing)f(reppla)m(y) m(ed.)p eop end %%Page: 4 7 TeXDict begin 4 6 bop 150 -116 a Fo(Chapter)30 b(2:)41 b(Getting)32 b(started)2478 b(4)150 299 y Fi(2.1.6)63 b(Simple)41 b(ret)m(yping)g(of)h(a)f(text)f(\014le)150 446 y Fo(Let)i(Xnee)g(ret)m(yp)s(e)f(\(t)m(yp)s(e)h(again\))g(the)g (text)g(in)f(a)h(text)g(\014le.)74 b(Mo)m(v)m(e)43 b(the)f(p)s(oin)m (ter)f(to)h(the)f(terminal)150 555 y(windo)m(w)30 b(and)g(create)i(a)e (text)i(\014le)e(con)m(taining)i(the)f(command)f Fh(ls)g(-l)p Fo(.)533 690 y Fh(echo)47 b("ls)g(-l")g(>)g(./mytext.txt)275 824 y Fo(And)29 b(after)i(that)g(y)m(ou)g(start)g(Xnee.)533 959 y Fh(cnee)47 b(--retype-file)92 b(./mytext.txt)44 b(--time)i(5)275 1093 y Fo(After)36 b(5)h(seconds)f(y)m(ou)g(will)h (see)g(Xnee)f(t)m(yp)s(e)h Fh(ls)29 b(-l)p Fo(,)38 b(whic)m(h)e (probably)f(will)h(list)h(the)g(\014les)f(in)g(the)150 1203 y(curren)m(t)30 b(directory)-8 b(.)150 1402 y Fi(2.1.7)63 b(Example)40 b(Xnee)h(Session)h(\014les)150 1549 y Fo(The)c(example)i (\014le)f(ab)s(o)m(v)m(e)g(\(example1.xnr\))h(is)f(a)g(session)g (\014le)g(that)g(has)g(b)s(een)f(deliv)m(ered)h(with)g(the)150 1659 y(sources)g(\(allthough)i(not)e(installed\),)k(rpm)38 b(and)h(with)g(the)g(Xnee)h(Do)s(cumen)m(tation)h(P)m(ac)m(k)-5 b(age.)70 b(The)150 1768 y(\014le\(s\))31 b(can)g(b)s(e)e(found:)1330 1903 y Fj(Distribution)592 b(Lo)s(cation)1330 2121 y Fo(RPM)868 b(/usr/lib/xnee/session)1330 2338 y(Source)817 b(./sessions/)1330 2556 y(Do)s(cumen)m(t)31 b(P)m(ac)m(k)-5 b(age)328 b(./sessions/)p eop end %%Page: 5 8 TeXDict begin 5 7 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(F)-8 b(unctional)32 b(o)m(v)m(erview)2297 b(5)150 299 y Fl(3)80 b(F)-13 b(unctional)52 b(o)l(v)l(erview)150 589 y Fn(3.1)68 b(F)-11 b(unctional)45 b(o)l(v)l(erview)150 748 y Fo(The)29 b(Xnee)i(applications)g(\(gnee)g(and)e(xnee\))i(receiv) m(es)g(X11)g(proto)s(col)g(data)g(\(e.g.)42 b(ev)m(en)m(ts\))32 b(from)d(an)h(X)150 858 y(serv)m(er)h(\(using)g(lib)m(xnee\))i(and)d (prin)m(t)h(them)g(to)h(a)f(\014le,)h(called)h(Xnee)e(Session)g(File.) 44 b(Theses)31 b(ev)m(en)m(ts)i(are)150 967 y(later)j(read)f(from)g (the)g(session)g(\014le)g(and)g(repla)m(y)m(ed.)56 b(Gnee)35 b(and)g(xnee)g(can)g(read)g(its)h(settings)g(from)f(a)150 1077 y(\014le,)c(called)g(Xnee)g(Pro)5 b(ject)31 b(File,)h(or)e(from)g (command)h(line)f(\(cnee\))i(or)e(via)h(the)g(GUI)g(\(gnee\).)150 1314 y(Ev)m(en)m(ts)k(directly)f(generated)h(b)m(y)f(the)g(user)g (\(e.g)h(KeyPress\))f(can)g(b)s(e)g(repla)m(y)m(ed)h(or)e(fak)m(ed.)52 b(Requests,)150 1424 y(replies,)25 b(errors)d(and)g(ev)m(en)m(ts)j(not) e(directly)g(generated)h(b)m(y)f(the)g(user)f(\(e.g)i(MapNotify\))h (can)e(b)s(e)f(recorded)150 1533 y(as)31 b(w)m(ell.)41 b(By)31 b(using)f(these)h(data)g(Xnee)g(can)f(repla)m(y)h(with)f(sync)m (hronisation.)275 1661 y(This)f(picture)h(giv)m(es)i(an)e(o)m(v)m (erview)i(of)f(Xnee)g(and)f(the)g(\014les)g(used.)150 4088 y @beginspecial 0 @llx 0 @lly 561 @urx 570 @ury 2834 @rwi @setspecial %%BeginDocument: xngener.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: xngener.dia %%Creator: Dia v0.97.2 %%CreationDate: Tue May 6 16:15:10 2014 %%For: hesa %%Orientation: Portrait %%Magnification: 1.0000 %%BoundingBox: 0 0 561 570 %%BeginSetup %%EndSetup %%EndComments %%BeginProlog [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /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 /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /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 /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def /cp {closepath} bind def /c {curveto} bind def /f {fill} bind def /a {arc} bind def /ef {eofill} bind def /ex {exch} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth pop} bind def /tr {translate} bind def /ellipsedict 8 dict def ellipsedict /mtrx matrix put /ellipse { ellipsedict begin /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc savematrix setmatrix end } def /mergeprocs { dup length 3 -1 roll dup length dup 5 1 roll 3 -1 roll add array cvx dup 3 -1 roll 0 exch putinterval dup 4 2 roll putinterval } bind def /dpi_x 300 def /dpi_y 300 def /conicto { /to_y exch def /to_x exch def /conic_cntrl_y exch def /conic_cntrl_x exch def currentpoint /p0_y exch def /p0_x exch def /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def /p2_x p1_x to_x p0_x sub 1 3 div mul add def /p2_y p1_y to_y p0_y sub 1 3 div mul add def p1_x p1_y p2_x p2_y to_x to_y curveto } bind def /start_ol { gsave 1.1 dpi_x div dup scale} bind def /end_ol { closepath fill grestore } bind def 28.346000 -28.346000 scale -3.721380 -16.257090 translate %%EndProlog 0.100000 slw [] 0 sd 1.000000 1.000000 1.000000 srgb n 3.771380 3.079330 m 6.261380 3.079330 l 6.861380 3.679330 l 6.861380 7.979330 l 3.771380 7.979330 l ef 0.000000 0.000000 0.000000 srgb n 3.771380 3.079330 m 6.261380 3.079330 l 6.861380 3.679330 l 6.861380 7.979330 l 3.771380 7.979330 l cp s 0.050000 slw n 6.261380 3.079330 m 6.261380 3.679330 l 6.861380 3.679330 l s gsave 4.121380 4.324330 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 4.558472 4.324330 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 4.963086 4.324330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 5.357712 4.324330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 4.121380 5.124330 translate 0.035278 -0.035278 scale start_ol 960 3136 moveto 960 1792 lineto 1552 1792 lineto 1881 1792 2060 1967 conicto 2240 2142 2240 2465 conicto 2240 2786 2060 2961 conicto 1881 3136 1552 3136 conicto 960 3136 lineto 448 3520 moveto 1552 3520 lineto 2145 3520 2448 3251 conicto 2752 2983 2752 2465 conicto 2752 1943 2448 1675 conicto 2145 1408 1552 1408 conicto 960 1408 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 4.496030 5.124330 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 4.743291 5.124330 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 5.135420 5.124330 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 -41 lineto 896 -559 695 -791 conicto 494 -1024 47 -1024 conicto -128 -1024 lineto -128 -640 lineto 28 -640 lineto 272 -640 360 -524 conicto 448 -408 448 -41 conicto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 5.312749 5.124330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 5.707375 5.124330 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 6.059544 5.124330 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 4.121380 5.924330 translate 0.035278 -0.035278 scale start_ol 448 3520 moveto 2496 3520 lineto 2496 3136 lineto 960 3136 lineto 960 2112 lineto 2368 2112 lineto 2368 1728 lineto 960 1728 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 4.441079 5.924330 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 4.618408 5.924330 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 4.795737 5.924330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 4.121380 7.524330 translate 0.035278 -0.035278 scale start_ol 1536 3712 moveto 1211 3163 1053 2626 conicto 896 2090 896 1538 conicto 896 987 1055 446 conicto 1214 -94 1536 -640 conicto 1148 -640 lineto 797 -79 622 462 conicto 448 1004 448 1538 conicto 448 2070 621 2609 conicto 794 3149 1148 3712 conicto 1536 3712 lineto end_ol grestore gsave 4.371147 7.524330 translate 0.035278 -0.035278 scale start_ol 576 576 moveto 1088 576 lineto 1088 0 lineto 576 0 lineto 576 576 lineto end_ol grestore gsave 4.573454 7.524330 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 4.953098 7.524330 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 5.357712 7.524330 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 5.764831 7.524330 translate 0.035278 -0.035278 scale start_ol 384 3712 moveto 772 3712 lineto 1123 3149 1297 2609 conicto 1472 2070 1472 1538 conicto 1472 1004 1297 462 conicto 1123 -79 772 -640 conicto 384 -640 lineto 706 -94 865 446 conicto 1024 987 1024 1538 conicto 1024 2090 865 2626 conicto 706 3163 384 3712 conicto end_ol grestore 0.100000 slw [] 0 sd 1.000000 1.000000 1.000000 srgb n 20.100000 3.075000 m 22.842500 3.075000 l 23.442500 3.675000 l 23.442500 7.975000 l 20.100000 7.975000 l ef 0.000000 0.000000 0.000000 srgb n 20.100000 3.075000 m 22.842500 3.075000 l 23.442500 3.675000 l 23.442500 7.975000 l 20.100000 7.975000 l cp s 0.050000 slw n 22.842500 3.075000 m 22.842500 3.675000 l 23.442500 3.675000 l s gsave 20.450000 4.320000 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 20.887092 4.320000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 21.291706 4.320000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 21.686332 4.320000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 20.450000 5.120000 translate 0.035278 -0.035278 scale start_ol 2624 3392 moveto 2624 2944 lineto 2352 3073 2111 3136 conicto 1870 3200 1645 3200 conicto 1255 3200 1043 3052 conicto 832 2904 832 2631 conicto 832 2402 969 2285 conicto 1107 2169 1491 2097 conicto 1773 2039 lineto 2308 1937 2562 1678 conicto 2816 1420 2816 986 conicto 2816 469 2468 202 conicto 2121 -64 1450 -64 conicto 1197 -64 911 0 conicto 626 65 320 192 conicto 320 704 lineto 613 513 893 416 conicto 1174 320 1445 320 conicto 1857 320 2080 485 conicto 2304 650 2304 955 conicto 2304 1221 2148 1371 conicto 1992 1522 1636 1597 conicto 1352 1652 lineto 807 1756 563 1978 conicto 320 2201 320 2597 conicto 320 3056 654 3320 conicto 989 3584 1576 3584 conicto 1828 3584 2089 3536 conicto 2351 3488 2624 3392 conicto end_ol grestore gsave 20.857119 5.120000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 21.251745 5.120000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 21.583930 5.120000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 21.916114 5.120000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 22.093443 5.120000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 22.485572 5.120000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 20.450000 5.920000 translate 0.035278 -0.035278 scale start_ol 448 3520 moveto 2496 3520 lineto 2496 3136 lineto 960 3136 lineto 960 2112 lineto 2368 2112 lineto 2368 1728 lineto 960 1728 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 20.769699 5.920000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 20.947028 5.920000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 21.124357 5.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 20.450000 7.520000 translate 0.035278 -0.035278 scale start_ol 1536 3712 moveto 1211 3163 1053 2626 conicto 896 2090 896 1538 conicto 896 987 1055 446 conicto 1214 -94 1536 -640 conicto 1148 -640 lineto 797 -79 622 462 conicto 448 1004 448 1538 conicto 448 2070 621 2609 conicto 794 3149 1148 3712 conicto 1536 3712 lineto end_ol grestore gsave 20.699767 7.520000 translate 0.035278 -0.035278 scale start_ol 576 576 moveto 1088 576 lineto 1088 0 lineto 576 0 lineto 576 576 lineto end_ol grestore gsave 20.902074 7.520000 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 21.281718 7.520000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 21.686332 7.520000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 22.018516 7.520000 translate 0.035278 -0.035278 scale start_ol 384 3712 moveto 772 3712 lineto 1123 3149 1297 2609 conicto 1472 2070 1472 1538 conicto 1472 1004 1297 462 conicto 1123 -79 772 -640 conicto 384 -640 lineto 706 -94 865 446 conicto 1024 987 1024 1538 conicto 1024 2090 865 2626 conicto 706 3163 384 3712 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slj 1.000000 1.000000 1.000000 srgb n 9.750000 2.700000 m 9.750000 8.900270 l 16.950000 8.900270 l 16.950000 2.700000 l f 0.000000 0.000000 0.000000 srgb n 9.750000 2.700000 m 9.750000 8.900270 l 16.950000 8.900270 l 16.950000 2.700000 l cp s 1.000000 1.000000 1.000000 srgb n 13.973750 3.725000 m 13.973750 5.725000 l 16.676250 5.725000 l 16.676250 3.725000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 13.973750 3.725000 m 13.973750 5.725000 l 16.676250 5.725000 l 16.676250 3.725000 l cp s gsave 14.523750 4.920000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 14.930869 4.920000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 15.335483 4.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 15.730109 4.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 12.173750 5.175000 m 12.173750 7.175000 l 14.876250 7.175000 l 14.876250 5.175000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 12.173750 5.175000 m 12.173750 7.175000 l 14.876250 7.175000 l 14.876250 5.175000 l cp s gsave 12.723750 6.370000 translate 0.035278 -0.035278 scale start_ol 2176 1375 moveto 2176 1848 1982 2108 conicto 1789 2368 1439 2368 conicto 1091 2368 897 2108 conicto 704 1848 704 1375 conicto 704 904 897 644 conicto 1091 384 1439 384 conicto 1789 384 1982 644 conicto 2176 904 2176 1375 conicto 2624 347 moveto 2624 -347 2323 -685 conicto 2023 -1024 1404 -1024 conicto 1174 -1024 971 -992 conicto 768 -961 576 -896 conicto 576 -448 lineto 766 -546 951 -593 conicto 1137 -640 1329 -640 conicto 1754 -640 1965 -415 conicto 2176 -190 2176 264 conicto 2176 448 lineto 2042 223 1833 111 conicto 1624 0 1332 0 conicto 848 0 552 376 conicto 256 753 256 1375 conicto 256 1999 552 2375 conicto 848 2752 1332 2752 conicto 1624 2752 1833 2640 conicto 2042 2529 2176 2304 conicto 2176 2688 lineto 2624 2688 lineto 2624 347 lineto end_ol grestore gsave 13.130869 6.370000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 13.535483 6.370000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.930109 6.370000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 10.176250 6.600000 m 10.176250 8.600000 l 12.823750 8.600000 l 12.823750 6.600000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 10.176250 6.600000 m 10.176250 8.600000 l 12.823750 8.600000 l 12.823750 6.600000 l cp s gsave 10.726250 7.795000 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 11.078419 7.795000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 11.483033 7.795000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 11.877659 7.795000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 11.050000 3.500000 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 11.487092 3.500000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 11.891706 3.500000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.286332 3.500000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.680958 3.500000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.883265 3.500000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 13.275394 3.500000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 13.682513 3.500000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 14.089633 3.500000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 14.266961 3.500000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.444290 3.500000 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 14.796459 3.500000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 15.188588 3.500000 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 15.438354 3.500000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 15.615683 3.500000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 16.007812 3.500000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 16.412426 3.500000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 8.900000 5.175000 m 7.400000 5.175000 l 7.400000 4.800000 l 6.650000 5.550000 l 7.400000 6.300000 l 7.400000 5.925000 l 8.900000 5.925000 l 8.900000 6.300000 l 9.650000 5.550000 l 8.900000 4.800000 l ef 0.000000 0.000000 0.000000 srgb n 8.900000 5.175000 m 7.400000 5.175000 l 7.400000 4.800000 l 6.650000 5.550000 l 7.400000 6.300000 l 7.400000 5.925000 l 8.900000 5.925000 l 8.900000 6.300000 l 9.650000 5.550000 l 8.900000 4.800000 l cp s 0 slc 0 slj [] 0 sd n 8.900000 5.175000 m 7.400000 5.175000 l 7.400000 4.800000 l 6.650000 5.550000 l 7.400000 6.300000 l 7.400000 5.925000 l 8.900000 5.925000 l 8.900000 6.300000 l 9.650000 5.550000 l 8.900000 4.800000 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 19.270700 5.170710 m 17.770700 5.170710 l 17.770700 4.795710 l 17.020700 5.545710 l 17.770700 6.295710 l 17.770700 5.920710 l 19.270700 5.920710 l 19.270700 6.295710 l 20.020700 5.545710 l 19.270700 4.795710 l ef 0.000000 0.000000 0.000000 srgb n 19.270700 5.170710 m 17.770700 5.170710 l 17.770700 4.795710 l 17.020700 5.545710 l 17.770700 6.295710 l 17.770700 5.920710 l 19.270700 5.920710 l 19.270700 6.295710 l 20.020700 5.545710 l 19.270700 4.795710 l cp s 0 slc 0 slj [] 0 sd n 19.270700 5.170710 m 17.770700 5.170710 l 17.770700 4.795710 l 17.020700 5.545710 l 17.770700 6.295710 l 17.770700 5.920710 l 19.270700 5.920710 l 19.270700 6.295710 l 20.020700 5.545710 l 19.270700 4.795710 l cp s 1.000000 1.000000 1.000000 srgb n 9.750000 9.300270 m 9.750000 11.450000 l 16.971380 11.450000 l 16.971380 9.300270 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.750000 9.300270 m 9.750000 11.450000 l 16.971380 11.450000 l 16.971380 9.300270 l cp s gsave 12.191940 10.570135 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 12.369269 10.570135 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 12.546597 10.570135 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 12.953717 10.570135 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 13.333361 10.570135 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 13.737975 10.570135 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.132601 10.570135 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.740000 11.790000 m 9.740000 13.750000 l 16.971380 13.750000 l 16.971380 11.790000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.740000 11.790000 m 9.740000 13.750000 l 16.971380 13.750000 l 16.971380 11.790000 l cp s gsave 10.585690 12.965000 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 10.965334 12.965000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 11.142663 12.965000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 11.319991 12.965000 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 11.727111 12.965000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 11.929418 12.965000 translate 0.035278 -0.035278 scale start_ol 2240 3072 moveto 2240 1728 lineto 3584 1728 lineto 3584 1344 lineto 2240 1344 lineto 2240 0 lineto 1856 0 lineto 1856 1344 lineto 512 1344 lineto 512 1728 lineto 1856 1728 lineto 1856 3072 lineto 2240 3072 lineto end_ol grestore gsave 12.466414 12.965000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.668722 12.965000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.053360 12.965000 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 13.433004 12.965000 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 13.682770 12.965000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.077396 12.965000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 14.482010 12.965000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 14.814195 12.965000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.991523 12.965000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 15.383652 12.965000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 15.788266 12.965000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.781340 14.240000 m 9.781340 16.207090 l 16.946380 16.207090 l 16.946380 14.240000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.781340 14.240000 m 9.781340 16.207090 l 16.946380 16.207090 l 16.946380 14.240000 l cp s gsave 12.030110 15.418545 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 12.467202 15.418545 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.669509 15.418545 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 13.001693 15.418545 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.396319 15.418545 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 13.658571 15.418545 translate 0.035278 -0.035278 scale start_ol 128 2688 moveto 586 2688 lineto 1408 432 lineto 2230 2688 lineto 2688 2688 lineto 1702 0 lineto 1114 0 lineto 128 2688 lineto end_ol grestore gsave 14.038215 15.418545 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.432841 15.418545 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 10.248160 0.384521 m 10.248160 1.384521 l 9.748160 1.384521 l 10.748160 2.384521 l 11.748160 1.384521 l 11.248160 1.384521 l 11.248160 0.384521 l ef 0.000000 0.000000 0.000000 srgb n 10.248160 0.384521 m 10.248160 1.384521 l 9.748160 1.384521 l 10.748160 2.384521 l 11.748160 1.384521 l 11.248160 1.384521 l 11.248160 0.384521 l cp s 0 slc 0 slj [] 0 sd n 10.248160 0.384521 m 10.248160 1.384521 l 9.748160 1.384521 l 10.748160 2.384521 l 11.748160 1.384521 l 11.248160 1.384521 l 11.248160 0.384521 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 15.390000 2.207216 m 15.390000 1.207216 l 14.890000 1.207216 l 15.890000 0.207216 l 16.890000 1.207216 l 16.390000 1.207216 l 16.390000 2.207216 l ef 0.000000 0.000000 0.000000 srgb n 15.390000 2.207216 m 15.390000 1.207216 l 14.890000 1.207216 l 15.890000 0.207216 l 16.890000 1.207216 l 16.390000 1.207216 l 16.390000 2.207216 l cp s 0 slc 0 slj [] 0 sd n 15.390000 2.207216 m 15.390000 1.207216 l 14.890000 1.207216 l 15.890000 0.207216 l 16.890000 1.207216 l 16.390000 1.207216 l 16.390000 2.207216 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 9.748163 -2.168670 m 9.748163 -0.612822 l 11.822627 -0.612822 l 11.822627 -2.168670 l f 0.000000 0.000000 0.000000 srgb n 9.748163 -2.168670 m 9.748163 -0.612822 l 11.822627 -0.612822 l 11.822627 -2.168670 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 9.972896 -1.943936 m 9.972896 -0.872130 l 11.597894 -0.872130 l 11.597894 -1.943936 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 10.029080 -0.612822 m 11.096565 -0.612822 l 11.096565 -0.370801 l 10.085263 -0.370801 l ef 0.000000 0.000000 0.000000 srgb n 10.029080 -0.612822 m 11.096565 -0.612822 l 11.096565 -0.370801 l 10.085263 -0.370801 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 11.096565 -0.612822 m 11.541710 -0.612822 l 11.485527 -0.370801 l 11.096565 -0.370801 l ef 0.000000 0.000000 0.000000 srgb n 11.096565 -0.612822 m 11.541710 -0.612822 l 11.485527 -0.370801 l 11.096565 -0.370801 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 11.169171 -0.540215 m 11.169171 -0.443407 l 11.265979 -0.443407 l 11.265979 -0.540215 l f 0.000000 0.000000 0.000000 srgb n 11.169171 -0.540215 m 11.169171 -0.443407 l 11.265979 -0.443407 l 11.265979 -0.540215 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 10.577949 -0.370801 m 10.992841 -0.370801 l 10.992841 -0.249790 l 11.200288 -0.249790 l 11.200288 -0.128780 l 10.370502 -0.128780 l 10.370502 -0.249790 l 10.577949 -0.249790 l ef 0.000000 0.000000 0.000000 srgb n 10.577949 -0.370801 m 10.992841 -0.370801 l 10.992841 -0.249790 l 11.200288 -0.249790 l 11.200288 -0.128780 l 10.370502 -0.128780 l 10.370502 -0.249790 l 10.577949 -0.249790 l cp s gsave 9.606320 -3.232500 translate 0.035278 -0.035278 scale start_ol 2140 1632 moveto 2295 1581 2442 1413 conicto 2590 1245 2738 952 conicto 3200 0 lineto 2709 0 lineto 2250 893 lineto 2077 1243 1915 1357 conicto 1753 1472 1473 1472 conicto 960 1472 lineto 960 0 lineto 448 0 lineto 448 3520 lineto 1552 3520 lineto 2157 3520 2454 3265 conicto 2752 3010 2752 2496 conicto 2752 2161 2595 1939 conicto 2439 1718 2140 1632 conicto 960 3136 moveto 960 1856 lineto 1552 1856 lineto 1893 1856 2066 2019 conicto 2240 2182 2240 2498 conicto 2240 2815 2066 2975 conicto 1893 3136 1552 3136 conicto 960 3136 lineto end_ol grestore gsave 10.023427 -3.232500 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 10.418053 -3.232500 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 10.770222 -3.232500 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 11.162351 -3.232500 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 11.414615 -3.232500 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 11.821734 -3.232500 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.216360 -3.232500 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 12.623480 -3.232500 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 9.606320 -2.432500 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 9.808627 -2.432500 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 10.010934 -2.432500 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 10.418053 -2.432500 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 10.595382 -2.432500 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 10.927566 -2.432500 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 11.334686 -2.432500 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 11.512015 -2.432500 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 11.904144 -2.432500 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 13.446703 -2.070640 m 13.446703 -0.514792 l 15.521167 -0.514792 l 15.521167 -2.070640 l f 0.000000 0.000000 0.000000 srgb n 13.446703 -2.070640 m 13.446703 -0.514792 l 15.521167 -0.514792 l 15.521167 -2.070640 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 13.671436 -1.845906 m 13.671436 -0.774100 l 15.296434 -0.774100 l 15.296434 -1.845906 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 13.727620 -0.514792 m 14.795105 -0.514792 l 14.795105 -0.272771 l 13.783803 -0.272771 l ef 0.000000 0.000000 0.000000 srgb n 13.727620 -0.514792 m 14.795105 -0.514792 l 14.795105 -0.272771 l 13.783803 -0.272771 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.795105 -0.514792 m 15.240250 -0.514792 l 15.184067 -0.272771 l 14.795105 -0.272771 l ef 0.000000 0.000000 0.000000 srgb n 14.795105 -0.514792 m 15.240250 -0.514792 l 15.184067 -0.272771 l 14.795105 -0.272771 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 14.867711 -0.442185 m 14.867711 -0.345377 l 14.964519 -0.345377 l 14.964519 -0.442185 l f 0.000000 0.000000 0.000000 srgb n 14.867711 -0.442185 m 14.867711 -0.345377 l 14.964519 -0.345377 l 14.964519 -0.442185 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.276489 -0.272771 m 14.691381 -0.272771 l 14.691381 -0.151760 l 14.898828 -0.151760 l 14.898828 -0.030750 l 14.069042 -0.030750 l 14.069042 -0.151760 l 14.276489 -0.151760 l ef 0.000000 0.000000 0.000000 srgb n 14.276489 -0.272771 m 14.691381 -0.272771 l 14.691381 -0.151760 l 14.898828 -0.151760 l 14.898828 -0.030750 l 14.069042 -0.030750 l 14.069042 -0.151760 l 14.276489 -0.151760 l cp s gsave 13.304900 -3.134470 translate 0.035278 -0.035278 scale start_ol 2140 1632 moveto 2295 1581 2442 1413 conicto 2590 1245 2738 952 conicto 3200 0 lineto 2709 0 lineto 2250 893 lineto 2077 1243 1915 1357 conicto 1753 1472 1473 1472 conicto 960 1472 lineto 960 0 lineto 448 0 lineto 448 3520 lineto 1552 3520 lineto 2157 3520 2454 3265 conicto 2752 3010 2752 2496 conicto 2752 2161 2595 1939 conicto 2439 1718 2140 1632 conicto 960 3136 moveto 960 1856 lineto 1552 1856 lineto 1893 1856 2066 2019 conicto 2240 2182 2240 2498 conicto 2240 2815 2066 2975 conicto 1893 3136 1552 3136 conicto 960 3136 lineto end_ol grestore gsave 13.722007 -3.134470 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.116633 -3.134470 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 14.523753 -3.134470 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 14.701081 -3.134470 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 15.093210 -3.134470 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore gsave 15.472854 -3.134470 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 15.867481 -3.134470 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 16.274600 -3.134470 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 13.304900 -2.334470 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 13.507207 -2.334470 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 13.709514 -2.334470 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 14.116633 -2.334470 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.293962 -2.334470 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 14.626146 -2.334470 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 15.033266 -2.334470 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 15.210595 -2.334470 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 15.602724 -2.334470 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 16.237703 -2.115300 m 16.237703 -0.559452 l 18.312167 -0.559452 l 18.312167 -2.115300 l f 0.000000 0.000000 0.000000 srgb n 16.237703 -2.115300 m 16.237703 -0.559452 l 18.312167 -0.559452 l 18.312167 -2.115300 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 16.462436 -1.890566 m 16.462436 -0.818760 l 18.087434 -0.818760 l 18.087434 -1.890566 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 16.518620 -0.559452 m 17.586105 -0.559452 l 17.586105 -0.317431 l 16.574803 -0.317431 l ef 0.000000 0.000000 0.000000 srgb n 16.518620 -0.559452 m 17.586105 -0.559452 l 17.586105 -0.317431 l 16.574803 -0.317431 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 17.586105 -0.559452 m 18.031250 -0.559452 l 17.975067 -0.317431 l 17.586105 -0.317431 l ef 0.000000 0.000000 0.000000 srgb n 17.586105 -0.559452 m 18.031250 -0.559452 l 17.975067 -0.317431 l 17.586105 -0.317431 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 17.658711 -0.486845 m 17.658711 -0.390037 l 17.755519 -0.390037 l 17.755519 -0.486845 l f 0.000000 0.000000 0.000000 srgb n 17.658711 -0.486845 m 17.658711 -0.390037 l 17.755519 -0.390037 l 17.755519 -0.486845 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 17.067489 -0.317431 m 17.482381 -0.317431 l 17.482381 -0.196420 l 17.689828 -0.196420 l 17.689828 -0.075410 l 16.860042 -0.075410 l 16.860042 -0.196420 l 17.067489 -0.196420 l ef 0.000000 0.000000 0.000000 srgb n 17.067489 -0.317431 m 17.482381 -0.317431 l 17.482381 -0.196420 l 17.689828 -0.196420 l 17.689828 -0.075410 l 16.860042 -0.075410 l 16.860042 -0.196420 l 17.067489 -0.196420 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 16.602803 -1.703070 m 16.602803 -0.147222 l 18.677267 -0.147222 l 18.677267 -1.703070 l f 0.000000 0.000000 0.000000 srgb n 16.602803 -1.703070 m 16.602803 -0.147222 l 18.677267 -0.147222 l 18.677267 -1.703070 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 16.827536 -1.478336 m 16.827536 -0.406530 l 18.452534 -0.406530 l 18.452534 -1.478336 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 16.883720 -0.147222 m 17.951205 -0.147222 l 17.951205 0.094799 l 16.939903 0.094799 l ef 0.000000 0.000000 0.000000 srgb n 16.883720 -0.147222 m 17.951205 -0.147222 l 17.951205 0.094799 l 16.939903 0.094799 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 17.951205 -0.147222 m 18.396350 -0.147222 l 18.340167 0.094799 l 17.951205 0.094799 l ef 0.000000 0.000000 0.000000 srgb n 17.951205 -0.147222 m 18.396350 -0.147222 l 18.340167 0.094799 l 17.951205 0.094799 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 18.023811 -0.074615 m 18.023811 0.022193 l 18.120619 0.022193 l 18.120619 -0.074615 l f 0.000000 0.000000 0.000000 srgb n 18.023811 -0.074615 m 18.023811 0.022193 l 18.120619 0.022193 l 18.120619 -0.074615 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 17.432589 0.094799 m 17.847481 0.094799 l 17.847481 0.215810 l 18.054928 0.215810 l 18.054928 0.336820 l 17.225142 0.336820 l 17.225142 0.215810 l 17.432589 0.215810 l ef 0.000000 0.000000 0.000000 srgb n 17.432589 0.094799 m 17.847481 0.094799 l 17.847481 0.215810 l 18.054928 0.215810 l 18.054928 0.336820 l 17.225142 0.336820 l 17.225142 0.215810 l 17.432589 0.215810 l cp s gsave 16.212700 -3.086050 translate 0.035278 -0.035278 scale start_ol 960 3136 moveto 960 384 lineto 1536 384 lineto 2266 384 2605 716 conicto 2944 1048 2944 1764 conicto 2944 2475 2605 2805 conicto 2266 3136 1536 3136 conicto 960 3136 lineto 448 3520 moveto 1463 3520 lineto 2493 3520 2974 3094 conicto 3456 2669 3456 1764 conicto 3456 853 2972 426 conicto 2488 0 1463 0 conicto 448 0 lineto 448 3520 lineto end_ol grestore gsave 16.704734 -3.086050 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 16.882063 -3.086050 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 17.214247 -3.086050 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 17.464014 -3.086050 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 17.726265 -3.086050 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 17.903594 -3.086050 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 18.310714 -3.086050 translate 0.035278 -0.035278 scale start_ol 448 1040 moveto 448 2688 lineto 896 2688 lineto 896 1057 lineto 896 689 1042 504 conicto 1188 320 1481 320 conicto 1832 320 2036 541 conicto 2240 763 2240 1145 conicto 2240 2688 lineto 2688 2688 lineto 2688 0 lineto 2240 0 lineto 2240 384 lineto 2081 157 1870 46 conicto 1660 -64 1382 -64 conicto 923 -64 685 217 conicto 448 499 448 1040 conicto 1554 2752 moveto 1554 2752 lineto end_ol grestore gsave 18.715328 -3.086050 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 18.965094 -3.086050 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 19.359720 -3.086050 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 19.766840 -3.086050 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 16.212700 -2.286050 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 16.415007 -2.286050 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 16.617314 -2.286050 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 16.819621 -2.286050 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 17.226740 -2.286050 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 17.404069 -2.286050 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 17.736254 -2.286050 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 18.143373 -2.286050 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 18.320702 -2.286050 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 18.712831 -2.286050 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore gsave 19.092475 -2.286050 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 17.053303 -1.335160 m 17.053303 0.220688 l 19.127767 0.220688 l 19.127767 -1.335160 l f 0.000000 0.000000 0.000000 srgb n 17.053303 -1.335160 m 17.053303 0.220688 l 19.127767 0.220688 l 19.127767 -1.335160 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 17.278036 -1.110426 m 17.278036 -0.038620 l 18.903034 -0.038620 l 18.903034 -1.110426 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 17.334220 0.220688 m 18.401705 0.220688 l 18.401705 0.462709 l 17.390403 0.462709 l ef 0.000000 0.000000 0.000000 srgb n 17.334220 0.220688 m 18.401705 0.220688 l 18.401705 0.462709 l 17.390403 0.462709 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 18.401705 0.220688 m 18.846850 0.220688 l 18.790667 0.462709 l 18.401705 0.462709 l ef 0.000000 0.000000 0.000000 srgb n 18.401705 0.220688 m 18.846850 0.220688 l 18.790667 0.462709 l 18.401705 0.462709 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 18.474311 0.293295 m 18.474311 0.390103 l 18.571119 0.390103 l 18.571119 0.293295 l f 0.000000 0.000000 0.000000 srgb n 18.474311 0.293295 m 18.474311 0.390103 l 18.571119 0.390103 l 18.571119 0.293295 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 17.883089 0.462709 m 18.297981 0.462709 l 18.297981 0.583720 l 18.505428 0.583720 l 18.505428 0.704730 l 17.675642 0.704730 l 17.675642 0.583720 l 17.883089 0.583720 l ef 0.000000 0.000000 0.000000 srgb n 17.883089 0.462709 m 18.297981 0.462709 l 18.297981 0.583720 l 18.505428 0.583720 l 18.505428 0.704730 l 17.675642 0.704730 l 17.675642 0.583720 l 17.883089 0.583720 l cp s showpage %%EndDocument @endspecial 2384 w(In)21 b(this)g(section)i(y)m(ou)f(will)g(b)s(e)f (giv)m(en)150 4197 y(information)37 b(ab)s(out)g(k)m(ey)h(concepts)g (in)f(X11)h(and)f(Xnee.)61 b(It)38 b(is)f(vital)h(that)g(y)m(ou)f(read) h(through)e(this)150 4307 y(c)m(hapter.)150 4525 y Fn(3.2)68 b(Mo)t(des)150 4685 y Fo(Xnee)31 b(has)f(four)g(mo)s(des:)225 4812 y Fg(\017)60 b Fo(record)225 4940 y Fg(\017)g Fo(repla)m(y)225 5067 y Fg(\017)g Fo(ret)m(yp)s(e)225 5195 y Fg(\017)g Fo(distribute)275 5340 y(The)29 b(distribution)h(mec)m(hanism)h(can)f (b)s(e)g(used)g(together)i(with)e(the)g(other)h(three.)p eop end %%Page: 6 9 TeXDict begin 6 8 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(F)-8 b(unctional)32 b(o)m(v)m(erview)2297 b(6)150 299 y Fi(3.2.1)63 b(Record)150 446 y Fo(When)29 b(record)h(mo)s(de)f(is)h (used)f(Xnee)h(receiv)m(es)h(a)f(cop)m(y)h(of)f(the)g(data)g(sen)m(t)g (to)h(and)e(from)g(the)h(X)f(serv)m(er.)150 555 y(The)h(cop)m(y)h(is)f (prin)m(ted)g(to)h(a)g(\014le.)41 b(Xnee)30 b(can)h(record)f(the)h (whole)f(X11)i(proto)s(col,)f(not)g(just)e(mouse)i(and)150 665 y(k)m(eyb)s(oard)f(ev)m(en)m(ts.)275 1399 y(This)f(picture)h(giv)m (es)i(an)e(o)m(v)m(erview)i(of)f(Xnee)g(and)f(the)g(\014les)g(used)g (when)f(recording.)150 4175 y @beginspecial 0 @llx 0 @lly 561 @urx 653 @ury 2834 @rwi @setspecial %%BeginDocument: xnrec.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: xnrec.dia %%Creator: Dia v0.97.2 %%CreationDate: Tue May 6 16:15:10 2014 %%For: hesa %%Orientation: Portrait %%Magnification: 1.0000 %%BoundingBox: 0 0 561 653 %%BeginSetup %%EndSetup %%EndComments %%BeginProlog [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /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 /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /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 /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def /cp {closepath} bind def /c {curveto} bind def /f {fill} bind def /a {arc} bind def /ef {eofill} bind def /ex {exch} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth pop} bind def /tr {translate} bind def /ellipsedict 8 dict def ellipsedict /mtrx matrix put /ellipse { ellipsedict begin /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc savematrix setmatrix end } def /mergeprocs { dup length 3 -1 roll dup length dup 5 1 roll 3 -1 roll add array cvx dup 3 -1 roll 0 exch putinterval dup 4 2 roll putinterval } bind def /dpi_x 300 def /dpi_y 300 def /conicto { /to_y exch def /to_x exch def /conic_cntrl_y exch def /conic_cntrl_x exch def currentpoint /p0_y exch def /p0_x exch def /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def /p2_x p1_x to_x p0_x sub 1 3 div mul add def /p2_y p1_y to_y p0_y sub 1 3 div mul add def p1_x p1_y p2_x p2_y to_x to_y curveto } bind def /start_ol { gsave 1.1 dpi_x div dup scale} bind def /end_ol { closepath fill grestore } bind def 28.346000 -28.346000 scale -3.721380 -18.483200 translate %%EndProlog 0.100000 slw [] 0 sd 1.000000 1.000000 1.000000 srgb n 3.771380 3.079330 m 6.261380 3.079330 l 6.861380 3.679330 l 6.861380 7.979330 l 3.771380 7.979330 l ef 0.000000 0.000000 0.000000 srgb n 3.771380 3.079330 m 6.261380 3.079330 l 6.861380 3.679330 l 6.861380 7.979330 l 3.771380 7.979330 l cp s 0.050000 slw n 6.261380 3.079330 m 6.261380 3.679330 l 6.861380 3.679330 l s gsave 4.121380 4.324330 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 4.558472 4.324330 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 4.963086 4.324330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 5.357712 4.324330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 4.121380 5.124330 translate 0.035278 -0.035278 scale start_ol 960 3136 moveto 960 1792 lineto 1552 1792 lineto 1881 1792 2060 1967 conicto 2240 2142 2240 2465 conicto 2240 2786 2060 2961 conicto 1881 3136 1552 3136 conicto 960 3136 lineto 448 3520 moveto 1552 3520 lineto 2145 3520 2448 3251 conicto 2752 2983 2752 2465 conicto 2752 1943 2448 1675 conicto 2145 1408 1552 1408 conicto 960 1408 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 4.496030 5.124330 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 4.743291 5.124330 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 5.135420 5.124330 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 -41 lineto 896 -559 695 -791 conicto 494 -1024 47 -1024 conicto -128 -1024 lineto -128 -640 lineto 28 -640 lineto 272 -640 360 -524 conicto 448 -408 448 -41 conicto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 5.312749 5.124330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 5.707375 5.124330 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 6.059544 5.124330 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 4.121380 5.924330 translate 0.035278 -0.035278 scale start_ol 448 3520 moveto 2496 3520 lineto 2496 3136 lineto 960 3136 lineto 960 2112 lineto 2368 2112 lineto 2368 1728 lineto 960 1728 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 4.441079 5.924330 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 4.618408 5.924330 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 4.795737 5.924330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 4.121380 7.524330 translate 0.035278 -0.035278 scale start_ol 1536 3712 moveto 1211 3163 1053 2626 conicto 896 2090 896 1538 conicto 896 987 1055 446 conicto 1214 -94 1536 -640 conicto 1148 -640 lineto 797 -79 622 462 conicto 448 1004 448 1538 conicto 448 2070 621 2609 conicto 794 3149 1148 3712 conicto 1536 3712 lineto end_ol grestore gsave 4.371147 7.524330 translate 0.035278 -0.035278 scale start_ol 576 576 moveto 1088 576 lineto 1088 0 lineto 576 0 lineto 576 576 lineto end_ol grestore gsave 4.573454 7.524330 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 4.953098 7.524330 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 5.357712 7.524330 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 5.764831 7.524330 translate 0.035278 -0.035278 scale start_ol 384 3712 moveto 772 3712 lineto 1123 3149 1297 2609 conicto 1472 2070 1472 1538 conicto 1472 1004 1297 462 conicto 1123 -79 772 -640 conicto 384 -640 lineto 706 -94 865 446 conicto 1024 987 1024 1538 conicto 1024 2090 865 2626 conicto 706 3163 384 3712 conicto end_ol grestore 0.100000 slw [] 0 sd 1.000000 1.000000 1.000000 srgb n 20.100000 3.075000 m 22.842500 3.075000 l 23.442500 3.675000 l 23.442500 7.975000 l 20.100000 7.975000 l ef 0.000000 0.000000 0.000000 srgb n 20.100000 3.075000 m 22.842500 3.075000 l 23.442500 3.675000 l 23.442500 7.975000 l 20.100000 7.975000 l cp s 0.050000 slw n 22.842500 3.075000 m 22.842500 3.675000 l 23.442500 3.675000 l s gsave 20.450000 4.320000 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 20.887092 4.320000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 21.291706 4.320000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 21.686332 4.320000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 20.450000 5.120000 translate 0.035278 -0.035278 scale start_ol 2624 3392 moveto 2624 2944 lineto 2352 3073 2111 3136 conicto 1870 3200 1645 3200 conicto 1255 3200 1043 3052 conicto 832 2904 832 2631 conicto 832 2402 969 2285 conicto 1107 2169 1491 2097 conicto 1773 2039 lineto 2308 1937 2562 1678 conicto 2816 1420 2816 986 conicto 2816 469 2468 202 conicto 2121 -64 1450 -64 conicto 1197 -64 911 0 conicto 626 65 320 192 conicto 320 704 lineto 613 513 893 416 conicto 1174 320 1445 320 conicto 1857 320 2080 485 conicto 2304 650 2304 955 conicto 2304 1221 2148 1371 conicto 1992 1522 1636 1597 conicto 1352 1652 lineto 807 1756 563 1978 conicto 320 2201 320 2597 conicto 320 3056 654 3320 conicto 989 3584 1576 3584 conicto 1828 3584 2089 3536 conicto 2351 3488 2624 3392 conicto end_ol grestore gsave 20.857119 5.120000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 21.251745 5.120000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 21.583930 5.120000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 21.916114 5.120000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 22.093443 5.120000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 22.485572 5.120000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 20.450000 5.920000 translate 0.035278 -0.035278 scale start_ol 448 3520 moveto 2496 3520 lineto 2496 3136 lineto 960 3136 lineto 960 2112 lineto 2368 2112 lineto 2368 1728 lineto 960 1728 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 20.769699 5.920000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 20.947028 5.920000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 21.124357 5.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 20.450000 7.520000 translate 0.035278 -0.035278 scale start_ol 1536 3712 moveto 1211 3163 1053 2626 conicto 896 2090 896 1538 conicto 896 987 1055 446 conicto 1214 -94 1536 -640 conicto 1148 -640 lineto 797 -79 622 462 conicto 448 1004 448 1538 conicto 448 2070 621 2609 conicto 794 3149 1148 3712 conicto 1536 3712 lineto end_ol grestore gsave 20.699767 7.520000 translate 0.035278 -0.035278 scale start_ol 576 576 moveto 1088 576 lineto 1088 0 lineto 576 0 lineto 576 576 lineto end_ol grestore gsave 20.902074 7.520000 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 21.281718 7.520000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 21.686332 7.520000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 22.018516 7.520000 translate 0.035278 -0.035278 scale start_ol 384 3712 moveto 772 3712 lineto 1123 3149 1297 2609 conicto 1472 2070 1472 1538 conicto 1472 1004 1297 462 conicto 1123 -79 772 -640 conicto 384 -640 lineto 706 -94 865 446 conicto 1024 987 1024 1538 conicto 1024 2090 865 2626 conicto 706 3163 384 3712 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slj 1.000000 1.000000 1.000000 srgb n 9.750000 2.700000 m 9.750000 8.900270 l 16.950000 8.900270 l 16.950000 2.700000 l f 0.000000 0.000000 0.000000 srgb n 9.750000 2.700000 m 9.750000 8.900270 l 16.950000 8.900270 l 16.950000 2.700000 l cp s 1.000000 1.000000 1.000000 srgb n 13.973750 3.725000 m 13.973750 5.725000 l 16.676250 5.725000 l 16.676250 3.725000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 13.973750 3.725000 m 13.973750 5.725000 l 16.676250 5.725000 l 16.676250 3.725000 l cp s gsave 14.523750 4.920000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 14.930869 4.920000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 15.335483 4.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 15.730109 4.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 12.173750 5.175000 m 12.173750 7.175000 l 14.876250 7.175000 l 14.876250 5.175000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 12.173750 5.175000 m 12.173750 7.175000 l 14.876250 7.175000 l 14.876250 5.175000 l cp s gsave 12.723750 6.370000 translate 0.035278 -0.035278 scale start_ol 2176 1375 moveto 2176 1848 1982 2108 conicto 1789 2368 1439 2368 conicto 1091 2368 897 2108 conicto 704 1848 704 1375 conicto 704 904 897 644 conicto 1091 384 1439 384 conicto 1789 384 1982 644 conicto 2176 904 2176 1375 conicto 2624 347 moveto 2624 -347 2323 -685 conicto 2023 -1024 1404 -1024 conicto 1174 -1024 971 -992 conicto 768 -961 576 -896 conicto 576 -448 lineto 766 -546 951 -593 conicto 1137 -640 1329 -640 conicto 1754 -640 1965 -415 conicto 2176 -190 2176 264 conicto 2176 448 lineto 2042 223 1833 111 conicto 1624 0 1332 0 conicto 848 0 552 376 conicto 256 753 256 1375 conicto 256 1999 552 2375 conicto 848 2752 1332 2752 conicto 1624 2752 1833 2640 conicto 2042 2529 2176 2304 conicto 2176 2688 lineto 2624 2688 lineto 2624 347 lineto end_ol grestore gsave 13.130869 6.370000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 13.535483 6.370000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.930109 6.370000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 10.176250 6.600000 m 10.176250 8.600000 l 12.823750 8.600000 l 12.823750 6.600000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 10.176250 6.600000 m 10.176250 8.600000 l 12.823750 8.600000 l 12.823750 6.600000 l cp s gsave 10.726250 7.795000 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 11.078419 7.795000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 11.483033 7.795000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 11.877659 7.795000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 11.050000 3.500000 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 11.487092 3.500000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 11.891706 3.500000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.286332 3.500000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.680958 3.500000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.883265 3.500000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 13.275394 3.500000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 13.682513 3.500000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 14.089633 3.500000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 14.266961 3.500000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.444290 3.500000 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 14.796459 3.500000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 15.188588 3.500000 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 15.438354 3.500000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 15.615683 3.500000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 16.007812 3.500000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 16.412426 3.500000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.750000 9.300270 m 9.750000 11.450000 l 16.996380 11.450000 l 16.996380 9.300270 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.750000 9.300270 m 9.750000 11.450000 l 16.996380 11.450000 l 16.996380 9.300270 l cp s gsave 12.204440 10.570135 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 12.381769 10.570135 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 12.559097 10.570135 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 12.966217 10.570135 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 13.345861 10.570135 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 13.750475 10.570135 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.145101 10.570135 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.640000 14.209100 m 9.640000 16.169100 l 16.907160 16.169100 l 16.907160 14.209100 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.640000 14.209100 m 9.640000 16.169100 l 16.907160 16.169100 l 16.907160 14.209100 l cp s gsave 10.503580 15.384100 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 10.883224 15.384100 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 11.060553 15.384100 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 11.237881 15.384100 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 11.645001 15.384100 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 11.847308 15.384100 translate 0.035278 -0.035278 scale start_ol 2240 3072 moveto 2240 1728 lineto 3584 1728 lineto 3584 1344 lineto 2240 1344 lineto 2240 0 lineto 1856 0 lineto 1856 1344 lineto 512 1344 lineto 512 1728 lineto 1856 1728 lineto 1856 3072 lineto 2240 3072 lineto end_ol grestore gsave 12.384304 15.384100 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.586612 15.384100 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.971250 15.384100 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 13.350894 15.384100 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 13.600660 15.384100 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.995286 15.384100 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 14.399900 15.384100 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 14.732085 15.384100 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.909413 15.384100 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 15.301542 15.384100 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 15.706156 15.384100 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.693000 16.533200 m 9.693000 18.433200 l 16.936490 18.433200 l 16.936490 16.533200 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.693000 16.533200 m 9.693000 18.433200 l 16.936490 18.433200 l 16.936490 16.533200 l cp s gsave 11.980995 17.678200 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 12.418087 17.678200 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.620394 17.678200 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 12.952578 17.678200 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.347204 17.678200 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 13.609456 17.678200 translate 0.035278 -0.035278 scale start_ol 128 2688 moveto 586 2688 lineto 1408 432 lineto 2230 2688 lineto 2688 2688 lineto 1702 0 lineto 1114 0 lineto 128 2688 lineto end_ol grestore gsave 13.989100 17.678200 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.383726 17.678200 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 17.646400 4.835060 m 18.646400 4.835060 l 18.646400 4.335060 l 19.646400 5.335060 l 18.646400 6.335060 l 18.646400 5.835060 l 17.646400 5.835060 l ef 0.000000 0.000000 0.000000 srgb n 17.646400 4.835060 m 18.646400 4.835060 l 18.646400 4.335060 l 19.646400 5.335060 l 18.646400 6.335060 l 18.646400 5.835060 l 17.646400 5.835060 l cp s 0 slc 0 slj [] 0 sd n 17.646400 4.835060 m 18.646400 4.835060 l 18.646400 4.335060 l 19.646400 5.335060 l 18.646400 6.335060 l 18.646400 5.835060 l 17.646400 5.835060 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 7.161370 4.888270 m 8.161370 4.888270 l 8.161370 4.388270 l 9.161370 5.388270 l 8.161370 6.388270 l 8.161370 5.888270 l 7.161370 5.888270 l ef 0.000000 0.000000 0.000000 srgb n 7.161370 4.888270 m 8.161370 4.888270 l 8.161370 4.388270 l 9.161370 5.388270 l 8.161370 6.388270 l 8.161370 5.888270 l 7.161370 5.888270 l cp s 0 slc 0 slj [] 0 sd n 7.161370 4.888270 m 8.161370 4.888270 l 8.161370 4.388270 l 9.161370 5.388270 l 8.161370 6.388270 l 8.161370 5.888270 l 7.161370 5.888270 l cp s gsave 9.831010 12.921000 translate 0.035278 -0.035278 scale start_ol 2140 1632 moveto 2295 1581 2442 1413 conicto 2590 1245 2738 952 conicto 3200 0 lineto 2709 0 lineto 2250 893 lineto 2077 1243 1915 1357 conicto 1753 1472 1473 1472 conicto 960 1472 lineto 960 0 lineto 448 0 lineto 448 3520 lineto 1552 3520 lineto 2157 3520 2454 3265 conicto 2752 3010 2752 2496 conicto 2752 2161 2595 1939 conicto 2439 1718 2140 1632 conicto 960 3136 moveto 960 1856 lineto 1552 1856 lineto 1893 1856 2066 2019 conicto 2240 2182 2240 2498 conicto 2240 2815 2066 2975 conicto 1893 3136 1552 3136 conicto 960 3136 lineto end_ol grestore gsave 10.248117 12.921000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 10.642743 12.921000 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 10.994912 12.921000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 11.387041 12.921000 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 11.639305 12.921000 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 12.046424 12.921000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.441050 12.921000 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 12.848170 12.921000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 13.050477 12.921000 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 13.457596 12.921000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 13.849725 12.921000 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 14.099492 12.921000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 14.535800 13.703100 m 14.535800 12.703100 l 14.035800 12.703100 l 15.035800 11.703100 l 16.035800 12.703100 l 15.535800 12.703100 l 15.535800 13.703100 l ef 0.000000 0.000000 0.000000 srgb n 14.535800 13.703100 m 14.535800 12.703100 l 14.035800 12.703100 l 15.035800 11.703100 l 16.035800 12.703100 l 15.535800 12.703100 l 15.535800 13.703100 l cp s 0 slc 0 slj [] 0 sd n 14.535800 13.703100 m 14.535800 12.703100 l 14.035800 12.703100 l 15.035800 11.703100 l 16.035800 12.703100 l 15.535800 12.703100 l 15.535800 13.703100 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 10.314460 0.281447 m 10.314460 1.281447 l 9.814460 1.281447 l 10.814460 2.281447 l 11.814460 1.281447 l 11.314460 1.281447 l 11.314460 0.281447 l ef 0.000000 0.000000 0.000000 srgb n 10.314460 0.281447 m 10.314460 1.281447 l 9.814460 1.281447 l 10.814460 2.281447 l 11.814460 1.281447 l 11.314460 1.281447 l 11.314460 0.281447 l cp s 0 slc 0 slj [] 0 sd n 10.314460 0.281447 m 10.314460 1.281447 l 9.814460 1.281447 l 10.814460 2.281447 l 11.814460 1.281447 l 11.314460 1.281447 l 11.314460 0.281447 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 15.456300 2.104142 m 15.456300 1.104142 l 14.956300 1.104142 l 15.956300 0.104142 l 16.956300 1.104142 l 16.456300 1.104142 l 16.456300 2.104142 l ef 0.000000 0.000000 0.000000 srgb n 15.456300 2.104142 m 15.456300 1.104142 l 14.956300 1.104142 l 15.956300 0.104142 l 16.956300 1.104142 l 16.456300 1.104142 l 16.456300 2.104142 l cp s 0 slc 0 slj [] 0 sd n 15.456300 2.104142 m 15.456300 1.104142 l 14.956300 1.104142 l 15.956300 0.104142 l 16.956300 1.104142 l 16.456300 1.104142 l 16.456300 2.104142 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 9.779003 -2.661820 m 9.779003 -1.105972 l 11.853467 -1.105972 l 11.853467 -2.661820 l f 0.000000 0.000000 0.000000 srgb n 9.779003 -2.661820 m 9.779003 -1.105972 l 11.853467 -1.105972 l 11.853467 -2.661820 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 10.003736 -2.437086 m 10.003736 -1.365280 l 11.628734 -1.365280 l 11.628734 -2.437086 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 10.059920 -1.105972 m 11.127405 -1.105972 l 11.127405 -0.863951 l 10.116103 -0.863951 l ef 0.000000 0.000000 0.000000 srgb n 10.059920 -1.105972 m 11.127405 -1.105972 l 11.127405 -0.863951 l 10.116103 -0.863951 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 11.127405 -1.105972 m 11.572550 -1.105972 l 11.516367 -0.863951 l 11.127405 -0.863951 l ef 0.000000 0.000000 0.000000 srgb n 11.127405 -1.105972 m 11.572550 -1.105972 l 11.516367 -0.863951 l 11.127405 -0.863951 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 11.200011 -1.033365 m 11.200011 -0.936557 l 11.296819 -0.936557 l 11.296819 -1.033365 l f 0.000000 0.000000 0.000000 srgb n 11.200011 -1.033365 m 11.200011 -0.936557 l 11.296819 -0.936557 l 11.296819 -1.033365 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 10.608789 -0.863951 m 11.023681 -0.863951 l 11.023681 -0.742940 l 11.231128 -0.742940 l 11.231128 -0.621930 l 10.401342 -0.621930 l 10.401342 -0.742940 l 10.608789 -0.742940 l ef 0.000000 0.000000 0.000000 srgb n 10.608789 -0.863951 m 11.023681 -0.863951 l 11.023681 -0.742940 l 11.231128 -0.742940 l 11.231128 -0.621930 l 10.401342 -0.621930 l 10.401342 -0.742940 l 10.608789 -0.742940 l cp s gsave 9.637160 -3.725650 translate 0.035278 -0.035278 scale start_ol 2140 1632 moveto 2295 1581 2442 1413 conicto 2590 1245 2738 952 conicto 3200 0 lineto 2709 0 lineto 2250 893 lineto 2077 1243 1915 1357 conicto 1753 1472 1473 1472 conicto 960 1472 lineto 960 0 lineto 448 0 lineto 448 3520 lineto 1552 3520 lineto 2157 3520 2454 3265 conicto 2752 3010 2752 2496 conicto 2752 2161 2595 1939 conicto 2439 1718 2140 1632 conicto 960 3136 moveto 960 1856 lineto 1552 1856 lineto 1893 1856 2066 2019 conicto 2240 2182 2240 2498 conicto 2240 2815 2066 2975 conicto 1893 3136 1552 3136 conicto 960 3136 lineto end_ol grestore gsave 10.054267 -3.725650 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 10.448893 -3.725650 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 10.801062 -3.725650 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 11.193191 -3.725650 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 11.445455 -3.725650 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 11.852574 -3.725650 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.247200 -3.725650 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 12.654320 -3.725650 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 9.637160 -2.925650 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 9.839467 -2.925650 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 10.041774 -2.925650 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 10.448893 -2.925650 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 10.626222 -2.925650 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 10.958406 -2.925650 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 11.365526 -2.925650 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 11.542855 -2.925650 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 11.934984 -2.925650 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.282703 -2.963060 m 14.282703 -1.407212 l 16.357167 -1.407212 l 16.357167 -2.963060 l f 0.000000 0.000000 0.000000 srgb n 14.282703 -2.963060 m 14.282703 -1.407212 l 16.357167 -1.407212 l 16.357167 -2.963060 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 14.507436 -2.738326 m 14.507436 -1.666520 l 16.132434 -1.666520 l 16.132434 -2.738326 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.563620 -1.407212 m 15.631105 -1.407212 l 15.631105 -1.165191 l 14.619803 -1.165191 l ef 0.000000 0.000000 0.000000 srgb n 14.563620 -1.407212 m 15.631105 -1.407212 l 15.631105 -1.165191 l 14.619803 -1.165191 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.631105 -1.407212 m 16.076250 -1.407212 l 16.020067 -1.165191 l 15.631105 -1.165191 l ef 0.000000 0.000000 0.000000 srgb n 15.631105 -1.407212 m 16.076250 -1.407212 l 16.020067 -1.165191 l 15.631105 -1.165191 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 15.703711 -1.334605 m 15.703711 -1.237797 l 15.800519 -1.237797 l 15.800519 -1.334605 l f 0.000000 0.000000 0.000000 srgb n 15.703711 -1.334605 m 15.703711 -1.237797 l 15.800519 -1.237797 l 15.800519 -1.334605 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.112489 -1.165191 m 15.527381 -1.165191 l 15.527381 -1.044180 l 15.734828 -1.044180 l 15.734828 -0.923170 l 14.905042 -0.923170 l 14.905042 -1.044180 l 15.112489 -1.044180 l ef 0.000000 0.000000 0.000000 srgb n 15.112489 -1.165191 m 15.527381 -1.165191 l 15.527381 -1.044180 l 15.734828 -1.044180 l 15.734828 -0.923170 l 14.905042 -0.923170 l 14.905042 -1.044180 l 15.112489 -1.044180 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.647803 -2.550820 m 14.647803 -0.994972 l 16.722267 -0.994972 l 16.722267 -2.550820 l f 0.000000 0.000000 0.000000 srgb n 14.647803 -2.550820 m 14.647803 -0.994972 l 16.722267 -0.994972 l 16.722267 -2.550820 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 14.872536 -2.326086 m 14.872536 -1.254280 l 16.497534 -1.254280 l 16.497534 -2.326086 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.928720 -0.994972 m 15.996205 -0.994972 l 15.996205 -0.752951 l 14.984903 -0.752951 l ef 0.000000 0.000000 0.000000 srgb n 14.928720 -0.994972 m 15.996205 -0.994972 l 15.996205 -0.752951 l 14.984903 -0.752951 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.996205 -0.994972 m 16.441350 -0.994972 l 16.385167 -0.752951 l 15.996205 -0.752951 l ef 0.000000 0.000000 0.000000 srgb n 15.996205 -0.994972 m 16.441350 -0.994972 l 16.385167 -0.752951 l 15.996205 -0.752951 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 16.068811 -0.922365 m 16.068811 -0.825557 l 16.165619 -0.825557 l 16.165619 -0.922365 l f 0.000000 0.000000 0.000000 srgb n 16.068811 -0.922365 m 16.068811 -0.825557 l 16.165619 -0.825557 l 16.165619 -0.922365 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.477589 -0.752951 m 15.892481 -0.752951 l 15.892481 -0.631940 l 16.099928 -0.631940 l 16.099928 -0.510930 l 15.270142 -0.510930 l 15.270142 -0.631940 l 15.477589 -0.631940 l ef 0.000000 0.000000 0.000000 srgb n 15.477589 -0.752951 m 15.892481 -0.752951 l 15.892481 -0.631940 l 16.099928 -0.631940 l 16.099928 -0.510930 l 15.270142 -0.510930 l 15.270142 -0.631940 l 15.477589 -0.631940 l cp s gsave 14.257700 -3.933800 translate 0.035278 -0.035278 scale start_ol 960 3136 moveto 960 384 lineto 1536 384 lineto 2266 384 2605 716 conicto 2944 1048 2944 1764 conicto 2944 2475 2605 2805 conicto 2266 3136 1536 3136 conicto 960 3136 lineto 448 3520 moveto 1463 3520 lineto 2493 3520 2974 3094 conicto 3456 2669 3456 1764 conicto 3456 853 2972 426 conicto 2488 0 1463 0 conicto 448 0 lineto 448 3520 lineto end_ol grestore gsave 14.749734 -3.933800 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.927063 -3.933800 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 15.259247 -3.933800 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 15.509014 -3.933800 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 15.771265 -3.933800 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 15.948594 -3.933800 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 16.355714 -3.933800 translate 0.035278 -0.035278 scale start_ol 448 1040 moveto 448 2688 lineto 896 2688 lineto 896 1057 lineto 896 689 1042 504 conicto 1188 320 1481 320 conicto 1832 320 2036 541 conicto 2240 763 2240 1145 conicto 2240 2688 lineto 2688 2688 lineto 2688 0 lineto 2240 0 lineto 2240 384 lineto 2081 157 1870 46 conicto 1660 -64 1382 -64 conicto 923 -64 685 217 conicto 448 499 448 1040 conicto 1554 2752 moveto 1554 2752 lineto end_ol grestore gsave 16.760328 -3.933800 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 17.010094 -3.933800 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 17.404720 -3.933800 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 17.811840 -3.933800 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 14.257700 -3.133800 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 14.460007 -3.133800 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 14.662314 -3.133800 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 14.864621 -3.133800 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 15.271740 -3.133800 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 15.449069 -3.133800 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 15.781254 -3.133800 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 16.188373 -3.133800 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 16.365702 -3.133800 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 16.757831 -3.133800 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore gsave 17.137475 -3.133800 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.098303 -2.182920 m 15.098303 -0.627072 l 17.172767 -0.627072 l 17.172767 -2.182920 l f 0.000000 0.000000 0.000000 srgb n 15.098303 -2.182920 m 15.098303 -0.627072 l 17.172767 -0.627072 l 17.172767 -2.182920 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 15.323036 -1.958186 m 15.323036 -0.886380 l 16.948034 -0.886380 l 16.948034 -1.958186 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.379220 -0.627072 m 16.446705 -0.627072 l 16.446705 -0.385051 l 15.435403 -0.385051 l ef 0.000000 0.000000 0.000000 srgb n 15.379220 -0.627072 m 16.446705 -0.627072 l 16.446705 -0.385051 l 15.435403 -0.385051 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 16.446705 -0.627072 m 16.891850 -0.627072 l 16.835667 -0.385051 l 16.446705 -0.385051 l ef 0.000000 0.000000 0.000000 srgb n 16.446705 -0.627072 m 16.891850 -0.627072 l 16.835667 -0.385051 l 16.446705 -0.385051 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 16.519311 -0.554465 m 16.519311 -0.457657 l 16.616119 -0.457657 l 16.616119 -0.554465 l f 0.000000 0.000000 0.000000 srgb n 16.519311 -0.554465 m 16.519311 -0.457657 l 16.616119 -0.457657 l 16.616119 -0.554465 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.928089 -0.385051 m 16.342981 -0.385051 l 16.342981 -0.264040 l 16.550428 -0.264040 l 16.550428 -0.143030 l 15.720642 -0.143030 l 15.720642 -0.264040 l 15.928089 -0.264040 l ef 0.000000 0.000000 0.000000 srgb n 15.928089 -0.385051 m 16.342981 -0.385051 l 16.342981 -0.264040 l 16.550428 -0.264040 l 16.550428 -0.143030 l 15.720642 -0.143030 l 15.720642 -0.264040 l 15.928089 -0.264040 l cp s showpage %%EndDocument @endspecial 799 x Fi(3.2.2)63 b(Repla)m(y)150 5121 y Fo(When)33 b(repla)m(y)h(mo)s(de)e(is)h(used)g(Xnee)g(reads)g(data)h (from)f(a)g(\014le)g(or)h(stdin.)48 b(These)33 b(data)h(is)f(either)g (sen)m(t)150 5230 y(to)i(the)f(serv)m(er)g(\(if)h(it)f(is)g(a)h(k)m (eyb)s(oard)f(or)g(a)g(mouse)g(ev)m(en)m(t\))i(or)e(used)g(to)g(sync)m (hronise)g(with)g(\(if)g(an)m(y)h(of)150 5340 y(the)c(other)f(data\).)p eop end %%Page: 7 10 TeXDict begin 7 9 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(F)-8 b(unctional)32 b(o)m(v)m(erview)2297 b(7)275 299 y(This)29 b(picture)h(giv)m(es)i(an)e(o)m(v)m(erview)i(of)f(Xnee)g(and) f(the)g(\014les)g(used)g(when)f(repla)m(ying.)150 3054 y @beginspecial 0 @llx 0 @lly 561 @urx 648 @ury 2834 @rwi @setspecial %%BeginDocument: xnrep.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: xnrep.dia %%Creator: Dia v0.97.2 %%CreationDate: Tue May 6 16:15:10 2014 %%For: hesa %%Orientation: Portrait %%Magnification: 1.0000 %%BoundingBox: 0 0 561 648 %%BeginSetup %%EndSetup %%EndComments %%BeginProlog [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /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 /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /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 /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def /cp {closepath} bind def /c {curveto} bind def /f {fill} bind def /a {arc} bind def /ef {eofill} bind def /ex {exch} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth pop} bind def /tr {translate} bind def /ellipsedict 8 dict def ellipsedict /mtrx matrix put /ellipse { ellipsedict begin /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc savematrix setmatrix end } def /mergeprocs { dup length 3 -1 roll dup length dup 5 1 roll 3 -1 roll add array cvx dup 3 -1 roll 0 exch putinterval dup 4 2 roll putinterval } bind def /dpi_x 300 def /dpi_y 300 def /conicto { /to_y exch def /to_x exch def /conic_cntrl_y exch def /conic_cntrl_x exch def currentpoint /p0_y exch def /p0_x exch def /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def /p2_x p1_x to_x p0_x sub 1 3 div mul add def /p2_y p1_y to_y p0_y sub 1 3 div mul add def p1_x p1_y p2_x p2_y to_x to_y curveto } bind def /start_ol { gsave 1.1 dpi_x div dup scale} bind def /end_ol { closepath fill grestore } bind def 28.346000 -28.346000 scale -3.721380 -18.782090 translate %%EndProlog 0.100000 slw [] 0 sd 1.000000 1.000000 1.000000 srgb n 3.771380 3.079330 m 6.261380 3.079330 l 6.861380 3.679330 l 6.861380 7.979330 l 3.771380 7.979330 l ef 0.000000 0.000000 0.000000 srgb n 3.771380 3.079330 m 6.261380 3.079330 l 6.861380 3.679330 l 6.861380 7.979330 l 3.771380 7.979330 l cp s 0.050000 slw n 6.261380 3.079330 m 6.261380 3.679330 l 6.861380 3.679330 l s 0.498039 0.498039 0.498039 srgb gsave 4.121380 4.324330 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 4.558472 4.324330 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 4.963086 4.324330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 5.357712 4.324330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 4.121380 5.124330 translate 0.035278 -0.035278 scale start_ol 960 3136 moveto 960 1792 lineto 1552 1792 lineto 1881 1792 2060 1967 conicto 2240 2142 2240 2465 conicto 2240 2786 2060 2961 conicto 1881 3136 1552 3136 conicto 960 3136 lineto 448 3520 moveto 1552 3520 lineto 2145 3520 2448 3251 conicto 2752 2983 2752 2465 conicto 2752 1943 2448 1675 conicto 2145 1408 1552 1408 conicto 960 1408 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 4.496030 5.124330 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 4.743291 5.124330 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 5.135420 5.124330 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 -41 lineto 896 -559 695 -791 conicto 494 -1024 47 -1024 conicto -128 -1024 lineto -128 -640 lineto 28 -640 lineto 272 -640 360 -524 conicto 448 -408 448 -41 conicto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 5.312749 5.124330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 5.707375 5.124330 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 6.059544 5.124330 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 4.121380 5.924330 translate 0.035278 -0.035278 scale start_ol 448 3520 moveto 2496 3520 lineto 2496 3136 lineto 960 3136 lineto 960 2112 lineto 2368 2112 lineto 2368 1728 lineto 960 1728 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 4.441079 5.924330 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 4.618408 5.924330 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 4.795737 5.924330 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 4.121380 7.524330 translate 0.035278 -0.035278 scale start_ol 1536 3712 moveto 1211 3163 1053 2626 conicto 896 2090 896 1538 conicto 896 987 1055 446 conicto 1214 -94 1536 -640 conicto 1148 -640 lineto 797 -79 622 462 conicto 448 1004 448 1538 conicto 448 2070 621 2609 conicto 794 3149 1148 3712 conicto 1536 3712 lineto end_ol grestore gsave 4.371147 7.524330 translate 0.035278 -0.035278 scale start_ol 576 576 moveto 1088 576 lineto 1088 0 lineto 576 0 lineto 576 576 lineto end_ol grestore gsave 4.573454 7.524330 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 4.953098 7.524330 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 5.357712 7.524330 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 5.764831 7.524330 translate 0.035278 -0.035278 scale start_ol 384 3712 moveto 772 3712 lineto 1123 3149 1297 2609 conicto 1472 2070 1472 1538 conicto 1472 1004 1297 462 conicto 1123 -79 772 -640 conicto 384 -640 lineto 706 -94 865 446 conicto 1024 987 1024 1538 conicto 1024 2090 865 2626 conicto 706 3163 384 3712 conicto end_ol grestore 0.100000 slw [] 0 sd 1.000000 1.000000 1.000000 srgb n 20.100000 3.075000 m 22.842500 3.075000 l 23.442500 3.675000 l 23.442500 7.975000 l 20.100000 7.975000 l ef 0.000000 0.000000 0.000000 srgb n 20.100000 3.075000 m 22.842500 3.075000 l 23.442500 3.675000 l 23.442500 7.975000 l 20.100000 7.975000 l cp s 0.050000 slw n 22.842500 3.075000 m 22.842500 3.675000 l 23.442500 3.675000 l s gsave 20.450000 4.320000 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 20.887092 4.320000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 21.291706 4.320000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 21.686332 4.320000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 20.450000 5.120000 translate 0.035278 -0.035278 scale start_ol 2624 3392 moveto 2624 2944 lineto 2352 3073 2111 3136 conicto 1870 3200 1645 3200 conicto 1255 3200 1043 3052 conicto 832 2904 832 2631 conicto 832 2402 969 2285 conicto 1107 2169 1491 2097 conicto 1773 2039 lineto 2308 1937 2562 1678 conicto 2816 1420 2816 986 conicto 2816 469 2468 202 conicto 2121 -64 1450 -64 conicto 1197 -64 911 0 conicto 626 65 320 192 conicto 320 704 lineto 613 513 893 416 conicto 1174 320 1445 320 conicto 1857 320 2080 485 conicto 2304 650 2304 955 conicto 2304 1221 2148 1371 conicto 1992 1522 1636 1597 conicto 1352 1652 lineto 807 1756 563 1978 conicto 320 2201 320 2597 conicto 320 3056 654 3320 conicto 989 3584 1576 3584 conicto 1828 3584 2089 3536 conicto 2351 3488 2624 3392 conicto end_ol grestore gsave 20.857119 5.120000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 21.251745 5.120000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 21.583930 5.120000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 21.916114 5.120000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 22.093443 5.120000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 22.485572 5.120000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 20.450000 5.920000 translate 0.035278 -0.035278 scale start_ol 448 3520 moveto 2496 3520 lineto 2496 3136 lineto 960 3136 lineto 960 2112 lineto 2368 2112 lineto 2368 1728 lineto 960 1728 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 20.769699 5.920000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 20.947028 5.920000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 21.124357 5.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 20.450000 7.520000 translate 0.035278 -0.035278 scale start_ol 1536 3712 moveto 1211 3163 1053 2626 conicto 896 2090 896 1538 conicto 896 987 1055 446 conicto 1214 -94 1536 -640 conicto 1148 -640 lineto 797 -79 622 462 conicto 448 1004 448 1538 conicto 448 2070 621 2609 conicto 794 3149 1148 3712 conicto 1536 3712 lineto end_ol grestore gsave 20.699767 7.520000 translate 0.035278 -0.035278 scale start_ol 576 576 moveto 1088 576 lineto 1088 0 lineto 576 0 lineto 576 576 lineto end_ol grestore gsave 20.902074 7.520000 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 21.281718 7.520000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 21.686332 7.520000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 22.018516 7.520000 translate 0.035278 -0.035278 scale start_ol 384 3712 moveto 772 3712 lineto 1123 3149 1297 2609 conicto 1472 2070 1472 1538 conicto 1472 1004 1297 462 conicto 1123 -79 772 -640 conicto 384 -640 lineto 706 -94 865 446 conicto 1024 987 1024 1538 conicto 1024 2090 865 2626 conicto 706 3163 384 3712 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slj 1.000000 1.000000 1.000000 srgb n 9.750000 2.700000 m 9.750000 8.900270 l 16.950000 8.900270 l 16.950000 2.700000 l f 0.000000 0.000000 0.000000 srgb n 9.750000 2.700000 m 9.750000 8.900270 l 16.950000 8.900270 l 16.950000 2.700000 l cp s 1.000000 1.000000 1.000000 srgb n 13.973750 3.725000 m 13.973750 5.725000 l 16.676250 5.725000 l 16.676250 3.725000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 13.973750 3.725000 m 13.973750 5.725000 l 16.676250 5.725000 l 16.676250 3.725000 l cp s gsave 14.523750 4.920000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 14.930869 4.920000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 15.335483 4.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 15.730109 4.920000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 12.173750 5.175000 m 12.173750 7.175000 l 14.876250 7.175000 l 14.876250 5.175000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 12.173750 5.175000 m 12.173750 7.175000 l 14.876250 7.175000 l 14.876250 5.175000 l cp s gsave 12.723750 6.370000 translate 0.035278 -0.035278 scale start_ol 2176 1375 moveto 2176 1848 1982 2108 conicto 1789 2368 1439 2368 conicto 1091 2368 897 2108 conicto 704 1848 704 1375 conicto 704 904 897 644 conicto 1091 384 1439 384 conicto 1789 384 1982 644 conicto 2176 904 2176 1375 conicto 2624 347 moveto 2624 -347 2323 -685 conicto 2023 -1024 1404 -1024 conicto 1174 -1024 971 -992 conicto 768 -961 576 -896 conicto 576 -448 lineto 766 -546 951 -593 conicto 1137 -640 1329 -640 conicto 1754 -640 1965 -415 conicto 2176 -190 2176 264 conicto 2176 448 lineto 2042 223 1833 111 conicto 1624 0 1332 0 conicto 848 0 552 376 conicto 256 753 256 1375 conicto 256 1999 552 2375 conicto 848 2752 1332 2752 conicto 1624 2752 1833 2640 conicto 2042 2529 2176 2304 conicto 2176 2688 lineto 2624 2688 lineto 2624 347 lineto end_ol grestore gsave 13.130869 6.370000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 13.535483 6.370000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.930109 6.370000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 10.176250 6.600000 m 10.176250 8.600000 l 12.823750 8.600000 l 12.823750 6.600000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 10.176250 6.600000 m 10.176250 8.600000 l 12.823750 8.600000 l 12.823750 6.600000 l cp s gsave 10.726250 7.795000 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 11.078419 7.795000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 11.483033 7.795000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 11.877659 7.795000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 11.050000 3.500000 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 11.487092 3.500000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 11.891706 3.500000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.286332 3.500000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.680958 3.500000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.883265 3.500000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 13.275394 3.500000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 13.682513 3.500000 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 14.089633 3.500000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 14.266961 3.500000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.444290 3.500000 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 14.796459 3.500000 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 15.188588 3.500000 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 15.438354 3.500000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 15.615683 3.500000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 16.007812 3.500000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 16.412426 3.500000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.750000 9.300270 m 9.750000 11.450000 l 16.927630 11.450000 l 16.927630 9.300270 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.750000 9.300270 m 9.750000 11.450000 l 16.927630 11.450000 l 16.927630 9.300270 l cp s gsave 12.170065 10.570135 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 12.347394 10.570135 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 12.524722 10.570135 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 12.931842 10.570135 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 13.311486 10.570135 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 13.716100 10.570135 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.110726 10.570135 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.704540 14.485000 m 9.704540 16.445000 l 16.892170 16.445000 l 16.892170 14.485000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.704540 14.485000 m 9.704540 16.445000 l 16.892170 16.445000 l 16.892170 14.485000 l cp s gsave 10.528355 15.660000 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 10.907999 15.660000 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 11.085328 15.660000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 11.262656 15.660000 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 11.669776 15.660000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 11.872083 15.660000 translate 0.035278 -0.035278 scale start_ol 2240 3072 moveto 2240 1728 lineto 3584 1728 lineto 3584 1344 lineto 2240 1344 lineto 2240 0 lineto 1856 0 lineto 1856 1344 lineto 512 1344 lineto 512 1728 lineto 1856 1728 lineto 1856 3072 lineto 2240 3072 lineto end_ol grestore gsave 12.409079 15.660000 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.611387 15.660000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 12.996025 15.660000 translate 0.035278 -0.035278 scale start_ol 2624 2688 moveto 1666 1380 lineto 2688 0 lineto 2169 0 lineto 1389 1056 lineto 632 0 lineto 128 0 lineto 1134 1406 lineto 192 2688 lineto 705 2688 lineto 1408 1730 lineto 2111 2688 lineto 2624 2688 lineto end_ol grestore gsave 13.375669 15.660000 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 13.625435 15.660000 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.020061 15.660000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 14.424675 15.660000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 14.756860 15.660000 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.934188 15.660000 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 15.326317 15.660000 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 15.730931 15.660000 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 1.000000 1.000000 1.000000 srgb n 9.731340 16.765000 m 9.731340 18.732090 l 16.852630 18.732090 l 16.852630 16.765000 l f 0.100000 slw [] 0 sd [] 0 sd 0 slj 0.000000 0.000000 0.000000 srgb n 9.731340 16.765000 m 9.731340 18.732090 l 16.852630 18.732090 l 16.852630 16.765000 l cp s gsave 11.958235 17.943545 translate 0.035278 -0.035278 scale start_ol 320 3520 moveto 827 3520 lineto 1694 2202 lineto 2565 3520 lineto 3072 3520 lineto 1932 1830 lineto 3136 0 lineto 2625 0 lineto 1637 1508 lineto 641 0 lineto 128 0 lineto 1425 1879 lineto 320 3520 lineto end_ol grestore gsave 12.395327 17.943545 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 12.597634 17.943545 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 12.929818 17.943545 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.324444 17.943545 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 13.586696 17.943545 translate 0.035278 -0.035278 scale start_ol 128 2688 moveto 586 2688 lineto 1408 432 lineto 2230 2688 lineto 2688 2688 lineto 1702 0 lineto 1114 0 lineto 128 2688 lineto end_ol grestore gsave 13.966340 17.943545 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 14.360966 17.943545 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 19.396400 4.835060 m 18.396400 4.835060 l 18.396400 4.335060 l 17.396400 5.335060 l 18.396400 6.335060 l 18.396400 5.835060 l 19.396400 5.835060 l ef 0.000000 0.000000 0.000000 srgb n 19.396400 4.835060 m 18.396400 4.835060 l 18.396400 4.335060 l 17.396400 5.335060 l 18.396400 6.335060 l 18.396400 5.835060 l 19.396400 5.835060 l cp s 0 slc 0 slj [] 0 sd n 19.396400 4.835060 m 18.396400 4.835060 l 18.396400 4.335060 l 17.396400 5.335060 l 18.396400 6.335060 l 18.396400 5.835060 l 19.396400 5.835060 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 10.963100 11.991700 m 10.963100 12.991700 l 10.463100 12.991700 l 11.463100 13.991700 l 12.463100 12.991700 l 11.963100 12.991700 l 11.963100 11.991700 l ef 0.000000 0.000000 0.000000 srgb n 10.963100 11.991700 m 10.963100 12.991700 l 10.463100 12.991700 l 11.463100 13.991700 l 12.463100 12.991700 l 11.963100 12.991700 l 11.963100 11.991700 l cp s 0 slc 0 slj [] 0 sd n 10.963100 11.991700 m 10.963100 12.991700 l 10.463100 12.991700 l 11.463100 13.991700 l 12.463100 12.991700 l 11.963100 12.991700 l 11.963100 11.991700 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 14.113100 13.804200 m 14.113100 12.804200 l 13.613100 12.804200 l 14.613100 11.804200 l 15.613100 12.804200 l 15.113100 12.804200 l 15.113100 13.804200 l ef 0.000000 0.000000 0.000000 srgb n 14.113100 13.804200 m 14.113100 12.804200 l 13.613100 12.804200 l 14.613100 11.804200 l 15.613100 12.804200 l 15.113100 12.804200 l 15.113100 13.804200 l cp s 0 slc 0 slj [] 0 sd n 14.113100 13.804200 m 14.113100 12.804200 l 13.613100 12.804200 l 14.613100 11.804200 l 15.613100 12.804200 l 15.113100 12.804200 l 15.113100 13.804200 l cp s gsave 7.163090 13.066700 translate 0.035278 -0.035278 scale start_ol 448 3520 moveto 2496 3520 lineto 2496 3136 lineto 960 3136 lineto 960 2112 lineto 2368 2112 lineto 2368 1728 lineto 960 1728 lineto 960 0 lineto 448 0 lineto 448 3520 lineto end_ol grestore gsave 7.472793 13.066700 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 7.864922 13.066700 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 1529 lineto 2196 2688 lineto 2752 2688 lineto 1346 1430 lineto 2816 0 lineto 2246 0 lineto 896 1313 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 8.212097 13.066700 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 8.606723 13.066700 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 9.013842 13.066700 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 9.216149 13.066700 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 9.623269 13.066700 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 10.015398 13.066700 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 10.265164 13.066700 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 16.063100 12.866700 translate 0.035278 -0.035278 scale start_ol 2624 3392 moveto 2624 2944 lineto 2352 3073 2111 3136 conicto 1870 3200 1645 3200 conicto 1255 3200 1043 3052 conicto 832 2904 832 2631 conicto 832 2402 969 2285 conicto 1107 2169 1491 2097 conicto 1773 2039 lineto 2308 1937 2562 1678 conicto 2816 1420 2816 986 conicto 2816 469 2468 202 conicto 2121 -64 1450 -64 conicto 1197 -64 911 0 conicto 626 65 320 192 conicto 320 704 lineto 613 513 893 416 conicto 1174 320 1445 320 conicto 1857 320 2080 485 conicto 2304 650 2304 955 conicto 2304 1221 2148 1371 conicto 1992 1522 1636 1597 conicto 1352 1652 lineto 807 1756 563 1978 conicto 320 2201 320 2597 conicto 320 3056 654 3320 conicto 989 3584 1576 3584 conicto 1828 3584 2089 3536 conicto 2351 3488 2624 3392 conicto end_ol grestore gsave 16.470219 12.866700 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore gsave 16.849863 12.866700 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 17.254477 12.866700 translate 0.035278 -0.035278 scale start_ol 2368 2560 moveto 2368 2176 lineto 2180 2272 1991 2320 conicto 1803 2368 1611 2368 conicto 1180 2368 942 2099 conicto 704 1830 704 1344 conicto 704 858 942 589 conicto 1180 320 1611 320 conicto 1803 320 1991 368 conicto 2180 416 2368 512 conicto 2368 128 lineto 2184 32 1987 -16 conicto 1791 -64 1569 -64 conicto 966 -64 611 316 conicto 256 697 256 1344 conicto 256 2000 615 2376 conicto 974 2752 1598 2752 conicto 1801 2752 1994 2704 conicto 2187 2656 2368 2560 conicto end_ol grestore gsave 17.606646 12.866700 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 18.011260 12.866700 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 18.258522 12.866700 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 18.650651 12.866700 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 19.055265 12.866700 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 19.232593 12.866700 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 19.564778 12.866700 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 19.956907 12.866700 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 20.206673 12.866700 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 20.384002 12.866700 translate 0.035278 -0.035278 scale start_ol 1473 2368 moveto 1117 2368 910 2094 conicto 704 1820 704 1344 conicto 704 868 909 594 conicto 1115 320 1473 320 conicto 1827 320 2033 595 conicto 2240 870 2240 1344 conicto 2240 1816 2033 2092 conicto 1827 2368 1473 2368 conicto 1472 2752 moveto 2040 2752 2364 2378 conicto 2688 2005 2688 1344 conicto 2688 685 2364 310 conicto 2040 -64 1472 -64 conicto 902 -64 579 310 conicto 256 685 256 1344 conicto 256 2005 579 2378 conicto 902 2752 1472 2752 conicto end_ol grestore gsave 20.776131 12.866700 translate 0.035278 -0.035278 scale start_ol 2688 1646 moveto 2688 0 lineto 2240 0 lineto 2240 1632 lineto 2240 2001 2093 2184 conicto 1947 2368 1654 2368 conicto 1302 2368 1099 2146 conicto 896 1925 896 1542 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1053 2529 1266 2640 conicto 1479 2752 1757 2752 conicto 2217 2752 2452 2471 conicto 2688 2191 2688 1646 conicto end_ol grestore gsave 21.180745 12.866700 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 21.383052 12.866700 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 21.790172 12.866700 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 22.182301 12.866700 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 22.432067 12.866700 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.100000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 12.742200 1.892926 m 12.742200 0.892926 l 12.242200 0.892926 l 13.242200 -0.107074 l 14.242200 0.892926 l 13.742200 0.892926 l 13.742200 1.892926 l ef 0.000000 0.000000 0.000000 srgb n 12.742200 1.892926 m 12.742200 0.892926 l 12.242200 0.892926 l 13.242200 -0.107074 l 14.242200 0.892926 l 13.742200 0.892926 l 13.742200 1.892926 l cp s 0 slc 0 slj [] 0 sd n 12.742200 1.892926 m 12.742200 0.892926 l 12.242200 0.892926 l 13.242200 -0.107074 l 14.242200 0.892926 l 13.742200 0.892926 l 13.742200 1.892926 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 10.799003 -2.384930 m 10.799003 -0.829082 l 12.873467 -0.829082 l 12.873467 -2.384930 l f 0.000000 0.000000 0.000000 srgb n 10.799003 -2.384930 m 10.799003 -0.829082 l 12.873467 -0.829082 l 12.873467 -2.384930 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 11.023736 -2.160196 m 11.023736 -1.088390 l 12.648734 -1.088390 l 12.648734 -2.160196 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 11.079920 -0.829082 m 12.147405 -0.829082 l 12.147405 -0.587061 l 11.136103 -0.587061 l ef 0.000000 0.000000 0.000000 srgb n 11.079920 -0.829082 m 12.147405 -0.829082 l 12.147405 -0.587061 l 11.136103 -0.587061 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 12.147405 -0.829082 m 12.592550 -0.829082 l 12.536367 -0.587061 l 12.147405 -0.587061 l ef 0.000000 0.000000 0.000000 srgb n 12.147405 -0.829082 m 12.592550 -0.829082 l 12.536367 -0.587061 l 12.147405 -0.587061 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 12.220011 -0.756475 m 12.220011 -0.659667 l 12.316819 -0.659667 l 12.316819 -0.756475 l f 0.000000 0.000000 0.000000 srgb n 12.220011 -0.756475 m 12.220011 -0.659667 l 12.316819 -0.659667 l 12.316819 -0.756475 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 11.628789 -0.587061 m 12.043681 -0.587061 l 12.043681 -0.466050 l 12.251128 -0.466050 l 12.251128 -0.345040 l 11.421342 -0.345040 l 11.421342 -0.466050 l 11.628789 -0.466050 l ef 0.000000 0.000000 0.000000 srgb n 11.628789 -0.587061 m 12.043681 -0.587061 l 12.043681 -0.466050 l 12.251128 -0.466050 l 12.251128 -0.345040 l 11.421342 -0.345040 l 11.421342 -0.466050 l 11.628789 -0.466050 l cp s gsave 10.657100 -3.448760 translate 0.035278 -0.035278 scale start_ol 2140 1632 moveto 2295 1581 2442 1413 conicto 2590 1245 2738 952 conicto 3200 0 lineto 2709 0 lineto 2250 893 lineto 2077 1243 1915 1357 conicto 1753 1472 1473 1472 conicto 960 1472 lineto 960 0 lineto 448 0 lineto 448 3520 lineto 1552 3520 lineto 2157 3520 2454 3265 conicto 2752 3010 2752 2496 conicto 2752 2161 2595 1939 conicto 2439 1718 2140 1632 conicto 960 3136 moveto 960 1856 lineto 1552 1856 lineto 1893 1856 2066 2019 conicto 2240 2182 2240 2498 conicto 2240 2815 2066 2975 conicto 1893 3136 1552 3136 conicto 960 3136 lineto end_ol grestore gsave 11.074207 -3.448760 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 11.468833 -3.448760 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 11.875953 -3.448760 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 12.053281 -3.448760 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 12.445410 -3.448760 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore gsave 12.825054 -3.448760 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 13.219681 -3.448760 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 13.626800 -3.448760 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 10.657100 -2.648760 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 10.859407 -2.648760 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 11.061714 -2.648760 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 11.468833 -2.648760 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 11.646162 -2.648760 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 11.978346 -2.648760 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 12.385466 -2.648760 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 12.562795 -2.648760 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 12.954924 -2.648760 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 13.589903 -2.429590 m 13.589903 -0.873742 l 15.664367 -0.873742 l 15.664367 -2.429590 l f 0.000000 0.000000 0.000000 srgb n 13.589903 -2.429590 m 13.589903 -0.873742 l 15.664367 -0.873742 l 15.664367 -2.429590 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 13.814636 -2.204856 m 13.814636 -1.133050 l 15.439634 -1.133050 l 15.439634 -2.204856 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 13.870820 -0.873742 m 14.938305 -0.873742 l 14.938305 -0.631721 l 13.927003 -0.631721 l ef 0.000000 0.000000 0.000000 srgb n 13.870820 -0.873742 m 14.938305 -0.873742 l 14.938305 -0.631721 l 13.927003 -0.631721 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.938305 -0.873742 m 15.383450 -0.873742 l 15.327267 -0.631721 l 14.938305 -0.631721 l ef 0.000000 0.000000 0.000000 srgb n 14.938305 -0.873742 m 15.383450 -0.873742 l 15.327267 -0.631721 l 14.938305 -0.631721 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 15.010911 -0.801135 m 15.010911 -0.704327 l 15.107719 -0.704327 l 15.107719 -0.801135 l f 0.000000 0.000000 0.000000 srgb n 15.010911 -0.801135 m 15.010911 -0.704327 l 15.107719 -0.704327 l 15.107719 -0.801135 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.419689 -0.631721 m 14.834581 -0.631721 l 14.834581 -0.510710 l 15.042028 -0.510710 l 15.042028 -0.389700 l 14.212242 -0.389700 l 14.212242 -0.510710 l 14.419689 -0.510710 l ef 0.000000 0.000000 0.000000 srgb n 14.419689 -0.631721 m 14.834581 -0.631721 l 14.834581 -0.510710 l 15.042028 -0.510710 l 15.042028 -0.389700 l 14.212242 -0.389700 l 14.212242 -0.510710 l 14.419689 -0.510710 l cp s 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 13.955003 -2.017360 m 13.955003 -0.461512 l 16.029467 -0.461512 l 16.029467 -2.017360 l f 0.000000 0.000000 0.000000 srgb n 13.955003 -2.017360 m 13.955003 -0.461512 l 16.029467 -0.461512 l 16.029467 -2.017360 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 14.179736 -1.792626 m 14.179736 -0.720820 l 15.804734 -0.720820 l 15.804734 -1.792626 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.235920 -0.461512 m 15.303405 -0.461512 l 15.303405 -0.219491 l 14.292103 -0.219491 l ef 0.000000 0.000000 0.000000 srgb n 14.235920 -0.461512 m 15.303405 -0.461512 l 15.303405 -0.219491 l 14.292103 -0.219491 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.303405 -0.461512 m 15.748550 -0.461512 l 15.692367 -0.219491 l 15.303405 -0.219491 l ef 0.000000 0.000000 0.000000 srgb n 15.303405 -0.461512 m 15.748550 -0.461512 l 15.692367 -0.219491 l 15.303405 -0.219491 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 15.376011 -0.388905 m 15.376011 -0.292097 l 15.472819 -0.292097 l 15.472819 -0.388905 l f 0.000000 0.000000 0.000000 srgb n 15.376011 -0.388905 m 15.376011 -0.292097 l 15.472819 -0.292097 l 15.472819 -0.388905 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.784789 -0.219491 m 15.199681 -0.219491 l 15.199681 -0.098480 l 15.407128 -0.098480 l 15.407128 0.022530 l 14.577342 0.022530 l 14.577342 -0.098480 l 14.784789 -0.098480 l ef 0.000000 0.000000 0.000000 srgb n 14.784789 -0.219491 m 15.199681 -0.219491 l 15.199681 -0.098480 l 15.407128 -0.098480 l 15.407128 0.022530 l 14.577342 0.022530 l 14.577342 -0.098480 l 14.784789 -0.098480 l cp s gsave 13.564900 -3.400340 translate 0.035278 -0.035278 scale start_ol 960 3136 moveto 960 384 lineto 1536 384 lineto 2266 384 2605 716 conicto 2944 1048 2944 1764 conicto 2944 2475 2605 2805 conicto 2266 3136 1536 3136 conicto 960 3136 lineto 448 3520 moveto 1463 3520 lineto 2493 3520 2974 3094 conicto 3456 2669 3456 1764 conicto 3456 853 2972 426 conicto 2488 0 1463 0 conicto 448 0 lineto 448 3520 lineto end_ol grestore gsave 14.056934 -3.400340 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.234263 -3.400340 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 14.566447 -3.400340 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 14.816214 -3.400340 translate 0.035278 -0.035278 scale start_ol 1984 2304 moveto 1912 2337 1828 2352 conicto 1744 2368 1642 2368 conicto 1282 2368 1089 2127 conicto 896 1887 896 1437 conicto 896 0 lineto 448 0 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1030 2531 1245 2641 conicto 1460 2752 1767 2752 conicto 1811 2752 1864 2752 conicto 1917 2752 1982 2752 conicto 1984 2304 lineto end_ol grestore gsave 15.078465 -3.400340 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 15.255794 -3.400340 translate 0.035278 -0.035278 scale start_ol 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto 896 2304 moveto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 896 0 lineto 448 0 lineto 448 3712 lineto 896 3712 lineto 896 2304 lineto end_ol grestore gsave 15.662914 -3.400340 translate 0.035278 -0.035278 scale start_ol 448 1040 moveto 448 2688 lineto 896 2688 lineto 896 1057 lineto 896 689 1042 504 conicto 1188 320 1481 320 conicto 1832 320 2036 541 conicto 2240 763 2240 1145 conicto 2240 2688 lineto 2688 2688 lineto 2688 0 lineto 2240 0 lineto 2240 384 lineto 2081 157 1870 46 conicto 1660 -64 1382 -64 conicto 923 -64 685 217 conicto 448 499 448 1040 conicto 1554 2752 moveto 1554 2752 lineto end_ol grestore gsave 16.067528 -3.400340 translate 0.035278 -0.035278 scale start_ol 896 3456 moveto 896 2688 lineto 1792 2688 lineto 1792 2368 lineto 896 2368 lineto 896 902 lineto 896 572 984 478 conicto 1073 384 1345 384 conicto 1792 384 lineto 1792 0 lineto 1345 0 lineto 836 0 642 194 conicto 448 389 448 902 conicto 448 2368 lineto 128 2368 lineto 128 2688 lineto 448 2688 lineto 448 3456 lineto 896 3456 lineto end_ol grestore gsave 16.317294 -3.400340 translate 0.035278 -0.035278 scale start_ol 2752 1480 moveto 2752 1280 lineto 704 1280 lineto 733 811 978 565 conicto 1223 320 1660 320 conicto 1914 320 2152 384 conicto 2390 448 2624 576 conicto 2624 192 lineto 2388 67 2140 1 conicto 1893 -64 1639 -64 conicto 1001 -64 628 309 conicto 256 683 256 1320 conicto 256 1979 613 2365 conicto 970 2752 1576 2752 conicto 2120 2752 2436 2410 conicto 2752 2068 2752 1480 conicto 2304 1600 moveto 2299 1950 2099 2159 conicto 1900 2368 1572 2368 conicto 1200 2368 976 2166 conicto 753 1964 719 1597 conicto 2304 1600 lineto end_ol grestore gsave 16.711920 -3.400340 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 17.119040 -3.400340 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 13.564900 -2.600340 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 13.767207 -2.600340 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 13.969514 -2.600340 translate 0.035278 -0.035278 scale start_ol end_ol grestore gsave 14.171821 -2.600340 translate 0.035278 -0.035278 scale start_ol 2176 2304 moveto 2176 3712 lineto 2624 3712 lineto 2624 0 lineto 2176 0 lineto 2176 384 lineto 2040 157 1832 46 conicto 1624 -64 1332 -64 conicto 855 -64 555 324 conicto 256 712 256 1344 conicto 256 1976 555 2364 conicto 855 2752 1332 2752 conicto 1624 2752 1832 2641 conicto 2040 2531 2176 2304 conicto 704 1344 moveto 704 865 900 592 conicto 1096 320 1439 320 conicto 1782 320 1979 592 conicto 2176 865 2176 1344 conicto 2176 1823 1979 2095 conicto 1782 2368 1439 2368 conicto 1096 2368 900 2095 conicto 704 1823 704 1344 conicto end_ol grestore gsave 14.578940 -2.600340 translate 0.035278 -0.035278 scale start_ol 448 2688 moveto 896 2688 lineto 896 0 lineto 448 0 lineto 448 2688 lineto 448 3712 moveto 896 3712 lineto 896 3136 lineto 448 3136 lineto 448 3712 lineto end_ol grestore gsave 14.756269 -2.600340 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore gsave 15.088454 -2.600340 translate 0.035278 -0.035278 scale start_ol 896 384 moveto 896 -1024 lineto 448 -1024 lineto 448 2688 lineto 896 2688 lineto 896 2304 lineto 1032 2531 1240 2641 conicto 1448 2752 1737 2752 conicto 2217 2752 2516 2364 conicto 2816 1976 2816 1344 conicto 2816 712 2516 324 conicto 2217 -64 1737 -64 conicto 1448 -64 1240 46 conicto 1032 157 896 384 conicto 2368 1344 moveto 2368 1823 2171 2095 conicto 1975 2368 1632 2368 conicto 1289 2368 1092 2095 conicto 896 1823 896 1344 conicto 896 865 1092 592 conicto 1289 320 1632 320 conicto 1975 320 2171 592 conicto 2368 865 2368 1344 conicto end_ol grestore gsave 15.495573 -2.600340 translate 0.035278 -0.035278 scale start_ol 448 3712 moveto 896 3712 lineto 896 0 lineto 448 0 lineto 448 3712 lineto end_ol grestore gsave 15.672902 -2.600340 translate 0.035278 -0.035278 scale start_ol 1622 1344 moveto 1104 1344 904 1225 conicto 704 1106 704 818 conicto 704 589 854 454 conicto 1004 320 1262 320 conicto 1618 320 1833 572 conicto 2048 825 2048 1244 conicto 2048 1344 lineto 1622 1344 lineto 2496 1513 moveto 2496 0 lineto 2048 0 lineto 2048 384 lineto 1900 154 1679 45 conicto 1458 -64 1138 -64 conicto 733 -64 494 162 conicto 256 389 256 769 conicto 256 1213 555 1438 conicto 854 1664 1448 1664 conicto 2048 1664 lineto 2048 1712 lineto 2048 2025 1851 2196 conicto 1655 2368 1300 2368 conicto 1074 2368 860 2320 conicto 646 2272 448 2176 conicto 448 2560 lineto 687 2656 912 2704 conicto 1138 2752 1351 2752 conicto 1927 2752 2211 2444 conicto 2496 2137 2496 1513 conicto end_ol grestore gsave 16.065031 -2.600340 translate 0.035278 -0.035278 scale start_ol 1542 -238 moveto 1360 -726 1187 -875 conicto 1015 -1024 726 -1024 conicto 384 -1024 lineto 384 -640 lineto 636 -640 lineto 813 -640 910 -555 conicto 1008 -470 1127 -155 conicto 1204 46 lineto 128 2688 lineto 603 2688 lineto 1418 586 lineto 2234 2688 lineto 2688 2688 lineto 1542 -238 lineto end_ol grestore gsave 16.444675 -2.600340 translate 0.035278 -0.035278 scale start_ol 2112 2560 moveto 2112 2176 lineto 1932 2272 1738 2320 conicto 1544 2368 1336 2368 conicto 1020 2368 862 2269 conicto 704 2170 704 1972 conicto 704 1821 814 1735 conicto 925 1649 1260 1571 conicto 1403 1538 lineto 1857 1438 2048 1255 conicto 2240 1072 2240 744 conicto 2240 371 1954 153 conicto 1668 -64 1167 -64 conicto 958 -64 732 -16 conicto 506 32 256 128 conicto 256 576 lineto 491 448 719 384 conicto 947 320 1170 320 conicto 1470 320 1631 425 conicto 1792 531 1792 722 conicto 1792 900 1678 994 conicto 1564 1089 1177 1177 conicto 1032 1212 lineto 621 1298 438 1476 conicto 256 1654 256 1964 conicto 256 2341 520 2546 conicto 784 2752 1269 2752 conicto 1509 2752 1721 2704 conicto 1933 2656 2112 2560 conicto end_ol grestore 0.100000 slw [] 0 sd [] 0 sd 0 slc 0 slj 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.405503 -1.649450 m 14.405503 -0.093602 l 16.479967 -0.093602 l 16.479967 -1.649450 l f 0.000000 0.000000 0.000000 srgb n 14.405503 -1.649450 m 14.405503 -0.093602 l 16.479967 -0.093602 l 16.479967 -1.649450 l cp s 0.100000 slw 0 slc 0 slj [] 0 sd n 14.630236 -1.424716 m 14.630236 -0.352910 l 16.255234 -0.352910 l 16.255234 -1.424716 l f 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 14.686420 -0.093602 m 15.753905 -0.093602 l 15.753905 0.148419 l 14.742603 0.148419 l ef 0.000000 0.000000 0.000000 srgb n 14.686420 -0.093602 m 15.753905 -0.093602 l 15.753905 0.148419 l 14.742603 0.148419 l cp s 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.753905 -0.093602 m 16.199050 -0.093602 l 16.142867 0.148419 l 15.753905 0.148419 l ef 0.000000 0.000000 0.000000 srgb n 15.753905 -0.093602 m 16.199050 -0.093602 l 16.142867 0.148419 l 15.753905 0.148419 l cp s 0.025000 slw 0 slc 0 slj [] 0 sd 1.000000 1.000000 1.000000 srgb n 15.826511 -0.020995 m 15.826511 0.075813 l 15.923319 0.075813 l 15.923319 -0.020995 l f 0.000000 0.000000 0.000000 srgb n 15.826511 -0.020995 m 15.826511 0.075813 l 15.923319 0.075813 l 15.923319 -0.020995 l cp s 0.050000 slw 0 slc 0 slj [] 0 sd 0.701961 0.701961 0.701961 srgb n 15.235289 0.148419 m 15.650181 0.148419 l 15.650181 0.269430 l 15.857628 0.269430 l 15.857628 0.390440 l 15.027842 0.390440 l 15.027842 0.269430 l 15.235289 0.269430 l ef 0.000000 0.000000 0.000000 srgb n 15.235289 0.148419 m 15.650181 0.148419 l 15.650181 0.269430 l 15.857628 0.269430 l 15.857628 0.390440 l 15.027842 0.390440 l 15.027842 0.269430 l 15.235289 0.269430 l cp s showpage %%EndDocument @endspecial 221 x Fi(3.2.3)63 b(Ret)m(yp)s(e)150 3422 y Fo(Xnee)40 b(can)g(ret)m(yp)s(e)f(the)h(con)m(ten)m(ts)h(of)f(a)g (text)h(\014le.)68 b(This)39 b(is)g(useful)g(when)f(com)m(bining)i (repla)m(ying)h(of)150 3531 y(di\013eren)m(t)36 b(recorded)f(session.) 56 b(Y)-8 b(ou)36 b(can)g(c)m(hange)h(the)f(text)g(written)g(in)f(for)g (example)h(an)g(editor)g(\(e.g)150 3641 y(emacs\))c(without)e(ha)m (ving)h(to)g(re-record)g(the)f(complete)i(sessions.)150 3861 y Fi(3.2.4)63 b(Distribution)150 4008 y Fo(Xnee)21 b(can)f(fak)m(e)i(mouse)e(and)g(k)m(eyb)s(oard)g(ev)m(en)m(ts)i(on)e(m) m(ultiple)h(displa)m(ys.)37 b(This)20 b(distribution)g(mec)m(hanism)150 4118 y(can)31 b(b)s(e)e(used)h(when)f(recording,)i(repla)m(ying)g(or)g (ret)m(yping.)150 4382 y Fn(3.3)68 b(Ranges)150 4542 y Fo(What)34 b(data)f(to)h(record)f(is)g(sp)s(eci\014ed)g(using)f (ranges.)49 b(Ranges)34 b(has)f(a)g(start)h(v)-5 b(alue)33 b(and)g(a)g(stop)g(v)-5 b(alue.)150 4651 y(The)30 b(follo)m(wing)i (data)f(can)f(b)s(e)g(recorded:)610 4807 y Fj(Xnee)g(name)1173 b(X)30 b(Proto)s(col)i(Name)610 5025 y Fo(core-requests)1107 b(Request)610 5242 y(device-ev)m(en)m(t)1138 b(Ev)m(en)m(t)p eop end %%Page: 8 11 TeXDict begin 8 10 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(F)-8 b(unctional)32 b(o)m(v)m(erview)2297 b(8)610 299 y(deliv)m(ered-ev)m(en)m(t)1029 b(Ev)m(en)m(t)610 517 y(error)1427 b(Error)610 734 y(reply)1420 b(Reply)610 952 y(ext-requests.ext-ma)5 b(jor)732 b(Extension)30 b(Request)610 1170 y(ext-requests.ext-minor)734 b(Extension)30 b(Request)610 1387 y(ext-replies.ext-ma)5 b(jor)801 b(Extension)30 b(Reply)610 1605 y(ext-replies.ext-minor)803 b(Extension)30 b(Reply)275 1826 y(When)c(sp)s(ecifying)g(the)h(ranges)f(when)g(using)f (xnee)i(y)m(ou)g(can)g(either)f(t)m(yp)s(e)h(the)g(in)m(teger)g(v)-5 b(alue)27 b(of)g(the)150 1935 y(data)34 b(or)g(the)g(name)g(of)f(the)h (data.)52 b(T)-8 b(o)34 b(\014nd)e(out)i(what)f(n)m(um)m(b)s(er)g(b)s (elongs)g(to)i(what)e(data)i(name,)g(y)m(ou)150 2045 y(can)30 b(use)g(the)g Fh(--print-data-name)25 b Fo(option.)41 b(F)-8 b(or)30 b(an)g(explanation)h(of)f(the)g(X)g(proto)s(col)g(data,) h(please)150 2154 y(read)f(the)g Fh(")p Fo(X)g(Record)g(Extension)g (Library)p Fh(")e Fo(or)i(the)g Fh(")p Fo(Record)g(Extension)g(Proto)s (col)h(Sp)s(eci\014cation)p Fh(")p Fo(.)150 2372 y Fn(3.4)68 b(First)45 b(and)g(last)h(motion)f(ev)l(en)l(t)150 2531 y Fo(Xnee)40 b(has)g(the)g(abilit)m(y)h(to)g(skip)e(recording)h(of)g (succesiv)m(e)i(motion)e(ev)m(en)m(ts)h(with)f(no)g(other)g(data)g(in) 150 2641 y(b)s(et)m(w)m(een.)65 b(This)38 b(option)h(is)f(in)m(tended)h (to)g(reduce)f(the)g(n)m(um)m(b)s(er)f(of)i(data)g(recorded)f(b)m(y)h (lea)m(ving)h(out)150 2751 y(unnecessary)30 b(data.)41 b(This)30 b(feature)h(can)f(b)s(e)g(in)m(v)m(ok)m(ed)i(with)e(the)g Fh(--first-last)d Fo(\015ag.)150 2968 y Fn(3.5)68 b(Dela)l(y)150 3128 y Fo(Sometimes)21 b(when)e(Xnee)i(starts)g(recording)g(data,)i (the)e(k)m(eyrelease)h(\(caused)f(b)m(y)f(pressing)g(and)g(releasing) 150 3237 y(RETURN)30 b(to)i(execute)g(the)f(Xnee)g(command)f(line\))i (is)f(recorded.)41 b(This)30 b(single)h(k)m(eyrelease)i(\(with)e(no)150 3347 y(corresp)s(onding)c(k)m(eypress\))h(migh)m(t)h(confuse)f(the)g(X) g(serv)m(er.)40 b(With)29 b(the)f Fh(--time)h()d Fo(option)j(Xnee)150 3456 y(can)i(b)s(e)e(paused)h(for)g(a)h(n)m(um)m (b)s(er)e(of)h(seconds)h(b)s(efore)f(recording/repla)m(ying/ret)m (yping)j(starts.)150 3674 y Fn(3.6)68 b(V)-11 b(erb)t(ose)150 3834 y Fo(When)26 b(enabling)g(v)m(erb)s(ose)g(mo)s(de)f(\()p Fh(--verbose)p Fo(\))f(Xnee)i(prin)m(ts)f(a)i(lot)f(of)g(information)g (ab)s(out)g(it's)g(state.)150 3943 y(This)k(option)g(is)h(only)f(in)m (tended)h(for)f(run)m(time)g(debugging.)150 4161 y Fn(3.7)68 b(Human)45 b(prin)l(touts)150 4320 y Fo(Sometimes)35 b(it's)f(hard)f(to)i(decide)f(what)g(data)h(to)g(use)e(when)g(sync)m (hronising.)51 b(T)-8 b(o)35 b(do)f(this)f(y)m(ou)i(ha)m(v)m(e)150 4430 y(to)g(analyse)g(what)f(data)h(is)f(sen)m(t)g(from)g(the)g(serv)m (er)h(when)e(recording.)52 b(Instead)34 b(of)g(reading)g(the)g(data)150 4539 y(n)m(um)m(b)s(er,)j(s)f(tring)g(represen)m(tation)i(of)e(the)h (data)g(is)f(prin)m(ted)g(out.)59 b(T)-8 b(o)36 b(enable)h(this)f (option,)j(use)d(the)150 4649 y Fh(--human-printouts)p Fo(.)150 4867 y Fn(3.8)68 b(In)l(v)l(oking)46 b(Xnee)150 5083 y Fi(3.8.1)63 b(Command)41 b(line)g(syn)m(tax)150 5230 y Fo(T)-8 b(o)42 b(get)h(information)e(ab)s(out)h(ho)m(w)f(to)h (use)f(Xnee's)h(command)g(line)f(options)h(please)g(use)g(the)f(man)150 5340 y(page\(s\).)p eop end %%Page: 9 12 TeXDict begin 9 11 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(F)-8 b(unctional)32 b(o)m(v)m(erview)2297 b(9)150 299 y Fi(3.8.2)63 b(Pro)7 b(ject)40 b(\014le)150 446 y Fo(T)-8 b(o)21 b(use)f(a)g(Pro)5 b(ject)21 b(\014le)g(use)f(the)g Fh(--project)e Fo(option,)23 b(e.g)e Fh(cnee)30 b(--project)d (xnee/projects/netscape.xns)o Fo(.)p 4057 466 42 84 v 150 631 a Fi(3.8.3)63 b(Session)42 b(\014le)150 778 y Fo(T)-8 b(o)31 b(use)f(a)h(session)f(\014le)h(use)f(the)g Fh(--file)f Fo(option,)i(e.g)g Fh(cnee)f(--file)e(user1_session.xns)150 997 y Fn(3.9)68 b(In)l(terupting)46 b(Xnee)150 1156 y Fo(In)m(terupting)30 b(Xnee)h(when)e(recording)i(or)f(repla)m(ying)h (can)g(b)s(e)f(done)g(as)g(follo)m(ws)225 1284 y Fg(\017)60 b Fo(user)30 b(sp)s(eci\014ed)f(mo)s(di\014er)h(and)f(k)m(ey)225 1411 y Fg(\017)60 b Fo(limit)31 b(the)g(n)m(um)m(b)s(er)e(of)h(data)h (to)h(record)225 1539 y Fg(\017)60 b Fo(sending)30 b(a)h(SIGTERM)e (signal)i(\(e.g)h(pressing)e(Con)m(trol-c)i(in)e(a)g(terminal)h(windo)m (w\))275 1684 y(The)e(prefered)h(w)m(a)m(y)h(to)g(in)m(terrupt)f(xnee)h (is)f(to)h(use)f(the)h(mo)s(di\014er)p Fh(+)p Fo(k)m(ey)-8 b(.)150 1870 y Fi(3.9.1)63 b(mo)s(di\014er)42 b(and)f(k)m(ey)150 2017 y Fo(It)27 b(is)g(p)s(ossible)f(to)i(sp)s(ecify)e(a)h(mo)s (di\014er)f(\(e.g)i(Con)m(trol)g(button\))e(and)g(a)i(k)m(ey)f(\(e.g)h ('a'\))g(that)g(will)f(stop)g(the)150 2126 y(Xnee)33 b(session.)49 b(When)33 b(using)g(this)f(option)i(mak)m(e)g(sure)e (that)i(the)f(mo)s(di\014er/k)m(ey)g(is)g(not)h(used)e(in)h(an)m(y)150 2236 y(w)m(a)m(y)h(b)m(y)f(the)g(applications)i(y)m(ou)e(are)h (recording.)49 b(Y)-8 b(ou)33 b(can)h(sp)s(ecify)e(a)i(k)m(ey)p Fh(+)p Fo(mo)s(di\014er)e(to)i(stop,)g(pause)150 2345 y(and)c(resume)g(xnee.)41 b(Y)-8 b(ou)30 b(can)h(also)g(insert)g(a)f (mark)h(in)f(the)g(recorded)g(session)h(\014le.)150 2531 y Fi(3.9.2)63 b(limit)41 b(the)g(n)m(um)m(b)s(er)g(of)h(data)e(to)h (record)150 2678 y Fo(By)27 b(sp)s(ecifying)f(the)h(n)m(um)m(b)s(er)e (of)i(data)h(to)f(record)f(\()p Fh(--loops)p Fo(\))g(xnee)h(stops)f (when)g(this)g(n)m(um)m(b)s(er)f(of)i(data)150 2787 y(is)j(receiv)m(ed) i(from)e(the)h(serv)m(er.)41 b(When)30 b(repla)m(ying)h(the)g(same)f (amoun)m(t)h(of)g(data)g(is)f(repla)m(y)m(ed.)150 2973 y Fi(3.9.3)63 b(sending)42 b(a)f(SIGTERM)g(signal)150 3120 y Fo(The)28 b(easiest)i(w)m(a)m(y)g(to)f(send)f(a)h(signal)g(to)g (a)g(pro)s(cess)f(is)h(b)m(y)g(launc)m(hing)f(Xnee)h(from)f(a)h (terminal)g(windo)m(w)150 3229 y(\(e.g)h(xterm\))g(and)e(then)g(press)h (Con)m(trol-c)h(whic)m(h)e(will)i(send)e(the)h(SIGTERM)f(signal)i(to)f (Xnee.)41 b(When)150 3339 y(repla)m(ying)32 b(it)g(can)g(sometimes)g(b) s(e)e(hard)h(to)h(mo)m(v)m(e)h(the)e(p)s(oin)m(ter)g(in)m(to)i(the)e (terminal)h(windo)m(w)f(\(e.g)h(if)g(a)150 3448 y(lot)27 b(of)g(motion)g(ev)m(en)m(ts)g(w)m(ere)g(recorded)f(that)h(will)f(let)i (y)m(ou)e(comp)s(ete)h(with)f(Xnee)h(on)f(where)g(the)g(mouse)150 3558 y(p)s(oin)m(ter)k(shall)h(b)s(e)f(lo)s(cated.)42 b(Beleiv)m(e)33 b(me,)d(y)m(ou'll)i(end)e(up)f(lossing)i(that)g (battle\).)275 3685 y(When)23 b(using)f(Con)m(trol-c)j(to)f(stop)f (Xnee)h(y)m(ou)g(m)m(ust)f(b)s(e)f(a)m(w)m(are)j(of)e(that)h(the)g (pressing)e(of)i(the)f(Con)m(trol)150 3795 y(k)m(ey)29 b(gets)h(recorded.)40 b(When)28 b(repla)m(ying)i(a)f(recorded)f (session)h(ending)f(with)h(pressing)f(of)h(Con)m(trol)g(y)m(our)150 3905 y(apps)f(ma)m(y)i(think)e(y)m(ou)i(are)f(pressing)g(the)g(Con)m (trol)h(k)m(ey)-8 b(.)41 b(A)29 b(simple)g(solution)h(for)f(this)g(is)g (to)g(press)g(and)150 4014 y(release)j(the)e(Con)m(trol.)150 4200 y Fi(3.9.4)63 b(Stop)41 b(Xnee)g(with)f(k)m(ey)g(com)m(bination) 150 4347 y Fo(Xnee)28 b(stops)f(its)g(curren)m(t)g(action)i(when)d(the) h(user)g(presses)f(the)i(k)m(ey)g(com)m(bination)g(as)g(sp)s(eci\014ed) e(during)150 4456 y(setup.)40 b(Xnee)31 b(will)g(b)s(e)f(sh)m(ut)g (gracefully)-8 b(.)150 4642 y Fi(3.9.5)63 b(P)m(ause)40 b(Xnee)h(with)g(k)m(ey)f(com)m(bination)150 4788 y Fo(Xnee)26 b(pause)g(its)g(curren)m(t)f(action)i(when)e(the)h(user)f(presses)h (the)f(k)m(ey)i(com)m(bination)g(as)f(sp)s(eci\014ed)f(during)150 4898 y(setup.)40 b(Xnee)31 b(will)g(b)s(e)f(in)g(paused)f(mo)s(de)h(un) m(til)h(the)f(user)g(stops)g(or)h(resumes)e(Xnee.)150 5083 y Fi(3.9.6)63 b(P)m(ause)40 b(Xnee)h(with)g(k)m(ey)f(com)m (bination)150 5230 y Fo(Xnee)46 b(resumes)f(its)g(curren)m(t)g(paused)g (action)i(when)d(the)i(user)e(presses)h(the)h(k)m(ey)g(com)m(bination)h (as)150 5340 y(sp)s(eci\014ed)30 b(during)f(setup.)40 b(Xnee)31 b(will)g(con)m(tin)m(ue)g(where)f(it)h(w)m(as)g(paused.)p eop end %%Page: 10 13 TeXDict begin 10 12 bop 150 -116 a Fo(Chapter)30 b(3:)41 b(F)-8 b(unctional)32 b(o)m(v)m(erview)2251 b(10)150 299 y Fi(3.9.7)63 b(Insert)41 b(marks)g(Xnee)g(with)f(k)m(ey)g(com)m (bination)150 446 y Fo(When)25 b(the)h(user)f(presses)f(the)i(k)m(ey)g (com)m(bination)h(as)f(sp)s(eci\014ed)e(during)h(setup)g(Xnee)h(will)f (prin)m(t)g(a)h(mark)150 555 y(in)h(the)g(session)g(\014le)g(con)m (taining)i(a)f(time)f(stamp.)40 b(This)26 b(feature)i(is)f(in)m(tended) g(b)s(e)f(used)h(when)f(y)m(ou)h(w)m(an)m(t)150 665 y(to)32 b(mark)g(an)f(in)m(terresting)i(time/ev)m(en)m(t)h(during)d(recording.) 44 b(After)32 b(recording)g(has)g(\014nished)e(y)m(ou)i(can)150 775 y(add)38 b(Xnee)h(scripting)f(calls)i(to)f(Xnee)g(whic)m(h)f(will)g (b)s(e)g(in)m(terpreted)h(and)f(executed)h(as)g(if)f(they)g(w)m(ere)150 884 y(recorded.)150 1083 y Fi(3.9.8)63 b(Limit)40 b(n)m(um)m(b)s(er)i (of)g(data)e(to)h(record)150 1230 y Fo(There)30 b(a)h(a)f(few)h(w)m(a)m (ys)g(to)g(limit)g(the)g(n)m(um)m(b)s(er)e(of)h(data)h(Xnee)g(records.) 225 1365 y Fg(\017)60 b Fo(limit)31 b(the)g(ev)m(en)m(ts)g(to)h (recored)225 1499 y Fg(\017)60 b Fo(limit)31 b(the)g(data)g(to)g (recored)225 1634 y Fg(\017)60 b Fo(limit)31 b(the)g(time)g(to)g (recored)225 1768 y Fg(\017)60 b Fo(send)30 b(a)g(signal)h(to)h(xnee)e (\(SIGTERM\))225 1903 y Fg(\017)60 b Fo(use)30 b(a)h(selfmade)g(record) f(callbac)m(k)i(function)150 2102 y Fi(3.9.9)63 b(Limit)40 b(the)h(ev)m(en)m(ts)f(to)h(record)150 2249 y Fo(When)23 b(ha)m(ving)h(receiv)m(ed)g(the)g(sp)s(eci\014ed)e(amoun)m(t)i(of)f(ev) m(en)m(ts)i(from)e(the)g(serv)m(er,)i(Xnee)f(stops)f(the)h(record-)150 2359 y(ing.)58 b(F)-8 b(or)37 b(more)f(information)g(on)g(ho)m(w)g(to)h (use)f(this)g(option,)i(read)e(the)g(man)f(page)i(for)f(cnee)h(or)f (the)150 2468 y(user)30 b(man)m(ual)g(for)h(gnee.)150 2667 y Fi(3.9.10)63 b(Limit)41 b(the)g(data)f(to)h(record)150 2814 y Fo(When)28 b(ha)m(ving)h(receiv)m(ed)g(the)g(sp)s(eci\014ed)e (amoun)m(t)i(of)f(data)h(from)f(the)g(serv)m(er,)h(Xnee)g(stops)f(the)h (record-)150 2924 y(ing.)58 b(F)-8 b(or)37 b(more)f(information)g(on)g (ho)m(w)g(to)h(use)f(this)g(option,)i(read)e(the)g(man)f(page)i(for)f (cnee)h(or)f(the)150 3034 y(user)30 b(man)m(ual)g(for)h(gnee.)150 3233 y Fi(3.9.11)63 b(Limit)41 b(the)g(time)g(to)g(record)150 3380 y Fo(When)e(ha)m(ving)g(recorded)f(for)h(the)g(sp)s(eci\014ed)f (amoun)m(t)h(of)g(time)g(from)g(the)g(serv)m(er,)i(Xnee)e(stops)g(the) 150 3489 y(recording.)44 b(F)-8 b(or)32 b(more)f(information)h(on)f(ho) m(w)g(to)i(use)e(this)g(option,)h(read)f(the)h(man)f(page)h(for)f(cnee) h(or)150 3599 y(the)f(user)e(man)m(ual)i(for)f(gnee.)150 3798 y Fi(3.9.12)63 b(Send)41 b(SIGTERM)h(to)f(Xnee)150 3945 y Fo(The)28 b(easiest)i(w)m(a)m(y)g(to)f(send)f(a)h(signal)g(to)g (a)g(pro)s(cess)f(is)h(b)m(y)g(launc)m(hing)f(Xnee)h(from)f(a)h (terminal)g(windo)m(w)150 4055 y(\(e.g)44 b(xterm\).)78 b(By)43 b(pressing)f(Con)m(trol-c)i(xterm)e(sends)g(the)h(SIGTERM)f (signal)h(to)g(Xnee.)78 b(When)150 4164 y(repla)m(ying)32 b(it)g(can)g(sometimes)g(b)s(e)e(hard)h(to)h(mo)m(v)m(e)h(the)e(p)s (oin)m(ter)g(in)m(to)i(the)e(terminal)h(windo)m(w)f(\(e.g)h(if)g(a)150 4274 y(lot)27 b(of)g(motion)g(ev)m(en)m(ts)g(w)m(ere)g(recorded)f(that) h(will)f(let)i(y)m(ou)e(comp)s(ete)h(with)f(Xnee)h(on)f(where)g(the)g (mouse)150 4384 y(p)s(oin)m(ter)k(shall)h(b)s(e)f(lo)s(cated.)42 b(Beleiv)m(e)33 b(me,)d(y)m(ou'll)i(end)e(up)f(lossing)i(that)g (battle\).)150 4616 y Fn(3.10)68 b(Xnee)45 b(plugins)150 4775 y Fo(Xnee)e(supp)s(orts)d(plugins)i(since)h(v)m(ersion)f(1.07.)79 b(F)-8 b(or)43 b(information)f(ab)s(out)g(ho)m(w)h(to)g(write)f (plugins,)150 4885 y(do)m(wnload)31 b(the)f(source)h(co)s(de)f(and)g (lo)s(ok)h(at)g(the)g(plugin)e(example)j(whic)m(h)e(is)g(deliv)m(ered)h (with)f(Xnee.)p eop end %%Page: 11 14 TeXDict begin 11 13 bop 150 -116 a Fo(Chapter)30 b(4:)41 b(Installation)2593 b(11)150 299 y Fl(4)80 b(Installation)150 644 y Fn(4.1)68 b(Installation)47 b(from)e(source)g(with)h(the)f (con\014gure)f(script)150 804 y Fo(T)-8 b(o)44 b(build)e(and)h(install) h(Xnee)g(do)f(the)h(follo)m(wing:)68 b(Do)m(wnload)45 b(the)e(follo)m(wing)i(source)f(\014les)f(in)m(to)i(a)150 913 y(directory)31 b(\(v)m(ersion)g(n)m(um)m(b)s(ers)e(giv)m(en)i(here) g(are)f(just)g(examples\))225 1052 y Fg(\017)60 b Fo(xnee-3.02.tar.gz) 150 1300 y(Unzip)30 b(the)h(source)f(\014le)390 1438 y Fh(gunzip)46 b(xnee-3.02.tar.gz)150 1686 y Fo(Un)m(tar)31 b(the)f(source)h(\014le)390 1824 y Fh(tar)47 b(xvf)g(xnee-3.02.tar)150 2072 y Fo(En)m(ter)31 b(the)f(Xnee)h(directory)390 2210 y Fh(cd)47 b(xnee-3.02)150 2458 y Fo(Generate)32 b(the)e(mak)m (e\014les)390 2596 y Fh(./configure)150 2844 y Fo(or)g(if)h(y)m(ou)f(w) m(an)m(t)i(to)f(sp)s(ecify)f(whic)m(h)g(directory)h(to)g(install)g (xnee)g(to)390 2983 y Fh(./configure)45 b(--prefix=)150 3231 y Fo(Build)30 b(Xnee)390 3369 y Fh(make)47 b(clean)f(all)150 3617 y Fo(Install)37 b(\(as)g(ro)s(ot\))g(if)g(y)m(ou)f(w)m(an)m(t)i(lib)m(xnee)f(to)g(b)s (e)f(installed.)60 b(If)36 b(not,)i(skip)e(the)h(follo)m(wing)h (command.)150 3726 y(Installation)32 b(of)e(lib)m(xnee)h(is)g(not)f (needed)h(to)g(build)e(cnee)i(and)f(gnee.)390 3865 y Fh(make)47 b(install)150 4103 y Fn(4.2)68 b(Installation)47 b(from)e(source)g(with)h(default)f(Mak)l(e\014le)150 4262 y Fo(T)-8 b(o)31 b(unpac)m(k,)f(build)g(and)f(install)j(Xnee)e (from)g(the)h(source\014les)f(do)h(the)f(follo)m(wing:)150 4372 y(Do)m(wnload)i(the)e(source)h(\014les)f(in)m(to)h(a)g(directory) 275 4510 y(Unzip)f(the)g(source)h(\014le)390 4648 y Fh(gunzip)46 b(xnee-3.02.tar.gz)275 4787 y Fo(Un)m(tar)30 b(the)h(source)g(\014le) 390 4925 y Fh(tar)47 b(xvf)g(xnee-3.02.tar)275 5063 y Fo(En)m(ter)30 b(the)h(Xnee)f(directory)390 5202 y Fh(cd)47 b(xnee-3.02)275 5340 y Fo(Build)30 b(Xnee)p eop end %%Page: 12 15 TeXDict begin 12 14 bop 150 -116 a Fo(Chapter)30 b(4:)41 b(Installation)2593 b(12)390 299 y Fh(make)47 b(-f)g(Makefile.xnee)d (clean)i(all)275 433 y Fo(Cop)m(y)30 b(the)g(Xnee)h(binary)f (\(xnee/src/xnee\))i(to)f(a)g(directory)390 568 y Fh(cp)47 b(xnee/src/xnee)d(/usr/local/bin)150 800 y Fn(4.3)68 b(Installation)47 b(from)e(CVS)150 1069 y Fo(Do)m(wnload)36 b(the)f(xnee)g(source)h(co)s(de)f(from)f(the)h(CVS)g(rep)s(ository)g (at)g Fh(http:)t(/)t(/)s(savannah)t(.)s(gnu)t(.)s(o)o(rg)p Fo(.)150 1179 y(Instructions)30 b(on)g(ho)m(w)g(to)i(do)e(this)g(can)h (b)s(e)e(found)h(there)g(as)h(w)m(ell.)275 1557 y(Build)f(Xnee)390 1692 y Fh(cd)47 b(xnee)390 1802 y(make)g(-f)g(Makefile.cvs)390 1911 y(./configure)e(--enable-doc)390 2021 y(make)390 2130 y(make)i(install)e(\(optional\))275 2265 y Fo(Build)30 b(Xnee)h(Do)s(cumen)m(tation)390 2399 y Fh(cd)47 b(doc)390 2509 y(make)g(manual)390 2619 y(make)g(install)e(\(as)i(root\))390 2728 y(cd)g(..)p eop end %%Page: 13 16 TeXDict begin 13 15 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Examples)2661 b(13)150 299 y Fl(5)80 b(Examples)150 626 y Fn(5.1)68 b(Recorder)150 849 y Fi(5.1.1)63 b(Record)40 b(mouse)i(motions)150 996 y Fo(Record)31 b(mouse)f(motions)h(only)f (and)g(sa)m(v)m(e)i(the)f(session)f(to)h(mouse-rec.xnl.)533 1129 y Fh(cnee)47 b(--record)e(--mouse)h(--out-file)f(mouse-rec.xnl)275 1263 y Fo(After)36 b(ha)m(ving)h(t)m(yp)s(ed)f(this)h(y)m(ou)g(can)g (mo)m(v)m(e)g(y)m(our)g(mouse)f(round)f(for)i(a)f(while.)60 b(After)36 b(Xnee)h(has)150 1373 y(exited)25 b(y)m(ou)f(will)h(b)s(e)e (able)i(to)f(repla)m(y)h(y)m(our)f(motions.)39 b(Xnee)25 b(will)f(stop)g(after)h(ha)m(ving)f(record)g(100)i(ev)m(en)m(ts)150 1482 y(\(this)31 b(is)f(the)h(default)f(b)s(eha)m(viour\).)150 1680 y Fi(5.1.2)63 b(Record)40 b(k)m(eyb)s(oard)150 1827 y Fo(Record)31 b(k)m(eyb)s(oard)f(ev)m(en)m(ts)i(only)e(and)g(sa)m(v)m (e)i(log)f(to)g(kb)s(d-rec.xnl.)533 1960 y Fh(cnee)47 b(--record)e(--keyboard)g(--out-file)g(kbd-rec.xnl)275 2094 y Fo(After)32 b(ha)m(ving)h(t)m(yp)s(ed)f(this)g(Xnee)g(records)g (all)h(y)m(our)g(k)m(eyb)s(oard)f(actions.)47 b(After)33 b(Xnee)f(has)g(exited)150 2203 y(y)m(ou)k(will)g(b)s(e)f(able)h(to)h (repla)m(y)f(y)m(our)g(k)m(eyb)s(oard)f(actions.)58 b(Xnee)36 b(will)g(stop)g(after)g(ha)m(ving)g(record)g(100)150 2313 y(ev)m(en)m(ts)c(\(this)e(is)h(the)f(default)h(b)s(eha)m(viour\).) 150 2511 y Fi(5.1.3)63 b(Record)40 b(k)m(eyb)s(oard)h(and)g(mouse)150 2658 y Fo(Record)31 b(k)m(eyb)s(oard)f(and)g(mouse)g(and)g(sa)m(v)m(e)i (log)f(to)g(km-rec.xnl.)533 2791 y Fh(cnee)47 b(--record)e(--keyboard)g (--mouse)h(--out-file)f(kbd-rec.xnl)275 2925 y Fo(After)24 b(ha)m(ving)h(t)m(yp)s(ed)g(this)f(Xnee)h(records)f(all)h(y)m(our)g(k)m (eyb)s(oard)f(and)g(mouse)h(actions.)40 b(So)24 b(no)m(w)g(mo)m(v)m(e) 150 3034 y(y)m(our)34 b(p)s(oin)m(ter)f(and)g(write)h(some)g(stu\013)g (with)f(y)m(our)h(k)m(eyb)s(oard.)50 b(After)34 b(Xnee)g(has)g(exited)g (y)m(ou)h(will)f(b)s(e)150 3144 y(able)j(to)h(repla)m(y)f(y)m(our)g(k)m (eyb)s(oard)f(and)h(mouse)f(actions.)61 b(Xnee)37 b(will)h(stop)e (after)i(ha)m(ving)f(record)g(100)150 3253 y(ev)m(en)m(ts)32 b(\(this)e(is)h(the)f(default)h(b)s(eha)m(viour\).)150 3451 y Fi(5.1.4)63 b(Record)40 b(a)h(gn)m(umeric)g(session)150 3598 y Fo(Record)d(a)g(gn)m(umeric)g(session.)62 b(Record)38 b(400)h(ev)m(en)m(ts.)63 b(Sa)m(v)m(e)39 b(output)e(in)g(\014le)h(gn)m (umeric.xnl)g(Start)g(a)150 3708 y(terminal)31 b(em)m(ulator)g(\(e.g)h (xterm\))390 3841 y Fh(xterm&)275 3975 y Fo(Start)e(Xnee)533 4108 y Fh(cnee)47 b(--record)e(--keyboard)g(--mouse)h (--events-to-record)d(400)k(\\)581 4218 y(--out-file)e(gnumeric.xnl&) 275 4352 y Fo(Start)30 b(gn)m(umeric)390 4485 y Fh(gnumeric&)275 4619 y Fo(Start)g(using)g(gn)m(umeric.)41 b(Bro)m(wse)31 b(the)g(men)m(us)f(ab)s(o)m(v)m(e,)h(reset)g(the)g(fon)m(ts)g(etc.)150 4816 y Fi(5.1.5)63 b(Record)40 b(a)h(gn)m(umeric)g(session)i(with)d (sync)m(hronisation)i(data)150 4963 y Fo(Record)31 b(a)f(gn)m(umeric)h (session.)41 b(Record)30 b(400)i(ev)m(en)m(ts.)42 b(Sa)m(v)m(e)32 b(output)e(in)g(\014le)g(gn)m(umeric2.xnl)150 5206 y(Start)h(a)f (terminal)h(em)m(ulator)h(\(e.g)g(xterm\))e Fh(xterm&)275 5340 y Fo(Start)g(Xnee)p eop end %%Page: 14 17 TeXDict begin 14 16 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Examples)2661 b(14)533 299 y Fh(cnee)47 b(--record)e(--keyboard)g (--mouse)h(--events-to-record)d(400)k(\\)581 408 y(--out-file)e (gnumeric2.xnl\\)533 518 y(--delivered-event-range)d (Expose,MapRequest,Leave)o(Noti)o(fy,)o(Ente)o(rNot)o(ify)89 b(&)150 758 y Fo(Start)32 b(gn)m(umeric)g Fh(gnumeric&)c Fo(Start)k(using)f(gn)m(umeric.)45 b(Bro)m(wse)32 b(the)g(men)m(us)f (ab)s(o)m(v)m(e,)i(reset)f(the)g(fon)m(ts)150 868 y(etc.)150 1093 y Fn(5.2)68 b(Repla)l(y)l(er)150 1314 y Fi(5.2.1)63 b(Repla)m(y)39 b(mouse)k(motions)150 1461 y Fo(Repla)m(y)31 b(mouse)g(motions)g(as)f(found)f(in)h(the)h(\014le)f(mouse-rec.xnl.)533 1591 y Fh(cnee)47 b(--replay)93 b(--file)46 b(mouse-rec.xnl)275 1722 y Fo(Xnee)30 b(will)h(no)m(w)f(imitate)j(exactly)f(what)e(y)m(ou)h (did)e(when)h(y)m(ou)g(recorded)h(this)f(\014le.)150 1914 y Fi(5.2.2)63 b(Repla)m(y)39 b(mouse)k(motions)f(using)g(with)e (half)i(sp)s(eed)150 2061 y Fo(Repla)m(y)33 b(mouse)e(motions)h(as)g (found)e(in)i(the)f(\014le)h(mouse-rec.xnl)g(but)f(with)h(the)f(sp)s (eed)g(set)h(to)h(50\045)f(of)150 2171 y(the)f(recorded.)533 2302 y Fh(cnee)47 b(--replay)93 b(--file)46 b(mouse-rec.xnl)e (--speed-percent)g(50)275 2432 y Fo(Xnee)26 b(will)h(no)m(w)f(imitate)i (exactly)g(what)e(y)m(ou)h(did)e(when)h(y)m(ou)g(recorded)g(this)g (\014le,)i(allthough)f(it)g(will)150 2542 y(b)s(e)j(done)g(in)g(50\045) h(of)f(the)h(recorded)f(time.)150 2734 y Fi(5.2.3)63 b(Repla)m(y)39 b(mouse)k(motions)f(using)g(with)e(double)i(sp)s(eed)150 2881 y Fo(Repla)m(y)30 b(mouse)e(motions)i(as)f(found)e(in)i(the)g (\014le)f(mouse-rec.xnl)i(but)e(with)g(the)h(sp)s(eed)f(set)h(to)h (200\045)g(of)150 2990 y(the)h(recorded.)533 3121 y Fh(cnee)47 b(--replay)93 b(--file)46 b(mouse-rec.xnl)e(--speed-percent)g(200)275 3252 y Fo(Xnee)26 b(will)h(no)m(w)f(imitate)i(exactly)g(what)e(y)m(ou)h (did)e(when)h(y)m(ou)g(recorded)g(this)g(\014le,)i(allthough)f(it)g (will)150 3362 y(b)s(e)j(done)g(t)m(wice)i(as)e(fast)h(as)g(when)e (recorded.)150 3554 y Fi(5.2.4)63 b(Repla)m(y)39 b(k)m(eyb)s(oard)i (actions)150 3701 y Fo(Repla)m(y)31 b(k)m(eyb)s(oard)f(ev)m(en)m(ts)i (from)e(\014le)h(kb)s(d-rec.xnl.)533 3831 y Fh(cnee)47 b(--replay)e(--file)h(kbd-rec.xnl)275 3962 y Fo(After)32 b(ha)m(ving)h(t)m(yp)s(ed)g(this)f(Xnee)h(repla)m(ys)g(all)h(y)m(our)e (k)m(eyb)s(oard)h(actions.)48 b(After)33 b(Xnee)g(has)f(exited)150 4072 y(y)m(ou)f(will)f(b)s(e)g(able)h(to)g(repla)m(y)g(y)m(our)g(k)m (eyb)s(oard)f(actions.)150 4264 y Fi(5.2.5)63 b(Repla)m(y)39 b(k)m(eyb)s(oard)i(and)g(mouse)150 4411 y Fo(Repla)m(y)31 b(k)m(eyb)s(oard)f(and)g(mouse)h(from)e(the)i(\014le)f(km-rec.xnl.)533 4542 y Fh(cnee)47 b(--replay)e(--keyboard)g(--mouse)h(--file)g (kbd-rec.xnl)275 4672 y Fo(After)28 b(ha)m(ving)h(t)m(yp)s(ed)g(this)f (Xnee)h(repla)m(ys)g(all)g(y)m(our)g(k)m(eyb)s(oard)f(and)g(mouse)g (actions.)42 b(Xnee)29 b(mo)m(v)m(es)150 4782 y(y)m(our)h(p)s(oin)m (ter)h(and)e(writes)i(the)f(the)h(same)g(stu\013)f(as)g(y)m(ou)h(did)f (when)f(recording.)150 4974 y Fi(5.2.6)63 b(Repla)m(y)39 b(a)i(gn)m(umeric)g(session)150 5121 y Fo(Repla)m(y)31 b(the)g(gn)m(umeric)g(session)f(ab)s(o)m(v)m(e)150 5230 y(Start)46 b(a)g(terminal)g(em)m(ulator)h(\(e.g)g(xterm\))f Fh(xterm&)e Fo(Start)i(a)g(new)f(fresh)g(gn)m(umeric)h(spreadsheet)150 5340 y Fh(gnumeric&)p eop end %%Page: 15 18 TeXDict begin 15 17 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Examples)2661 b(15)275 299 y(Start)30 b(Xnee)533 430 y Fh(cnee)47 b(--replay)93 b(--file)46 b(gnumeric.xnl)275 561 y Fo(Xnee)28 b(will)g(no)m(w)h(do)f(the)g(same)g(stu\013)g(y)m(ou)h (did)e(when)g(recording.)40 b(It)28 b(ma)m(y)h(happ)s(en)d(that)j(some) g(user)150 671 y(actions)g(are)g(repla)m(y)m(ed)g(to)f(early)-8 b(.)41 b(This)27 b(is)i(so)f(b)s(ecause)g(Xnee)g(has)g(no)g(w)m(a)m(y)h (of)f(kno)m(wing)g(if)g(it)h(is)f(in)f(sync)150 780 y(with)j(the)h (recorded)f(session.)150 973 y Fi(5.2.7)63 b(Repla)m(y)39 b(a)i(gn)m(umeric)g(session)i(with)d(sync)m(hronisation)i(data)150 1119 y Fo(Repla)m(y)31 b(the)g(second)f(gn)m(umeric)h(session)f(ab)s(o) m(v)m(e.)150 1229 y(Start)46 b(a)g(terminal)g(em)m(ulator)h(\(e.g)g (xterm\))f Fh(xterm&)e Fo(Start)i(a)g(new)f(fresh)g(gn)m(umeric)h (spreadsheet)150 1339 y Fh(gnumeric&)275 1470 y Fo(Start)30 b(Xnee)533 1601 y Fh(cnee)47 b(--replay)93 b(--file)46 b(gnumeric2.xnl)275 1732 y Fo(Xnee)e(will)g(no)m(w)g(do)g(the)g(same)g (stu\013)f(y)m(ou)i(did)e(when)f(recording.)82 b(It)44 b(ma)m(y)g(happ)s(en)e(that)j(the)150 1841 y(repla)m(ying)36 b(slo)m(ws)g(do)m(wn.)56 b(This)35 b(is)g(b)s(ecause)h(Xnee)g(is)g (curren)m(tly)f(out)h(of)g(sync.)56 b(When)35 b(b)s(eing)g(out)h(of)150 1951 y(sync)27 b(Xnee)h(slo)m(ws)g(do)m(wn)f(a)h(bit)f(and)g(c)m(hec)m (ks)i(the)f(thresholds)e(if)i(it)g(is)f(allo)m(w)m(ed)j(to)e(con)m(tin) m(ue.)41 b(Xnee)28 b(will)150 2061 y(most)j(probably)e(\014nd)g(itself) i(in)f(sync)g(after)h(a)g(short)f(while.)40 b(All)31 b(recorded)f(user)g(actions)h(should)f(ha)m(v)m(e)150 2170 y(o)s(ccured)g(the)h(same)f(w)m(a)m(y)i(as)e(when)g(recording.)150 2342 y Fi(5.2.8)63 b(Repla)m(y)39 b(a)i(gn)m(umeric)g(session)i(with)d (sync)m(hronisation)i(data)e(setting)464 2466 y(threshold)150 2613 y Fo(Repla)m(y)31 b(the)g(second)f(gn)m(umeric)h(session)f(ab)s(o) m(v)m(e.)150 2723 y(Start)46 b(a)g(terminal)g(em)m(ulator)h(\(e.g)g (xterm\))f Fh(xterm&)e Fo(Start)i(a)g(new)f(fresh)g(gn)m(umeric)h (spreadsheet)150 2832 y Fh(gnumeric&)150 3058 y Fn(5.3)68 b(Ret)l(yp)t(er)150 3279 y Fi(5.3.1)63 b(Ret)m(yp)s(e)40 b(the)h(help)g(prin)m(tout)150 3426 y Fo(If)25 b(y)m(ou)h(w)m(an)m(t)g (Xnee)g(to)h(fak)m(e)f(a)g(user)f(t)m(yping)h(the)g(help)f(prin)m(tout) g(from)g(xnee)h(y)m(ou)g(can)g(use)f(the)h Fh(--type-)150 3535 y(help)j Fo(option.)150 3645 y(Start)i(a)f(terminal)h(em)m(ulator) h(\(e.g)g(xterm\))e(and)g(an)g(editor)h(\(e.g)h(emacs\).)390 3776 y Fh(xterm)46 b(&)390 3907 y(emacs)g(&)275 4038 y Fo(Ret)m(yp)s(e)30 b(the)h(help)f(prin)m(tout)g(b)m(y)h(starting)g (xnee)f(with)g(a)h(10)g(seconds)g(dela)m(y)g(dela)m(y)-8 b(.)390 4169 y Fh(cnee)47 b(--time)f(10)h(--type-help)275 4300 y Fo(Mo)m(v)m(e)30 b(y)m(our)e(mouse)g(to)h(the)g(editor)f(and)g (mak)m(e)h(the)g(editor)g(ha)m(v)m(e)g(fo)s(cus.)40 b(W)-8 b(ait)30 b(a)e(few)g(seconds)h(and)150 4410 y(xnee)i(will)f(t)m(yp)s(e) h(the)f(help.)41 b(Y)-8 b(ou)31 b(will)f(no)m(w)h(also)g(ha)m(v)m(e)h (a)e(cop)m(y)i(of)e(help)g(text.)150 4602 y Fi(5.3.2)63 b(Ret)m(yp)s(e)40 b(a)g(\014le)150 4749 y Fo(If)21 b(y)m(ou)h(w)m(an)m (t)g(Xnee)g(to)g(fak)m(e)g(a)g(user)f(t)m(yping)h(the)f(letters)i(as)f (found)e(in)h(a)h(text)g(\014le)g(y)m(ou)f(can)h(use)f(the)h(ret)m(yp)s (e)150 4859 y(mo)s(de.)42 b(Note)32 b(that)f(it)g(isn't)g(p)s(ossible)g (to)g(ret)m(yp)s(e)g(all)h(c)m(haracters)g(y)m(et.)43 b(This)30 b(will)h(b)s(e)f(implemen)m(ted)i(as)150 4968 y(so)s(on)e(as)h(p)s(ossible.)40 b(W)-8 b(e'll)32 b(giv)m(e)g(an)e (example)i(on)e(ho)m(w)g(to)h(use)f(this)h(mo)s(de.)150 5078 y(Start)g(a)f(terminal)h(em)m(ulator)h(\(e.g)g(xterm\))390 5209 y Fh(xterm)46 b(&)275 5340 y Fo(Create)31 b(a)f(text)i(\014le)p eop end %%Page: 16 19 TeXDict begin 16 18 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Examples)2661 b(16)390 299 y Fh(echo)47 b("Hi)g(Xnee")f(>)h (testfile.txt)275 434 y Fo(Ret)m(yp)s(e)31 b(the)h(con)m(ten)m(ts)h(of) e(this)g(\014le)h(to)g(another)f(\014le)g(b)m(y)h(starting)g(xnee)f (with)g(a)h(10)g(seconds)f(dela)m(y)150 543 y(dela)m(y)-8 b(.)390 678 y Fh(cnee)47 b(--time)f(10)h(--retype-file)d(testfile.txt) 275 813 y Fo(Start)30 b(the)h(fabulous)e(editor)i Fh(cat)390 948 y(cat)47 b(>)g(copiedfile.txt)275 1083 y Fo(W)-8 b(ait)34 b(a)f(few)f(seconds)g(and)g(xnee)h(will)f(ret)m(yp)s(e)h(the)f (letters)i(in)e(the)h(\014le)f Fh(testfile.txt)p Fo(.)44 b(Y)-8 b(ou)33 b(will)150 1193 y(no)m(w)d(also)i(ha)m(v)m(e)f(a)g(cop)m (y)g(of)f(that)h(\014le.)41 b(The)30 b(cop)m(y)h(is)f(called)i (copied\014le.txt.)42 b(This)29 b(is)i(a)f(realy)h(a)g(stupid)150 1302 y(w)m(a)m(y)g(to)g(cop)m(y)h(a)e(\014le)h(but)e(this)i(option)g (op)s(ens)e(up)g(a)i(few)f(p)s(ossibilities.)150 1535 y Fn(5.4)68 b(Distributor)150 1695 y Fo(With)31 b(the)f(distribution)g (mo)s(de)g(Xnee)h(can)g(send)e(y)m(our)h(device)i(ev)m(en)m(ts)f(to)h (m)m(ultiple)f(displa)m(ys.)150 1894 y Fi(5.4.1)63 b(Distribute)41 b(y)m(our)g(mouse)h(motions)150 2041 y Fo(Y)-8 b(ou)31 b(can)g(distribute)e(y)m(our)i(mouse)f(motions)h(to)g(the)g(displa)m (ys)f(fro)s(do:0.0)h(and)f(sam:0.0)150 2151 y(Start)h(a)f(terminal)h (em)m(ulator)h(\(e.g)g(xterm\))390 2286 y Fh(xterm)46 b(&)275 2421 y Fo(Start)30 b(xnee)390 2556 y Fh(cnee)47 b(--distribute)d(frodo:0,sam:0.0)438 2665 y(--record)h(--mouse)275 2800 y Fo(If)26 b(y)m(ou)i(ha)m(v)m(e)g(setup)f(authorit)m(y)h(correct) g(on)g(fro)s(do)e(and)h(sam)g(y)m(ou)g(will)h(see)g(all)g(y)m(ou)f (mouse)g(motions)150 2910 y(b)s(eing)j(done)g(on)g(those)h(displa)m(ys) g(as)f(w)m(ell.)150 3110 y Fi(5.4.2)63 b(Distribute)41 b(the)g(repla)m(ying)g(of)h(mouse)g(motions)150 3256 y Fo(Repla)m(y)31 b(and)f(distribute)g(mouse)g(motions)h(as)g(found)e (in)h(the)g(\014le)h Fh(mouse-rec.xnl)p Fo(.)533 3391 y Fh(cnee)47 b(--replay)93 b(--file)46 b(mouse-rec.xnl)581 3501 y(--distribute)e(frodo:0,sam:0.0)275 3636 y Fo(Xnee)30 b(will)g(no)m(w)f(imitate)j(exactly)f(what)f(y)m(ou)g(did)e(when)h(y)m (ou)h(recorded)g(this)f(\014le)h(on)f(y)m(our)h(host)g(as)150 3745 y(w)m(ell)h(on)g(fro)s(do)e(and)h(sam.)150 3945 y Fi(5.4.3)63 b(Distribute)41 b(the)g(ret)m(yping)g(of)h(a)e(\014le)150 4092 y Fo(If)29 b(y)m(ou)h(w)m(an)m(t)g(Xnee)g(to)g(to)h(distribute)e (the)g(fak)m(eing)i(of)f(a)g(user)f(t)m(yping)h(the)f(letters)i(as)f (found)e(in)h(a)h(text)150 4202 y(\014le)g(y)m(ou)h(can)g(use)f(the)g (ret)m(yp)s(e)h(mo)s(de)f(together)i(with)e(the)g(distribution)g(mo)s (de.)150 4311 y(Start)h(a)f(terminal)h(em)m(ulator)h(\(e.g)g(xterm\))e (on)h(eac)m(h)g(of)g(the)f(hosts)390 4446 y Fh(xterm)46 b(&)275 4581 y Fo(Create)31 b(a)f(text)i(\014le.)390 4716 y Fh(echo)47 b("Hi)g(again)f(Xnee")g(>)i(distfile.txt)275 4851 y Fo(Ret)m(yp)s(e)31 b(the)h(con)m(ten)m(ts)h(of)e(this)g(\014le)h (to)g(another)f(\014le)g(b)m(y)h(starting)g(xnee)f(with)g(a)h(10)g (seconds)f(dela)m(y)150 4961 y(dela)m(y)-8 b(.)390 5095 y Fh(cnee)47 b(--time)f(10)h(--retype-file)d(distfile.txt)438 5205 y(--distribute)g(frodo:0,sam:0.0)275 5340 y Fo(Start)30 b(the)h(fabulous)e(editor)i Fh(cat)f Fo(on)g(the)g(terminal)h(em)m (ulators)h(on)e(eac)m(h)i(the)e(terminals.)p eop end %%Page: 17 20 TeXDict begin 17 19 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Examples)2661 b(17)390 299 y Fh(cat)47 b(>)g(copiedfile.txt)150 548 y Fo(If)27 b(y)m(ou)h(ha)m(v)m(e)g(setup)f(authorit)m(y)h(correct)h (on)e(fro)s(do)g(and)f(sam)i(y)m(ou)f(will,)i(after)f(a)g(few)f (seconds,)h(see)g(xnee)150 658 y(ret)m(yp)s(e)g(the)f(letters)i(in)e (the)g(\014le)h Fh(distfile.txt)p Fo(.)36 b(Y)-8 b(ou)28 b(will)g(no)m(w)f(also)i(ha)m(v)m(e)f(three)g(copies)g(of)g(that)g (\014le.)150 767 y(On)g(cop)m(y)i(on)f(eac)m(h)h(host.)41 b(The)28 b(cop)m(y)i(is)f(called)i(copied\014le.txt.)41 b(This)29 b(migh)m(t)h(seem)f(lik)m(e)h(a)g(stupid)e(w)m(a)m(y)150 877 y(to)j(cop)m(y)g(a)g(\014le)f(to)i(three)e(lo)s(cations)i(but)e (this)g(is)g(just)g(an)g(example.)150 1117 y Fn(5.5)68 b(Key)150 1341 y Fi(5.5.1)63 b(Stop)41 b(Xnee)g(with)f(k)m(ey)150 1488 y Fo(Y)-8 b(ou)34 b(can)h(stop)f(xnee)g(b)m(y)g(sp)s(ecifying)f(a) i(k)m(ey)-8 b(.)52 b(Mak)m(e)36 b(sure)d(that)i(this)e(k)m(ey)i(isn't)f (grabb)s(ed)f(b)m(y)h(another)150 1598 y(X)e(clien)m(t)i(\(e.g)f(b)m(y) f(the)g(Windo)m(w)g(Manager\).)47 b(Let's)33 b(sa)m(y)f(that)h(y)m(ou)f (w)m(an)m(t)h(Xnee)f(to)h(stop)f(recording)g(if)150 1707 y(y)m(ou)f(press)e(Con)m(trol)i(and)f(h.)533 1847 y Fh(cnee)47 b(--record)e(--mouse)h(--events-to-record)d(-1)k(--stop-key)e(h)275 1986 y Fo(This)35 b(will)h(mak)m(e)h(xnee)f(record)g(mouse)g(ev)m(en)m (ts)h(un)m(til)f(y)m(ou)h(press)e(h.)57 b(All)36 b(prin)m(touts)g(are)g (done)g(to)150 2096 y(stdout)30 b(so)h(y)m(ou)g(can)f(see)h(that)g (Xnee)g(stops)f(when)g(y)m(ou)g(press)g(the)h(k)m(ey)-8 b(.)150 2205 y(Mo)m(v)m(e)32 b(y)m(our)f(mouse)f(for)g(a)h(while)f(and) g(y)m(ou'll)i(see)f(xnee)f(prin)m(t)g(out)h(lots)g(of)f(lines.)150 2315 y(Press)g(h.)150 2425 y(Xnee)h(will)g(no)m(w)f(ha)m(v)m(e)i(stopp) s(ed)d(recording.)150 2629 y Fi(5.5.2)63 b(P)m(ausing)41 b(and)g(resuming)h(Xnee)f(with)g(k)m(ey)150 2776 y Fo(Y)-8 b(ou)32 b(can)g(pause)f(and)g(resum)g(xnee)h(b)m(y)g(sp)s(ecifying)f(a) h(k)m(ey)-8 b(.)46 b(Mak)m(e)33 b(sure)e(that)h(this)g(k)m(ey)g(isn't)g (grabb)s(ed)150 2885 y(b)m(y)e(another)g(X)g(clien)m(t)i(\(e.g)g(b)m(y) e(the)g(Windo)m(w)g(Manager\).)42 b(Let's)31 b(sa)m(y)g(that)g(y)m(ou)f (w)m(an)m(t)h(Xnee)f(to)h(pause)150 2995 y(recording)f(if)h(y)m(ou)g (press)e(p)h(and)g(to)h(resume)f(when)f(pressing)h(Comn)m(trol)h(and)e (r.)533 3135 y Fh(cnee)47 b(--record)e(--mouse)h(--events-to-record)d (-1)k(--pause-key)e(p)i(\\)533 3244 y(--resume-key)e(r)275 3384 y Fo(This)35 b(will)h(mak)m(e)h(xnee)f(record)g(mouse)g(ev)m(en)m (ts)h(un)m(til)f(y)m(ou)h(press)e(p.)57 b(All)36 b(prin)m(touts)g(are)g (done)g(to)150 3493 y(stdout)30 b(so)h(y)m(ou)g(can)f(see)h(that)g (Xnee)g(stops)f(when)g(y)m(ou)g(press)g(the)h(k)m(ey)-8 b(.)150 3603 y(Mo)m(v)m(e)32 b(y)m(our)f(mouse)f(for)g(a)h(while)f(and) g(y)m(ou'll)i(see)f(xnee)f(prin)m(t)g(out)h(lots)g(of)f(lines.)150 3713 y(Press)g(p.)150 3822 y(Xnee)h(will)g(no)m(w)f(ha)m(v)m(e)i (paused)e(recording.)41 b(Mo)m(v)m(e)32 b(y)m(our)f(mouse)f(for)g(a)h (while)g(and)f(note)h(that)g(nothing)150 3932 y(is)f(prin)m(ted.)150 4041 y(Press)g(r.)150 4151 y(Xnee)35 b(will)g(no)m(w)f(ha)m(v)m(e)i (resumed)d(recording.)54 b(Mo)m(v)m(e)36 b(y)m(our)f(mouse)f(for)g(a)h (while)g(and)e(note)j(that)f(xnee)150 4260 y(b)s(egins)30 b(its)h(prin)m(touts.)150 4501 y Fn(5.6)68 b(Using)46 b(macro)150 4660 y Fo(Macors)30 b(can)f(b)s(e)g(used)f(in)h(v)-5 b(arious)29 b(applications)h(allthough)g(man)m(y)f(applicaions)h(ha)m (v)m(e)g(a)g(macro)g(func-)150 4770 y(tionalit)m(y)j(built)d(in)g (\(e.g)i(emacs\).)150 4974 y Fi(5.6.1)63 b(De\014ne)41 b(a)g(simple)g(macro)150 5121 y Fo(There)f(are)h(plen)m(t)m(y)h(of)f (to)s(ols)h(that)f(bind)f(a)h(k)m(ey)g(com)m(bination)h(to)g (di\013eren)m(t)f(actions.)73 b(F)-8 b(or)42 b(v)-5 b(arious)150 5230 y(reasons)35 b(the)h(author)f(of)h(this)f(man)m(ual)h(is)f (familliar)i(with)e(xrebind)f(so)h(w)m(e)h(will)g(use)f(xrebind)f(in)h (this)150 5340 y(example.)p eop end %%Page: 18 21 TeXDict begin 18 20 bop 150 -116 a Fo(Chapter)47 b(5:)i(Examples)2636 b(18)150 299 y(The)30 b(\014rst)g(thing)g(to)i(do)e(is)h(to)g(decide)g (whic)m(h)f(k)m(ey)i(com)m(bination)g(to)f(tie)g(to)h(the)e(w)m(an)m (ted)i(action.)42 b(Let's)150 408 y(sa)m(y)35 b(w)m(e)g(w)m(an)m(t)g (to)g(use)g(one)f(of)h(the)g(fun)m(tion)f(k)m(eys,)i(F1.)54 b(W)-8 b(e)35 b(then)f(ha)m(v)m(e)i(to)f(\014nd)e(out)i(whic)m(h)f(k)m (eyco)s(de)150 518 y(b)s(elongs)d(to)h(that)g(k)m(ey)-8 b(.)44 b(The)31 b(action)i(w)m(e)e(will)h(bind)e(to)i(this)f(k)m(ey)h (com)m(bination)h(will)e(b)s(e)g(the)g(repla)m(ying)150 628 y(of)g(a)f(recorded)g(session)h(from)f(the)g(previous)g(examples.) 150 737 y(W)-8 b(e)32 b(use)e(Xnee)g(to)i(\014nd)c(the)j(k)m(eyco)s(de) g(for)g(F1.)41 b(Start)31 b(xnee.)533 870 y Fh(cnee)47 b(--record)e(--keyboard)g(--events-to-record)e(20)275 1002 y Fo(Press)27 b(the)i(F1)g(k)m(ey)g(and)f(see)h(what)f(n)m(um)m(b) s(er)f(w)m(as)i(prin)m(ted)f(out.)40 b(It)29 b(will)f(lo)s(ok)h (something)g(lik)m(e)h(this:)390 1135 y Fh(0,2,0,0,0,67,0,90300078)390 1244 y(0,3,0,0,0,67,0,90300156)275 1377 y Fo(The)36 b(in)m(teresting)h (part)g(here)f(is)h(the)f(6th)h(column.)59 b(In)36 b(our)g(example)h(w) m(e)g(\014nd)e(67,)k(whic)m(h)d(is)h(the)150 1486 y(k)m(eyco)s(de)31 b(for)g(F1.)150 1596 y(No)m(w)j(w)m(e)f(mo)m(v)m(e)i(on)e(to)h(setup)e (xrebind)g(to)i(grab)f(F1)h(and)e(bind)g(that)i(to)f(repla)m(y)h(the)f (mouse)g(motions)150 1705 y(from)42 b(the)h(\014le)f Fh(mouse-rec.xnl)p Fo(.)73 b(Op)s(en)41 b(or)i(create)h(a)e(new)g (\014le)h(in)f(y)m(our)g(home)h(directory)g(called)150 1815 y Fh(.xrbrc)29 b Fo(and)g(add)h(the)h(lines.)390 1947 y Fh(XrebindGrab)390 2057 y({)485 2167 y(Action)285 b(=)48 b(Execute)485 2276 y(GrabKeycode)d(=)j(67)485 2386 y(Modifier)189 b(=)48 b(AnyModifier)485 2495 y(Command)237 b(=)48 b(xnee)94 b(--replay)46 b(--file)g(mouse-rec.xnl)485 2605 y(Comment)237 b(=)48 b(Starting)d(xnee)i(replay)485 2715 y(AutoRepeat)93 b(=)48 b(false)485 2824 y(Fork)381 b(=)48 b(true)390 2934 y(})275 3066 y Fo(Let's)31 b(try)f(it.)41 b(Start)31 b(xrebind)e(with)h(v)m(erb)s(ose)g(prin)m(touts.)390 3199 y Fh(xrebind)46 b(--verbose)275 3331 y Fo(Press)26 b(F1)h(and)g(the)g(recorded)f(session)h(from)g(the)g(previous)f (example)i(shall)f(b)s(e)f(repla)m(y)m(ed.)40 b(Y)-8 b(ou)28 b(can)150 3441 y(also)j(see)g(in)f(the)h(v)m(erb)s(ose)f(prin)m (touts)h(that)g(xrebind)e(executes)i(xnee.)150 3636 y Fi(5.6.2)63 b(De\014ne)41 b(another)g(simple)h(macro)150 3783 y Fo(Let's)36 b(sa)m(y)h(w)m(e)f(w)m(an)m(t)g(to)h(bind)d(Con)m (trol)j(and)e(e)h(to)g(execute)h(the)f(session)g(as)g(in)f(the)h (example)g(ab)s(o)m(v)m(e.)150 3892 y(This)30 b(time)h(setting)g(up)e (xrebind)h(is)g(a)h(bit)f(easier.)150 4002 y(Setup)51 b(xrebind)g(to)i(grab)f(F1)h(and)f(bind)e(that)j(to)g(repla)m(y)g(the)f (mouse)g(motions)h(from)f(the)g(\014le)150 4112 y Fh(mouse-rec.xnl)29 b Fo(b)m(y)j(op)s(ening)g(or)h(create)h(a)f(new)f(\014le)h(in)f(y)m (our)g(home)h(directory)g(called)h Fh(.xrbrc)d Fo(and)150 4221 y(add)f(the)g(lines.)390 4354 y Fh(XrebindGrab)390 4463 y({)485 4573 y(Action)285 b(=)48 b(Execute)485 4682 y(GrabKey)237 b(=)48 b(e)485 4792 y(Modifier)189 b(=)48 b(Control)485 4902 y(Command)237 b(=)48 b(xnee)94 b(--replay)46 b(--file)g(mouse-rec.xnl)485 5011 y(Comment)237 b(=)48 b(Starting)d(xnee)i(replay)485 5121 y(AutoRepeat)93 b(=)48 b(false)485 5230 y(Fork)381 b(=)48 b(true)390 5340 y(})p eop end %%Page: 19 22 TeXDict begin 19 21 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Examples)2661 b(19)390 299 y Fh(e,)47 b(Control,)f(Exec,)g(xnee,)94 b(--replay)46 b(--file)g(mouse-rec.xnl,)e(\\)390 408 y(Fork,)i(NoAutoRepeat)275 538 y Fo(Let's)31 b(try)f(it.)41 b(Start)31 b(xrebind)e(with)h(v)m(erb)s(ose)g(prin)m(touts.)390 667 y Fh(xrebind)46 b(--verbose)275 797 y Fo(Press)20 b(Con)m(trol)i(and)f(e)h(and)e(the)i(recorded)f(session)g(from)g(the)h (previous)e(example)i(shall)g(b)s(e)f(repla)m(y)m(ed.)150 1019 y Fn(5.7)68 b(V)-11 b(arious)45 b(options)150 1238 y Fi(5.7.1)63 b(Using)42 b(v)m(erb)s(ose)g(mo)s(de)150 1385 y Fo(T)-8 b(o)31 b(enable)g(v)m(erb)s(ose)f(mo)s(de,)g(start)h (xnee)g(lik)m(e)h(this)390 1515 y Fh(cnee)47 b(--verbose)e(--record)g (--mouse)275 1644 y Fo(Mo)m(v)m(e)32 b(the)f(mouse)f(for)g(a)h(while)f (and)g(y)m(ou'll)h(lots)h(of)e(v)m(erb)s(ose)h(prin)m(touts)f(that)h (usualy)f(isn't)g(there.)150 1834 y Fi(5.7.2)63 b(Using)42 b(h)m(uman)f(readable)g(prin)m(touts)150 1981 y Fo(T)-8 b(o)31 b(enable)g(h)m(uman)e(prin)m(tout)h(mo)s(de,)h(start)g(xnee)f (lik)m(e)i(this)390 2110 y Fh(cnee)47 b(--human-printout)c(--record)j (--mouse)275 2240 y Fo(Mo)m(v)m(e)41 b(the)e(mouse)g(for)f(a)i(while)f (and)f(y)m(ou'll)i(see)g(the)f(data)h(prin)m(ted)e(out)h(in)g(an)g (almost)h(h)m(uman)150 2349 y(friendly)30 b(format.)150 2538 y Fi(5.7.3)63 b(Using)42 b(a)e(di\013eret)h(screen)g(resolution) 150 2685 y Fo(If)d(a)g(session)h(w)m(as)f(recorded)g(on)h(a)f(screen)g (with)g(another)h(resolution)g(than)f(on)g(the)g(one)h(where)e(w)m(e) 150 2795 y(repla)m(y)28 b(the)g(session)g(xnee)g(will)g(translate)h (all)f(co)s(ordinates)h(automagically)-8 b(.)43 b(Ho)m(w)m(ev)m(er,)30 b(y)m(ou)e(can)g(force)150 2904 y(xnee)j(to)g(use)f(a)h(sp)s(eci\014c)f (resolution)h(when)e(repla)m(ying.)42 b(T)-8 b(o)30 b(do)h(this,)f (start)h(xnee)g(lik)m(e)g(this)390 3034 y Fh(cnee)47 b(--replay)e(--file)h(mouse-rec.xnl)e(\\)390 3144 y (--replay-resolution)90 b(800x600)275 3273 y Fo(Xnee)37 b(will)g(no)m(w)h(repla)m(y)f(the)g(ev)m(en)m(ts)i(recorded)e(in)g(the) g(sessions)g(\014le)g Fh(mouse-rec.xnl)c Fo(as)38 b(if)f(the)150 3383 y(screen)30 b(has)h(a)f(resolution)h(of)g(800x600.)150 3572 y Fi(5.7.4)63 b(Using)42 b(a)e(o\013set)h(when)g(repla)m(ying)150 3719 y Fo(If)28 b(a)h(session)g(w)m(as)f(recording)h(a)g(cen)m(tered)g (windo)m(w)f(with)h(a)f(windo)m(w)g(manager)h(and)f(is)h(to)g(b)s(o)f (repla)m(y)m(ed)150 3828 y(without)41 b(a)h(windo)m(w)f(manager)h (\(still)h(cen)m(tered\))g(y)m(ou)f(can)g(use)f(the)g(o\013set)i(switc) m(h)f(to)g(mak)m(e)h(Xnee)150 3938 y(repla)m(y)31 b(the)g(ev)m(en)m(ts) g(in)f(order)g(to)h(get)h(the)e(co)s(ordinates)i(righ)m(t.)390 4067 y Fh(cnee)47 b(--replay)e(--file)h(mouse-rec.xnl)e(\\)390 4177 y(--replay-offset)g(12,-7)275 4306 y Fo(Xnee)28 b(will)g(no)m(w)h(repla)m(y)f(the)h(ev)m(en)m(ts)g(recorded)f(in)g(the) g(sessions)g(\014le)g Fh(mouse-rec.xnl)d Fo(and)i(adding)150 4416 y(12)k(to)g(the)g(x)f(co)s(ordinate)h(and)f(subtract)h(7)f(from)g (the)h(y)f(co)s(ordinate.)150 4605 y Fi(5.7.5)63 b(Using)42 b(a)e(windo)m(w)h(p)s(osition)i(recall)150 4752 y Fo(F)-8 b(or)34 b(some)g(reason)f(a)h(repla)m(y)m(ed)h(windo)m(w)d(ma)m(y)i(p)s (op)f(up)f(at)i(a)g(di\013eren)m(t)f(p)s(osition)h(as)g(when)e (recorded.)150 4862 y(Xnee)f(can)f(try)h(to)g(solv)m(e)h(this)e(b)m(y)g (adding)g(the)h Fh(recall-window-position)24 b Fo(option)31 b(during)e(repla)m(y)-8 b(.)390 4991 y Fh(cnee)47 b(--replay)e(--file)h (mouse-rec.xnl)e(\\)390 5101 y(--recall-window-position)275 5230 y Fo(If)23 b(a)h(windo)m(w)f(p)s(ops)f(up)h(at)h(a)g(di\013eren)m (t)g(p)s(osition)g(when)f(repla)m(ying)h(\(as)h(whe)e(recorded\))h (Xnee)g(mo)m(v)m(es)150 5340 y(the)31 b(new)e(windo)m(w)h(to)h(the)g (same)g(p)s(osition)f(as)h(when)e(recorded.)p eop end %%Page: 20 23 TeXDict begin 20 22 bop 150 -116 a Fo(Chapter)47 b(5:)i(Examples)2636 b(20)150 299 y Fi(5.7.6)63 b(Using)42 b(no)f(resolution)i(translation) 150 446 y Fo(If)28 b(a)h(session)g(w)m(as)g(recorded)f(on)g(a)h(screen) g(with)f(another)h(resolution)g(than)g(the)f(on)h(the)g(one)f(where)g (w)m(e)150 555 y(repla)m(y)g(the)g(session)g(xnee)g(will)g(translate)h (all)f(co)s(ordinates)h(automagically)-8 b(.)43 b(Ho)m(w)m(ev)m(er,)30 b(y)m(ou)e(can)g(force)150 665 y(xnee)j(not)f(to)h(use)f(translation.) 42 b(T)-8 b(o)31 b(do)f(this,)h(start)g(xnee)f(lik)m(e)i(this)390 801 y Fh(cnee)47 b(--replay)e(--file)h(mouse-rec.xnl)e(\\)390 911 y(--no-resolution-adjustme)o(nt)275 1047 y Fo(Xnee)37 b(will)g(no)m(w)h(repla)m(y)f(the)g(ev)m(en)m(ts)i(recorded)e(in)g(the) g(sessions)g(\014le)g Fh(mouse-rec.xnl)c Fo(as)38 b(if)f(the)150 1157 y(screen)30 b(had)g(the)h(same)g(resolution)g(the)f(recorded)g (one.)150 1358 y Fi(5.7.7)63 b(Record)40 b(another)h(displa)m(y)g(than) g(the)g(default)150 1505 y Fo(If)c(y)m(ou)g(w)m(an)m(t)h(to)g(record)e (another)i(displa)m(y)f(than)g(the)g(default,)i(as)e(set)h(in)e(the)i (DISPLA)-8 b(Y)37 b(v)-5 b(ariable,)150 1614 y(y)m(ou)31 b(use)f(the)g Fh(--display)e Fo(option.)390 1751 y Fh(cnee)47 b(--record)e(--mouse)h(--display)f(frodo:0.0)275 1887 y Fo(Xnee)30 b(will)h(no)m(w)f(record)h(the)f(mouse)h(ev)m(en)m(ts)g (on)g(the)f(displa)m(y)h(fro)s(do:0.0.)150 2088 y Fi(5.7.8)63 b(Repla)m(y)39 b(to)i(another)h(displa)m(y)e(than)h(the)g(default)150 2235 y Fo(If)30 b(y)m(ou)g(w)m(an)m(t)h(to)g(repla)m(y)g(to)f(another)h (displa)m(y)f(than)g(the)g(default,)h(as)f(set)h(in)e(the)i(DISPLA)-8 b(Y)30 b(v)-5 b(ariable,)150 2345 y(y)m(ou)31 b(use)f(the)g Fh(--display)e Fo(option.)390 2481 y Fh(cnee)47 b(--replay)e(--display) g(frodo:0.0)h(--file)g(mouse-rec.xnl)275 2617 y Fo(Xnee)30 b(will)h(no)m(w)f(repla)m(y)h(the)g(mouse)f(ev)m(en)m(ts)i(on)e(the)h (displa)m(y)f(fro)s(do:0.0.)150 2852 y Fn(5.8)68 b(Shell)45 b(scripts)g(using)g(Xnee)150 3012 y Fo(Insted)36 b(of)g(on)m(v)m(oking) h(Xnee)g(for)f(ev)m(ery)h(time)g(y)m(ou)f(need)g(to)h(fak)m(e)g(ev)m (en)m(ts)h(y)m(ou)e(can)g(mak)m(e)i(use)d(of)i(the)150 3121 y(shell)32 b(functions)f(as)h(deliv)m(ered)h(with)e(Xnee.)46 b(With)32 b(these)g(functions)g(y)m(ou)g(can)g(start)g(one)g(instance)h (of)150 3231 y(Xnee)e(and)f(fak)m(e)h(device)g(ev)m(en)m(ts)h(whenev)m (er)e(y)m(ou)h(need.)390 3477 y Fh(#!/bin/bash)390 3696 y(#)47 b(Source)g(in)g(handy)f(functions)390 3806 y(.)h (/usr/share/xnee/xnee.sh)390 4025 y(#)g(Loop)g(and)g(press)f(buttons) 390 4134 y(TMP=0)390 4244 y(while)g([)i($TMP)e(-le)h(5])390 4354 y(do)485 4463 y(TMP=$\(\($TMP+1\)\))485 4573 y(xnee_fake_button)d ($TMP)390 4682 y(done)390 4902 y(#)j(Just)g(a)h(simple)e(example)f (....don't)h(bother)g(to)h(understand)390 5011 y(tar)g(cvf)g (/tmp/crap.tar)d(*)390 5121 y(sleep)i(2)390 5340 y(#)h(Fake)g(ls)g(and) g(Enter)p eop end %%Page: 21 24 TeXDict begin 21 23 bop 150 -116 a Fo(Chapter)30 b(5:)41 b(Examples)2661 b(21)390 299 y Fh(xnee_fake_key)44 b(l)390 408 y(xnee_fake_key)g(s)390 518 y(xnee_fake_key)g(XK_Return)275 872 y Fo(This)39 b(example)i(will)f(fak)m(e)i(press)d(and)h(release)h (of)g(the)f(mouse)g(button)g(and)g(do)g(fak)m(e)h(press)f(and)150 981 y(release)30 b(of)e(ls)h(follo)m(w)m(ed)h(b)m(y)e(a)h(press)f(and)g (release)h(of)g(En)m(ter....)41 b(and)28 b(of)h(course,)g(y)m(ou'll)g (get)h(a)f(tar)g(\014le)f(in)150 1091 y(/tmp.)275 1225 y(Mak)m(e)j(sure)f(that)h(the)g(path)f(to)h(the)f Fh(xnee.sh)f Fo(is)h(correct.)p eop end %%Page: 22 25 TeXDict begin 22 24 bop 150 -116 a Fo(Chapter)30 b(6:)41 b(Xnee)31 b(Programs)2433 b(22)150 299 y Fl(6)80 b(Xnee)53 b(Programs)150 533 y Fo(GNU)31 b(Xnee)g(consists)g(of)f(three)h (di\013eren)m(t)g(programs,)f(cnee,)h(gnee)g(and)f(pnee.)150 765 y Fn(6.1)68 b(cnee)45 b(-)g(cnee's)g(not)g(an)g(ev)l(en)l(t)h(em)l (ulator)150 925 y Fo(This)30 b(is)h(the)g(Xnee)g(command)f(line)i (program.)41 b(This)30 b(programs)h(con)m(tains)h(most)f(features)g (and)f(is)h(the)150 1034 y(basis)f(for)g(this)h(do)s(cumen)m(tation.) 275 1169 y(F)-8 b(or)29 b(a)g(user)f(not)h(used)g(to)g(X11)h(it)f(is)g (probably)f(a)h(go)s(o)s(d)g(idea)g(to)h(start)f(with)g(gnee)g(or)g (pnee)g(instead)150 1279 y(or)h(start)h(using)f(cnee)h(in)f (demonstration)h(mo)s(de:)40 b Fh(cnee)30 b(--demo)150 1511 y Fn(6.2)68 b(gnee)46 b(-)e(gnee's)i(not)f(an)g(em)l(ulator)i (either)150 1670 y Fo(This)29 b(is)h(a)g(GUI)h(\(using)e(GTK2/Gnome\))j (with)d(most)i(of)f(the)g(features)g(of)g(cnee.)41 b(The)30 b(GUI)g(has)g(b)s(een)150 1780 y(designed)g(for)g(ease)i(of)e(use.)275 1914 y(Curren)m(tly)f(there)i(are)g(no)f(plans)g(for)g(making)h(a)f (separate)i(man)m(ual)e(for)g(gnee.)150 2147 y Fn(6.3)68 b(pnee)45 b(-)g(pnee's)g(not)g(ev)l(en)h(em)l(ulating)150 2306 y Fo(This)31 b(is)h(a)h(Gnome)f(panel)g(applet)h(with)e(a)i (minimal)f(set)h(of)f(features.)46 b(Ease)33 b(of)f(use)f(is)i(the)f (motto)h(for)150 2416 y(this)i(program.)56 b(It)36 b(is)f(in)m(tended)h (for)f(users)g(not)g(b)s(eing)g(exp)s(erts)h(on)f(X11)h(but)f(still)i (w)m(an)m(ts)f(to)g(record)150 2526 y(and)f(repla)m(y)i(a)f(session)g (for)g(what)g(ev)m(er)h(purp)s(ose.)55 b(By)37 b(default)f(pnee)f(ha)m (v)m(e)j(settings)e(that)h(need)f(not)150 2635 y(b)s(e)e(c)m(hanged)h (for)f(most)h(cases.)54 b(Y)-8 b(ou)35 b(can,)h(ho)m(w)m(ev)m(er,)i (launc)m(h)c(the)h(preferences)f(dialog)i(and)e(set)h(y)m(our)150 2745 y(preferred)29 b(v)-5 b(alues)31 b(as)f(in)h(most)f(other)h (applets.)275 2879 y(If)e(y)m(ou)i(\014nd)e(pnee)h(a)h(bit)f(limited)h (w)m(e)g(suggest)g(y)m(ou)g(switc)m(h)g(o)m(v)m(er)h(to)f(using)f (cnee.)275 3014 y Fj(Note)p Fo(:)40 b(If)28 b(pnee)f(hangs)h(y)m(ou)g (can)g(press)f(the)h(stop)g(button)f(t)m(wice)j(to)e(mak)m(e)h(a)f (reset.)40 b(Hop)s(efully)28 b(this)150 3123 y(will)j(solv)m(e)g(the)g (problem.)150 3323 y Fi(6.3.1)63 b(Rep)s(orting)42 b(pnee)f(bugs)150 3469 y Fo(By)c(default)f(pnee)g(writes)g(error,)i(v)m(erb)s(ose)e(prin) m(touts)g(and)g(w)m(arnings)g(to)h(stderr)e(whic)m(h)h(will)h(not)g(b)s (e)150 3579 y(visible)22 b(to)h(y)m(ou)f(as)g(a)h(user,)g(since)f(pnee) g(will)g(b)s(e)f(started)i(automatically)i(along)e(with)e(the)h(other)g (applets.)150 3689 y(If)33 b(y)m(ou)i(start)f(up)f(the)h(preferences)g (dialog)h(y)m(ou)f(can)g(c)m(ho)s(ose)h(a)g(\014le)f(for)f(pnee)h(prin) m(touts.)51 b(After)34 b(that)150 3798 y(y)m(ou)c(should)e(turn)h(on)g (v)m(erb)s(ose)h(logging)h(\(also)g(in)e(the)h(preferences)f(dialog\))i (and)e(then)g(repro)s(duce)g(the)150 3908 y(bug)h(and)g(send)f(o)m(v)m (er)j(the)e(\014le)h(to)g Fh(xnee-bug@gnu.org)p Fo(.)p eop end %%Page: 23 26 TeXDict begin 23 25 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(23)150 299 y Fl(7)80 b(File)54 b(t)l(yp)t(es)f(and)g(format)150 551 y Fo(The)30 b(\014les)g(used)g(b)m(y)g(Xnee)h(are)225 691 y Fg(\017)60 b Fo(Xnee)31 b(Pro)5 b(ject)31 b(File)225 829 y Fg(\017)60 b Fo(Xnee)31 b(Session)f(File)275 997 y(These)g(\014les)g(m)m(ust)g(follo)m(w)i(the)e(Xnee)h(File)h(F)-8 b(ormat.)150 1238 y Fn(7.1)68 b(Pro)7 b(ject)46 b(\014le)150 1398 y Fo(Xnee)37 b(can)f(b)s(e)g(set)h(either)g(using)f(command)g (line)h(options)f(\(when)g(using)g(xnee\))h(or)f(b)m(y)g(clic)m(king)j (the)150 1507 y(correct)33 b(buttons)d(etc)j(in)e(the)g(GUI)h(\(using)f (gnee\).)45 b(Instead)31 b(of)h(setting)g(the)g(same)g(settings)g(o)m (v)m(er)h(and)150 1617 y(o)m(v)m(er)f(again,)f(y)m(ou)g(can)g(use)f (the)g(Xnee)h(Pro)5 b(ject)31 b(File.)150 1822 y Fi(7.1.1)63 b(Create)40 b(a)g(pro)7 b(ject)41 b(\014le)150 1969 y Fo(Y)-8 b(ou)33 b(can)g(create)h(a)e(pro)5 b(ject)33 b(b)m(y)g(y)m(ourself.)47 b(This)32 b(can)g(b)s(e)g(done)g(using)g(the) h Fh(write-settings)28 b Fo(option)150 2078 y(in)j(cnee)h(or)g(the)g (\\sa)m(v)m(e)h(settings)g(to)f(\014le")g(when)e(using)h(gnee)i(or)e(y) m(ou)h(can)g(use)f(the)h(Xnee)g(GUI)g(\(gnee\))150 2188 y(to)37 b(write)f(one.)59 b(Y)-8 b(ou)37 b(can)f(also)i(write)e(one)h (b)m(y)f(y)m(ourself)g(in)g(y)m(our)g(fa)m(v)m(orite)j(editor.)59 b(Just)35 b(mak)m(e)j(sure)150 2298 y(y)m(ou)26 b(follo)m(w)h(the)f (Xnee)h(format.)39 b(F)-8 b(or)27 b(information)f(and)f(sp)s (eci\014cation)i(on)f(this)f(format)i(read)e(the)i(Xnee)150 2407 y(format)k(c)m(hapter.)275 2548 y(The)38 b(authors)g(of)h(Xnee)g (suggests)g(y)m(ou)g(start)h(o\013)f(with)f(a)h(generated)h(pro)5 b(ject)39 b(\014le.)66 b(T)-8 b(o)39 b(get)h(one)150 2657 y(suc)m(h)29 b(\014le,)g(t)m(yp)s(e)g(the)h(follo)m(wing)g Fh(cnee)f(--mouse)g(--keyboard)e(--write-settings)f(new_proj.xnp)p Fo(.)150 2767 y(Y)-8 b(ou)30 b(will)h(no)m(w)f(ha)m(v)m(e)h(a)f(\014le) g Fh(new_proj.xnp)c Fo(with)k(some)g(useful)f(v)-5 b(alues,)31 b(whic)m(h)f(y)m(ou)g(can)g(edit)g(as)h(y)m(ou)150 2876 y(wish.)275 3017 y(T)-8 b(o)30 b(use)g(this)h(\014le)f(to)h(record,)g (simply)f(t)m(yp)s(e)g Fh(cnee)f(--record)g(--project)e(new_proj.xnp) 150 3258 y Fn(7.2)68 b(Xnee)45 b(Session)g(\014le)150 3417 y Fo(The)39 b(Xnee)g(session)g(\014les)g(are)h(the)f(prin)m(touts) g(from)f(a)i(recorded)e(session)i(follo)m(wing)g(the)f(Xnee)h(File)150 3527 y(F)-8 b(ormat.)39 b(F)-8 b(or)22 b(information)f(and)g(sp)s (eci\014cation)g(on)g(this)g(format)h(read)f(the)g(Xnee)g(File)i(F)-8 b(ormat)22 b(c)m(hapter.)150 3768 y Fn(7.3)68 b(Xnee)45 b(\014le)g(format)150 3928 y Fo(The)37 b(Xnee)h(F)-8 b(ormat)39 b(is)f(divided)f(in)m(to)h(di\013eren)m(t)h(directiv)m(es.) 64 b(The)37 b(format)h(is)f(line)h(based,)i(meaning)150 4037 y(that)225 4178 y Fg(\017)60 b Fo(there)31 b(is)f(one)h(directiv)m (e)h(p)s(er)d(line)225 4315 y Fg(\017)60 b Fo(one)31 b(line)f(con)m(tains)i(one)f(\(and)f(only)g(one\))h(directiv)m(e)275 4483 y(These)f(directiv)m(es)h(are)g(de\014nied)f(as)g(follo)m(ws.)150 4725 y Fn(7.4)68 b(Xnee)45 b(directiv)l(es)150 4884 y Fo(The)30 b(follo)m(wing)i(directiv)m(es)g(are)e(used)g(in)g(Xnee:)250 5025 y Fj(Directiv)m(es)681 b(Description)250 5242 y Fo(Commen)m(t)694 b(This)29 b(is)i(used)e(to)i(commen)m(t)h(the)e(v)-5 b(arious)31 b(\014les)p eop end %%Page: 24 27 TeXDict begin 24 26 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(24)250 299 y(Pro)5 b(ject)789 b(These)30 b(con)m(tains)h(information)g(ab)s (out)f(the)h(session-)f(or)h(pro)5 b(ject)31 b(\014le)250 517 y(Settings)762 b(Data)32 b(used)d(when)h(recording)g(and)g(repla)m (ying)250 734 y(Repla)m(y)h(data)600 b(Recorded)30 b(repla)m(y)m(able)i (data)f(\(used)f(when)g(repla)m(ying\))250 952 y(Script)g(repla)m(y)h (data)363 b(Scriptable)30 b(primitiv)m(es)250 1170 y(Mark)868 b(Lines)44 b(inserted)h(in)f(the)h(seesion)g(\014le)g(when)e(a)i(mo)s (di\014er)p Fh(+)p Fo(k)m(ey)g(w)m(as)1330 1279 y(pressed)250 1497 y(Execution)683 b(Lines)30 b(that)h(trigger)g(the)g(execution)g (of)g(an)f(external)h(program)250 1714 y(Pro)5 b(ject)31 b(information)296 b(Pro)5 b(ject)150 2076 y Fi(7.4.1)63 b(Commen)m(t)250 2223 y Fj(First)30 b(tok)m(en)280 b(In)m(terpretation) 250 2441 y Fo(#)644 b(The)29 b(whole)i(line)g(is)f(ignored.)275 2646 y(As)25 b(long)i(as)f(the)g(\014rst)g(tok)m(en)h(is)f Fh(#)f Fo(the)i(whole)f(line)g(is)g(in)m(trepreted)g(as)h(a)f(commen)m (t,)i(just)e(as)g(in)f(bash.)150 2916 y Fi(7.4.2)63 b(Settings)200 3063 y Fj(Settings)31 b(directiv)m(e)975 b(Argumen)m(t)135 b(In)m(terpretation)150 3280 y Fo(data-to-record)1156 b(in)m(teger)271 b(Limits)24 b(the)h(n)m(um)m(b)s(er)d(of)j(data)g(to)g (record)f(to)h(to)g(the)g(in)m(teger)2410 3390 y(v)-5 b(alue)150 3608 y(ev)m(en)m(ts-to-record)1088 b(in)m(teger)271 b(Limits)34 b(the)g(n)m(um)m(b)s(er)e(of)i(ev)m(en)m(ts)h(to)g(record)f (to)g(to)h(the)f(in-)2410 3717 y(teger)d(v)-5 b(alue)150 3935 y(time-to-record)1156 b(in)m(teger)271 b(Limits)43 b(the)h(n)m(um)m(b)s(er)e(of)i(seconds)f(to)h(record)f(to)i(to)f(the) 2410 4044 y(in)m(teger)31 b(v)-5 b(alue)150 4262 y(displa)m(y)1442 b(string)312 b(Sets)30 b(the)h(displa)m(y)f(to)h(record)g(or)f(repla)m (y)h(to)g(the)g(string)150 4480 y(distribute)1335 b(string)312 b(Distribute)27 b(all)h(recorded)f(or)g(repla)m(y)m(ed)i(repla)m(y)m (able)g(ev)m(en)m(ts)2410 4589 y(to)i(the)f(displa)m(y)h(giv)m(en)g(b)m (y)f(the)h(string)150 4807 y(\014le)1604 b(string)312 b(Read)30 b(repla)m(y)h(data)g(from)f(the)h(\014le)f(giv)m(en)i(b)m(y)e (the)g(string)150 5025 y(out-\014le)1443 b(string)312 b(Prin)m(t)30 b(recorded)g(data)h(to)g(the)g(\014le)f(giv)m(en)i(b)m(y) e(the)h(string)150 5242 y(plugin)1472 b(string)312 b(Use)30 b(the)h(plugin)f(giv)m(en)h(b)m(y)f(the)h(string)p eop end %%Page: 25 28 TeXDict begin 25 27 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(25)150 299 y(\014rst-last)1391 b(b)s(o)s(olean)232 b(Prin)m(t)34 b(only)h(\014rst)e(and)h(last)h(of)g(successiv)m(e)h(MotionNotify)2410 408 y(ev)m(en)m(ts)150 626 y(v)m(erb)s(ose)1424 b(b)s(o)s(olean)232 b(Use)30 b(v)m(erb)s(ose)h(debugging)f(prin)m(tout)150 844 y(bu\013er-v)m(erb)s(ose)1163 b(b)s(o)s(olean)232 b(Use)40 b(v)m(erb)s(ose)h(bu\013er)e(v)m(erb)s(ose)i(prin)m(touts)f (\(not)h(built)f(b)m(y)2410 953 y(default\))150 1171 y(time)1544 b(in)m(teger)271 b(Dela)m(y)32 b(the)e(start)h(of)g(the)g (Xnee)f(action)150 1389 y(all-clien)m(ts)1346 b(b)s(o)s(olean)232 b(Record)30 b(all)h(curret)g(and)e(future)h(clien)m(ts)i(\(default\)) 150 1606 y(future-clien)m(ts)1200 b(b)s(o)s(olean)232 b(Record)30 b(only)h(future)e(clien)m(ts)150 1824 y(h)m(uman-prin)m (tout)1093 b(b)s(o)s(olean)232 b(Prin)m(ts)59 b(the)h(recorded)f(data)h (in)g(a)g(\(quite\))g(more)g(ser)2410 1934 y(friendly)29 b(format)150 2151 y(sync-mo)s(de)1300 b(b)s(o)s(olean)232 b(Sets)30 b(recording)h(mo)s(de)150 2369 y(sp)s(eed-p)s(ercen)m(t)1176 b(in)m(teger)271 b(Sets)41 b(the)g(repla)m(ying)g(sp)s(eed)f(p)s(ercen) m(tage)j(to)e(the)h(in)m(teger)2410 2479 y(v)-5 b(alue)150 2696 y(stop-k)m(ey)1390 b Ff(string)331 b Fo(Sets)30 b(the)h(stop)f(k)m(ey)h(com)m(bination)h(to)f(the)g(string)150 2914 y(pause-k)m(ey)1334 b Ff(string)331 b Fo(Sets)30 b(the)h(pause)f(k)m(ey)h(com)m(bination)g(to)h(the)e(string)150 3132 y(resume-k)m(ey)1278 b Ff(string)331 b Fo(Sets)30 b(the)h(resume)e(k)m(ey)j(com)m(bination)f(to)g(the)g(string)150 3349 y(mark-k)m(ey)1352 b Ff(string)331 b Fo(Sets)30 b(the)h(mark)f(k)m(ey)h(com)m(bination)h(to)f(the)f(string)150 3567 y(exec-k)m(ey)1389 b Ff(string)331 b Fo(Sets)30 b(the)h(execute)g(k)m(ey)g(com)m(bination)h(to)f(string)150 3785 y(repla)m(y-resolution)1059 b(string)312 b(Sets)30 b(the)h(repla)m(y)g(resolution)g(to)g(the)f(string)150 4002 y(repla)m(y-resolution)1059 b(string)312 b(Sets)30 b(the)h(repla)m(y)g(resolution)g(to)g(the)f(string)150 4220 y(recall-windo)m(w-p)s(osition)1372 b(Use)30 b(windo)m(w)g(p)s (osition)h(recall)g(during)e(repla)m(y)150 4437 y(resolution-adjustmen) m(t)856 b(b)s(o)s(olean)232 b(Use)32 b(resolution)h(adjustmen)m(t,)f (ev)m(en)h(if)f(the)g(recored)g(reso-)2410 4547 y(lution)e(di\013ers)g (from)g(the)h(one)f(to)h(repla)m(y)g(to)150 4765 y(ev)m(en)m(t-range) 1265 b(range)323 b(Sets)30 b(the)h(ev)m(en)m(ts)g(to)g(record)150 4982 y(error-range)1280 b(range)323 b(Sets)30 b(the)h(errors)e(to)j (record)e(to)h(range*)150 5200 y(request-range)1187 b(range)323 b(Sets)30 b(the)h(request)f(to)h(record)f(to)i(range*)p eop end %%Page: 26 29 TeXDict begin 26 28 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(26)150 299 y(reply-range)1273 b(range)323 b(Sets)30 b(the)h(replies)f(to)h (record)g(to)g(range*)150 517 y(extension-request-ma)5 b(jor-range)521 b(range)323 b(Sets)52 b(the)g(extension)g(requests)g (\(ma)5 b(jor\))53 b(to)f(record)g(to)2410 626 y(range*)150 844 y(extension-request-minor-range)523 b(range)323 b(Sets)52 b(the)g(extension)h(requests)f(\(minor\))h(to)g(record)f(to)2410 953 y(range*)150 1171 y(extension-reply-ma)5 b(jor-range)607 b(range)323 b(Sets)21 b(the)g(extension)h(replies)f(\(ma)5 b(jor\))22 b(to)g(record)f(to)h(range*)150 1389 y (extension-reply-minor-range)609 b(range)323 b(Sets)21 b(the)h(extension)g(replies)g(\(minor\))f(to)i(record)e(to)h(range*)150 1606 y(force-repla)m(y)1259 b(b)s(o)s(olean)232 b(Con)m(tin)m(ue)30 b(to)i(repla)m(y)f(ev)m(en)g(if)f(Xnee)h(is)f(out)h(of)f(sync)150 1824 y(max-threshold)1151 b(in)m(teger)271 b(Sets)30 b(the)h(maxim)m(um)f(sync)m(hronisation)h(threshold)150 2042 y(min-threshold)1168 b(in)m(teger)271 b(Sets)30 b(the)h(minim)m(um)e(sync)m(hronisation)i(threshold)150 2259 y(total-threshold)1135 b(in)m(teger)271 b(Sets)30 b(the)h(total)h(maxim)m(um)e(sync)m(hronisation)h(threshold)150 2477 y(ev)m(en)m(ts-to-record)1088 b(in)m(teger)271 b(Sets)30 b(the)h(n)m(um)m(b)s(er)e(of)h(ev)m(en)m(ts)i(to)f(record)150 2695 y(data-to-record)1156 b(in)m(teger)271 b(Sets)30 b(the)h(n)m(um)m(b)s(er)e(of)h(data)h(to)g(record)150 2912 y(time-to-record)1156 b(in)m(teger)271 b(Sets)30 b(the)h(n)m(um)m(b)s(er)e(of)h(seconds)g(to)i(record)150 3130 y(store-mouse-p)s(osition)1444 b(If)38 b(set,)j(Xnee)e(records)g (the)f(initial)i(mouse)f(p)s(osition)g(and)2410 3240 y(mak)m(es)31 b(sure)f(that)g(repla)m(ying)i(starts)e(from)g(there)150 3457 y(ret)m(yp)s(e-press-dela)m(y)1005 b(in)m(teger)271 b(Xnee)30 b(dela)m(ys)g(pro)s(cessing)f(after)i(a)e(fak)m(ed)i(k)m(ey)f (press)f(\(dur-)2410 3567 y(ing)h(ret)m(yp)s(e\))h(with)f(in)m(teger)i (milli)f(seconds)150 3785 y(ret)m(yp)s(e-release-dela)m(y)942 b(in)m(teger)271 b(Xnee)30 b(dela)m(ys)g(pro)s(cessing)f(after)i(a)e (fak)m(ed)i(k)m(ey)f(press)f(\(dur-)2410 3894 y(ing)h(ret)m(yp)s(e\))h (with)f(in)m(teger)i(milli)f(seconds)150 4131 y Fj(Settings)g(argumen)m (t)449 b(Description)981 b(Example)150 4349 y Fh(integer)844 b Fo(is)30 b(an)g(in)m(teger)i(v)-5 b(alue.)693 b(1)150 4566 y Fh(string)892 b Fo(is)30 b(a)h(string.)1020 b(lo)s(calhost)150 4784 y Fh(boolean)844 b Fo(is)27 b(a)h(b)s(o)s(olean)g(v)-5 b(alue)28 b(giv)m(en)h(b)m(y)e(true/1)1330 4894 y(or)j(false/0)2770 4784 y(true,)g(false,)h(0,)g(1)150 5012 y Fh(subrange)796 b Fo(Subrange)33 b(is)h(giv)m(es)i(a)e(range)h(of)f(data)1330 5122 y(b)m(y)61 b(sp)s(ecifying)g(a)g(start)h(and)f(stop)1330 5232 y(data.)52 b(In)33 b(the)h(case)h(of)f(one)g(data)h(the)1330 5341 y(stop)30 b(data)h(can)g(b)s(e)f(omitted.)2770 5012 y(2-5)h(or)f(MapNotify)p eop end %%Page: 27 30 TeXDict begin 27 29 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(27)150 299 y Fh(range)940 b Fo(Ranges)21 b(are)h(a)f(comma)h(separated)f(list) 1330 408 y(of)30 b(subranges.)2770 299 y(2-3,MotionNotify-)2770 408 y(MapNotify)-8 b(,Gra)m(vit)m(yNotify)g(,Prop)s(ert)m(yNotify)g(,)q (30)150 923 y Fi(7.4.3)63 b(Repla)m(y)150 1070 y Fj(Repla)m(y)31 b(directiv)m(e)889 b(In)m(terpretation)150 1288 y Fo(0,0)1425 b(not)30 b(v)-5 b(alid)150 1506 y(0,1)1425 b(not)30 b(v)-5 b(alid)150 1723 y(0,2,v)m(oid,v)m(oid,v)m(oid,k)m(eyco)s(de,screen,ti)q (me)45 b(KeyPress)30 b(on)g(k)m(ey)h(with)f(k)m(eyco)s(de,)i(used)d(to) i(repla)m(y)150 1941 y(0,3,v)m(oid,v)m(oid,v)m(oid,k)m(eyco)s (de,screen,ti)q(me)45 b(KeyRelease)32 b(on)e(k)m(ey)h(with)f(k)m(eyco)s (de,)i(used)d(to)j(repla)m(y)150 2159 y(0,4,v)m(oid,v)m(oid,button)150 2268 y(nr,v)m(oid,screen,time)1690 2159 y(ButtonPress)e(on)g(button)g (nr,)g(used)g(to)h(repla)m(y)150 2387 y(0,5,v)m(oid,v)m(oid,button)150 2496 y(nr,v)m(oid,screen,time)1690 2387 y(ButtonRelease)h(on)e(button)g (nr,)g(used)g(to)h(repla)m(y)150 2615 y(0,6,x,y)-8 b(,v)m(oid,v)m (oid,screen,time)436 b(MotionNotify)32 b(on)f(p)s(oistion)f(\(x,y\),)h (used)f(to)h(repla)m(y)150 2833 y(1,request)87 b(n)m(um)m(b)s(er,)98 b(request)86 b(t)m(yp)s(e,)150 2942 y(length,)31 b(request)f(id,)h (time)1690 2833 y(Recorded)f(request,)h(used)e(during)g(sync)m (hronisation)150 3061 y(2,reply)i(n)m(um)m(b)s(er,time)736 b(Recorded)30 b(reply)-8 b(,)31 b(used)e(during)h(sync)m(hronisation) 150 3279 y(3,error)h(n)m(um)m(b)s(er,time)743 b(Recorded)30 b(error,)g(used)g(during)f(sync)m(hronisation)150 3496 y(6,EB)p Fh(+)p Fo(2,v)m(oid,v)m(oid,v)m(oid,k)m(eyco)s(de,screen,ti)q (me)-129 b(X)45 b(Input)g(\(master\))i(KeyPress)e(on)h(k)m(ey)g(with)g (k)m(eyco)s(de,)1690 3606 y(used)29 b(to)i(repla)m(y)150 3824 y(6,EB)p Fh(+)p Fo(3,v)m(oid,v)m(oid,v)m(oid,k)m(eyco)s (de,screen,ti)q(me)-129 b(X)33 b(Input)g(\(master\))h(KeyRelease)h(on)f (k)m(ey)g(with)g(k)m(eyco)s(de,)1690 3933 y(used)29 b(to)i(repla)m(y) 150 4151 y(6,EB)p Fh(+)p Fo(4,v)m(oid,v)m(oid,button)150 4261 y(nr,v)m(oid,screen,time)1690 4151 y(X)26 b(Input)f(\(master\))i (ButtonPress)f(on)g(button)g(nr,)g(used)f(to)1690 4261 y(repla)m(y)150 4478 y(6,EB)p Fh(+)p Fo(5,v)m(oid,v)m(oid,button)150 4588 y(nr,v)m(oid,screen,time)1690 4478 y(X)k(Input)f(\(master\))i (ButtonRelease)i(on)d(button)g(nr,)g(used)1690 4588 y(to)i(repla)m(y) 150 4805 y(6,EB)p Fh(+)p Fo(6,x,y)-8 b(,v)m(oid,v)m(oid,screen,time)262 b(X)45 b(Input)e(\(master\))j(MotionNotify)h(on)e(p)s(oistion)g (\(x,y\),)1690 4915 y(used)29 b(to)i(repla)m(y)150 5133 y(6,EB)p Fh(+)p Fo(2,v)m(oid,v)m(oid,v)m(oid,k)m(eyco)s(de,screen,ti)q (me)-129 b(X)27 b(Input)g(\(sla)m(v)m(e\))j(KeyPress)d(on)h(k)m(ey)g (with)f(k)m(eyco)s(de,)j(used)1690 5242 y(to)h(repla)m(y)p eop end %%Page: 28 31 TeXDict begin 28 30 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(28)150 299 y(6,EB)p Fh(+)p Fo(3,v)m(oid,v)m(oid,v)m(oid,k)m(eyco)s (de,screen,ti)q(me)-129 b(X)45 b(Input)e(\(sla)m(v)m(e\))k(KeyRelease)g (on)e(k)m(ey)g(with)g(k)m(eyco)s(de,)1690 408 y(used)29 b(to)i(repla)m(y)150 626 y(6,EB)p Fh(+)p Fo(4,v)m(oid,v)m(oid,button) 150 736 y(nr,v)m(oid,screen,time)1690 626 y(X)36 b(Input)e(\(sla)m(v)m (e\))k(ButtonPress)e(on)g(button)g(nr,)g(used)f(to)1690 736 y(repla)m(y)150 953 y(6,EB)p Fh(+)p Fo(5,v)m(oid,v)m(oid,button)150 1063 y(nr,v)m(oid,screen,time)1690 953 y(X)25 b(Input)f(\(sla)m(v)m (e\))k(ButtonRelease)f(on)e(button)g(nr,)h(used)e(to)1690 1063 y(repla)m(y)150 1281 y(6,EB)p Fh(+)p Fo(6,x,y)-8 b(,v)m(oid,v)m(oid,screen,time)262 b(X)24 b(Input)f(\(sla)m(v)m(e\))j (MotionNotify)h(on)d(p)s(oistion)g(\(x,y\),)j(used)1690 1390 y(to)k(repla)m(y)275 1612 y(time)k(is)f(the)g(time)i(on)e(the)g (serv)m(er)h(the)f(data)i(w)m(as)e(to)h(the)g(recording)f(Xnee)h(clien) m(t.)54 b(This)34 b(time)h(is)150 1721 y(used)30 b(to)h(k)m(eep)g(the)f (sp)s(eed)g(in)m(tact)i(during)d(repla)m(y)-8 b(.)150 1908 y Fi(7.4.4)63 b(Script)40 b(repla)m(y)h(data)150 2055 y Fj(Primitiv)m(e)1166 b(In)m(terpretation)150 2272 y Fo(fak)m(e-motion)1075 b(F)-8 b(ak)m(es)32 b(a)f(mouse)f(motion)150 2490 y(fak)m(e-button-press)855 b(F)-8 b(ak)m(es)32 b(a)f(button)f (press)150 2708 y(fak)m(e-button-release)792 b(F)-8 b(ak)m(es)32 b(a)f(button)f(release)150 2925 y(fak)m(e-button)1084 b(F)-8 b(ak)m(es)32 b(a)f(button)f(press)f(and)h(release)150 3143 y(fak)m(e-k)m(ey-press)990 b(F)-8 b(ak)m(es)32 b(a)f(k)m(ey)g (press)150 3361 y(fak)m(e-k)m(ey-release)927 b(F)-8 b(ak)m(es)32 b(a)f(k)m(ey)g(release)150 3578 y(fak)m(e-k)m(ey)1219 b(F)-8 b(ak)m(es)32 b(a)f(k)m(ey)g(press)e(and)h(release)150 3815 y Fj(Primitiv)m(e)i(v)-5 b(ariable)101 b(Primitiv)m(e)970 3924 y(v)-5 b(alues)1690 3815 y(In)m(terpretation)150 4043 y Fo(x=v)g(alue)497 b(in)m(teger)451 b(Sets)30 b(the)h(x)f(p)s (osition)g(used)g(in)g(fak)m(e-motion)i(to)g(v)-5 b(alue)150 4261 y(x=v)g(alue)497 b Fh(+)p Fo(in)m(teger)403 b(Set)41 b(the)g(relativ)m(e)i(motion)f(\(x)f(direction\))h(used)e(in)h(fak)m (e-)1690 4370 y(motion)31 b(to)g(v)-5 b(alue)150 4588 y(x=v)g(alue)497 b(-in)m(teger)421 b(Set)41 b(the)g(relativ)m(e)i (motion)f(\(x)f(direction\))h(used)e(in)h(fak)m(e-)1690 4697 y(motion)31 b(to)g(v)-5 b(alue)150 4915 y(y=v)g(alue)497 b(in)m(teger)451 b(Sets)30 b(the)h(y)f(p)s(osition)g(used)g(in)g(fak)m (e-motion)i(to)g(v)-5 b(alue)150 5133 y(y=v)g(alue)497 b Fh(+)p Fo(in)m(teger)403 b(Set)41 b(the)g(relativ)m(e)i(motion)f(\(y) f(direction\))h(used)e(in)h(fak)m(e-)1690 5242 y(motion)31 b(to)g(v)-5 b(alue)p eop end %%Page: 29 32 TeXDict begin 29 31 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(29)150 299 y(y=v)-5 b(alue)497 b(-in)m(teger)421 b(Set)41 b(the)g(relativ)m(e) i(motion)f(\(y)f(direction\))h(used)e(in)h(fak)m(e-)1690 408 y(motion)31 b(to)g(v)-5 b(alue)150 626 y(button=v)g(alue)277 b(in)m(teger)451 b(set)34 b(the)g(button)g(to)g(fak)m(e)h(with)f(fak)m (e-button-press,)i(fak)m(e-)1690 736 y(button-release)31 b(and)f(fak)m(e-button)h(to)h(v)-5 b(alue)150 953 y(k)m(ey=v)g(alue)412 b(in)m(teger)451 b(set)48 b(the)h(k)m(ey)g(to)g(fak)m(e)g(with)f(fak)m (e-k)m(ey-press,)54 b(fak)m(e-k)m(ey-)1690 1063 y(release)31 b(and)f(fak)m(e-k)m(ey)j(to)e(v)-5 b(alue)150 1394 y Fi(7.4.5)63 b(Mark)150 1541 y Fj(First)31 b(tok)m(ens)343 b(Argumen)m(ts)279 b(In)m(terpretation)150 1758 y Fo(Mark)608 b(time)31 b(string)285 b(Ignored.)48 b(This)33 b(feature)g(is)g(in)m (tended)g(to)h(let)g(the)g(user)e(do)1690 1868 y(whatev)m(er)i(he/she)g (w)m(an)m(ts)g(to.)52 b(This)33 b(will)h(ob)m(viously)g(lead)1690 1977 y(to)d(mo)s(difying)e(the)i(source)g(co)s(de)f(etc.)150 2208 y Fi(7.4.6)63 b(Exec)150 2355 y Fj(First)31 b(tok)m(ens)343 b(Argumen)m(ts)279 b(In)m(terpretation)150 2573 y Fo(Exec)630 b(command)970 2682 y(string)1690 2573 y(This)23 b(is)i(used)e(during)g (to)i(repla)m(y)g(to)g(execute)h(a)f(giv)m(en)g(com-)1690 2682 y(mand.)44 b(If)31 b(no)h(command)f(string)h(is)g(found)f(Xnee)h (will)g(try)1690 2792 y(to)27 b(read)f(the)g(command)g(from)g(the)g(en) m(vironmen)m(t)h(v)-5 b(ariable)1690 2902 y Fh(XNEE_EXEC_COMMAND)150 3133 y Fi(7.4.7)63 b(Pro)7 b(ject)40 b(information)150 3280 y Fj(Pro)5 b(ject)32 b(information)f(directiv)m(es)517 b(Argumen)m(ts)150 3498 y Fo(Pro)5 b(jectName)1200 b(string)30 b(s)g(is)h(the)f(pro)5 b(ject)31 b(name)150 3716 y(Pro)5 b(jectDescription)976 b(string)30 b(s)g(is)h(the)f(pro)5 b(ject)31 b(description)150 3933 y(Pro)5 b(jectCreationDate)897 b(string)30 b(s)g(is)h(the)f(pro)5 b(ject)31 b(creation)h(date)150 4151 y(Pro)5 b(jectCreationProgram)741 b(string)31 b(s)g(is)g(the)g (name)g(of)g(the)h(program)f(that)g(create)1870 4261 y(the)f(pro)5 b(ject)31 b(\014le)150 4478 y(Pro)5 b(jectCreationProgV) -8 b(ersion)605 b(string)23 b(s)h(is)g(the)g(v)m(ersion)g(of)g(the)g (program)f(that)h(create)1870 4588 y(the)30 b(pro)5 b(ject)31 b(\014le)150 4805 y(Pro)5 b(jectLastChangeDate)769 b(string)44 b(s)h(is)g(the)f(date)i(of)f(the)f(last)i(c)m(hange)g(of)f(the)1870 4915 y(pro)5 b(ject)30 b(\014le)150 5133 y(Pro)5 b (jectLastChangeProgram)613 b(string)41 b(s)h(is)g(the)g(name)f(of)h (the)g(program)g(that)g(last)1870 5242 y(c)m(hanged)31 b(of)f(the)h(pro)5 b(ject)31 b(\014le)p eop end %%Page: 30 33 TeXDict begin 30 32 bop 150 -116 a Fo(Chapter)30 b(7:)41 b(File)31 b(t)m(yp)s(es)g(and)f(format)2181 b(30)150 299 y(Pro)5 b(jectLastChangeV)-8 b(ersion)665 b(string)34 b(s)g(is)h(the)f(v)m(ersion)h(of)f(the)h(program)f(that)h(last)1870 408 y(c)m(hanged)c(of)f(the)h(pro)5 b(ject)31 b(\014le)150 626 y(Pro)5 b(jectCurren)m(tChangeDate)630 b(string)30 b(s)g(is)g(the)h(date)g(of)f(the)h(curren)m(t)f(c)m(hange)h(of)g(the) 1870 736 y(pro)5 b(ject)30 b(\014le)150 953 y(Pro)5 b(jectCurren)m (tChangeProgram)474 b(string)25 b(s)h(is)g(the)g(name)f(of)h(the)g (program)g(that)g(curren)m(t)1870 1063 y(c)m(hanged)31 b(of)f(the)h(pro)5 b(ject)31 b(\014le)150 1281 y(Pro)5 b(jectCurren)m(tChangeV)-8 b(ersion)526 b(string)32 b(s)h(is)g(the)f(v) m(ersion)i(of)e(the)h(program)g(that)g(cur-)1870 1390 y(ren)m(t)d(c)m(hanged)h(of)g(the)f(pro)5 b(ject)31 b(\014le)p eop end %%Page: 31 34 TeXDict begin 31 33 bop 150 -116 a Fo(Chapter)30 b(8:)41 b(Xnee)31 b(In)m(ternals)2465 b(31)150 299 y Fl(8)80 b(Xnee)53 b(In)l(ternals)150 600 y Fo(This)32 b(c)m(hapter)h(is)f(in)m (tended)h(to)g(explain)g(the)g(in)m(ternal)g(design)f(of)h(lib)m(xnee.) 48 b(Hop)s(efully)32 b(this)h(will)f(lead)150 709 y(to)h(a)g(b)s(etter) g(understanding)e(of)i(ho)m(w)f(to)i(use)e(Xnee)h(and)f(wh)m(y)g(some)h (features)g(exist)g(and)f(wh)m(y)h(some)150 819 y(don't.)150 1085 y Fn(8.1)68 b(Sync)l(hronisation)150 1244 y Fo(W)-8 b(e)36 b(will)f(try)g(to)g(go)h(through)e(the)h(basics)g(of)g(ho)m(w)g (Xnee)g(implemen)m(ts)g(sync)m(hronisation)g(and)g(try)f(to)150 1354 y(tell)e(y)m(ou,)f(b)m(y)f(using)g(examples,)h(wh)m(y)f (synhronisation)g(is)g(imp)s(ortan)m(t.)150 1576 y Fi(8.1.1)63 b(Wh)m(y)40 b(sync)m(hronise)150 1722 y Fo(T)-8 b(o)31 b(understand)d(wh)m(y)i(sync)m(hronisation)h(during)e(repla)m(y)i(is)g (needed)f(an)g(example)h(is)f(giv)m(en.)275 1879 y(In)h(this)g(example) i(only)e(mouse)h(and)f(k)m(eyb)s(oard)h(ev)m(en)m(ts)h(are)f(recorded.) 45 b(Think)30 b(of)i(a)g(session)g(with)150 1989 y(a)f(w)m(eb)f(bro)m (wser.)275 2146 y(During)g(record)g(the)g(follo)m(wing)i(is)f(done:)225 2302 y Fg(\017)60 b Fo(Start)31 b(galeon)g(\(or)g(another)g(w)m(eb)f (bro)m(wser\))g(via)h(the)g(GNOME)g(panel)225 2448 y Fg(\017)60 b Fo(Press)30 b(Ctrl-O)g(whic)m(h)g(p)s(ops)f(up)h(a)g (windo)m(w)225 2594 y Fg(\017)60 b Fo(Press)30 b(the)g(left)i(button)e (in)g(the)g(text\014eld)h(of)g(the)f(p)s(opup)f(windo)m(w)225 2739 y Fg(\017)60 b Fo(En)m(ter)31 b(the)f(URL)g(y)m(ou)h(w)m(an)m(t)g (to)g(en)m(ter)g(\(e.g)h Fh(http://www.gnu.org)p Fo(\))225 2885 y Fg(\017)60 b Fo(Clic)m(k)31 b(on)g(the)f(OK)g(button)225 3031 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f(another)f(URL)h(\(e.g) g(GNU)g(Do)s(cumen)m(tation\))225 3176 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f(another)f(URL)h(\(e.g)g(On-Line)f(Do)s (cumen)m(tation\))275 3369 y(When)35 b(repla)m(ying)h(this)g(session)f (it)h(is)g(often)g(useful)f(to)h(sync)m(hronise)f(the)h(recorded)g (session)f(with)150 3479 y(what's)30 b(happ)s(ening)f Fh(")p Fo(righ)m(t)h(no)m(w)p Fh(")g Fo(on)g(the)g(displa)m(y)g(since)g (sometimes)h(\(or)g(rather)f(alw)m(a)m(ys\))h(there)g(can)150 3588 y(b)s(e)f(di\013eren)m(t)h(resp)s(onse)e(times)i(from)f(the)g (same)h(URL.)275 3745 y(During)f(repla)m(y)h(the)f(follo)m(wing)i(is)e (done:)225 3902 y Fg(\017)60 b Fo(Galeon)32 b(is)e(started)225 4048 y Fg(\017)60 b Fo(Ctrl-O)30 b(is)h(t)m(yp)s(ed)f(whic)m(h)g(p)s (ops)f(up)g(a)i(windo)m(w)225 4193 y Fg(\017)60 b Fo(Press)30 b(the)g(left)i(button)e(in)g(the)g(text\014eld)h(of)g(the)f(p)s(opup)f (windo)m(w)225 4339 y Fg(\017)60 b Fo(En)m(ter)31 b(the)f(URL)g(y)m(ou) h(w)m(an)m(t)g(to)g(en)m(ter)g(\(e.g)h Fh(http://www.gnu.org)p Fo(\))225 4484 y Fg(\017)60 b Fo(Clic)m(k)31 b(on)g(the)f(OK)g(button) 225 4630 y Fg(\017)60 b Fo(...)41 b(due)30 b(to)h(an)g(enormous)e (amoun)m(t)i(of)g(visitors)g(the)g(GNU)g(w)m(eb)f(serv)m(er)h(can't)g (resp)s(ond)e(as)h(quic)m(k)330 4740 y(as)h(it)g(did)e(when)g (recording.)41 b(So)31 b(when)e(the)i(next)f(thing)g(happ)s(ens)225 4885 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f(another)f(URL)h(\(e.g) g(GNU)g(Do)s(cumen)m(tation\))225 5031 y Fg(\017)60 b Fo(...)41 b(the)31 b(page)g(hasn't)f(b)s(een)g(loaded)h(and)e(when)h (the)g(next)h(ev)m(en)m(t)h(is)e(repla)m(y)m(ed)225 5177 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f(another)f(URL)h(\(e.g)g (On-Line)f(Do)s(cumen)m(tation\))225 5322 y Fg(\017)60 b Fo(...)41 b(the)31 b(link)f(isn't)h(there)f(and)g(w)m(e're)h(really)g (out)g(of)f(sync)g(with)h(the)f(recorded)g(session)p eop end %%Page: 32 35 TeXDict begin 32 34 bop 150 -116 a Fo(Chapter)30 b(8:)41 b(Xnee)31 b(In)m(ternals)2465 b(32)150 299 y Fi(8.1.2)63 b(Ho)m(w)40 b(to)h(sync)m(hronise)150 446 y Fo(Instead)30 b(w)m(e)h(could)f(record)h(some)g(more)f(data)h(than)f(just)g(the)h (mouse)f(and)g(k)m(eyb)s(oard)g(ev)m(en)m(ts.)275 577 y(During)g(record)g(the)g(follo)m(wing)i(is)f(done:)225 707 y Fg(\017)60 b Fo(Start)31 b(galeon)g(\(or)g(another)g(w)m(eb)f (bro)m(wser\))g(via)h(the)g(GNOME)g(panel)225 838 y Fg(\017)60 b Fo(Record)31 b(some)f(X)h(data)g(that)g(tells)g(us)f(that)h(a)g (windo)m(w)f(has)g(b)s(een)f(created)225 969 y Fg(\017)60 b Fo(Press)30 b(Ctrl-O)g(whic)m(h)g(p)s(ops)f(up)h(a)g(windo)m(w)225 1099 y Fg(\017)60 b Fo(Record)31 b(some)f(X)h(data)g(that)g(tells)g(us) f(that)h(a)g(windo)m(w)f(has)g(b)s(een)f(created)225 1230 y Fg(\017)60 b Fo(Press)30 b(the)g(left)i(button)e(in)g(the)g (text\014eld)h(of)g(the)f(p)s(opup)f(windo)m(w)225 1361 y Fg(\017)60 b Fo(En)m(ter)31 b(the)f(URL)g(y)m(ou)h(w)m(an)m(t)g(to)g (en)m(ter)g(\(e.g)h Fh(http://www.gnu.org)p Fo(\))225 1492 y Fg(\017)60 b Fo(Clic)m(k)31 b(on)g(the)f(OK)g(button)225 1622 y Fg(\017)60 b Fo(Record)31 b(some)f(X)h(data)g(that)g(tells)g(us) f(that)h(a)g(windo)m(w)f(has)g(b)s(een)f(destro)m(y)m(ed)225 1753 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f(another)f(URL)h(\(e.g) g(GNU)g(Do)s(cumen)m(tation\))225 1884 y Fg(\017)60 b Fo(Record)31 b(some)f(X)h(data)g(that)g(tells)g(us)f(that)h(a)g(some)f (text)i(has)e(b)s(een)g(displa)m(y)m(ed)h(in)f(a)g(windo)m(w)225 2014 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f(another)f(URL)h(\(e.g) g(On-Line)f(Do)s(cumen)m(tation\))225 2145 y Fg(\017)60 b Fo(Record)31 b(some)f(X)h(data)g(that)g(tells)g(us)f(that)h(a)g(some) f(text)i(has)e(b)s(een)g(displa)m(y)m(ed)h(in)f(a)g(windo)m(w)275 2297 y(The)47 b(non-mouse-or-k)m(eyb)s(oard)g(ev)m(en)m(ts)i(recorded)f (\(windo)m(w)f(created)h(&)g(text)g(displa)m(y)m(ed\))h(are)150 2407 y(record)30 b(for)g(sync)m(hronisation)h(purp)s(oses.)275 2537 y(During)f(repla)m(y)h(the)f(follo)m(wing)i(is)e(done:)225 2668 y Fg(\017)60 b Fo(Start)31 b(galeon)g(\(or)g(another)g(w)m(eb)f (bro)m(wser\))g(via)h(the)g(GNOME)g(panel)225 2799 y Fg(\017)60 b Fo(w)m(ait)31 b(for:)41 b(the)31 b(recorded)f(X)g(data)h (to)g(b)s(e)f(sen)m(t)h(again)225 2929 y Fg(\017)60 b Fo(Press)30 b(Ctrl-O)g(whic)m(h)g(p)s(ops)f(up)h(a)g(windo)m(w)225 3060 y Fg(\017)60 b Fo(w)m(ait)31 b(for:)41 b(the)31 b(recorded)f(X)g(data)h(to)g(b)s(e)f(sen)m(t)h(again)225 3191 y Fg(\017)60 b Fo(Press)30 b(the)g(left)i(button)e(in)g(the)g (text\014eld)h(of)g(the)f(p)s(opup)f(windo)m(w)225 3322 y Fg(\017)60 b Fo(En)m(ter)31 b(the)f(URL)g(y)m(ou)h(w)m(an)m(t)g(to)g (en)m(ter)g(\(e.g)h Fh(http://www.gnu.org)p Fo(\))225 3452 y Fg(\017)60 b Fo(Clic)m(k)31 b(on)g(the)f(OK)g(button)225 3583 y Fg(\017)60 b Fo(w)m(ait)31 b(for:)41 b(the)31 b(recorded)f(X)g(data)h(to)g(b)s(e)f(sen)m(t)h(again)225 3714 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f(another)f(URL)h(\(e.g) g(GNU)g(Do)s(cumen)m(tation\))225 3844 y Fg(\017)60 b Fo(w)m(ait)31 b(for:)41 b(the)31 b(recorded)f(X)g(data)h(to)g(b)s(e)f (sen)m(t)h(again)225 3975 y Fg(\017)60 b Fo(Then)29 b(clic)m(k)j(on)f (another)f(URL)h(\(e.g)g(On-Line)f(Do)s(cumen)m(tation\))225 4106 y Fg(\017)60 b Fo(w)m(ait)31 b(for:)41 b(the)31 b(recorded)f(X)g(data)h(to)g(b)s(e)f(sen)m(t)h(again)150 4298 y Fi(8.1.3)63 b(Sync)m(hronisation)41 b(is)h(needed)150 4444 y Fo(So)26 b(b)m(y)g(recording)h(more)f(data)h(than)f(just)g(the)g (ev)m(en)m(ts)i(to)f(b)s(e)f(repla)m(y)m(ed)h(w)m(e)g(can)f(sync)m (hornise)g(what)h(w)m(as)150 4554 y(recorded)g(with)g(what)g(is)g (going)h(on)f(when)f(repla)m(ying.)40 b(But)28 b(the)f(data)h(has)e(to) i(b)s(e)f(c)m(hosen)g(with)g(resp)s(ect)150 4664 y(to)k(that)g(the)g (data:)225 4794 y Fg(\017)60 b Fo(di\013ers)30 b(from)g(di\013eren)m(t) h(sessions)f(\(Gimp)h(and)e(Xterm)i(are)g(really)g(di\013eren)m(t\))225 4925 y Fg(\017)60 b Fo(slo)m(ws)31 b(do)m(wn)f(the)g(repla)m(y)h (session)g(if)f(there)h(are)f(to)s(o)i(man)m(y)225 5056 y Fg(\017)60 b Fo(is)30 b(hard)g(to)h(c)m(ho)s(ose)g(since)g(the)g(X)f (proto)s(col)h(is)g(ric)m(h)225 5187 y Fg(\017)60 b Fo(di\013ers)30 b(\(comparing)h(record)f(and)g(repla)m(ying\))225 5317 y Fg(\017)60 b Fo(can)31 b(ha)m(v)m(e)g(di\013eren)m(t)g(ordering)f (\(comparing)h(record)g(and)e(repla)m(ying\))p eop end %%Page: 33 36 TeXDict begin 33 35 bop 150 -116 a Fo(Chapter)30 b(8:)41 b(Xnee)31 b(In)m(ternals)2465 b(33)150 299 y Fi(8.1.4)63 b(Di\013eren)m(t)40 b(data)g(for)i(di\013eren)m(t)e(kind)h(of)h (sessions)150 446 y Fo(If)29 b(w)m(e)h(record)g(an)f(xterm)h(session)g (with)f(all)h(data)h(b)s(eing)e(recorded)g(and)g(compare)i(that)f(to)g (a)g(recorded)150 555 y(GIMP)25 b(session)h(with)f(all)h(data)f(b)s (eing)g(recordr)g(w)m(e)g(can)h(see)g(that)f(the)h(data)f(to)h(use)f (as)h(sync)m(hronisation)150 665 y(data)c(di\013ers.)37 b(AS)21 b(an)g(example)h(there)f(aren't)h(so)f(man)m(y)h(windo)m(ws)e (created/destry)m(ed)j(during)d(an)h(xterm)150 775 y(session.)275 920 y(The)35 b(solv)m(e)i(to)f(the)g(the)g(problem)g(of)g(\014nding)e (out)i(what)g(data)g(to)h(use)e(as)h(sync)m(hronisation)g(data)150 1030 y(one)31 b(can:)225 1175 y Fg(\017)60 b Fo(use)30 b(the)h(pro)5 b(ject)30 b(\014les)h(deliv)m(ered)g(with)f(Xnee)225 1315 y Fg(\017)60 b Fo(analyse)32 b(the)e(application)i(\(using)f (Xnee's)g Fh(--human-printouts)26 b Fo(option\))32 b(and)e(do)g(some)h Fh(")p Fo(trial)330 1425 y(and)f(error)p Fh(")150 1635 y Fi(8.1.5)63 b(Slo)m(w)40 b(repla)m(y)h(session)h(due)g(to)f(to)s(o)h (man)m(y)e(sync)m(hronise)i(data)150 1782 y Fo(The)29 b(sync)m(hronisation)h(itself)g(do)s(esn't)f(tak)m(e)i(m)m(uc)m(h)f (time)g(but)e(there)i(are)g(timeouts)g(that)g(mak)m(es)h(Xnee)150 1891 y(paues)h(for)g(a)h(short)f(while)g(\(see)h(ab)s(o)m(v)m(e\).)48 b(If)32 b(there)g(are)h(man)m(y)f(suc)m(h)g(timeouts)h(it)g(will)g (lead)g(to)g(a)f(slo)m(w)150 2001 y(or)e(shaky)g(repla)m(ying)i (session.)150 2211 y Fi(8.1.6)63 b(X)40 b(proto)s(col)i(is)g(ric)m(h)e (and)h(async)m(hronous)150 2358 y Fo(F)-8 b(or)36 b(an)e(end)g(user)g (\(with)h(no)g(X)g(exp)s(ertise\))g(it)h(is)e(hard)g(to)i(read)e(the)h (X)g(proto)s(col)h(sp)s(eci\014cation)g(and)150 2468 y(mak)m(e)31 b(assumptions)f(on)g(what)h(data)g(to)g(use.)150 2678 y Fi(8.1.7)63 b(Di\013eren)m(t)40 b(data)g(sen)m(t)150 2825 y Fo(Ev)m(en)e(if)h(one)f(starts)h(up)e(a)h(mac)m(hine)h(from)f (scratc)m(h)h(\(reb)s(o)s(ot\))g(when)e(recording)i(and)e(from)h (scratc)m(h)150 2934 y(when)26 b(repla)m(ying)h(there)h(is)e(no)h (guaran)m(tee)i(that)e(the)g(data)h(is)e(sen)m(t)i(in)e(the)h(same)h (order)e(or)h(that)g(exactly)150 3044 y(the)k(same)f(amoun)m(t)h(of)g (data)g(is)f(sen)m(t.)150 3254 y Fi(8.1.8)63 b(Bu\013ers)41 b(and)g(timeouts)150 3401 y Fo(T)-8 b(o)31 b(enable)g(sync)m (hronisation)f(Xnee)h(bu\013ers)e(data:)225 3546 y Fg(\017)60 b Fo(that)31 b(w)m(as)g(read)f(in)g(the)h(session)f(\014le)h(but)e (hasn't)h(b)s(een)g(sen)m(t)h(during)e(repla)m(y)225 3686 y Fg(\017)60 b Fo(that)31 b(w)m(as)g(sen)m(t)g(during)e(repla)m(y) i(but)e(hasn't)i(b)s(een)e(seen)i(in)f(the)g(session)h(\014le)f(b)s (eing)g(repla)m(y)m(ed)275 3862 y(F)-8 b(or)40 b(ev)m(ery)h(data)f (read)g(from)f(session)h(\014le)g(\(during)f(repla)m(y\))i(that)f (isn't)g(repla)m(y)m(able)i(\(i)e(e)g(device)150 3972 y(ev)m(en)m(t\))c(Xnee)e(stores)g(the)h(data)f(in)g(a)g(bu\013er.)50 b(Xnee)35 b(also)g(stores)f(the)g(data)h(sen)m(t)f(from)g(the)g(X)g (serv)m(er)150 4081 y(during)c(pla)m(ybac)m(k.)43 b(The)30 b(data)h(receiv)m(ed)i(from)d(the)h(serv)m(er)g(mak)m(e)h(the)f (bu\013er)e(en)m(try)i(for)g(that)g(sp)s(eci\014c)150 4191 y(data)36 b(b)s(e)g(decremen)m(ted.)57 b(If,)37 b(on)f(the)g(other)g(hand,)g(the)g(same)g(data)h(w)m(as)f(read)g(from)f (\014le)h(the)g(bu\013er)150 4301 y(en)m(try)30 b(for)f(that)i(data)f (is)g(incremen)m(ted.)41 b(Before)31 b(repla)m(ying)f(an)m(y)g(repla)m (y)m(able)i(ev)m(en)m(t)f(Xnee)f(mak)m(es)h(sure)150 4410 y(it)i(is)g(in)f(sync.)46 b(If)33 b(Xnee)f(is)h(in)f(sync)g(the)h (repla)m(ying)g(con)m(tin)m(ues.)48 b(If)32 b(Xnee)h(is)g(out)g(of)f (sync)g(it)i(will)e(lo)s(ok)150 4520 y(for)e(its)h(thresholds)f(and)f (see)i(if)g(it)f(is)h(inside)f(a)h(user)e(sp)s(eci\014ed)h(range.)41 b(There)30 b(are)h(three)f(thresholds:)225 4665 y Fg(\017)60 b Fj(p)s(ositiv)m(e)32 b(maxim)m(um)d Fo(nr)h(data)h(read)f(from)g (session)h(\014le)225 4805 y Fg(\017)60 b Fj(negativ)m(e)32 b(minim)m(um)e Fo(nr)f(of)i(data)g(sen)m(t)g(from)f(X)g(serv)m(er)225 4945 y Fg(\017)60 b Fj(absolute)31 b(total)h(maxim)m(um)e Fo(sum)g(of)g(the)h(absolute)g(v)-5 b(alues)30 b(ab)s(o)m(v)m(e)275 5121 y(If)25 b(Xnee)i(read)f(one)g(data)h(from)e(\014le)h(\(e.g)i(the)e (ev)m(en)m(t)i(MapNotify\))f(Xnee)g(c)m(hec)m(ks)g(if)f(the)h(bu\013er) e(en)m(try)150 5230 y(for)32 b(the)h(sp)s(eci\014c)f(data)h(is)g (bigger)g(than)f(the)g(p)s(ositiv)m(e)i(maxim)m(um)e(v)-5 b(alue)33 b(\(after)g(ha)m(ving)g(incremen)m(ted)150 5340 y(the)e(bu\013er)e(v)-5 b(alue\).)p eop end %%Page: 34 37 TeXDict begin 34 36 bop 150 -116 a Fo(Chapter)30 b(8:)41 b(Xnee)31 b(In)m(ternals)2465 b(34)275 299 y(If)33 b(Xnee)i(receiv)m (es)h(one)f(data)g(from)f(the)g(X)h(serv)m(er)g(\(e.g)g(the)g(ev)m(en)m (t)h(MapNotify\))g(it)f(c)m(hec)m(ks)g(if)g(the)150 408 y(bu\013er)d(en)m(try)h(for)g(the)g(sp)s(eci\014c)g(data)h(is)f(bigger) h(than)e(the)i(negativ)m(e)h(minim)m(um)d(v)-5 b(alue)33 b(\(after)h(ha)m(ving)150 518 y(decremen)m(ted)d(the)g(bu\013er)e(v)-5 b(alue\).)275 653 y(Xnee)36 b(also)h(c)m(hec)m(ks)g(if)f(the)g (absolute)g(sum)f(of)h(the)g(di\013erences)g(for)g(ev)m(ery)g(en)m(try) h(in)e(the)h(bu\013er)f(is)150 762 y(higher)30 b(the)h(a)f(total)j (threshold.)275 897 y(If)44 b(Xnee)h(is)g(getting)h(out)f(of)g(sync)g (it)g(slo)m(ws)g(do)m(wn)g(the)g(sp)s(eed)f(a)h(bit)g(and)f(tries)h(to) g(con)m(tin)m(ue.)150 1006 y(Ho)m(w)m(ev)m(er)35 b(after)f(a)f(while)g (it)g(ma)m(y)h(happ)s(en)d(that)j(Xnee)f(considers)g(that)h(it)f(no)g (use)g(to)g(con)m(tin)m(ue)i(since)150 1116 y(w)m(e)c(are)g(to)s(o)g(m) m(uc)m(h)f(out)h(of)f(sync.)150 1225 y(Xnee)h(comp)s(ensates)g(for)f (the)g(dela)m(y)i(during)d(repla)m(y)i(that)g(is)f(caused)h(when)e(b)s (eing)h(out)h(of)f(sync.)150 1335 y(It)52 b(is)g(p)s(ossible)g(to)h(t)m (w)m(eak)h(the)e(thresholds)f(using)h(the)g Fh(--maximum-threshold)p Fo(,)h Fh(--negative-)150 1445 y(threshold)61 b Fo(and)j Fh(--total-diff-threshold)58 b Fo(options.)141 b(Is)64 b(is)g(also)h(p)s(ossible)e(to)i(turn)e(o\013)150 1554 y(sync)m(hronisation)31 b(completely)h(using)e(the)g Fh(-ns)g Fo(option.)p eop end %%Page: 35 38 TeXDict begin 35 37 bop 150 -116 a Fo(Chapter)30 b(9:)41 b(Xnee)31 b(Requiremen)m(ts)2272 b(35)150 299 y Fl(9)80 b(Xnee)53 b(Requiremen)l(ts)150 631 y Fn(9.1)68 b(Run)l(time)46 b(requiremen)l(ts)150 790 y Fo(Xnee)31 b(requiremen)m(ts:)225 925 y Fg(\017)60 b Fo(RECORD)30 b(extension)225 1059 y Fg(\017)60 b Fo(XT)-8 b(est)31 b(extension)275 1219 y(Y)-8 b(ou)33 b(can)f(use)h(Xnee)f(in)h(repla)m(ying)g(mo)s(de)f (without)h(RECORD)e(extension)j(if)e(sync)m(hronisation)h(is)150 1328 y(turned)c(o\013.)150 1561 y Fn(9.2)68 b(Dev)l(elopmen)l(t)47 b(requiremen)l(ts)150 1720 y Fo(F)-8 b(or)29 b(dev)m(elopmen)m(t)h (requiremen)m(ts,)f(please)h(lo)s(ok)f(at)g(the)g(DEVELOPMENT)f(\014le) g(that)h(is)g(distributed)150 1830 y(with)h(all)h(pac)m(k)-5 b(ages)33 b(and)c(with)h(CVS.)p eop end %%Page: 36 39 TeXDict begin 36 38 bop 150 -116 a Fo(Chapter)30 b(10:)41 b(F)-10 b(A)m(Q)2814 b(36)150 299 y Fl(10)80 b(F)-18 b(A)l(Q)150 545 y Fo(`)p Fh(Where)29 b(do)h(I)g(send)f(questions?)p Fo(')630 655 y Fh(xnee-devel@gnu.org)150 929 y Fo(`)p Fh(Where)g(and)h(how)f(do)h(I)g(report)f(bugs?)p Fo(')630 1039 y(T)-8 b(urn)41 b(on)h(v)m(erb)s(ose)h(mo)s(de)f Fh(cnee)29 b(--verbose)40 b Fo(and)h(sa)m(v)m(e)j(the)f(prin)m(touts.) 76 b(Include)42 b(all)630 1148 y(prin)m(touts)30 b(and)g(log)h(\014les) g(in)f(the)g(mail)h(whic)m(h)f(is)h(sen)m(t)g(to)g Fh(bug-xnee@gnu.org) 150 1422 y Fo(`)p Fh(Can)f(you)f(add)h(xxx)f(functionality)e(to)j(Xnee) p Fo(')630 1532 y(Send)f(an)h(email)i(to)f Fh(xnee-devel@gnu.org)25 b Fo(and)30 b(w)m(e'll)i(consider)e(it.)150 1696 y(`)p Fh(Why)g(the)f(name)g(Xnee?)p Fo(')630 1806 y(W)-8 b(e)38 b(w)m(an)m(ted)g(to)g(use)f(a)h(recursiv)m(e)g(acron)m(ym,)i(as)d(GNU)h (\(\\GNU's)h(Not)f(Unix'\).)62 b(After)630 1915 y(ha)m(ving)37 b(read)f(the)g(Wine)h(do)s(cumen)m(tation,)h(w)m(e)f(though)m(t)f(that) h(Xnee)g(is)f(not)g(an)g(Ev)m(en)m(t)630 2025 y(Em)m(ulator)g(w)m(ould) e(w)m(ork)h(\014ne)f(since)i(Xnee)f(is)g(Not)h(an)e(Ev)m(en)m(t)i(Em)m (ulator)g(but)e(rather)h(a)630 2134 y(ev)m(en)m(t)d(recorder)e(and)g (fak)m(er.)150 2299 y(`)p Fh(What)f(does)h(the)f(name)g(cnee)h(mean?)p Fo(')630 2408 y(cnee's)h(not)g(an)f(ev)m(en)m(t)i(em)m(ulator)150 2573 y(`)p Fh(What)d(does)h(the)f(name)g(gnee)h(mean?)p Fo(')630 2682 y(gnee's)h(not)g(an)f(em)m(ulator)i(either)150 2847 y(`)p Fh(What)d(does)h(the)f(name)g(pnee)h(mean?)p Fo(')630 2956 y(pnee's)g(not)h(ev)m(en)g(em)m(ulating)150 3121 y(`)p Fh(What)e(doesn't)g(the)g(name)h(gnee)f(mean?)p Fo(')630 3230 y(gnee's)i(not)g(an)f(Ev)m(en)m(t)h(Em)m(ulator)150 3395 y(`)p Fh(What)e(license)g(is)h(Xnee)f(released)f(under)h(?)p Fo(')630 3504 y(GPL)42 b(v)m(ersion)g(t)m(w)m(o)i(or)e(later.)76 b(Whic)m(h)43 b(can)f(b)s(e)f(found)g(at)i Fh(http:)10 b(/)g(/)d(www)j(.)d(gnu)j(.)d(org)i(/)630 3614 y(copyleft/gpl.html)p Fo(.)35 b(Xnee)26 b(will)h(switc)m(h)g(to)g(GPLv3)g(as)f(so)s(on)g(as)h (GPLv3)f(is)h(released.)150 3778 y(`)p Fh(Where)i(is)h(the)f(CVS)h (repository?)p Fo(')630 3888 y(Y)-8 b(ou)36 b(can)f(\014nd)f(a)i(CVS)e (tree)i(at)h Fh(http:)t(/)t(/)s(savannah)t(.)s(gnu)t(.)s(org)p Fo(.)49 b(Y)-8 b(ou)36 b(are)g(more)f(than)630 3998 y(w)m(elcome)d(to)f (join)150 4162 y(`)p Fh(Is)f(there)f(a)h(GUI)f(frontend)g(for)g(Xnee)g (?)p Fo(')630 4271 y(Y)-8 b(es!)42 b(Gnee.)150 4436 y(`)p Fh(When)29 b(setting)g(ranges)g(\(integers\),)e(how)i(do)h(I)g(know)f (what)h(numbers)e(belong)p Fo(')630 4545 y(to)35 b(X11)h(data?)54 b(Y)-8 b(ou)35 b(can)g(either)g(t)m(yp)s(e)f(the)h(data)g(name)g (directly)g(\(e.g)h(MotionNotify\))630 4655 y(or)30 b(y)m(ou)h(can)g (use)f(the)g(prin)m(t-xxx-name)h(options.)705 4792 y Fg(\017)60 b Fh(--print-data-name)705 4929 y Fg(\017)g Fh(--print-event-name)705 5066 y Fg(\017)g Fh(--print-error-name)705 5203 y Fg(\017)g Fh(--print-reply-name)705 5340 y Fg(\017)g Fh(--print-request-name)p eop end %%Page: 37 40 TeXDict begin 37 39 bop 150 -116 a Fo(Chapter)30 b(10:)41 b(F)-10 b(A)m(Q)2814 b(37)150 299 y(`)p Fh(When)29 b(I)h(replay)f(to)h (another)e(display)h(the)g(characters)f(are)h(not)h(correct?)p Fo(')630 408 y(Mak)m(e)i(sure)e(y)m(ou)g(use)g(the)h(same)g(k)m(eyb)s (oard)f(mapping.)630 518 y(A)g(t)m(ypical)i(example:)630 737 y(Record)f(lo)s(cal)g(host)g(using)f(Xnee:)630 847 y Fh(cnee)f(--record)f(--out-file)g(recorded_on_local.xnl)630 1066 y Fo(Store)j(remote)g(k)m(eymap:)630 1176 y Fh(xmodmap)d(-pke)i (-display)e(remote:0)g(>)i(remote.map)630 1395 y Fo(Store)h(lo)s(cal)g (k)m(eymap:)630 1504 y Fh(xmodmap)d(-pke)i(>)g(local.map)630 1724 y Fo(Cop)m(y)g(lo)s(cal)i(k)m(eymap)f(to)g(remote)g(host:)630 1833 y Fh(cat)e(local.map)f(|)i(xmodmap)f(-display)f(remote:0)g(-)630 2052 y Fo(Repla)m(y)j(previously)f(recorded)h(session:)630 2162 y Fh(cnee)e(--replay)f(--file)h(recorded_on_local.xnl)c(--display) i(remote:0)630 2381 y Fo(Cop)m(y)j(the)h(original)g(remote)h(k)m(eymap) f(to)g(remote)g(host:)630 2491 y Fh(cat)e(remote.map)f(|)i(xmodmap)e (-display)h(remote:0)f(-)150 2874 y Fo(`)p Fh(When)h(starting)g(Xnee)g (I)h(am)g(informed)e(that)h(I)h(am)g(missing)e(the)i(RECORD)e (extension)p Fo(')630 2984 y(Y)-8 b(our)29 b(X)g(serv)m(er)g(do)s (esn't)g(ha)m(v)m(e)h(the)f(RECORD)f(extension)i(either)f(loaded)g(or)g (compiled.)630 3093 y(T)-8 b(o)24 b(solv)m(e)h(this)e(y)m(ou)h(ha)m(v)m (e)g(to,)i(dep)s(ending)c(on)h(what)g(Xserv)m(er)h(y)m(ou)g(ha)m(v)m(e) g(do)g(the)f(follo)m(wing:)150 3258 y(`)p Fh(Can)30 b(Xnee)f(record)g (more)g(than)g(one)h(display?)p Fo(')630 3367 y(No,)24 b(w)m(e)e(used)f(to)i(consider)e(adding)g(the)h(functionalit)m(y)h(but) e(ha)m(v)m(e)i(no)f(plans)f(to)h(implemen)m(t)630 3477 y(it)31 b(an)m(ymore.)150 3641 y(`)p Fh(When)e(starting)g(Xnee)g(I)h (am)g(informed)e(that)h(I)h(am)g(missing)e(the)i(RECORD)e(extension)p Fo(')630 3751 y(Y)-8 b(our)29 b(X)g(serv)m(er)g(do)s(esn't)g(ha)m(v)m (e)h(the)f(RECORD)f(extension)i(either)f(loaded)g(or)g(compiled.)630 3861 y(T)-8 b(o)24 b(solv)m(e)h(this)e(y)m(ou)h(ha)m(v)m(e)g(to,)i(dep) s(ending)c(on)h(what)g(Xserv)m(er)h(y)m(ou)g(ha)m(v)m(e)g(do)g(the)f (follo)m(wing:)705 3998 y Fg(\017)60 b Fo(XF)-8 b(ree86)31 b(4.0)f(and)e(higher)g(Mak)m(e)j(sure)d(that)h(the)g(RECORD)f (extension)h(is)g(loaded.)810 4107 y(This)53 b(is)h(done)f(b)m(y)h (letting)h(the)f(Mo)s(dule)g(section)h(in)f(the)g(X)g(con\014g)g (\014le)g(\(e.g)810 4217 y(/etc/X11/XF86Con\014g-4\))36 b(lo)s(ok)31 b(something)g(lik)m(e:)810 4354 y Fh(Section)d("Module") 931 4463 y(Load)h("dbe")g(#)h(Double-buffering)931 4573 y(Load)f("GLcore")g(#)h(OpenGL)e(support)931 4682 y(Load)h("dri")g(#)h (Direct)f(rendering)f(infrastructure)931 4792 y(Load)h("glx")g(#)h (OpenGL)f(X)h(protocol)e(interface)931 4902 y(Load)h("extmod")g(#)h (Misc.)f(required)f(extensions)931 5011 y(Load)h("v4l")g(#)h (Video4Linux)931 5121 y(#)g(Load)f("pex5")g(#)h(PHIGS)f(for)h(X)g(3D)f (environment)f(\(obsolete\))931 5230 y(Load)h("record")g(#)h(X)g(event) f(recorder)931 5340 y(#)h(Load)f("xie")g(#)h(X)g(Image)f(Extension)f (\(obsolete\))p eop end %%Page: 38 41 TeXDict begin 38 40 bop 150 -116 a Fo(Chapter)30 b(10:)41 b(F)-10 b(A)m(Q)2814 b(38)922 299 y Fh(#)30 b(You)g(only)f(need)g(the)g (following)f(two)i(modules)e(if)i(you)f(do)h(not)g(use)f(xfs.)931 408 y(#)h(Load)f("freetype")f(#)i(TrueType)e(font)h(handler)931 518 y(#)h(Load)f("type1")g(#)h(Adobe)f(Type)g(1)h(font)f(handler)810 628 y Fo(EndSection)810 756 y(The)h(imp)s(ortan)m(t)g(load)h(directiv)m (e)h(\(in)f(this)f(case\))i(is)e(the)h(follo)m(wing)h(line)931 865 y Fh(Load)d("record")g(#)h(X)g(event)f(recorder)705 1103 y Fg(\017)60 b Fo(X.org,)34 b(XF)-8 b(ree86)35 b(\(3.3)f(and)d(lo) m(w)m(er\))k(or)d(an)m(y)h(other)f(Xserv)m(er)h(Recompile)h(and)e (rein-)810 1212 y(stall)f(the)g(Xserv)m(er)f(and)g(mak)m(e)h(sure)e (that)i(RECORD)f(extension)g(is)h(built)f(in)m(to)h(the)810 1322 y(Xserv)m(er.)40 b(Please)28 b(lo)s(ok)f(at)g(the)g(do)s(cumen)m (tation)g(from)f(y)m(our)g(Xserv)m(er)h Fh(")p Fo(v)m(endor)p Fh(")f Fo(on)810 1431 y(ho)m(w)k(to)i(do)e(that.)150 1577 y(`)p Fh(How)g(do)f(I)i(build)d(VNC)i(so)g(that)f(I)h(can)f(use)h (Xnee)f(together)f(with)h(it?)p Fo(')630 1797 y(Do)m(wnload)j(vnc)e (source)g(from:)630 1906 y Fh(http://www.uk.research.a)o(tt.c)o(om/v)o (nc/)o(xvnc)o(hist)o(ory)o(.htm)o(l)630 2125 y Fo(In)25 b(the)h(\014le)h Fh(Xvnc/config/cf/vnc.def)20 b Fo(c)m(hange)27 b(NO)f(on)f(the)i(follo)m(wing)g(items)g(to)f(YES)630 2235 y(as)31 b(b)s(elo)m(w:)630 2345 y Fh(#define)d(BuildRECORD)g(YES) 630 2454 y(#define)g(BuildRECORDlib)f(YES)630 2673 y Fo(Do)m(wnload)38 b(the)f(Xfree86)i(distribution)d(from)h Fh(http:)5 b(/)g(/)t(www)g(.)t(xfree86)g(.)t(org)p Fo(.)57 b(Sp)s(eci\014-)630 2783 y(cally)-8 b(,)32 b(the)f(follo)m(wing)h(dir,) e(\(curren)m(tly)g(in)g(the)h(\014le)f Fh(X430src-3.tgz)d(file)i Fo(\):)630 2892 y Fh(tar)g(zxvf)h(\\)630 3002 y(X430src-3.tgz)630 3112 y(xc/programs/Xserver/reco)o(rd/)630 3221 y (xc/programs/Xserver/reco)o(rd/I)o(make)o(fil)o(e)630 3331 y(xc/programs/Xserver/reco)o(rd/r)o(ecor)o(d.c)630 3440 y(xc/programs/Xserver/reco)o(rd/r)o(ecor)o(dmo)o(d.c)630 3550 y(xc/programs/Xserver/reco)o(rd/s)o(et.c)630 3660 y(xc/programs/Xserver/reco)o(rd/s)o(et.h)630 3769 y (xc/programs/Xserver/reco)o(rd/m)o(odul)o(e/)630 3879 y(xc/programs/Xserver/reco)o(rd/m)o(odul)o(e/I)o(make)o(file)630 3988 y(cp)g(-rf)f(\\)630 4098 y(xc/programs/Xserver/reco)o(rd)24 b(\\)630 4208 y(vnc_unixsrc/Xvnc/program)o(s/Xs)o(erve)o(r)630 4317 y(cd)30 b(libvncauth/)d(xmkmf)i(make)g(all)630 4427 y(cd)h(Xvnc)f(make)g(World)g(|&)h(tee)f(LOG)630 4646 y Fo(V)-8 b(erify)33 b(the)f(build)f(b)m(y)h(running)f Fh(xdpyinfo)f Fo(in)i(an)g(xterm)g(in)g(the)h(vncserv)m(er)f(and)g(v)m (erify)630 4755 y(that)f(RECORD)f(and)g(XTEST)f(extensions)i(are)f (loaded.)150 4902 y(`)p Fh(How)g(do)f(I)i(ensure)d(that)h(the)h(mouse,) f(during)f(replay,)h(is)g(at)h(the)g(same)f(position)f(\(x,y\))h(as)150 5011 y(when)g(recorded?)p Fo(')630 5121 y(Use)34 b(the)f Fh(--store-mouse-pos)c Fo(option.)50 b(This)32 b(will)i(cause)g(Xnee)g (to)g(store)g(the)f(mouse)630 5230 y(p)s(osition)j(b)s(efore)f (starting)i(to)g(record.)57 b(This)35 b(p)s(osition)h(will)g(b)s(e)f (used)g(to)i(set)f(the)g(start)630 5340 y(p)s(osition)30 b(b)s(efore)g(repla)m(ying)i(of)e(recorded)g(data)h(starts.)p eop end %%Page: 39 42 TeXDict begin 39 41 bop 150 -116 a Fo(Chapter)30 b(10:)41 b(F)-10 b(A)m(Q)2814 b(39)150 299 y(`)p Fh(How)30 b(do)f(I)i(ensure)d (that)h(the)h(same)f(window)g(is)h(focused)e(as)i(when)f(recorded?)p Fo(')630 408 y(It's)i(simple,)f(just)g(mak)m(e)h(sure)f(that)h(y)m(ou)g (record)f(the)h(windo)m(w)e(getting)j(fo)s(cus.)150 568 y(`)p Fh(The)e(window)e(pops)i(up)f(at)h(different)e(positions)g(when)h (replaying,)f(can)h(Xnee)g(handle)150 677 y(that?)p Fo(')630 787 y(Y)-8 b(es,)39 b(use)d(the)g Fh(--recall-window-position)30 b Fo(option)37 b(when)e(repla)m(ying)i(\(with)g(cnee\).)630 897 y(This)24 b(mak)m(es)i(cnee)f(try)f(y)m(o)i(rep)s(osition)f(the)g (windo)m(w)f(as)h(it)g(w)m(as)g(p)s(ositioned)g(when)f(record-)630 1006 y(ing)31 b(the)f(session.)150 1166 y(`)p Fh(Xnee)f(seems)g(to)h (mess)f(up)h(my)g(entire)f(session)f(after)h(replaying)f(a)i(sessions)e (which)h(was)150 1275 y(interupted)f(by)h(Control-C?)p Fo(')630 1385 y(Xnee)k(records)f(the)g(KeyPress)g(b)s(elonging)h(to)g (Con)m(trol.)47 b(After)33 b(that)g(the)f(system)h(sends)630 1494 y(Xnee)46 b(a)f(signal)h(whic)m(h)f(mak)m(es)h(Xnee)f(stop)h (recording.)85 b(So)45 b(y)m(ou)g(end)g(up)f(ha)m(ving)i(a)630 1604 y(Con)m(trol)41 b(KeyPress)f(recorded,)j(with)d(no)g(coresp)s (onding)f(KeyRelease.)72 b(T)-8 b(o)41 b(solv)m(e)h(the)630 1714 y(screw)m(ed)29 b(up)f(session,)h(press)f(Con)m(trol)h(\(whic)m(h) g(generates)h(a)f(KeyPress)f(and)g(the)h(w)m(an)m(ted)630 1823 y(KeyRelease\).)56 b(If)35 b(y)m(ou)g(w)m(an)m(t)h(to)f(k)m(eep)h (y)m(our)f(recorded)f(session)h(and)g(not)g(w)m(an)m(t)g(this)g(to)630 1933 y(happ)s(en)29 b(again,)i(remo)m(v)m(e)h(the)f(last)g(line)g(in)f (the)g(recorded)h(\014le)f(starting)h(with)f Fh(2,)p Fo(.)630 2067 y(A)22 b(b)s(etter)g(w)m(a)m(y)h(to)g(in)m(terrupt)f (Xnee)g(is)h(to)g(use)e(the)i(stop)f(k)m(ey)h(option,)h(e.g)f(in)f (cnee)h Fh(--stop-)630 2177 y(key)29 b(F1)p Fo(.)41 b(This)29 b(prev)m(en)m(ts)i(the)g(ab)s(o)m(v)m(e)g(situation.)150 2336 y(`)p Fh(Autorepeat)d(is)i(turned)e(off)i(by)f(Xnee,)g(how)h(do)g (I)g(turn)f(it)h(on)f(again?)p Fo(')630 2446 y Fh(xset)g(r)h(on)p eop end %%Page: 40 43 TeXDict begin 40 42 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(Cop)m(ying)h(This)f(Man)m(ual)2105 b(40)150 299 y Fl(App)t(endix)52 b(A)81 b(Cop)l(ying)52 b(This)h(Man)l(ual)150 608 y Fn(A.1)67 b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h (License)1396 767 y Fo(V)-8 b(ersion)31 b(1.2,)h(No)m(v)m(em)m(b)s(er)g (2002)390 898 y(Cop)m(yrigh)m(t)842 895 y(c)817 898 y Fg(\015)e Fo(2000,2001,2002)36 b(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)390 1007 y(51)f(F)-8 b(ranklin)31 b(Street,)g(Fifth)g(Flo)s(or,)g(Boston,)g(MA)61 b(02110-1301,)35 b(USA)390 1227 y(Ev)m(ery)m(one)c(is)g(p)s(ermitted)f(to)h(cop)m(y)g (and)f(distribute)g(v)m(erbatim)h(copies)390 1336 y(of)g(this)f (license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f(is)f(not)h(allo)m (w)m(ed.)199 1467 y(0.)61 b(PREAMBLE)330 1597 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g(a)g(man)m (ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1707 y(useful)29 b(do)s(cumen)m(t)h Fe(free)36 b Fo(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1817 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1926 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 2036 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 2145 y(made)30 b(b)m(y)h(others.)330 2276 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2385 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2495 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2626 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2735 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2845 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2954 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 3064 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 3174 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3304 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3435 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3544 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3654 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3764 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3873 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3983 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 4092 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 4223 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4333 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4442 y(another)31 b(language.)330 4573 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4682 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4792 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4902 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 5011 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 5121 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 5230 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5340 y(them.)p eop end %%Page: 41 44 TeXDict begin 41 43 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(Cop)m(ying)h(This)f(Man)m(ual)2105 b(41)330 299 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g (Secondary)g(Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 408 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)330 518 y(under)f(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 628 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 737 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 894 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 1003 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m (er)j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g (the)f(Do)s(cumen)m(t)h(is)f(released)g(under)330 1113 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a) g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 1223 y(b)s(e)k(at)h(most)g(25)g(w)m(ords.)330 1379 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g(the)f(Do)s(cumen)m(t)h (means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1489 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1598 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1708 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1817 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1927 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 2037 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 2146 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2256 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2365 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2522 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fd(asci)r(i)g Fo(without)330 2632 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2651 y(E)1810 2632 y(X)e(input)f(format,)j Ff(SGML)f Fo(or)f Ff(XML)g Fo(using)g(a)g(publicly)330 2741 y(a)m(v)-5 b(ailable)42 b Ff(DTD)p Fo(,)h(and)c (standard-conforming)g(simple)h Ff(HTML)p Fo(,)i(P)m(ostScript)e(or)f Ff(PDF)h Fo(designed)330 2851 y(for)e(h)m(uman)f(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f Ff(PNG)p Fo(,)i Ff(X)n(CF)330 2960 y Fo(and)e Ff(JPG)p Fo(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that) h(can)g(b)s(e)f(read)h(and)f(edited)330 3070 y(only)54 b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b Ff(SGML)54 b Fo(or)f Ff(XML)h Fo(for)g(whic)m(h)f(the)h Ff(DTD)g Fo(and/or)330 3180 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g (generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m (hine-generated)j Ff(HTML)p Fo(,)330 3289 y(P)m(ostScript)31 b(or)f Ff(PDF)h Fo(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s (cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3446 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b) s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m (wing)330 3555 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f (in)h(the)330 3665 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e (title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3774 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3884 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 4041 y(A)f(section)h(\\En)m(titled)g(XYZ")f(means)f(a)h(named)g (subunit)e(of)h(the)h(Do)s(cumen)m(t)h(whose)e(title)i(either)330 4150 y(is)d(precisely)g(XYZ)g(or)f(con)m(tains)i(XYZ)f(in)f(paren)m (theses)i(follo)m(wing)g(text)g(that)f(translates)h(XYZ)e(in)330 4260 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g (sp)s(eci\014c)g(section)h(name)f(men)m(tioned)h(b)s(elo)m(w,)g(suc)m (h)330 4369 y(as)i(\\Ac)m(kno)m(wledgemen)m(ts",)33 b(\\Dedications",)e (\\Endorsemen)m(ts",)e(or)f(\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4479 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g (section)g(when)f(y)m(ou)h(mo)s(dify)e(the)i(Do)s(cumen)m(t)h(means)e (that)h(it)g(remains)g(a)330 4589 y(section)e(\\En)m(titled)f(XYZ")g (according)g(to)g(this)g(de\014nition.)330 4745 y(The)c(Do)s(cumen)m(t) i(ma)m(y)f(include)f(W)-8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to) g(the)g(notice)h(whic)m(h)e(states)i(that)330 4855 y(this)34 b(License)g(applies)g(to)h(the)f(Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4964 y(b)s(e)k(included)g(b)m(y)g(reference)h(in)g(this)f(License,)j (but)d(only)h(as)g(regards)f(disclaiming)i(w)m(arran)m(ties:)330 5074 y(an)m(y)e(other)g(implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g (and)f(has)h(no)330 5183 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h (this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end %%Page: 42 45 TeXDict begin 42 44 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(Cop)m(ying)h(This)f(Man)m(ual)2105 b(42)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h(the)g(Do)s (cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h(or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f (License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j(and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e(License)i (applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e(in)i(all)g (copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h(other)f (conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f(License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h(the)f(reading)g(or)g (further)e(cop)m(ying)j(of)f(the)g(copies)330 847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d (copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f (n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g (the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end %%Page: 43 46 TeXDict begin 43 45 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(Cop)m(ying)h(This)f(Man)m(ual)2105 b(43)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g(the)f(Do)s (cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same)h(title)h (as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original)i (publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end %%Page: 44 47 TeXDict begin 44 46 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(Cop)m(ying)h(This)f(Man)m(ual)2105 b(44)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g (distinct)h(from)e(an)m(y)i(other)g(section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section)i(En)m(titled)f (\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g(nothing)g(but) 330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s(di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g (statemen)m(ts)i(of)330 770 y(p)s(eer)27 b(review)g(or)g(that)h(the)f (text)i(has)d(b)s(een)h(appro)m(v)m(ed)g(b)m(y)g(an)h(organization)h (as)e(the)h(authoritativ)m(e)330 880 y(de\014nition)i(of)h(a)f (standard.)330 1022 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g (up)e(to)i(\014v)m(e)g(w)m(ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er) 30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e(as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i(the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s(di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f(F)-8 b(ron)m(t-Co)m(v)m (er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 y(added)27 b(b)m(y)g(\(or)h(through) f(arrangemen)m(ts)h(made)g(b)m(y\))g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t)g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g(same)h(co)m(v)m (er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m(y)g(arrangemen)m (t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m(y)i(y)m(ou)f(are)f (acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g(not)f(add)g (another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the)f(old)g (one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3455 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 45 48 TeXDict begin 45 47 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(Cop)m(ying)h(This)f(Man)m(ual)2105 b(45)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h(W)m(ORKS)330 428 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f(its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep)s(enden)m(t)330 538 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h(on)f(a)g(v)m (olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g(is)h(called) 330 648 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i(resulting)e (from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g(the)330 757 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m (ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 867 y(the)28 b(Do)s(cumen)m(t)g(is)g(included)f(an)g (aggregate,)32 b(this)27 b(License)h(do)s(es)g(not)g(apply)f(to)h(the)g (other)g(w)m(orks)330 976 y(in)i(the)h(aggregate)i(whic)m(h)d(are)h (not)f(themselv)m(es)i(deriv)-5 b(ativ)m(e)32 b(w)m(orks)e(of)h(the)f (Do)s(cumen)m(t.)330 1106 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1215 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1325 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1435 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1544 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1674 y(8.)61 b(TRANSLA)-8 b(TION)330 1803 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1913 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2022 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2132 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2242 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2351 y(license)45 b(notices)g(in)f(the) g(Do)s(cumen)m(t,)49 b(and)43 b(an)m(y)h(W)-8 b(arran)m(y)45 b(Disclaimers,)k(pro)m(vided)44 b(that)h(y)m(ou)330 2461 y(also)c(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2570 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2680 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2790 y(prev)-5 b(ail.)330 2919 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3029 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3138 y(c)m(hanging)j(the)g(actual)h(title.)199 3268 y(9.)61 b(TERMINA)-8 b(TION)330 3397 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3507 y(pro)m(vided)41 b(for)h(under)e(this)i(License.)75 b(An)m(y)42 b(other)g(attempt)h(to)g (cop)m(y)-8 b(,)46 b(mo)s(dify)-8 b(,)44 b(sublicense)e(or)330 3616 y(distribute)36 b(the)h(Do)s(cumen)m(t)g(is)g(v)m(oid,)i(and)d (will)h(automatically)i(terminate)f(y)m(our)e(righ)m(ts)h(under)330 3726 y(this)28 b(License.)40 b(Ho)m(w)m(ev)m(er,)31 b(parties)d(who)f (ha)m(v)m(e)i(receiv)m(ed)g(copies,)h(or)d(righ)m(ts,)i(from)f(y)m(ou)g (under)e(this)330 3836 y(License)37 b(will)g(not)g(ha)m(v)m(e)h(their)f (licenses)g(terminated)h(so)f(long)g(as)g(suc)m(h)f(parties)h(remain)g (in)f(full)330 3945 y(compliance.)154 4075 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 4204 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e (new,)k(revised)d(v)m(ersions)h(of)g(the)g(GNU)g(F)-8 b(ree)330 4314 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g (time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h (in)g(spirit)330 4423 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma) m(y)h(di\013er)f(in)g(detail)h(to)g(address)f(new)g(problems)f(or)i (concerns.)330 4533 y(See)c Fh(http://www.gnu.org/copy)o(left)o(/)p Fo(.)330 4663 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m (en)g(a)g(distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 4772 y(sp)s(eci\014es)45 b(that)h(a)g(particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g (License)h(\\or)g(an)m(y)g(later)g(v)m(ersion")330 4882 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f (follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 4991 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 5101 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 5210 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 5320 y(Soft)m(w)m(are)31 b(F)-8 b(oundation.)p eop end %%Page: 46 49 TeXDict begin 46 48 bop 150 -116 a Fo(Chapter)30 b(11:)h(Index)2786 b(46)150 299 y Fl(11)80 b(Index)150 610 y Fn(B)150 728 y Fc(bac)n(kground)11 b Fb(:)i(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38 b Fc(1)150 816 y(Build)26 b(VNC)f(to)h(b)r(e)g(used)f(with)h(Xnee)18 b Fb(:)12 b(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)44 b Fc(38)150 1055 y Fn(C)150 1173 y Fc(can)26 b(Xnee)f(record)h(more)g (than)f(one)h(displa)n(y)d Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)49 b Fc(37)150 1261 y(command)26 b(line)g(syn)n(tax)18 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)45 b Fc(8)150 1349 y(Commen)n(t)26 b(directiv)n(es)d Fb(:)13 b(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)49 b Fc(24)150 1437 y(Create)27 b(a)f(pro)t(ject)g(\014le)21 b Fb(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)47 b Fc(23)150 1692 y Fn(D)150 1810 y Fc(De\014ne)25 b(a)h(simple)g(macro)18 b Fb(:)c(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)44 b Fc(17)150 1898 y(De\014ne)25 b(another)h(simple)g(macro)11 b Fb(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)37 b Fc(18)150 1986 y(dev)n(elopmen)n(t)25 b(requiremen)n(ts)20 b Fb(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)46 b Fc(35)150 2075 y(Distribute)25 b(the)h(repla)n(ying)g (of)g(mouse)g(motions)e Fb(:)13 b(:)g(:)g(:)g(:)49 b Fc(16)150 2163 y(Distribute)25 b(the)h(ret)n(yping)f(of)h(a)g(\014le)19 b Fb(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) 45 b Fc(16)150 2251 y(Distribute)25 b(y)n(our)h(mouse)g(motions)7 b Fb(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)33 b Fc(16)150 2339 y(distributing)9 b Fb(:)k(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)36 b Fc(7)150 2594 y Fn(E)150 2712 y Fc(Example)26 b(Xnee)f(Session)h (\014les)8 b Fb(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)35 b Fc(4)150 2800 y(Exec)26 b(directiv)n(e)18 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)44 b Fc(29)150 3038 y Fn(F)150 3156 y Fc(FDL,)26 b(GNU)f(F)-6 b(ree)25 b(Do)r(cumen)n(tation)h (License)20 b Fb(:)13 b(:)g(:)g(:)g(:)h(:)f(:)45 b Fc(40)150 3245 y(features)24 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)49 b Fc(1)150 3333 y(F)-6 b(unctional)26 b(o)n(v)n(erview)6 b Fb(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)33 b Fc(5)150 3571 y Fn(G)150 3689 y Fc(Getting)26 b(started)15 b Fb(:)e(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 b Fc(3)150 3777 y(GUI)25 b(fron)n(tend)h(for)g(Xnee)8 b Fb(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)35 b Fc(36)150 4015 y Fn(H)150 4133 y Fc(ho)n(w)26 b(to)g(sync)n(hronise)20 b Fb(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fc(32)150 4388 y Fn(I)150 4506 y Fc(Insert)25 b(marks)h(Xnee)f(with)h(k)n(ey)f (com)n(bination)14 b Fb(:)f(:)h(:)f(:)g(:)g(:)g(:)40 b Fc(10)150 4594 y(In)n(terupting)24 b(xnee)12 b Fb(:)h(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)39 b Fc(9)150 4849 y Fn(K)150 4967 y Fc(k)n(ey)12 b Fb(:)g(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)39 b Fc(9)150 5222 y Fn(L)150 5340 y Fc(license)9 b Fb(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 b Fc(36)2025 610 y(limit)26 b(the)g(data)c Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)48 b Fc(10)2025 699 y(limit)26 b(the)g(ev)n(en)n(ts)10 b Fb(:)i(:)h(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)36 b Fc(10)2025 938 y Fn(M)2025 1056 y Fc(Mark)26 b(directiv)n(e)9 b Fb(:)k(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fc(29)2025 1145 y(missing)27 b(RECORD)d(extension)17 b Fb(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)43 b Fc(37)2025 1233 y(mo)r(des)14 b Fb(:)g(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)41 b Fc(5)2025 1321 y(mo)r(di\014er)16 b Fb(:)e(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fc(9)2025 1561 y Fn(P)2025 1679 y Fc(P)n(ause)26 b(Xnee)f(with)h(k)n (ey)f(com)n(bination)10 b Fb(:)k(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)37 b Fc(9)2025 1768 y(P)n(ausing)26 b(and)g(resuming)g (Xnee)f(with)h(k)n(ey)21 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) 48 b Fc(17)2025 1856 y(plugins)15 b Fb(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 b Fc(10)2025 1944 y(Pro)t(ject)27 b(\014le)18 b Fb(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) 44 b Fc(23)2025 2033 y(Pro)t(ject)27 b(information)g(directiv)n(e)c Fb(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)50 b Fc(29)2025 2289 y Fn(Q)2025 2407 y Fc(questions)26 b(is)g(sen)n(t)f(where?)e Fb(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)48 b Fc(36)2025 2663 y Fn(R)2025 2781 y Fc(ranges)13 b Fb(:)h(:)f(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)40 b Fc(7)2025 2870 y(Record)25 b(a)h(gn)n(umeric)g(session) 17 b Fb(:)e(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)44 b Fc(13)2025 2958 y(Record)25 b(a)h(gn)n(umeric)g (session)h(with)f(sync)n(hronisation)2178 3045 y(data)17 b Fb(:)d(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)44 b Fc(13)2025 3134 y(Record)25 b(another)h(displa)n(y) g(than)f(the)g(default)7 b Fb(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)33 b Fc(20)2025 3222 y(Record)25 b(k)n(eyb)r(oard)c Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)48 b Fc(13)2025 3310 y(Record)25 b(k)n(eyb)r(oard)g(and)h(mouse)17 b Fb(:)c(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)43 b Fc(13)2025 3399 y(Record)25 b(mouse)h(motions)10 b Fb(:)k(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)37 b Fc(13)2025 3487 y(recording)15 b Fb(:)f(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)42 b Fc(6)2025 3576 y(Repla)n(y)25 b(a)h(gn)n(umeric)g(session)20 b Fb(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)46 b Fc(14)2025 3664 y(Repla)n(y)25 b(a)h(gn)n(umeric)g(session)h(with)f (sync)n(hronisation)2178 3751 y(data)17 b Fb(:)d(:)f(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)44 b Fc(15)2025 3840 y(Repla)n(y)25 b(a)h(gn)n(umeric)g(session)h(with)f (sync)n(hronisation)2178 3927 y(data)g(setting)g(threshold)13 b Fb(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)39 b Fc(15)2025 4015 y(Repla)n(y)25 b(directiv)n(e)17 b Fb(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)43 b Fc(27)2025 4104 y(Repla)n(y)25 b(k)n(eyb)r(oard)g(actions)12 b Fb(:)i(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)39 b Fc(14)2025 4192 y(Repla)n(y)25 b(k)n(eyb)r(oard)g(and)g(mouse)19 b Fb(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)45 b Fc(14)2025 4280 y(repla)n(y)25 b(mouse)h(motions)8 b Fb(:)15 b(:)e(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)35 b Fc(14)2025 4369 y(Repla)n(y)25 b(to)h(another)f(displa)n (y)h(than)f(the)h(default)13 b Fb(:)h(:)f(:)g(:)g(:)40 b Fc(20)2025 4457 y(repla)n(y)25 b(to)h(another)g(displa)n(y)g(the)f(c) n(haracters)i(are)f(not)2178 4544 y(correct)11 b Fb(:)j(:)f(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)37 b Fc(37)2025 4633 y(repla)n(y)25 b(using)h(double)g(sp)r(eed)9 b Fb(:)k(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)36 b Fc(14)2025 4721 y(repla)n(y)25 b(using)h(half)h(sp)r(eed)6 b Fb(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)33 b Fc(14)2025 4810 y(repla)n(ying)17 b Fb(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)45 b Fc(6)2025 4898 y(Rep)r(ort)25 b(bugs?)12 b Fb(:)i(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)39 b Fc(36)2025 4986 y(Rep)r(orting)26 b(pnee)f(bugs)9 b Fb(:)k(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)36 b Fc(22)2025 5075 y(requiremen)n(ts)21 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fc(35)2025 5163 y(ret)n(yp)r(e)14 b Fb(:)e(:)i(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fc(7)2025 5252 y(Ret)n(yp)r(e)24 b(a)i(\014le)7 b Fb(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)34 b Fc(15)2025 5340 y(Ret)n(yp)r(e)24 b(the)i(help)f(prin)n(tout)6 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)33 b Fc(15)p eop end %%Page: 47 50 TeXDict begin 47 49 bop 150 -116 a Fo(Chapter)30 b(11:)41 b(Index)2776 b(47)150 299 y Fc(run)n(time)25 b(requiremen)n(ts)14 b Fb(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)40 b Fc(35)150 548 y Fn(S)150 664 y Fc(Script)25 b(repla)n(y)h(data)20 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)46 b Fc(28)150 751 y(Session)26 b(\014le)c Fb(:)13 b(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)48 b Fc(23)150 839 y(Settings)17 b Fb(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)44 b Fc(24)150 926 y(Shell)26 b(scripts)g(using)g(Xnee)7 b Fb(:)13 b(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)33 b Fc(20)150 1013 y(SIGTERM)12 b Fb(:)h(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)39 b Fc(9,)26 b(10)150 1100 y(Stop)f(Xnee)g(with)h(k)n(ey)9 b Fb(:)j(:)i(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)35 b Fc(17)150 1187 y(Stop)25 b(Xnee)g(with)h(k)n(ey)f(com) n(bination)14 b Fb(:)g(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)41 b Fc(9)150 1274 y(Sync)n(hronisation)21 b Fb(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fc(31)150 1524 y Fn(U)150 1640 y Fc(Using)26 b(a)g(di\013eret)f (screen)i(resolution)10 b Fb(:)k(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)36 b Fc(19)150 1727 y(Using)26 b(a)g(o\013set)g(when)g (repla)n(ying)15 b Fb(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)41 b Fc(19)2025 299 y(Using)26 b(a)g(windo)n(w)g(p)r(osition)h(recall)12 b Fb(:)i(:)f(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)38 b Fc(19)2025 386 y(Using)26 b(h)n(uman)e(readable)j(prin)n(touts)20 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)47 b Fc(19)2025 473 y(Using)26 b(no)f(resolution)i(translation)7 b Fb(:)14 b(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)34 b Fc(20)2025 560 y(Using)26 b(v)n(erb)r(ose)f(mo)r(de)c Fb(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)47 b Fc(19)2025 810 y Fn(W)2025 926 y Fc(What)25 b(do)r(es)h(the)g(name)g(cnee)f(mean?) e Fb(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)49 b Fc(36)2025 1013 y(What)25 b(do)r(es)h(the)g(name)g(gnee)g(mean?)20 b Fb(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)47 b Fc(36)2025 1100 y(what)26 b(n)n(um)n(b)r(ers)f(b)r(elong)h(to)g(X11)g (data?)20 b Fb(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)46 b Fc(36)2025 1187 y(wh)n(y)25 b(name)h(it)f(Xnee)16 b Fb(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)43 b Fc(36)2025 1274 y(wh)n(y)25 b(sync)n(hronise)15 b Fb(:)e(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)41 b Fc(31)2025 1524 y Fn(X)2025 1640 y Fc(Xnee)25 b(In)n(ternals)10 b Fb(:)j(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fc(31)2025 1727 y(Xnee)25 b(Settings)h(Argumen)n(ts)14 b Fb(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)40 b Fc(26)p eop end %%Page: -2 51 TeXDict begin -2 50 bop 3699 -116 a Fo(ii)150 299 y Fl(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fn(1)135 b(Summary)22 b Fk(:)d(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)h(:)66 b Fn(1)275 778 y Fo(1.1)92 b(Summary)23 b Fa(:)13 b(:)j(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)53 b Fo(1)275 888 y(1.2)92 b(Xnee)30 b(features)24 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)54 b Fo(1)275 997 y(1.3)92 b(Bac)m(kground)17 b Fa(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) 47 b Fo(1)150 1240 y Fn(2)135 b(Getting)46 b(started)34 b Fk(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)77 b Fn(3)275 1377 y Fo(2.1)92 b(Getting)32 b(started)8 b Fa(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fo(3)399 1486 y(2.1.1)93 b(Simple)30 b(repla)m(y)e Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)57 b Fo(3)399 1596 y(2.1.2)93 b(Simple)30 b(recording)g(of)h(Key)f(presses)9 b Fa(:)15 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)39 b Fo(3)399 1705 y(2.1.3)93 b(Simple)30 b(repla)m(ying)h(of)g(y)m(our)f(recorded)g (\014le)18 b Fa(:)e(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)48 b Fo(3)399 1815 y(2.1.4)93 b(Simple)30 b(recording)g(of)h(mouse)f(motions)c Fa(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)56 b Fo(3)399 1924 y(2.1.5)93 b(Simple)30 b(repla)m(ying)h(of)g(y)m(our)f(recorded)g(\014le)18 b Fa(:)e(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)48 b Fo(3)399 2034 y(2.1.6)93 b(Simple)30 b(ret)m(yping)h(of)f(a)h(text)g(\014le)10 b Fa(:)16 b(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)40 b Fo(4)399 2144 y(2.1.7)93 b(Example)30 b(Xnee)h(Session)f(\014les)24 b Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)54 b Fo(4)150 2386 y Fn(3)135 b(F)-11 b(unctional)44 b(o)l(v)l(erview)33 b Fk(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)76 b Fn(5)275 2523 y Fo(3.1)92 b(F)-8 b(unctional)31 b(o)m(v)m(erview)18 b Fa(:)g(:)d(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)48 b Fo(5)275 2633 y(3.2)92 b(Mo)s(des)23 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)54 b Fo(5)399 2742 y(3.2.1)93 b(Record)17 b Fa(:)e(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)47 b Fo(6)399 2852 y(3.2.2)93 b(Repla)m(y)19 b Fa(:)d(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 b Fo(6)399 2961 y(3.2.3)93 b(Ret)m(yp)s(e)15 b Fa(:)h(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)46 b Fo(7)399 3071 y(3.2.4)93 b(Distribution)15 b Fa(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)45 b Fo(7)275 3181 y(3.3)92 b(Ranges)11 b Fa(:)k(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)41 b Fo(7)275 3290 y(3.4)92 b(First)30 b(and)g(last)h(motion)g(ev)m(en)m (t)13 b Fa(:)k(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)43 b Fo(8)275 3400 y(3.5)92 b(Dela)m(y)20 b Fa(:)d(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)50 b Fo(8)275 3509 y(3.6)92 b(V)-8 b(erb)s(ose)17 b Fa(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)47 b Fo(8)275 3619 y(3.7)92 b(Human)29 b(prin)m(touts)14 b Fa(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)44 b Fo(8)275 3729 y(3.8)92 b(In)m(v)m(oking)31 b(Xnee)9 b Fa(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)39 b Fo(8)399 3838 y(3.8.1)93 b(Command)29 b(line)i(syn)m(tax)24 b Fa(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)54 b Fo(8)399 3948 y(3.8.2)93 b(Pro)5 b(ject)31 b(\014le)18 b Fa(:)d(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)48 b Fo(9)399 4057 y(3.8.3)93 b(Session)30 b(\014le)22 b Fa(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)52 b Fo(9)275 4167 y(3.9)92 b(In)m(terupting)30 b(Xnee)15 b Fa(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)45 b Fo(9)399 4276 y(3.9.1)93 b(mo)s(di\014er)29 b(and)h(k)m(ey)c Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)55 b Fo(9)399 4386 y(3.9.2)93 b(limit)31 b(the)g(n)m(um)m(b)s(er)e(of)h(data)h(to)g(record)14 b Fa(:)i(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)45 b Fo(9)399 4496 y(3.9.3)93 b(sending)30 b(a)g(SIGTERM)g(signal)13 b Fa(:)j(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)43 b Fo(9)399 4605 y(3.9.4)93 b(Stop)30 b(Xnee)h(with)f(k)m(ey)h(com)m(bination)11 b Fa(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)41 b Fo(9)399 4715 y(3.9.5)93 b(P)m(ause)31 b(Xnee)g(with)f(k)m(ey)h(com)m(bination)d Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)57 b Fo(9)399 4824 y(3.9.6)93 b(P)m(ause)31 b(Xnee)g(with)f(k)m(ey)h(com)m(bination)d Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)57 b Fo(9)399 4934 y(3.9.7)93 b(Insert)30 b(marks)g(Xnee)g(with)h(k)m(ey)g(com)m(bination) 10 b Fa(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)40 b Fo(10)399 5044 y(3.9.8)93 b(Limit)31 b(n)m(um)m(b)s(er)e(of)h(data)h(to)g(record)14 b Fa(:)i(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)43 b Fo(10)399 5153 y(3.9.9)93 b(Limit)31 b(the)f(ev)m(en)m(ts)i(to)f(record)17 b Fa(:)f(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)47 b Fo(10)399 5263 y(3.9.10)93 b(Limit)31 b(the)g(data)g(to)g(record)9 b Fa(:)15 b(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fo(10)p eop end %%Page: -3 52 TeXDict begin -3 51 bop 3674 -116 a Fo(iii)399 83 y(3.9.11)93 b(Limit)31 b(the)g(time)g(to)g(record)9 b Fa(:)15 b(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fo(10)399 193 y(3.9.12)93 b(Send)30 b(SIGTERM)f(to)i(Xnee)17 b Fa(:)f(:)g(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)47 b Fo(10)275 302 y(3.10)92 b(Xnee)31 b(plugins)12 b Fa(:)j(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)42 b Fo(10)150 545 y Fn(4)135 b(Installation)16 b Fk(:)21 b(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)60 b Fn(11)275 682 y Fo(4.1)92 b(Installation)31 b(from)f(source)h(with)f(the)h(con\014gure) f(script)23 b Fa(:)15 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)52 b Fo(11)275 791 y(4.2)92 b(Installation)31 b(from)f(source)h (with)f(default)g(Mak)m(e\014le)8 b Fa(:)18 b(:)d(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)38 b Fo(11)275 901 y(4.3)92 b(Installation)31 b(from)f(CVS)12 b Fa(:)j(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)42 b Fo(12)150 1143 y Fn(5)135 b(Examples)15 b Fk(:)21 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) f(:)h(:)f(:)60 b Fn(13)275 1280 y Fo(5.1)92 b(Recorder)13 b Fa(:)i(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)43 b Fo(13)399 1390 y(5.1.1)93 b(Record)30 b(mouse)h(motions)c Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)56 b Fo(13)399 1499 y(5.1.2)93 b(Record)30 b(k)m(eyb)s(oard)19 b Fa(:)d(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)49 b Fo(13)399 1609 y(5.1.3)93 b(Record)30 b(k)m(eyb)s(oard)h(and)e(mouse)14 b Fa(:)h(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)43 b Fo(13)399 1719 y(5.1.4)93 b(Record)30 b(a)h(gn)m(umeric)g(session)14 b Fa(:)i(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)44 b Fo(13)399 1828 y(5.1.5)93 b(Record)30 b(a)h(gn)m(umeric)g(session)f(with)g(sync)m(hronisation)h (data)9 b Fa(:)16 b(:)f(:)h(:)f(:)h(:)38 b Fo(13)275 1938 y(5.2)92 b(Repla)m(y)m(er)17 b Fa(:)f(:)g(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)47 b Fo(14)399 2047 y(5.2.1)93 b(Repla)m(y)31 b(mouse)f(motions)9 b Fa(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)38 b Fo(14)399 2157 y(5.2.2)93 b(Repla)m(y)31 b(mouse)f(motions)h(using)f(with)g(half)h(sp)s(eed)16 b Fa(:)e(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)45 b Fo(14)399 2266 y(5.2.3)93 b(Repla)m(y)31 b(mouse)f(motions)h(using)f (with)g(double)g(sp)s(eed)19 b Fa(:)c(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)49 b Fo(14)399 2376 y(5.2.4)93 b(Repla)m(y)31 b(k)m(eyb)s(oard)f(actions)9 b Fa(:)17 b(:)e(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Fo(14)399 2486 y(5.2.5)93 b(Repla)m(y)31 b(k)m(eyb)s(oard)f(and)g(mouse)16 b Fa(:)g(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)46 b Fo(14)399 2595 y(5.2.6)93 b(Repla)m(y)31 b(a)g(gn)m(umeric)g(session)17 b Fa(:)e(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)47 b Fo(14)399 2705 y(5.2.7)93 b(Repla)m(y)31 b(a)g(gn)m(umeric)g(session)f(with)g(sync)m (hronisation)h(data)11 b Fa(:)16 b(:)g(:)f(:)h(:)f(:)41 b Fo(15)399 2814 y(5.2.8)93 b(Repla)m(y)31 b(a)g(gn)m(umeric)g(session) f(with)g(sync)m(hronisation)h(data)g(setting)581 2924 y(threshold)17 b Fa(:)e(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)47 b Fo(15)275 3034 y(5.3)92 b(Ret)m(yp)s(er)12 b Fa(:)j(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)42 b Fo(15)399 3143 y(5.3.1)93 b(Ret)m(yp)s(e)31 b(the)f(help)g(prin)m(tout)22 b Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)51 b Fo(15)399 3253 y(5.3.2)93 b(Ret)m(yp)s(e)31 b(a)f(\014le)23 b Fa(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)53 b Fo(15)275 3362 y(5.4)92 b(Distributor)9 b Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)39 b Fo(16)399 3472 y(5.4.1)93 b(Distribute)31 b(y)m(our)f(mouse)g (motions)22 b Fa(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)52 b Fo(16)399 3582 y(5.4.2)93 b(Distribute)31 b(the)f(repla)m(ying)h(of)g (mouse)f(motions)21 b Fa(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)50 b Fo(16)399 3691 y(5.4.3)93 b(Distribute)31 b(the)f(ret)m(yping)h(of)g(a)f(\014le)16 b Fa(:)g(:)g(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)46 b Fo(16)275 3801 y(5.5)92 b(Key)10 b Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)40 b Fo(17)399 3910 y(5.5.1)93 b(Stop)30 b(Xnee)h(with)f(k)m(ey)c Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)55 b Fo(17)399 4020 y(5.5.2)93 b(P)m(ausing)31 b(and)e(resuming)h(Xnee)h (with)f(k)m(ey)20 b Fa(:)c(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 b Fo(17)275 4130 y(5.6)92 b(Using)30 b(macro)22 b Fa(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)52 b Fo(17)399 4239 y(5.6.1)93 b(De\014ne)30 b(a)h(simple)g(macro)15 b Fa(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)45 b Fo(17)399 4349 y(5.6.2)93 b(De\014ne)30 b(another)h(simple)f(macro)f Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)57 b Fo(18)275 4458 y(5.7)92 b(V)-8 b(arious)31 b(options)23 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)53 b Fo(19)399 4568 y(5.7.1)93 b(Using)30 b(v)m(erb)s(ose)h(mo)s(de)18 b Fa(:)d(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)48 b Fo(19)399 4677 y(5.7.2)93 b(Using)30 b(h)m(uman)g(readable)h(prin)m(touts)18 b Fa(:)d(:)g(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)47 b Fo(19)399 4787 y(5.7.3)93 b(Using)30 b(a)h(di\013eret)g (screen)g(resolution)26 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)56 b Fo(19)399 4897 y(5.7.4)93 b(Using)30 b(a)h(o\013set)h(when)d(repla)m (ying)12 b Fa(:)k(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)41 b Fo(19)399 5006 y(5.7.5)93 b(Using)30 b(a)h(windo)m(w)f(p)s(osition)g (recall)g Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)58 b Fo(19)399 5116 y(5.7.6)93 b(Using)30 b(no)h(resolution)g(translation) 23 b Fa(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)52 b Fo(20)399 5225 y(5.7.7)93 b(Record)30 b(another)h(displa)m(y)g(than)f(the)g (default)22 b Fa(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)52 b Fo(20)399 5335 y(5.7.8)93 b(Repla)m(y)31 b(to)g(another)g(displa)m(y)f(than)h(the)f(default)10 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) 40 b Fo(20)p eop end %%Page: -4 53 TeXDict begin -4 52 bop 3677 -116 a Fo(iv)275 83 y(5.8)92 b(Shell)30 b(scripts)g(using)g(Xnee)19 b Fa(:)d(:)g(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)49 b Fo(20)150 325 y Fn(6)135 b(Xnee)45 b(Programs)25 b Fk(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)70 b Fn(22)275 462 y Fo(6.1)92 b(cnee)31 b(-)f(cnee's)h(not)g(an)f(ev)m (en)m(t)i(em)m(ulator)14 b Fa(:)i(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) 43 b Fo(22)275 572 y(6.2)92 b(gnee)31 b(-)f(gnee's)h(not)g(an)f(em)m (ulator)i(either)20 b Fa(:)c(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)49 b Fo(22)275 682 y(6.3)92 b(pnee)30 b(-)g(pnee's)h(not)f(ev)m(en)h(em)m (ulating)23 b Fa(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)52 b Fo(22)399 791 y(6.3.1)93 b(Rep)s(orting)30 b(pnee)g(bugs)25 b Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)55 b Fo(22)150 1034 y Fn(7)135 b(File)45 b(t)l(yp)t(es)g(and)g(format)26 b Fk(:)21 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)71 b Fn(23)275 1171 y Fo(7.1)92 b(Pro)5 b(ject)31 b(\014le)12 b Fa(:)j(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) 42 b Fo(23)399 1280 y(7.1.1)93 b(Create)31 b(a)g(pro)5 b(ject)31 b(\014le)18 b Fa(:)e(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)48 b Fo(23)275 1390 y(7.2)92 b(Xnee)30 b(Session)h(\014le)22 b Fa(:)15 b(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)52 b Fo(23)275 1499 y(7.3)92 b(Xnee)30 b(\014le)h(format)11 b Fa(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)41 b Fo(23)275 1609 y(7.4)92 b(Xnee)30 b(directiv)m(es)10 b Fa(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)39 b Fo(23)399 1719 y(7.4.1)93 b(Commen)m(t)21 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)51 b Fo(24)399 1828 y(7.4.2)93 b(Settings)15 b Fa(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)44 b Fo(24)399 1938 y(7.4.3)93 b(Repla)m(y)17 b Fa(:)f(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)46 b Fo(27)399 2047 y(7.4.4)93 b(Script)30 b(repla)m(y)h(data)17 b Fa(:)f(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)47 b Fo(28)399 2157 y(7.4.5)93 b(Mark)28 b Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)57 b Fo(29)399 2266 y(7.4.6)93 b(Exec)18 b Fa(:)e(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)48 b Fo(29)399 2376 y(7.4.7)93 b(Pro)5 b(ject)31 b(information)24 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)54 b Fo(29)150 2619 y Fn(8)135 b(Xnee)45 b(In)l(ternals)22 b Fk(:)e(:)g(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)67 b Fn(31)275 2755 y Fo(8.1)92 b(Sync)m(hronisation)16 b Fa(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)g(:)46 b Fo(31)399 2865 y(8.1.1)93 b(Wh)m(y)31 b(sync)m(hronise)18 b Fa(:)d(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)48 b Fo(31)399 2975 y(8.1.2)93 b(Ho)m(w)31 b(to)g(sync)m(hronise)9 b Fa(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)39 b Fo(32)399 3084 y(8.1.3)93 b(Sync)m (hronisation)30 b(is)h(needed)24 b Fa(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)54 b Fo(32)399 3194 y(8.1.4)93 b(Di\013eren)m(t)32 b(data)f(for)f(di\013eren)m(t)h(kind)e(of)i (sessions)13 b Fa(:)i(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)42 b Fo(33)399 3303 y(8.1.5)93 b(Slo)m(w)30 b(repla)m(y)h(session)g(due)f(to)h(to)s(o)g(man)m(y)f(sync)m(hronise)g (data)13 b Fa(:)k(:)e(:)h(:)f(:)43 b Fo(33)399 3413 y(8.1.6)93 b(X)30 b(proto)s(col)i(is)e(ric)m(h)h(and)e(async)m(hronous)22 b Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)52 b Fo(33)399 3523 y(8.1.7)93 b(Di\013eren)m(t)32 b(data)f(sen)m(t)24 b Fa(:)16 b(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)53 b Fo(33)399 3632 y(8.1.8)93 b(Bu\013ers)30 b(and)g(timeouts)21 b Fa(:)16 b(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)51 b Fo(33)150 3875 y Fn(9)135 b(Xnee)45 b(Requiremen)l(ts)36 b Fk(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)79 b Fn(35)275 4012 y Fo(9.1)92 b(Run)m(time)30 b(requiremen)m(ts)12 b Fa(:)j(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)41 b Fo(35)275 4121 y(9.2)92 b(Dev)m(elopmen)m(t)32 b(requiremen)m(ts)26 b Fa(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) 55 b Fo(35)150 4364 y Fn(10)135 b(F)-15 b(A)l(Q)24 b Fk(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)69 b Fn(36)150 4633 y(App)t(endix)44 b(A)160 b(Cop)l(ying)45 b(This)g(Man)l(ual)28 b Fk(:)19 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)72 b Fn(40)275 4770 y Fo(A.1)91 b(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)21 b Fa(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)51 b Fo(40)150 5013 y Fn(11)135 b(Index)19 b Fk(:)g(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)63 b Fn(46)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF xnee-3.19/doc/xnee.dox0000775000000000000000000011674710134430005011527 00000000000000# Doxyfile 1.2.18 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = Xnee # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, # Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en # (Japanese with english messages), Korean, Norwegian, Polish, Portuguese, # Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian. OUTPUT_LANGUAGE = English # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these class will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited # members of a class in the documentation of that class as if those members were # ordinary class members. Constructors, destructors and assignment operators of # the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. STRIP_FROM_PATH = # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower case letters. If set to YES upper case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are adviced to set this option to NO. CASE_SENSE_NAMES = YES # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explict @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # reimplements. INHERIT_DOCS = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consist of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. # For instance some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ../libxnee/include/libxnee/ # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp # *.h++ *.idl *.odl FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories # that are symbolic links (a Unix filesystem feature) are excluded from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output dir. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non empty doxygen will try to run # the html help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the Html help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, # or Internet explorer 4.0+). Note that for large projects the tree generation # can take a very long time. In such cases it is better to disable this feature. # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimised for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = YES # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assigments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = YES # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .1 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_XML = NO # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse the # parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. Note that this # option is superceded by the HAVE_DOT option below. This is only a fallback. It is # recommended to install and use dot, since it yield more powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermedate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. BIN_ABSPATH = /usr/local/bin/ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. EXT_DOC_PATHS = xnee-3.19/doc/xnee.info0000664000000000000000000030705212332167177011677 00000000000000This is xnee.info, produced by makeinfo version 5.2 from xnee.texi. INFO-DIR-SECTION Miscellaneous START-INFO-DIR-ENTRY * : (Xnee). Xnee's Not Event Emulator. END-INFO-DIR-ENTRY  File: xnee.info, Node: Top, Next: Summary, Prev: (dir), Up: (dir) Xnee Manual *********** * Menu: * Summary:: Summary. * Getting started:: Getting started * Functional overview:: Functional overview * Installation:: Installation * Examples:: examples * File format:: File format * Programs:: Programs * Internals:: Internals * Requirements:: Requirements * FAQ:: FAQ * Copying This Manual:: Copying This Manual * Index:: Index  File: xnee.info, Node: Summary, Next: Getting started, Prev: Top, Up: Top 1 Summary ********* 1.1 Summary =========== Xnee is a suite of programs that can record, replay and distribute user actions under the X11 environment. Think of it as a robot that can imitate the job you just did. Xnee consists of one library and two applications cnee - command line program gnee - graphical user interface program pnee - a Gnome Panel Applet libxnee - library used by xnee and gnee 1.2 Xnee features ================= Xnee can be used for multiple purposes, although it was initially designed as a test tool. The most used features are the foloowing: Test tool - Instead of performing test cases for a GUI (or CLI program) over and over again, the test cases can be automated. Simply record a user session and replay it later. Performance test tool - If you want to simulate lots of simultaneous users in a network (or a local machine) you can use Xnee. Simply record a user session and start multiple instances of Xnee. Demonstration tool - You can use Xnee to demonstrate the features of your program. Simply record a user session and replay it later. Distribution tool - If you want to send over your mouse/keyboard actions to another display you can use the built-in distribution mechanism in Xnee. Macro recorder/replayer - By binding a key and modifier combination (e.g using xrebind) to replay a recorded session you will have a Window Manager and application independent macro. File retyper - Xnee can retype the contents of a file. This can be useful during tests or if you want xnee to answer some command session without having to record the session. X11 protocol sniffer - Xnee can be used as a sniffer for the X11 protocol. 1.3 Background ============== In order to verify that a program does the job it's supposed to do, certain tests have to be made. These tests are, IMHO, perhaps the most boring things a programmer can do. Xnee is designed to reduce the programmer from this burden. Xnee started out as a commad line program. During the development phase the main functionality was broken out to a library, called libxnee. The command line program was renamed cnee. The thought behind making the library was to enable the writing of other clients than just the command line. Today there is a GUI program, gnee, and a Gnome panel applet, pnee, that uses the library. By using xnee your testcase(s) can be recorded and later on replayed. Xnee comes with other features For more information about these, read the Introduction. This manual mainly focuses on the command line program, cnee. There are however a seperate chapters for the other programs.  File: xnee.info, Node: Getting started, Next: Functional overview, Prev: Summary, Up: Top 2 Getting started ***************** 2.1 Getting started =================== To get the first feel of Xnee some simple examples are presented. 2.1.1 Simple replay ------------------- Start a terminal emulator (e.g xterm) and then start Xnee, cnee --replay --file example1.xnr & ....dont forget '&'. The file example1.xnr contains keyboard events recorded during development of this manual. When replayed you'll see what was typed and of course more important you'll get i first glimpse of Xnee and its capabilities. For information on where to find the example files, see below. 2.1.2 Simple recording of Key presses ------------------------------------- We move on to a (very) simple recording session. Start a terminal emulator (e.g xterm) and your favorite editor. Move the pointer to one of the terminal windows and start Xnee. cnee --record -o example2.xnr --device-event-range 2-3 \ --time 5 --events-to-record 20 Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you can type whatever you want to record (20 press- and relase events of the keyboard are recorded). We are done and you have recorded your first session! Leave the desktop as it is and go forward to the next example. 2.1.3 Simple replaying of your recorded file -------------------------------------------- Start one terminal emulator (e.g xterm). Let Xnee repeat the stuff you did in the example above. Undo all changes in the editor that was made in the previous example. Move the pointer to one of the terminal windows and start Xnee. cnee --replay -f example2.xnr --time 5 Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you will see your typings in the example above being repeated. 2.1.4 Simple recording of mouse motions --------------------------------------- We move on to another simple recording session. Start a terminal emulator (e.g xterm). Move the pointer to the terminal window and start Xnee. cnee --record -o example3.xnr --device-event-range 5-6 \ --time 5 --events-to-record 20 After 5 seconds you can move the pointer around (20 motion events are recorded). 2.1.5 Simple replaying of your recorded file -------------------------------------------- Let Xnee repeat the stuff you did in the example above.. Move the pointer to the terminal window and start Xnee. cnee --replay -f example3.xnr --time 5 After 5 seconds you will see your mouse motions in the example above being repplayed. 2.1.6 Simple retyping of a text file ------------------------------------ Let Xnee retype (type again) the text in a text file. Move the pointer to the terminal window and create a text file containing the command 'ls -l'. echo "ls -l" > ./mytext.txt And after that you start Xnee. cnee --retype-file ./mytext.txt --time 5 After 5 seconds you will see Xnee type 'ls -l', which probably will list the files in the current directory. 2.1.7 Example Xnee Session files -------------------------------- The example file above (example1.xnr) is a session file that has been delivered with the sources (allthough not installed), rpm and with the Xnee Documentation Package. The file(s) can be found: Distribution Location RPM /usr/lib/xnee/session Source ./sessions/ Document Package ./sessions/  File: xnee.info, Node: Functional overview, Next: Installation, Prev: Getting started, Up: Top 3 Functional overview ********************* 3.1 Functional overview ======================= The Xnee applications (gnee and xnee) receives X11 protocol data (e.g. events) from an X server (using libxnee) and print them to a file, called Xnee Session File. Theses events are later read from the session file and replayed. Gnee and xnee can read its settings from a file, called Xnee Project File, or from command line (cnee) or via the GUI (gnee). Events directly generated by the user (e.g KeyPress) can be replayed or faked. Requests, replies, errors and events not directly generated by the user (e.g MapNotify) can be recorded as well. By using these data Xnee can replay with synchronisation. In this section you will be given information about key concepts in X11 and Xnee. It is vital that you read through this chapter. 3.2 Modes ========= Xnee has four modes: * record * replay * retype * distribute The distribution mechanism can be used together with the other three. 3.2.1 Record ------------ When record mode is used Xnee receives a copy of the data sent to and from the X server. The copy is printed to a file. Xnee can record the whole X11 protocol, not just mouse and keyboard events. 3.2.2 Replay ------------ When replay mode is used Xnee reads data from a file or stdin. These data is either sent to the server (if it is a keyboard or a mouse event) or used to synchronise with (if any of the other data). 3.2.3 Retype ------------ Xnee can retype the contents of a text file. This is useful when combining replaying of different recorded session. You can change the text written in for example an editor (e.g emacs) without having to re-record the complete sessions. 3.2.4 Distribution ------------------ Xnee can fake mouse and keyboard events on multiple displays. This distribution mechanism can be used when recording, replaying or retyping. 3.3 Ranges ========== What data to record is specified using ranges. Ranges has a start value and a stop value. The following data can be recorded: Xnee name X Protocol Name core-requests Request device-event Event delivered-event Event error Error reply Reply ext-requests.ext-major Extension Request ext-requests.ext-minor Extension Request ext-replies.ext-major Extension Reply ext-replies.ext-minor Extension Reply When specifying the ranges when using xnee you can either type the integer value of the data or the name of the data. To find out what number belongs to what data name, you can use the '--print-data-name' option. For an explanation of the X protocol data, please read the "X Record Extension Library" or the "Record Extension Protocol Specification". 3.4 First and last motion event =============================== Xnee has the ability to skip recording of succesive motion events with no other data in between. This option is intended to reduce the number of data recorded by leaving out unnecessary data. This feature can be invoked with the '--first-last' flag. 3.5 Delay ========= Sometimes when Xnee starts recording data, the keyrelease (caused by pressing and releasing RETURN to execute the Xnee command line) is recorded. This single keyrelease (with no corresponding keypress) might confuse the X server. With the '--time ' option Xnee can be paused for a number of seconds before recording/replaying/retyping starts. 3.6 Verbose =========== When enabling verbose mode ('--verbose') Xnee prints a lot of information about it's state. This option is only intended for runtime debugging. 3.7 Human printouts =================== Sometimes it's hard to decide what data to use when synchronising. To do this you have to analyse what data is sent from the server when recording. Instead of reading the data number, s tring representation of the data is printed out. To enable this option, use the '--human-printouts'. 3.8 Invoking Xnee ================= 3.8.1 Command line syntax ------------------------- To get information about how to use Xnee's command line options please use the man page(s). 3.8.2 Project file ------------------ To use a Project file use the '--project' option, e.g 'cnee --project xnee/projects/netscape.xns'. 3.8.3 Session file ------------------ To use a session file use the '--file' option, e.g 'cnee --file user1_session.xns' 3.9 Interupting Xnee ==================== Interupting Xnee when recording or replaying can be done as follows * user specified modifier and key * limit the number of data to record * sending a SIGTERM signal (e.g pressing Control-c in a terminal window) The prefered way to interrupt xnee is to use the modifier+key. 3.9.1 modifier and key ---------------------- It is possible to specify a modifier (e.g Control button) and a key (e.g 'a') that will stop the Xnee session. When using this option make sure that the modifier/key is not used in any way by the applications you are recording. You can specify a key+modifier to stop, pause and resume xnee. You can also insert a mark in the recorded session file. 3.9.2 limit the number of data to record ---------------------------------------- By specifying the number of data to record ('--loops') xnee stops when this number of data is received from the server. When replaying the same amount of data is replayed. 3.9.3 sending a SIGTERM signal ------------------------------ The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm) and then press Control-c which will send the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you'll end up lossing that battle). When using Control-c to stop Xnee you must be aware of that the pressing of the Control key gets recorded. When replaying a recorded session ending with pressing of Control your apps may think you are pressing the Control key. A simple solution for this is to press and release the Control. 3.9.4 Stop Xnee with key combination ------------------------------------ Xnee stops its current action when the user presses the key combination as specified during setup. Xnee will be shut gracefully. 3.9.5 Pause Xnee with key combination ------------------------------------- Xnee pause its current action when the user presses the key combination as specified during setup. Xnee will be in paused mode until the user stops or resumes Xnee. 3.9.6 Pause Xnee with key combination ------------------------------------- Xnee resumes its current paused action when the user presses the key combination as specified during setup. Xnee will continue where it was paused. 3.9.7 Insert marks Xnee with key combination -------------------------------------------- When the user presses the key combination as specified during setup Xnee will print a mark in the session file containing a time stamp. This feature is intended be used when you want to mark an interresting time/event during recording. After recording has finished you can add Xnee scripting calls to Xnee which will be interpreted and executed as if they were recorded. 3.9.8 Limit number of data to record ------------------------------------ There a a few ways to limit the number of data Xnee records. * limit the events to recored * limit the data to recored * limit the time to recored * send a signal to xnee (SIGTERM) * use a selfmade record callback function 3.9.9 Limit the events to record -------------------------------- When having received the specified amount of events from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. 3.9.10 Limit the data to record ------------------------------- When having received the specified amount of data from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. 3.9.11 Limit the time to record ------------------------------- When having recorded for the specified amount of time from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. 3.9.12 Send SIGTERM to Xnee --------------------------- The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm). By pressing Control-c xterm sends the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you'll end up lossing that battle). 3.10 Xnee plugins ================= Xnee supports plugins since version 1.07. For information about how to write plugins, download the source code and look at the plugin example which is delivered with Xnee.  File: xnee.info, Node: Installation, Next: Examples, Prev: Functional overview, Up: Top 4 Installation ************** 4.1 Installation from source with the configure script ====================================================== To build and install Xnee do the following: Download the following source files into a directory (version numbers given here are just examples) * xnee-3.02.tar.gz Unzip the source file gunzip xnee-3.02.tar.gz Untar the source file tar xvf xnee-3.02.tar Enter the Xnee directory cd xnee-3.02 Generate the makefiles ./configure or if you want to specify which directory to install xnee to ./configure --prefix= Build Xnee make clean all Install (as root) if you want libxnee to be installed. If not, skip the following command. Installation of libxnee is not needed to build cnee and gnee. make install 4.2 Installation from source with default Makefile ================================================== To unpack, build and install Xnee from the sourcefiles do the following: Download the source files into a directory Unzip the source file gunzip xnee-3.02.tar.gz Untar the source file tar xvf xnee-3.02.tar Enter the Xnee directory cd xnee-3.02 Build Xnee make -f Makefile.xnee clean all Copy the Xnee binary (xnee/src/xnee) to a directory cp xnee/src/xnee /usr/local/bin 4.3 Installation from CVS ========================= Download the xnee source code from the CVS repository at . Instructions on how to do this can be found there as well. Build Xnee cd xnee make -f Makefile.cvs ./configure --enable-doc make make install (optional) Build Xnee Documentation cd doc make manual make install (as root) cd ..  File: xnee.info, Node: Examples, Next: Programs, Prev: Installation, Up: Top 5 Examples ********** 5.1 Recorder ============ 5.1.1 Record mouse motions -------------------------- Record mouse motions only and save the session to mouse-rec.xnl. cnee --record --mouse --out-file mouse-rec.xnl After having typed this you can move your mouse round for a while. After Xnee has exited you will be able to replay your motions. Xnee will stop after having record 100 events (this is the default behaviour). 5.1.2 Record keyboard --------------------- Record keyboard events only and save log to kbd-rec.xnl. cnee --record --keyboard --out-file kbd-rec.xnl After having typed this Xnee records all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions. Xnee will stop after having record 100 events (this is the default behaviour). 5.1.3 Record keyboard and mouse ------------------------------- Record keyboard and mouse and save log to km-rec.xnl. cnee --record --keyboard --mouse --out-file kbd-rec.xnl After having typed this Xnee records all your keyboard and mouse actions. So now move your pointer and write some stuff with your keyboard. After Xnee has exited you will be able to replay your keyboard and mouse actions. Xnee will stop after having record 100 events (this is the default behaviour). 5.1.4 Record a gnumeric session ------------------------------- Record a gnumeric session. Record 400 events. Save output in file gnumeric.xnl Start a terminal emulator (e.g xterm) xterm& Start Xnee cnee --record --keyboard --mouse --events-to-record 400 \ --out-file gnumeric.xnl& Start gnumeric gnumeric& Start using gnumeric. Browse the menus above, reset the fonts etc. 5.1.5 Record a gnumeric session with synchronisation data --------------------------------------------------------- Record a gnumeric session. Record 400 events. Save output in file gnumeric2.xnl Start a terminal emulator (e.g xterm) 'xterm&' Start Xnee cnee --record --keyboard --mouse --events-to-record 400 \ --out-file gnumeric2.xnl\ --delivered-event-range Expose,MapRequest,LeaveNotify,EnterNotify & Start gnumeric 'gnumeric&' Start using gnumeric. Browse the menus above, reset the fonts etc. 5.2 Replayer ============ 5.2.1 Replay mouse motions -------------------------- Replay mouse motions as found in the file mouse-rec.xnl. cnee --replay --file mouse-rec.xnl Xnee will now imitate exactly what you did when you recorded this file. 5.2.2 Replay mouse motions using with half speed ------------------------------------------------ Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 50% of the recorded. cnee --replay --file mouse-rec.xnl --speed-percent 50 Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done in 50% of the recorded time. 5.2.3 Replay mouse motions using with double speed -------------------------------------------------- Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 200% of the recorded. cnee --replay --file mouse-rec.xnl --speed-percent 200 Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done twice as fast as when recorded. 5.2.4 Replay keyboard actions ----------------------------- Replay keyboard events from file kbd-rec.xnl. cnee --replay --file kbd-rec.xnl After having typed this Xnee replays all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions. 5.2.5 Replay keyboard and mouse ------------------------------- Replay keyboard and mouse from the file km-rec.xnl. cnee --replay --keyboard --mouse --file kbd-rec.xnl After having typed this Xnee replays all your keyboard and mouse actions. Xnee moves your pointer and writes the the same stuff as you did when recording. 5.2.6 Replay a gnumeric session ------------------------------- Replay the gnumeric session above Start a terminal emulator (e.g xterm) 'xterm&' Start a new fresh gnumeric spreadsheet 'gnumeric&' Start Xnee cnee --replay --file gnumeric.xnl Xnee will now do the same stuff you did when recording. It may happen that some user actions are replayed to early. This is so because Xnee has no way of knowing if it is in sync with the recorded session. 5.2.7 Replay a gnumeric session with synchronisation data --------------------------------------------------------- Replay the second gnumeric session above. Start a terminal emulator (e.g xterm) 'xterm&' Start a new fresh gnumeric spreadsheet 'gnumeric&' Start Xnee cnee --replay --file gnumeric2.xnl Xnee will now do the same stuff you did when recording. It may happen that the replaying slows down. This is because Xnee is currently out of sync. When being out of sync Xnee slows down a bit and checks the thresholds if it is allowed to continue. Xnee will most probably find itself in sync after a short while. All recorded user actions should have occured the same way as when recording. 5.2.8 Replay a gnumeric session with synchronisation data setting threshold --------------------------------------------------------------------------- Replay the second gnumeric session above. Start a terminal emulator (e.g xterm) 'xterm&' Start a new fresh gnumeric spreadsheet 'gnumeric&' 5.3 Retyper =========== 5.3.1 Retype the help printout ------------------------------ If you want Xnee to fake a user typing the help printout from xnee you can use the '--type-help' option. Start a terminal emulator (e.g xterm) and an editor (e.g emacs). xterm & emacs & Retype the help printout by starting xnee with a 10 seconds delay delay. cnee --time 10 --type-help Move your mouse to the editor and make the editor have focus. Wait a few seconds and xnee will type the help. You will now also have a copy of help text. 5.3.2 Retype a file ------------------- If you want Xnee to fake a user typing the letters as found in a text file you can use the retype mode. Note that it isn't possible to retype all characters yet. This will be implemented as soon as possible. We'll give an example on how to use this mode. Start a terminal emulator (e.g xterm) xterm & Create a text file echo "Hi Xnee" > testfile.txt Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay. cnee --time 10 --retype-file testfile.txt Start the fabulous editor 'cat' cat > copiedfile.txt Wait a few seconds and xnee will retype the letters in the file 'testfile.txt'. You will now also have a copy of that file. The copy is called copiedfile.txt. This is a realy a stupid way to copy a file but this option opens up a few possibilities. 5.4 Distributor =============== With the distribution mode Xnee can send your device events to multiple displays. 5.4.1 Distribute your mouse motions ----------------------------------- You can distribute your mouse motions to the displays frodo:0.0 and sam:0.0 Start a terminal emulator (e.g xterm) xterm & Start xnee cnee --distribute frodo:0,sam:0.0 --record --mouse If you have setup authority correct on frodo and sam you will see all you mouse motions being done on those displays as well. 5.4.2 Distribute the replaying of mouse motions ----------------------------------------------- Replay and distribute mouse motions as found in the file 'mouse-rec.xnl'. cnee --replay --file mouse-rec.xnl --distribute frodo:0,sam:0.0 Xnee will now imitate exactly what you did when you recorded this file on your host as well on frodo and sam. 5.4.3 Distribute the retyping of a file --------------------------------------- If you want Xnee to to distribute the fakeing of a user typing the letters as found in a text file you can use the retype mode together with the distribution mode. Start a terminal emulator (e.g xterm) on each of the hosts xterm & Create a text file. echo "Hi again Xnee" > distfile.txt Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay. cnee --time 10 --retype-file distfile.txt --distribute frodo:0,sam:0.0 Start the fabulous editor 'cat' on the terminal emulators on each the terminals. cat > copiedfile.txt If you have setup authority correct on frodo and sam you will, after a few seconds, see xnee retype the letters in the file 'distfile.txt'. You will now also have three copies of that file. On copy on each host. The copy is called copiedfile.txt. This might seem like a stupid way to copy a file to three locations but this is just an example. 5.5 Key ======= 5.5.1 Stop Xnee with key ------------------------ You can stop xnee by specifying a key. Make sure that this key isn't grabbed by another X client (e.g by the Window Manager). Let's say that you want Xnee to stop recording if you press Control and h. cnee --record --mouse --events-to-record -1 --stop-key h This will make xnee record mouse events until you press h. All printouts are done to stdout so you can see that Xnee stops when you press the key. Move your mouse for a while and you'll see xnee print out lots of lines. Press h. Xnee will now have stopped recording. 5.5.2 Pausing and resuming Xnee with key ---------------------------------------- You can pause and resum xnee by specifying a key. Make sure that this key isn't grabbed by another X client (e.g by the Window Manager). Let's say that you want Xnee to pause recording if you press p and to resume when pressing Comntrol and r. cnee --record --mouse --events-to-record -1 --pause-key p \ --resume-key r This will make xnee record mouse events until you press p. All printouts are done to stdout so you can see that Xnee stops when you press the key. Move your mouse for a while and you'll see xnee print out lots of lines. Press p. Xnee will now have paused recording. Move your mouse for a while and note that nothing is printed. Press r. Xnee will now have resumed recording. Move your mouse for a while and note that xnee begins its printouts. 5.6 Using macro =============== Macors can be used in various applications allthough many applicaions have a macro functionality built in (e.g emacs). 5.6.1 Define a simple macro --------------------------- There are plenty of tools that bind a key combination to different actions. For various reasons the author of this manual is familliar with xrebind so we will use xrebind in this example. The first thing to do is to decide which key combination to tie to the wanted action. Let's say we want to use one of the funtion keys, F1. We then have to find out which keycode belongs to that key. The action we will bind to this key combination will be the replaying of a recorded session from the previous examples. We use Xnee to find the keycode for F1. Start xnee. cnee --record --keyboard --events-to-record 20 Press the F1 key and see what number was printed out. It will look something like this: 0,2,0,0,0,67,0,90300078 0,3,0,0,0,67,0,90300156 The interesting part here is the 6th column. In our example we find 67, which is the keycode for F1. Now we move on to setup xrebind to grab F1 and bind that to replay the mouse motions from the file 'mouse-rec.xnl'. Open or create a new file in your home directory called '.xrbrc' and add the lines. XrebindGrab { Action = Execute GrabKeycode = 67 Modifier = AnyModifier Command = xnee --replay --file mouse-rec.xnl Comment = Starting xnee replay AutoRepeat = false Fork = true } Let's try it. Start xrebind with verbose printouts. xrebind --verbose Press F1 and the recorded session from the previous example shall be replayed. You can also see in the verbose printouts that xrebind executes xnee. 5.6.2 Define another simple macro --------------------------------- Let's say we want to bind Control and e to execute the session as in the example above. This time setting up xrebind is a bit easier. Setup xrebind to grab F1 and bind that to replay the mouse motions from the file 'mouse-rec.xnl' by opening or create a new file in your home directory called '.xrbrc' and add the lines. XrebindGrab { Action = Execute GrabKey = e Modifier = Control Command = xnee --replay --file mouse-rec.xnl Comment = Starting xnee replay AutoRepeat = false Fork = true } e, Control, Exec, xnee, --replay --file mouse-rec.xnl, \ Fork, NoAutoRepeat Let's try it. Start xrebind with verbose printouts. xrebind --verbose Press Control and e and the recorded session from the previous example shall be replayed. 5.7 Various options =================== 5.7.1 Using verbose mode ------------------------ To enable verbose mode, start xnee like this cnee --verbose --record --mouse Move the mouse for a while and you'll lots of verbose printouts that usualy isn't there. 5.7.2 Using human readable printouts ------------------------------------ To enable human printout mode, start xnee like this cnee --human-printout --record --mouse Move the mouse for a while and you'll see the data printed out in an almost human friendly format. 5.7.3 Using a differet screen resolution ---------------------------------------- If a session was recorded on a screen with another resolution than on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee to use a specific resolution when replaying. To do this, start xnee like this cnee --replay --file mouse-rec.xnl \ --replay-resolution 800x600 Xnee will now replay the events recorded in the sessions file 'mouse-rec.xnl' as if the screen has a resolution of 800x600. 5.7.4 Using a offset when replaying ----------------------------------- If a session was recording a centered window with a window manager and is to bo replayed without a window manager (still centered) you can use the offset switch to make Xnee replay the events in order to get the coordinates right. cnee --replay --file mouse-rec.xnl \ --replay-offset 12,-7 Xnee will now replay the events recorded in the sessions file 'mouse-rec.xnl' and adding 12 to the x coordinate and subtract 7 from the y coordinate. 5.7.5 Using a window position recall ------------------------------------ For some reason a replayed window may pop up at a different position as when recorded. Xnee can try to solve this by adding the 'recall-window-position' option during replay. cnee --replay --file mouse-rec.xnl \ --recall-window-position If a window pops up at a different position when replaying (as whe recorded) Xnee moves the new window to the same position as when recorded. 5.7.6 Using no resolution translation ------------------------------------- If a session was recorded on a screen with another resolution than the on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee not to use translation. To do this, start xnee like this cnee --replay --file mouse-rec.xnl \ --no-resolution-adjustment Xnee will now replay the events recorded in the sessions file 'mouse-rec.xnl' as if the screen had the same resolution the recorded one. 5.7.7 Record another display than the default --------------------------------------------- If you want to record another display than the default, as set in the DISPLAY variable, you use the '--display' option. cnee --record --mouse --display frodo:0.0 Xnee will now record the mouse events on the display frodo:0.0. 5.7.8 Replay to another display than the default ------------------------------------------------ If you want to replay to another display than the default, as set in the DISPLAY variable, you use the '--display' option. cnee --replay --display frodo:0.0 --file mouse-rec.xnl Xnee will now replay the mouse events on the display frodo:0.0. 5.8 Shell scripts using Xnee ============================ Insted of onvoking Xnee for every time you need to fake events you can make use of the shell functions as delivered with Xnee. With these functions you can start one instance of Xnee and fake device events whenever you need. #!/bin/bash # Source in handy functions . /usr/share/xnee/xnee.sh # Loop and press buttons TMP=0 while [ $TMP -le 5] do TMP=$(($TMP+1)) xnee_fake_button $TMP done # Just a simple example ....don't bother to understand tar cvf /tmp/crap.tar * sleep 2 # Fake ls and Enter xnee_fake_key l xnee_fake_key s xnee_fake_key XK_Return This example will fake press and release of the mouse button and do fake press and release of ls followed by a press and release of Enter.... and of course, you'll get a tar file in /tmp. Make sure that the path to the 'xnee.sh' is correct.  File: xnee.info, Node: Programs, Next: File format, Prev: Examples, Up: Top 6 Xnee Programs *************** GNU Xnee consists of three different programs, cnee, gnee and pnee. 6.1 cnee - cnee's not an event emulator ======================================= This is the Xnee command line program. This programs contains most features and is the basis for this documentation. For a user not used to X11 it is probably a good idea to start with gnee or pnee instead or start using cnee in demonstration mode: 'cnee --demo' 6.2 gnee - gnee's not an emulator either ======================================== This is a GUI (using GTK2/Gnome) with most of the features of cnee. The GUI has been designed for ease of use. Currently there are no plans for making a separate manual for gnee. 6.3 pnee - pnee's not even emulating ==================================== This is a Gnome panel applet with a minimal set of features. Ease of use is the motto for this program. It is intended for users not being experts on X11 but still wants to record and replay a session for what ever purpose. By default pnee have settings that need not be changed for most cases. You can, however, launch the preferences dialog and set your preferred values as in most other applets. If you find pnee a bit limited we suggest you switch over to using cnee. Note: If pnee hangs you can press the stop button twice to make a reset. Hopefully this will solve the problem. 6.3.1 Reporting pnee bugs ------------------------- By default pnee writes error, verbose printouts and warnings to stderr which will not be visible to you as a user, since pnee will be started automatically along with the other applets. If you start up the preferences dialog you can choose a file for pnee printouts. After that you should turn on verbose logging (also in the preferences dialog) and then reproduce the bug and send over the file to .  File: xnee.info, Node: File format, Next: Internals, Prev: Programs, Up: Top 7 File types and format *********************** The files used by Xnee are * Xnee Project File * Xnee Session File These files must follow the Xnee File Format. 7.1 Project file ================ Xnee can be set either using command line options (when using xnee) or by clicking the correct buttons etc in the GUI (using gnee). Instead of setting the same settings over and over again, you can use the Xnee Project File. 7.1.1 Create a project file --------------------------- You can create a project by yourself. This can be done using the 'write-settings' option in cnee or the "save settings to file" when using gnee or you can use the Xnee GUI (gnee) to write one. You can also write one by yourself in your favorite editor. Just make sure you follow the Xnee format. For information and specification on this format read the Xnee format chapter. The authors of Xnee suggests you start off with a generated project file. To get one such file, type the following 'cnee --mouse --keyboard --write-settings new_proj.xnp'. You will now have a file 'new_proj.xnp' with some useful values, which you can edit as you wish. To use this file to record, simply type 'cnee --record --project new_proj.xnp' 7.2 Xnee Session file ===================== The Xnee session files are the printouts from a recorded session following the Xnee File Format. For information and specification on this format read the Xnee File Format chapter. 7.3 Xnee file format ==================== The Xnee Format is divided into different directives. The format is line based, meaning that * there is one directive per line * one line contains one (and only one) directive These directives are definied as follows. 7.4 Xnee directives =================== The following directives are used in Xnee: Directives Description Comment This is used to comment the various files Project These contains information about the session- or project file Settings Data used when recording and replaying Replay data Recorded replayable data (used when replaying) Script replay data Scriptable primitives Mark Lines inserted in the seesion file when a modifier+key was pressed Execution Lines that trigger the execution of an external program Project information Project 7.4.1 Comment ------------- First token Interpretation # The whole line is ignored. As long as the first token is '#' the whole line is intrepreted as a comment, just as in bash. 7.4.2 Settings -------------- Settings directive Argument Interpretation data-to-record integer Limits the number of data to record to to the integer value events-to-record integer Limits the number of events to record to to the integer value time-to-record integer Limits the number of seconds to record to to the integer value display string Sets the display to record or replay to the string distribute string Distribute all recorded or replayed replayable events to the display given by the string file string Read replay data from the file given by the string out-file string Print recorded data to the file given by the string plugin string Use the plugin given by the string first-last boolean Print only first and last of successive MotionNotify events verbose boolean Use verbose debugging printout buffer-verbose boolean Use verbose buffer verbose printouts (not built by default) time integer Delay the start of the Xnee action all-clients boolean Record all curret and future clients (default) future-clients boolean Record only future clients human-printout boolean Prints the recorded data in a (quite) more ser friendly format sync-mode boolean Sets recording mode speed-percent integer Sets the replaying speed percentage to the integer value stop-key string Sets the stop key combination to the string pause-key string Sets the pause key combination to the string resume-key string Sets the resume key combination to the string mark-key string Sets the mark key combination to the string exec-key string Sets the execute key combination to string replay-resolution string Sets the replay resolution to the string replay-resolution string Sets the replay resolution to the string recall-window-position Use window position recall during replay resolution-adjustment boolean Use resolution adjustment, even if the recored resolution differs from the one to replay to event-range range Sets the events to record error-range range Sets the errors to record to range* request-range range Sets the request to record to range* reply-range range Sets the replies to record to range* extension-request-major-range range Sets the extension requests (major) to record to range* extension-request-minor-range range Sets the extension requests (minor) to record to range* extension-reply-major-range range Sets the extension replies (major) to record to range* extension-reply-minor-range range Sets the extension replies (minor) to record to range* force-replay boolean Continue to replay even if Xnee is out of sync max-threshold integer Sets the maximum synchronisation threshold min-threshold integer Sets the minimum synchronisation threshold total-threshold integer Sets the total maximum synchronisation threshold events-to-record integer Sets the number of events to record data-to-record integer Sets the number of data to record time-to-record integer Sets the number of seconds to record store-mouse-position If set, Xnee records the initial mouse position and makes sure that replaying starts from there retype-press-delay integer Xnee delays processing after a faked key press (during retype) with integer milli seconds retype-release-delay integer Xnee delays processing after a faked key press (during retype) with integer milli seconds Settings argument Description Example 'integer' is an integer value. 1 'string' is a string. localhost 'boolean' is a boolean value given by true, false, 0, 1 true/1 or false/0 'subrange' Subrange is gives a range 2-5 or MapNotify of data by specifying a start and stop data. In the case of one data the stop data can be omitted. 'range' Ranges are a comma 2-3,MotionNotify-MapNotify,GravityNotify,PropertyNotify,30 separated list of subranges. 7.4.3 Replay ------------ Replay directive Interpretation 0,0 not valid 0,1 not valid 0,2,void,void,void,keycode,screen,timeKeyPress on key with keycode, used to replay 0,3,void,void,void,keycode,screen,timeKeyRelease on key with keycode, used to replay 0,4,void,void,button ButtonPress on button nr, used to replay nr,void,screen,time 0,5,void,void,button ButtonRelease on button nr, used to nr,void,screen,time replay 0,6,x,y,void,void,screen,time MotionNotify on poistion (x,y), used to replay 1,request number, request Recorded request, used during type, length, request id, synchronisation time 2,reply number,time Recorded reply, used during synchronisation 3,error number,time Recorded error, used during synchronisation 6,EB+2,void,void,void,keycode,screen,timeX Input (master) KeyPress on key with keycode, used to replay 6,EB+3,void,void,void,keycode,screen,timeX Input (master) KeyRelease on key with keycode, used to replay 6,EB+4,void,void,button X Input (master) ButtonPress on button nr,void,screen,time nr, used to replay 6,EB+5,void,void,button X Input (master) ButtonRelease on button nr,void,screen,time nr, used to replay 6,EB+6,x,y,void,void,screen,timeX Input (master) MotionNotify on poistion (x,y), used to replay 6,EB+2,void,void,void,keycode,screen,timeX Input (slave) KeyPress on key with keycode, used to replay 6,EB+3,void,void,void,keycode,screen,timeX Input (slave) KeyRelease on key with keycode, used to replay 6,EB+4,void,void,button X Input (slave) ButtonPress on button nr, nr,void,screen,time used to replay 6,EB+5,void,void,button X Input (slave) ButtonRelease on button nr,void,screen,time nr, used to replay 6,EB+6,x,y,void,void,screen,timeX Input (slave) MotionNotify on poistion (x,y), used to replay time is the time on the server the data was to the recording Xnee client. This time is used to keep the speed intact during replay. 7.4.4 Script replay data ------------------------ Primitive Interpretation fake-motion Fakes a mouse motion fake-button-press Fakes a button press fake-button-release Fakes a button release fake-button Fakes a button press and release fake-key-press Fakes a key press fake-key-release Fakes a key release fake-key Fakes a key press and release Primitive Primitive Interpretation variable values x=value integer Sets the x position used in fake-motion to value x=value +integer Set the relative motion (x direction) used in fake-motion to value x=value -integer Set the relative motion (x direction) used in fake-motion to value y=value integer Sets the y position used in fake-motion to value y=value +integer Set the relative motion (y direction) used in fake-motion to value y=value -integer Set the relative motion (y direction) used in fake-motion to value button=value integer set the button to fake with fake-button-press, fake-button-release and fake-button to value key=value integer set the key to fake with fake-key-press, fake-key-release and fake-key to value 7.4.5 Mark ---------- First tokens Arguments Interpretation Mark time string Ignored. This feature is intended to let the user do whatever he/she wants to. This will obviously lead to modifying the source code etc. 7.4.6 Exec ---------- First tokens Arguments Interpretation Exec command This is used during to replay to execute string a given command. If no command string is found Xnee will try to read the command from the environment variable 'XNEE_EXEC_COMMAND' 7.4.7 Project information ------------------------- Project information directives Arguments ProjectName string s is the project name ProjectDescription string s is the project description ProjectCreationDate string s is the project creation date ProjectCreationProgram string s is the name of the program that create the project file ProjectCreationProgVersion string s is the version of the program that create the project file ProjectLastChangeDate string s is the date of the last change of the project file ProjectLastChangeProgram string s is the name of the program that last changed of the project file ProjectLastChangeVersion string s is the version of the program that last changed of the project file ProjectCurrentChangeDate string s is the date of the current change of the project file ProjectCurrentChangeProgram string s is the name of the program that current changed of the project file ProjectCurrentChangeVersion string s is the version of the program that current changed of the project file  File: xnee.info, Node: Internals, Next: Requirements, Prev: File format, Up: Top 8 Xnee Internals **************** This chapter is intended to explain the internal design of libxnee. Hopefully this will lead to a better understanding of how to use Xnee and why some features exist and why some don't. 8.1 Synchronisation =================== We will try to go through the basics of how Xnee implements synchronisation and try to tell you, by using examples, why synhronisation is important. 8.1.1 Why synchronise --------------------- To understand why synchronisation during replay is needed an example is given. In this example only mouse and keyboard events are recorded. Think of a session with a web browser. During record the following is done: * Start galeon (or another web browser) via the GNOME panel * Press Ctrl-O which pops up a window * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * Then click on another URL (e.g GNU Documentation) * Then click on another URL (e.g On-Line Documentation) When replaying this session it is often useful to synchronise the recorded session with what's happening "right now" on the display since sometimes (or rather always) there can be different response times from the same URL. During replay the following is done: * Galeon is started * Ctrl-O is typed which pops up a window * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * ... due to an enormous amount of visitors the GNU web server can't respond as quick as it did when recording. So when the next thing happens * Then click on another URL (e.g GNU Documentation) * ... the page hasn't been loaded and when the next event is replayed * Then click on another URL (e.g On-Line Documentation) * ... the link isn't there and we're really out of sync with the recorded session 8.1.2 How to synchronise ------------------------ Instead we could record some more data than just the mouse and keyboard events. During record the following is done: * Start galeon (or another web browser) via the GNOME panel * Record some X data that tells us that a window has been created * Press Ctrl-O which pops up a window * Record some X data that tells us that a window has been created * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * Record some X data that tells us that a window has been destroyed * Then click on another URL (e.g GNU Documentation) * Record some X data that tells us that a some text has been displayed in a window * Then click on another URL (e.g On-Line Documentation) * Record some X data that tells us that a some text has been displayed in a window The non-mouse-or-keyboard events recorded (window created & text displayed) are record for synchronisation purposes. During replay the following is done: * Start galeon (or another web browser) via the GNOME panel * wait for: the recorded X data to be sent again * Press Ctrl-O which pops up a window * wait for: the recorded X data to be sent again * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * wait for: the recorded X data to be sent again * Then click on another URL (e.g GNU Documentation) * wait for: the recorded X data to be sent again * Then click on another URL (e.g On-Line Documentation) * wait for: the recorded X data to be sent again 8.1.3 Synchronisation is needed ------------------------------- So by recording more data than just the events to be replayed we can synchornise what was recorded with what is going on when replaying. But the data has to be chosen with respect to that the data: * differs from different sessions (Gimp and Xterm are really different) * slows down the replay session if there are too many * is hard to choose since the X protocol is rich * differs (comparing record and replaying) * can have different ordering (comparing record and replaying) 8.1.4 Different data for different kind of sessions --------------------------------------------------- If we record an xterm session with all data being recorded and compare that to a recorded GIMP session with all data being recordr we can see that the data to use as synchronisation data differs. AS an example there aren't so many windows created/destryed during an xterm session. The solve to the the problem of finding out what data to use as synchronisation data one can: * use the project files delivered with Xnee * analyse the application (using Xnee's '--human-printouts' option) and do some "trial and error" 8.1.5 Slow replay session due to too many synchronise data ---------------------------------------------------------- The synchronisation itself doesn't take much time but there are timeouts that makes Xnee paues for a short while (see above). If there are many such timeouts it will lead to a slow or shaky replaying session. 8.1.6 X protocol is rich and asynchronous ----------------------------------------- For an end user (with no X expertise) it is hard to read the X protocol specification and make assumptions on what data to use. 8.1.7 Different data sent ------------------------- Even if one starts up a machine from scratch (reboot) when recording and from scratch when replaying there is no guarantee that the data is sent in the same order or that exactly the same amount of data is sent. 8.1.8 Buffers and timeouts -------------------------- To enable synchronisation Xnee buffers data: * that was read in the session file but hasn't been sent during replay * that was sent during replay but hasn't been seen in the session file being replayed For every data read from session file (during replay) that isn't replayable (i e device event) Xnee stores the data in a buffer. Xnee also stores the data sent from the X server during playback. The data received from the server make the buffer entry for that specific data be decremented. If, on the other hand, the same data was read from file the buffer entry for that data is incremented. Before replaying any replayable event Xnee makes sure it is in sync. If Xnee is in sync the replaying continues. If Xnee is out of sync it will look for its thresholds and see if it is inside a user specified range. There are three thresholds: * positive maximum nr data read from session file * negative minimum nr of data sent from X server * absolute total maximum sum of the absolute values above If Xnee read one data from file (e.g the event MapNotify) Xnee checks if the buffer entry for the specific data is bigger than the positive maximum value (after having incremented the buffer value). If Xnee receives one data from the X server (e.g the event MapNotify) it checks if the buffer entry for the specific data is bigger than the negative minimum value (after having decremented the buffer value). Xnee also checks if the absolute sum of the differences for every entry in the buffer is higher the a total threshold. If Xnee is getting out of sync it slows down the speed a bit and tries to continue. However after a while it may happen that Xnee considers that it no use to continue since we are too much out of sync. Xnee compensates for the delay during replay that is caused when being out of sync. It is possible to tweak the thresholds using the '--maximum-threshold', '--negative-threshold' and '--total-diff-threshold' options. Is is also possible to turn off synchronisation completely using the '-ns' option.  File: xnee.info, Node: Requirements, Next: FAQ, Prev: Internals, Up: Top 9 Xnee Requirements ******************* 9.1 Runtime requirements ======================== Xnee requirements: * RECORD extension * XTest extension You can use Xnee in replaying mode without RECORD extension if synchronisation is turned off. 9.2 Development requirements ============================ For development requirements, please look at the DEVELOPMENT file that is distributed with all packages and with CVS.  File: xnee.info, Node: FAQ, Next: Copying This Manual, Prev: Requirements, Up: Top 10 FAQ ****** 'Where do I send questions?' 'Where and how do I report bugs?' Turn on verbose mode 'cnee --verbose' and save the printouts. Include all printouts and log files in the mail which is sent to 'Can you add xxx functionality to Xnee' Send an email to and we'll consider it. 'Why the name Xnee?' We wanted to use a recursive acronym, as GNU ("GNU's Not Unix'). After having read the Wine documentation, we thought that Xnee is not an Event Emulator would work fine since Xnee is Not an Event Emulator but rather a event recorder and faker. 'What does the name cnee mean?' cnee's not an event emulator 'What does the name gnee mean?' gnee's not an emulator either 'What does the name pnee mean?' pnee's not even emulating 'What doesn't the name gnee mean?' gnee's not an Event Emulator 'What license is Xnee released under ?' GPL version two or later. Which can be found at . Xnee will switch to GPLv3 as soon as GPLv3 is released. 'Where is the CVS repository?' You can find a CVS tree at . You are more than welcome to join 'Is there a GUI frontend for Xnee ?' Yes! Gnee. 'When setting ranges (integers), how do I know what numbers belong' to X11 data? You can either type the data name directly (e.g MotionNotify) or you can use the print-xxx-name options. * '--print-data-name' * '--print-event-name' * '--print-error-name' * '--print-reply-name' * '--print-request-name' 'When I replay to another display the characters are not correct?' Make sure you use the same keyboard mapping. A typical example: Record local host using Xnee: 'cnee --record --out-file recorded_on_local.xnl ' Store remote keymap: 'xmodmap -pke -display remote:0 > remote.map ' Store local keymap: 'xmodmap -pke > local.map ' Copy local keymap to remote host: 'cat local.map | xmodmap -display remote:0 - ' Replay previously recorded session: 'cnee --replay --file recorded_on_local.xnl --display remote:0 ' Copy the original remote keymap to remote host: 'cat remote.map | xmodmap -display remote:0 - ' 'When starting Xnee I am informed that I am missing the RECORD extension' Your X server doesn't have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following: 'Can Xnee record more than one display?' No, we used to consider adding the functionality but have no plans to implement it anymore. 'When starting Xnee I am informed that I am missing the RECORD extension' Your X server doesn't have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following: * XFree86 4.0 and higher Make sure that the RECORD extension is loaded. This is done by letting the Module section in the X config file (e.g /etc/X11/XF86Config-4) look something like: 'Section "Module"' 'Load "dbe" # Double-buffering' 'Load "GLcore" # OpenGL support' 'Load "dri" # Direct rendering infrastructure' 'Load "glx" # OpenGL X protocol interface' 'Load "extmod" # Misc. required extensions' 'Load "v4l" # Video4Linux' '# Load "pex5" # PHIGS for X 3D environment (obsolete)' 'Load "record" # X event recorder' '# Load "xie" # X Image Extension (obsolete)' '# You only need the following two modules if you do not use xfs.' '# Load "freetype" # TrueType font handler' '# Load "type1" # Adobe Type 1 font handler' EndSection The important load directive (in this case) is the following line 'Load "record" # X event recorder' * X.org, XFree86 (3.3 and lower) or any other Xserver Recompile and reinstall the Xserver and make sure that RECORD extension is built into the Xserver. Please look at the documentation from your Xserver "vendor" on how to do that. 'How do I build VNC so that I can use Xnee together with it?' Download vnc source from: In the file 'Xvnc/config/cf/vnc.def' change NO on the following items to YES as below: '#define BuildRECORD YES' '#define BuildRECORDlib YES' Download the Xfree86 distribution from . Specifically, the following dir, (currently in the file 'X430src-3.tgz file' ): 'tar zxvf \' 'X430src-3.tgz ' 'xc/programs/Xserver/record/' 'xc/programs/Xserver/record/Imakefile' 'xc/programs/Xserver/record/record.c' 'xc/programs/Xserver/record/recordmod.c' 'xc/programs/Xserver/record/set.c' 'xc/programs/Xserver/record/set.h' 'xc/programs/Xserver/record/module/' 'xc/programs/Xserver/record/module/Imakefile' 'cp -rf \' 'xc/programs/Xserver/record \' 'vnc_unixsrc/Xvnc/programs/Xserver' 'cd libvncauth/' 'xmkmf' 'make all' 'cd Xvnc' 'make World |& tee LOG' Verify the build by running 'xdpyinfo' in an xterm in the vncserver and verify that RECORD and XTEST extensions are loaded. 'How do I ensure that the mouse, during replay, is at the same position (x,y) as when recorded?' Use the '--store-mouse-pos' option. This will cause Xnee to store the mouse position before starting to record. This position will be used to set the start position before replaying of recorded data starts. 'How do I ensure that the same window is focused as when recorded?' It's simple, just make sure that you record the window getting focus. 'The window pops up at different positions when replaying, can Xnee handle that?' Yes, use the '--recall-window-position' option when replaying (with cnee). This makes cnee try yo reposition the window as it was positioned when recording the session. 'Xnee seems to mess up my entire session after replaying a sessions which was interupted by Control-C?' Xnee records the KeyPress belonging to Control. After that the system sends Xnee a signal which makes Xnee stop recording. So you end up having a Control KeyPress recorded, with no coresponding KeyRelease. To solve the screwed up session, press Control (which generates a KeyPress and the wanted KeyRelease). If you want to keep your recorded session and not want this to happen again, remove the last line in the recorded file starting with '2,'. A better way to interrupt Xnee is to use the stop key option, e.g in cnee '--stop-key F1'. This prevents the above situation. 'Autorepeat is turned off by Xnee, how do I turn it on again?' 'xset r on'  File: xnee.info, Node: Copying This Manual, Next: Index, Prev: FAQ, Up: Top Appendix A Copying This Manual ****************************** A.1 GNU Free Documentation License ================================== Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warrany Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.  File: xnee.info, Node: Index, Next: (dir), Prev: Copying This Manual, Up: Top B Index ******* [index] * Menu: * background: Summary. (line 58) * Build VNC to be used with Xnee: FAQ. (line 123) * can Xnee record more than one display: FAQ. (line 85) * command line syntax: Functional overview. (line 137) * Comment directives: File format. (line 83) * Create a project file: File format. (line 22) * Define a simple macro: Examples. (line 298) * Define another simple macro: Examples. (line 336) * development requirements: Requirements. (line 18) * Distribute the replaying of mouse motions: Examples. (line 218) * Distribute the retyping of a file: Examples. (line 228) * Distribute your mouse motions: Examples. (line 204) * distributing: Functional overview. (line 60) * Example Xnee Session files: Getting started. (line 83) * Exec directive: File format. (line 360) * FDL, GNU Free Documentation License: Copying This Manual. (line 9) * features: Summary. (line 26) * Functional overview: Functional overview. (line 9) * Getting started: Getting started. (line 9) * GUI frontend for Xnee: FAQ. (line 45) * how to synchronise: Internals. (line 59) * Insert marks Xnee with key combination: Functional overview. (line 218) * Interupting xnee: Functional overview. (line 155) * key: Functional overview. (line 165) * license: FAQ. (line 36) * limit the data: Functional overview. (line 245) * limit the events: Functional overview. (line 238) * limit the events <1>: Functional overview. (line 252) * Mark directive: File format. (line 350) * missing RECORD extension: FAQ. (line 80) * missing RECORD extension <1>: FAQ. (line 89) * modes: Functional overview. (line 28) * modifier: Functional overview. (line 165) * Pause Xnee with key combination: Functional overview. (line 204) * Pause Xnee with key combination <1>: Functional overview. (line 211) * Pausing and resuming Xnee with key: Examples. (line 271) * plugins: Functional overview. (line 269) * Project file: File format. (line 14) * Project information directive: File format. (line 371) * questions is sent where?: FAQ. (line 7) * ranges: Functional overview. (line 67) * Record a gnumeric session: Examples. (line 43) * Record a gnumeric session with synchronisation data: Examples. (line 58) * Record another display than the default: Examples. (line 430) * Record keyboard: Examples. (line 22) * Record keyboard and mouse: Examples. (line 32) * Record mouse motions: Examples. (line 12) * recording: Functional overview. (line 38) * Replay a gnumeric session: Examples. (line 122) * Replay a gnumeric session with synchronisation data: Examples. (line 135) * Replay a gnumeric session with synchronisation data setting threshold: Examples. (line 151) * Replay directive: File format. (line 237) * Replay keyboard actions: Examples. (line 105) * Replay keyboard and mouse: Examples. (line 113) * replay mouse motions: Examples. (line 79) * Replay to another display than the default: Examples. (line 438) * replay to another display the characters are not correct: FAQ. (line 57) * replay using double speed: Examples. (line 96) * replay using half speed: Examples. (line 87) * replaying: Functional overview. (line 45) * Report bugs?: FAQ. (line 10) * Reporting pnee bugs: Programs. (line 45) * requirements: Requirements. (line 5) * retype: Functional overview. (line 52) * Retype a file: Examples. (line 176) * Retype the help printout: Examples. (line 161) * runtime requirements: Requirements. (line 9) * Script replay data: File format. (line 302) * Session file: File format. (line 40) * Settings: File format. (line 92) * Shell scripts using Xnee: Examples. (line 446) * SIGTERM: Functional overview. (line 181) * SIGTERM <1>: Functional overview. (line 259) * Stop Xnee with key: Examples. (line 256) * Stop Xnee with key combination: Functional overview. (line 198) * Synchronisation: Internals. (line 13) * Using a differet screen resolution: Examples. (line 380) * Using a offset when replaying: Examples. (line 392) * Using a window position recall: Examples. (line 405) * Using human readable printouts: Examples. (line 372) * Using no resolution translation: Examples. (line 417) * Using verbose mode: Examples. (line 364) * What does the name cnee mean?: FAQ. (line 24) * What does the name gnee mean?: FAQ. (line 27) * What does the name gnee mean? <1>: FAQ. (line 30) * What does the name gnee mean? <2>: FAQ. (line 33) * what numbers belong to X11 data?: FAQ. (line 48) * why name it Xnee: FAQ. (line 18) * why synchronise: Internals. (line 20) * Xnee Internals: Internals. (line 6) * Xnee Settings Arguments: File format. (line 217)  Tag Table: Node: Top188 Node: Summary737 Node: Getting started3480 Node: Functional overview7240 Node: Installation17086 Node: Examples18965 Node: Programs36286 Node: File format38237 Node: Internals57823 Node: Requirements65784 Node: FAQ66294 Node: Copying This Manual73467 Node: Index94498  End Tag Table xnee-3.19/doc/xnee.html0000664000000000000000000113752312332167170011706 00000000000000 Xnee Manual
[Top] [Contents] [Index] [ ? ]

Xnee Manual


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. Summary


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 Summary

Xnee is a suite of programs that can record, replay and distribute user actions under the X11 environment. Think of it as a robot that can imitate the job you just did.

Xnee consists of one library and two applications

cnee - command line program

gnee - graphical user interface program

pnee - a Gnome Panel Applet

libxnee - library used by xnee and gnee


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.2 Xnee features

Xnee can be used for multiple purposes, although it was initially designed as a test tool. The most used features are the foloowing:

Test tool - Instead of performing test cases for a GUI (or CLI program) over and over again, the test cases can be automated. Simply record a user session and replay it later.

Performance test tool - If you want to simulate lots of simultaneous users in a network (or a local machine) you can use Xnee. Simply record a user session and start multiple instances of Xnee.

Demonstration tool - You can use Xnee to demonstrate the features of your program. Simply record a user session and replay it later.

Distribution tool - If you want to send over your mouse/keyboard actions to another display you can use the built-in distribution mechanism in Xnee.

Macro recorder/replayer - By binding a key and modifier combination (e.g using xrebind) to replay a recorded session you will have a Window Manager and application independent macro.

File retyper - Xnee can retype the contents of a file. This can be useful during tests or if you want xnee to answer some command session without having to record the session.

X11 protocol sniffer - Xnee can be used as a sniffer for the X11 protocol.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.3 Background

In order to verify that a program does the job it’s supposed to do, certain tests have to be made. These tests are, IMHO, perhaps the most boring things a programmer can do. Xnee is designed to reduce the programmer from this burden.

Xnee started out as a commad line program. During the development phase the main functionality was broken out to a library, called libxnee. The command line program was renamed cnee. The thought behind making the library was to enable the writing of other clients than just the command line. Today there is a GUI program, gnee, and a Gnome panel applet, pnee, that uses the library.

By using xnee your testcase(s) can be recorded and later on replayed. Xnee comes with other features For more information about these, read the Introduction.

This manual mainly focuses on the command line program, cnee. There are however a seperate chapters for the other programs.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. Getting started


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1 Getting started

To get the first feel of Xnee some simple examples are presented.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.1 Simple replay

Start a terminal emulator (e.g xterm) and then start Xnee,

 
   cnee --replay --file example1.xnr &

....dont forget ’&’. The file example1.xnr contains keyboard events recorded during development of this manual. When replayed you’ll see what was typed and of course more important you’ll get i first glimpse of Xnee and its capabilities. For information on where to find the example files, see below.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.2 Simple recording of Key presses

We move on to a (very) simple recording session. Start a terminal emulator (e.g xterm) and your favorite editor. Move the pointer to one of the terminal windows and start Xnee.

 
   cnee --record -o example2.xnr --device-event-range 2-3 \
   --time 5 --events-to-record 20

Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you can type whatever you want to record (20 press- and relase events of the keyboard are recorded). We are done and you have recorded your first session! Leave the desktop as it is and go forward to the next example.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.3 Simple replaying of your recorded file

Start one terminal emulator (e.g xterm). Let Xnee repeat the stuff you did in the example above. Undo all changes in the editor that was made in the previous example. Move the pointer to one of the terminal windows and start Xnee.

 
   cnee --replay -f example2.xnr --time 5

Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you will see your typings in the example above being repeated.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.4 Simple recording of mouse motions

We move on to another simple recording session. Start a terminal emulator (e.g xterm). Move the pointer to the terminal window and start Xnee.

 
   cnee --record -o example3.xnr --device-event-range 5-6 \
   --time 5 --events-to-record 20

After 5 seconds you can move the pointer around (20 motion events are recorded).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.5 Simple replaying of your recorded file

Let Xnee repeat the stuff you did in the example above.. Move the pointer to the terminal window and start Xnee.

 
   cnee --replay -f example3.xnr --time 5

After 5 seconds you will see your mouse motions in the example above being repplayed.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.6 Simple retyping of a text file

Let Xnee retype (type again) the text in a text file. Move the pointer to the terminal window and create a text file containing the command ls -l.

 
   echo "ls -l" > ./mytext.txt

And after that you start Xnee.

 
   cnee --retype-file  ./mytext.txt --time 5

After 5 seconds you will see Xnee type ls -l, which probably will list the files in the current directory.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1.7 Example Xnee Session files

The example file above (example1.xnr) is a session file that has been delivered with the sources (allthough not installed), rpm and with the Xnee Documentation Package. The file(s) can be found:

DistributionLocation
RPM/usr/lib/xnee/session
Source./sessions/
Document Package./sessions/

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. Functional overview


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 Functional overview

The Xnee applications (gnee and xnee) receives X11 protocol data (e.g. events) from an X server (using libxnee) and print them to a file, called Xnee Session File. Theses events are later read from the session file and replayed. Gnee and xnee can read its settings from a file, called Xnee Project File, or from command line (cnee) or via the GUI (gnee).


Events directly generated by the user (e.g KeyPress) can be replayed or faked. Requests, replies, errors and events not directly generated by the user (e.g MapNotify) can be recorded as well. By using these data Xnee can replay with synchronisation.

This picture gives an overview of Xnee and the files used.
xngener In this section you will be given information about key concepts in X11 and Xnee. It is vital that you read through this chapter.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Modes

Xnee has four modes:

  • record
  • replay
  • retype
  • distribute

The distribution mechanism can be used together with the other three.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2.1 Record

When record mode is used Xnee receives a copy of the data sent to and from the X server. The copy is printed to a file. Xnee can record the whole X11 protocol, not just mouse and keyboard events.

This picture gives an overview of Xnee and the files used when recording.
xnrec


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2.2 Replay

When replay mode is used Xnee reads data from a file or stdin. These data is either sent to the server (if it is a keyboard or a mouse event) or used to synchronise with (if any of the other data).

This picture gives an overview of Xnee and the files used when replaying.
xnrep


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2.3 Retype

Xnee can retype the contents of a text file. This is useful when combining replaying of different recorded session. You can change the text written in for example an editor (e.g emacs) without having to re-record the complete sessions.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2.4 Distribution

Xnee can fake mouse and keyboard events on multiple displays. This distribution mechanism can be used when recording, replaying or retyping.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.3 Ranges

What data to record is specified using ranges. Ranges has a start value and a stop value. The following data can be recorded:

Xnee nameX Protocol Name
core-requestsRequest
device-eventEvent
delivered-eventEvent
errorError
replyReply
ext-requests.ext-majorExtension Request
ext-requests.ext-minorExtension Request
ext-replies.ext-majorExtension Reply
ext-replies.ext-minorExtension Reply

When specifying the ranges when using xnee you can either type the integer value of the data or the name of the data. To find out what number belongs to what data name, you can use the --print-data-name option. For an explanation of the X protocol data, please read the "X Record Extension Library" or the "Record Extension Protocol Specification".


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4 First and last motion event

Xnee has the ability to skip recording of succesive motion events with no other data in between. This option is intended to reduce the number of data recorded by leaving out unnecessary data. This feature can be invoked with the --first-last flag.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.5 Delay

Sometimes when Xnee starts recording data, the keyrelease (caused by pressing and releasing RETURN to execute the Xnee command line) is recorded. This single keyrelease (with no corresponding keypress) might confuse the X server. With the --time <secs> option Xnee can be paused for a number of seconds before recording/replaying/retyping starts.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6 Verbose

When enabling verbose mode (--verbose) Xnee prints a lot of information about it’s state. This option is only intended for runtime debugging.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.7 Human printouts

Sometimes it’s hard to decide what data to use when synchronising. To do this you have to analyse what data is sent from the server when recording. Instead of reading the data number, s tring representation of the data is printed out. To enable this option, use the --human-printouts.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.8 Invoking Xnee


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.8.1 Command line syntax

To get information about how to use Xnee’s command line options please use the man page(s).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.8.2 Project file

To use a Project file use the --project option, e.g cnee --project xnee/projects/netscape.xns.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.8.3 Session file

To use a session file use the --file option, e.g cnee --file user1_session.xns


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9 Interupting Xnee

Interupting Xnee when recording or replaying can be done as follows

  • user specified modifier and key
  • limit the number of data to record
  • sending a SIGTERM signal (e.g pressing Control-c in a terminal window)

The prefered way to interrupt xnee is to use the modifier+key.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.1 modifier and key

It is possible to specify a modifier (e.g Control button) and a key (e.g ’a’) that will stop the Xnee session. When using this option make sure that the modifier/key is not used in any way by the applications you are recording. You can specify a key+modifier to stop, pause and resume xnee. You can also insert a mark in the recorded session file.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.2 limit the number of data to record

By specifying the number of data to record (--loops) xnee stops when this number of data is received from the server. When replaying the same amount of data is replayed.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.3 sending a SIGTERM signal

The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm) and then press Control-c which will send the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you’ll end up lossing that battle).

When using Control-c to stop Xnee you must be aware of that the pressing of the Control key gets recorded. When replaying a recorded session ending with pressing of Control your apps may think you are pressing the Control key. A simple solution for this is to press and release the Control.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.4 Stop Xnee with key combination

Xnee stops its current action when the user presses the key combination as specified during setup. Xnee will be shut gracefully.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.5 Pause Xnee with key combination

Xnee pause its current action when the user presses the key combination as specified during setup. Xnee will be in paused mode until the user stops or resumes Xnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.6 Pause Xnee with key combination

Xnee resumes its current paused action when the user presses the key combination as specified during setup. Xnee will continue where it was paused.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.7 Insert marks Xnee with key combination

When the user presses the key combination as specified during setup Xnee will print a mark in the session file containing a time stamp. This feature is intended be used when you want to mark an interresting time/event during recording. After recording has finished you can add Xnee scripting calls to Xnee which will be interpreted and executed as if they were recorded.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.8 Limit number of data to record

There a a few ways to limit the number of data Xnee records.

  • limit the events to recored
  • limit the data to recored
  • limit the time to recored
  • send a signal to xnee (SIGTERM)
  • use a selfmade record callback function

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.9 Limit the events to record

When having received the specified amount of events from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.10 Limit the data to record

When having received the specified amount of data from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.11 Limit the time to record

When having recorded for the specified amount of time from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9.12 Send SIGTERM to Xnee

The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm). By pressing Control-c xterm sends the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you’ll end up lossing that battle).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.10 Xnee plugins

Xnee supports plugins since version 1.07. For information about how to write plugins, download the source code and look at the plugin example which is delivered with Xnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4. Installation


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1 Installation from source with the configure script

To build and install Xnee do the following: Download the following source files into a directory (version numbers given here are just examples)

  • xnee-3.02.tar.gz

Unzip the source file

 
gunzip xnee-3.02.tar.gz

Untar the source file

 
tar xvf xnee-3.02.tar

Enter the Xnee directory

 
cd xnee-3.02

Generate the makefiles

 
./configure

or if you want to specify which directory to install xnee to

 
./configure --prefix=<PATH TO INSTALLATION DIR>

Build Xnee

 
make clean all

Install (as root) if you want libxnee to be installed. If not, skip the following command. Installation of libxnee is not needed to build cnee and gnee.

 
make install

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.2 Installation from source with default Makefile

To unpack, build and install Xnee from the sourcefiles do the following:
Download the source files into a directory

Unzip the source file

 
gunzip xnee-3.02.tar.gz

Untar the source file

 
tar xvf xnee-3.02.tar

Enter the Xnee directory

 
cd xnee-3.02

Build Xnee

 
make -f Makefile.xnee clean all

Copy the Xnee binary (xnee/src/xnee) to a directory

 
cp xnee/src/xnee /usr/local/bin

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.3 Installation from CVS


Download the xnee source code from the CVS repository at http://savannah.gnu.org. Instructions on how to do this can be found there as well.


Build Xnee

 
cd xnee
make -f Makefile.cvs
./configure --enable-doc
make
make install (optional)

Build Xnee Documentation

 
cd doc
make manual
make install (as root)
cd ..

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. Examples


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 Recorder


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.1 Record mouse motions

Record mouse motions only and save the session to mouse-rec.xnl.

 
   cnee --record --mouse --out-file mouse-rec.xnl

After having typed this you can move your mouse round for a while. After Xnee has exited you will be able to replay your motions. Xnee will stop after having record 100 events (this is the default behaviour).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.2 Record keyboard

Record keyboard events only and save log to kbd-rec.xnl.

 
   cnee --record --keyboard --out-file kbd-rec.xnl

After having typed this Xnee records all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions. Xnee will stop after having record 100 events (this is the default behaviour).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.3 Record keyboard and mouse

Record keyboard and mouse and save log to km-rec.xnl.

 
   cnee --record --keyboard --mouse --out-file kbd-rec.xnl

After having typed this Xnee records all your keyboard and mouse actions. So now move your pointer and write some stuff with your keyboard. After Xnee has exited you will be able to replay your keyboard and mouse actions. Xnee will stop after having record 100 events (this is the default behaviour).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.4 Record a gnumeric session

Record a gnumeric session. Record 400 events. Save output in file gnumeric.xnl Start a terminal emulator (e.g xterm)

 
xterm&

Start Xnee

 
   cnee --record --keyboard --mouse --events-to-record 400 \
    --out-file gnumeric.xnl&

Start gnumeric

 
gnumeric&

Start using gnumeric. Browse the menus above, reset the fonts etc.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.5 Record a gnumeric session with synchronisation data

Record a gnumeric session. Record 400 events. Save output in file gnumeric2.xnl


Start a terminal emulator (e.g xterm) xterm&

Start Xnee

 
   cnee --record --keyboard --mouse --events-to-record 400 \
    --out-file gnumeric2.xnl\
   --delivered-event-range Expose,MapRequest,LeaveNotify,EnterNotify  &

Start gnumeric gnumeric& Start using gnumeric. Browse the menus above, reset the fonts etc.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 Replayer


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.1 Replay mouse motions

Replay mouse motions as found in the file mouse-rec.xnl.

 
   cnee --replay  --file mouse-rec.xnl

Xnee will now imitate exactly what you did when you recorded this file.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.2 Replay mouse motions using with half speed

Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 50% of the recorded.

 
   cnee --replay  --file mouse-rec.xnl --speed-percent 50

Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done in 50% of the recorded time.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.3 Replay mouse motions using with double speed

Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 200% of the recorded.

 
   cnee --replay  --file mouse-rec.xnl --speed-percent 200

Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done twice as fast as when recorded.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.4 Replay keyboard actions

Replay keyboard events from file kbd-rec.xnl.

 
   cnee --replay --file kbd-rec.xnl

After having typed this Xnee replays all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.5 Replay keyboard and mouse

Replay keyboard and mouse from the file km-rec.xnl.

 
   cnee --replay --keyboard --mouse --file kbd-rec.xnl

After having typed this Xnee replays all your keyboard and mouse actions. Xnee moves your pointer and writes the the same stuff as you did when recording.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.6 Replay a gnumeric session

Replay the gnumeric session above
Start a terminal emulator (e.g xterm) xterm& Start a new fresh gnumeric spreadsheet gnumeric&

Start Xnee

 
   cnee --replay  --file gnumeric.xnl

Xnee will now do the same stuff you did when recording. It may happen that some user actions are replayed to early. This is so because Xnee has no way of knowing if it is in sync with the recorded session.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.7 Replay a gnumeric session with synchronisation data

Replay the second gnumeric session above.
Start a terminal emulator (e.g xterm) xterm& Start a new fresh gnumeric spreadsheet gnumeric&

Start Xnee

 
   cnee --replay  --file gnumeric2.xnl

Xnee will now do the same stuff you did when recording. It may happen that the replaying slows down. This is because Xnee is currently out of sync. When being out of sync Xnee slows down a bit and checks the thresholds if it is allowed to continue. Xnee will most probably find itself in sync after a short while. All recorded user actions should have occured the same way as when recording.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.8 Replay a gnumeric session with synchronisation data setting threshold

Replay the second gnumeric session above.
Start a terminal emulator (e.g xterm) xterm& Start a new fresh gnumeric spreadsheet gnumeric&


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3 Retyper


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3.1 Retype the help printout

If you want Xnee to fake a user typing the help printout from xnee you can use the --type-help option.
Start a terminal emulator (e.g xterm) and an editor (e.g emacs).

 
xterm &
 
emacs &

Retype the help printout by starting xnee with a 10 seconds delay delay.

 
cnee --time 10 --type-help

Move your mouse to the editor and make the editor have focus. Wait a few seconds and xnee will type the help. You will now also have a copy of help text.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3.2 Retype a file

If you want Xnee to fake a user typing the letters as found in a text file you can use the retype mode. Note that it isn’t possible to retype all characters yet. This will be implemented as soon as possible. We’ll give an example on how to use this mode.
Start a terminal emulator (e.g xterm)

 
xterm &

Create a text file

 
echo "Hi Xnee" > testfile.txt

Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay.

 
cnee --time 10 --retype-file testfile.txt

Start the fabulous editor cat

 
cat > copiedfile.txt

Wait a few seconds and xnee will retype the letters in the file testfile.txt. You will now also have a copy of that file. The copy is called copiedfile.txt. This is a realy a stupid way to copy a file but this option opens up a few possibilities.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4 Distributor

With the distribution mode Xnee can send your device events to multiple displays.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4.1 Distribute your mouse motions

You can distribute your mouse motions to the displays frodo:0.0 and sam:0.0
Start a terminal emulator (e.g xterm)

 
xterm &

Start xnee

 
cnee --distribute frodo:0,sam:0.0
 --record --mouse

If you have setup authority correct on frodo and sam you will see all you mouse motions being done on those displays as well.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4.2 Distribute the replaying of mouse motions

Replay and distribute mouse motions as found in the file mouse-rec.xnl.

 
   cnee --replay  --file mouse-rec.xnl
    --distribute frodo:0,sam:0.0

Xnee will now imitate exactly what you did when you recorded this file on your host as well on frodo and sam.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4.3 Distribute the retyping of a file

If you want Xnee to to distribute the fakeing of a user typing the letters as found in a text file you can use the retype mode together with the distribution mode.
Start a terminal emulator (e.g xterm) on each of the hosts

 
xterm &

Create a text file.

 
echo "Hi again Xnee" > distfile.txt

Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay.

 
cnee --time 10 --retype-file distfile.txt
 --distribute frodo:0,sam:0.0 

Start the fabulous editor cat on the terminal emulators on each the terminals.

 
cat > copiedfile.txt

If you have setup authority correct on frodo and sam you will, after a few seconds, see xnee retype the letters in the file distfile.txt. You will now also have three copies of that file. On copy on each host. The copy is called copiedfile.txt. This might seem like a stupid way to copy a file to three locations but this is just an example.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5 Key


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5.1 Stop Xnee with key

You can stop xnee by specifying a key. Make sure that this key isn’t grabbed by another X client (e.g by the Window Manager). Let’s say that you want Xnee to stop recording if you press Control and h.

 
   cnee --record --mouse --events-to-record -1 --stop-key h

This will make xnee record mouse events until you press h. All printouts are done to stdout so you can see that Xnee stops when you press the key.
Move your mouse for a while and you’ll see xnee print out lots of lines.
Press h.
Xnee will now have stopped recording.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5.2 Pausing and resuming Xnee with key

You can pause and resum xnee by specifying a key. Make sure that this key isn’t grabbed by another X client (e.g by the Window Manager). Let’s say that you want Xnee to pause recording if you press p and to resume when pressing Comntrol and r.

 
   cnee --record --mouse --events-to-record -1 --pause-key p \
   --resume-key r

This will make xnee record mouse events until you press p. All printouts are done to stdout so you can see that Xnee stops when you press the key.
Move your mouse for a while and you’ll see xnee print out lots of lines.
Press p.
Xnee will now have paused recording. Move your mouse for a while and note that nothing is printed.
Press r.
Xnee will now have resumed recording. Move your mouse for a while and note that xnee begins its printouts.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.6 Using macro

Macors can be used in various applications allthough many applicaions have a macro functionality built in (e.g emacs).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.6.1 Define a simple macro

There are plenty of tools that bind a key combination to different actions. For various reasons the author of this manual is familliar with xrebind so we will use xrebind in this example.
The first thing to do is to decide which key combination to tie to the wanted action. Let’s say we want to use one of the funtion keys, F1. We then have to find out which keycode belongs to that key. The action we will bind to this key combination will be the replaying of a recorded session from the previous examples.
We use Xnee to find the keycode for F1. Start xnee.

 
   cnee --record --keyboard --events-to-record 20

Press the F1 key and see what number was printed out. It will look something like this:

 
0,2,0,0,0,67,0,90300078
0,3,0,0,0,67,0,90300156

The interesting part here is the 6th column. In our example we find 67, which is the keycode for F1.
Now we move on to setup xrebind to grab F1 and bind that to replay the mouse motions from the file mouse-rec.xnl. Open or create a new file in your home directory called .xrbrc and add the lines.

 
XrebindGrab
{
  Action      = Execute
  GrabKeycode = 67
  Modifier    = AnyModifier
  Command     = xnee  --replay --file mouse-rec.xnl
  Comment     = Starting xnee replay
  AutoRepeat  = false
  Fork        = true
}

Let’s try it. Start xrebind with verbose printouts.

 
xrebind --verbose

Press F1 and the recorded session from the previous example shall be replayed. You can also see in the verbose printouts that xrebind executes xnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.6.2 Define another simple macro

Let’s say we want to bind Control and e to execute the session as in the example above. This time setting up xrebind is a bit easier.
Setup xrebind to grab F1 and bind that to replay the mouse motions from the file mouse-rec.xnl by opening or create a new file in your home directory called .xrbrc and add the lines.

 
XrebindGrab
{
  Action      = Execute
  GrabKey     = e
  Modifier    = Control
  Command     = xnee  --replay --file mouse-rec.xnl
  Comment     = Starting xnee replay
  AutoRepeat  = false
  Fork        = true
}
e, Control, Exec, xnee,  --replay --file mouse-rec.xnl, \
Fork, NoAutoRepeat

Let’s try it. Start xrebind with verbose printouts.

 
xrebind --verbose

Press Control and e and the recorded session from the previous example shall be replayed.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7 Various options


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.1 Using verbose mode

To enable verbose mode, start xnee like this

 
cnee --verbose --record --mouse

Move the mouse for a while and you’ll lots of verbose printouts that usualy isn’t there.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.2 Using human readable printouts

To enable human printout mode, start xnee like this

 
cnee --human-printout --record --mouse

Move the mouse for a while and you’ll see the data printed out in an almost human friendly format.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.3 Using a differet screen resolution

If a session was recorded on a screen with another resolution than on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee to use a specific resolution when replaying. To do this, start xnee like this

 
cnee --replay --file mouse-rec.xnl \ 
--replay-resolution  800x600

Xnee will now replay the events recorded in the sessions file mouse-rec.xnl as if the screen has a resolution of 800x600.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.4 Using a offset when replaying

If a session was recording a centered window with a window manager and is to bo replayed without a window manager (still centered) you can use the offset switch to make Xnee replay the events in order to get the coordinates right.

 
cnee --replay --file mouse-rec.xnl \ 
--replay-offset 12,-7

Xnee will now replay the events recorded in the sessions file mouse-rec.xnl and adding 12 to the x coordinate and subtract 7 from the y coordinate.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.5 Using a window position recall

For some reason a replayed window may pop up at a different position as when recorded. Xnee can try to solve this by adding the recall-window-position option during replay.

 
cnee --replay --file mouse-rec.xnl \ 
--recall-window-position

If a window pops up at a different position when replaying (as whe recorded) Xnee moves the new window to the same position as when recorded.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.6 Using no resolution translation

If a session was recorded on a screen with another resolution than the on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee not to use translation. To do this, start xnee like this

 
cnee --replay --file mouse-rec.xnl \ 
--no-resolution-adjustment

Xnee will now replay the events recorded in the sessions file mouse-rec.xnl as if the screen had the same resolution the recorded one.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.7 Record another display than the default

If you want to record another display than the default, as set in the DISPLAY variable, you use the --display option.

 
cnee --record --mouse --display frodo:0.0 

Xnee will now record the mouse events on the display frodo:0.0.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7.8 Replay to another display than the default

If you want to replay to another display than the default, as set in the DISPLAY variable, you use the --display option.

 
cnee --replay --display frodo:0.0 --file mouse-rec.xnl 

Xnee will now replay the mouse events on the display frodo:0.0.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.8 Shell scripts using Xnee

Insted of onvoking Xnee for every time you need to fake events you can make use of the shell functions as delivered with Xnee. With these functions you can start one instance of Xnee and fake device events whenever you need.

 
#!/bin/bash 
 
# Source in handy functions 
. /usr/share/xnee/xnee.sh 
 
# Loop and press buttons 
TMP=0 
while [ $TMP -le 5]
do
  TMP=$(($TMP+1))
  xnee_fake_button $TMP 
done
 
# Just a simple example ....don't bother to understand 
tar cvf /tmp/crap.tar *
sleep 2
 
# Fake ls and Enter 
xnee_fake_key l
xnee_fake_key s
xnee_fake_key XK_Return
 
 

This example will fake press and release of the mouse button and do fake press and release of ls followed by a press and release of Enter.... and of course, you’ll get a tar file in /tmp.

Make sure that the path to the xnee.sh is correct.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6. Xnee Programs

GNU Xnee consists of three different programs, cnee, gnee and pnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.1 cnee - cnee’s not an event emulator

This is the Xnee command line program. This programs contains most features and is the basis for this documentation.

For a user not used to X11 it is probably a good idea to start with gnee or pnee instead or start using cnee in demonstration mode: cnee --demo


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.2 gnee - gnee’s not an emulator either

This is a GUI (using GTK2/Gnome) with most of the features of cnee. The GUI has been designed for ease of use.

Currently there are no plans for making a separate manual for gnee.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 pnee - pnee’s not even emulating

This is a Gnome panel applet with a minimal set of features. Ease of use is the motto for this program. It is intended for users not being experts on X11 but still wants to record and replay a session for what ever purpose. By default pnee have settings that need not be changed for most cases. You can, however, launch the preferences dialog and set your preferred values as in most other applets.

If you find pnee a bit limited we suggest you switch over to using cnee.

Note: If pnee hangs you can press the stop button twice to make a reset. Hopefully this will solve the problem.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3.1 Reporting pnee bugs

By default pnee writes error, verbose printouts and warnings to stderr which will not be visible to you as a user, since pnee will be started automatically along with the other applets. If you start up the preferences dialog you can choose a file for pnee printouts. After that you should turn on verbose logging (also in the preferences dialog) and then reproduce the bug and send over the file to xnee-bug@gnu.org.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7. File types and format

The files used by Xnee are

  • Xnee Project File
  • Xnee Session File

These files must follow the Xnee File Format.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1 Project file

Xnee can be set either using command line options (when using xnee) or by clicking the correct buttons etc in the GUI (using gnee). Instead of setting the same settings over and over again, you can use the Xnee Project File.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1.1 Create a project file

You can create a project by yourself. This can be done using the write-settings option in cnee or the “save settings to file” when using gnee or you can use the Xnee GUI (gnee) to write one. You can also write one by yourself in your favorite editor. Just make sure you follow the Xnee format. For information and specification on this format read the Xnee format chapter.  

The authors of Xnee suggests you start off with a generated project file. To get one such file, type the following cnee --mouse --keyboard --write-settings new_proj.xnp. You will now have a file new_proj.xnp with some useful values, which you can edit as you wish.  

To use this file to record, simply type cnee --record --project new_proj.xnp


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 Xnee Session file

The Xnee session files are the printouts from a recorded session following the Xnee File Format. For information and specification on this format read the Xnee File Format chapter.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.3 Xnee file format

The Xnee Format is divided into different directives. The format is line based, meaning that

  • there is one directive per line
  • one line contains one (and only one) directive

These directives are definied as follows.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4 Xnee directives

The following directives are used in Xnee:

DirectivesDescription
CommentThis is used to comment the various files
ProjectThese contains information about the session- or project file
SettingsData used when recording and replaying
Replay dataRecorded replayable data (used when replaying)
Script replay dataScriptable primitives
MarkLines inserted in the seesion file when a modifier+key was pressed
ExecutionLines that trigger the execution of an external program
Project informationProject

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4.1 Comment

First tokenInterpretation
#The whole line is ignored.

As long as the first token is # the whole line is intrepreted as a comment, just as in bash.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4.2 Settings

Settings directiveArgumentInterpretation
data-to-recordintegerLimits the number of data to record to to the integer value
events-to-recordintegerLimits the number of events to record to to the integer value
time-to-recordintegerLimits the number of seconds to record to to the integer value
displaystringSets the display to record or replay to the string
distributestringDistribute all recorded or replayed replayable events to the display given by the string
filestringRead replay data from the file given by the string
out-filestringPrint recorded data to the file given by the string
pluginstringUse the plugin given by the string
first-lastbooleanPrint only first and last of successive MotionNotify events
verbosebooleanUse verbose debugging printout
buffer-verbosebooleanUse verbose buffer verbose printouts (not built by default)
timeintegerDelay the start of the Xnee action
all-clientsbooleanRecord all curret and future clients (default)
future-clientsbooleanRecord only future clients
human-printoutbooleanPrints the recorded data in a (quite) more ser friendly format
sync-modebooleanSets recording mode
speed-percentintegerSets the replaying speed percentage to the integer value
stop-keystringSets the stop key combination to the string
pause-keystringSets the pause key combination to the string
resume-keystringSets the resume key combination to the string
mark-keystringSets the mark key combination to the string
exec-keystringSets the execute key combination to string
replay-resolutionstringSets the replay resolution to the string
replay-resolutionstringSets the replay resolution to the string
recall-window-positionUse window position recall during replay
resolution-adjustmentbooleanUse resolution adjustment, even if the recored resolution differs from the one to replay to
event-rangerangeSets the events to record
error-rangerangeSets the errors to record to range*
request-rangerangeSets the request to record to range*
reply-rangerangeSets the replies to record to range*
extension-request-major-rangerangeSets the extension requests (major) to record to range*
extension-request-minor-rangerangeSets the extension requests (minor) to record to range*
extension-reply-major-rangerangeSets the extension replies (major) to record to range*
extension-reply-minor-rangerangeSets the extension replies (minor) to record to range*
force-replaybooleanContinue to replay even if Xnee is out of sync
max-thresholdintegerSets the maximum synchronisation threshold
min-thresholdintegerSets the minimum synchronisation threshold
total-thresholdintegerSets the total maximum synchronisation threshold
events-to-recordintegerSets the number of events to record
data-to-recordintegerSets the number of data to record
time-to-recordintegerSets the number of seconds to record
store-mouse-positionIf set, Xnee records the initial mouse position and makes sure that replaying starts from there
retype-press-delayintegerXnee delays processing after a faked key press (during retype) with integer milli seconds
retype-release-delayintegerXnee delays processing after a faked key press (during retype) with integer milli seconds
Settings argumentDescriptionExample
integeris an integer value.1
stringis a string.localhost
booleanis a boolean value given by true/1 or false/0true, false, 0, 1
subrangeSubrange is gives a range of data by specifying a start and stop data. In the case of one data the stop data can be omitted.2-5 or MapNotify
rangeRanges are a comma separated list of subranges.2-3,MotionNotify-MapNotify,GravityNotify,PropertyNotify,30

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4.3 Replay

Replay directiveInterpretation
0,0not valid
0,1not valid
0,2,void,void,void,keycode,screen,timeKeyPress on key with keycode, used to replay
0,3,void,void,void,keycode,screen,timeKeyRelease on key with keycode, used to replay
0,4,void,void,button nr,void,screen,timeButtonPress on button nr, used to replay
0,5,void,void,button nr,void,screen,timeButtonRelease on button nr, used to replay
0,6,x,y,void,void,screen,timeMotionNotify on poistion (x,y), used to replay
1,request number, request type, length, request id, timeRecorded request, used during synchronisation
2,reply number,timeRecorded reply, used during synchronisation
3,error number,timeRecorded error, used during synchronisation
6,EB+2,void,void,void,keycode,screen,timeX Input (master) KeyPress on key with keycode, used to replay
6,EB+3,void,void,void,keycode,screen,timeX Input (master) KeyRelease on key with keycode, used to replay
6,EB+4,void,void,button nr,void,screen,timeX Input (master) ButtonPress on button nr, used to replay
6,EB+5,void,void,button nr,void,screen,timeX Input (master) ButtonRelease on button nr, used to replay
6,EB+6,x,y,void,void,screen,timeX Input (master) MotionNotify on poistion (x,y), used to replay
6,EB+2,void,void,void,keycode,screen,timeX Input (slave) KeyPress on key with keycode, used to replay
6,EB+3,void,void,void,keycode,screen,timeX Input (slave) KeyRelease on key with keycode, used to replay
6,EB+4,void,void,button nr,void,screen,timeX Input (slave) ButtonPress on button nr, used to replay
6,EB+5,void,void,button nr,void,screen,timeX Input (slave) ButtonRelease on button nr, used to replay
6,EB+6,x,y,void,void,screen,timeX Input (slave) MotionNotify on poistion (x,y), used to replay

time is the time on the server the data was to the recording Xnee client. This time is used to keep the speed intact during replay.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4.4 Script replay data

PrimitiveInterpretation
fake-motionFakes a mouse motion
fake-button-pressFakes a button press
fake-button-releaseFakes a button release
fake-buttonFakes a button press and release
fake-key-pressFakes a key press
fake-key-releaseFakes a key release
fake-keyFakes a key press and release
Primitive variablePrimitive valuesInterpretation
x=valueintegerSets the x position used in fake-motion to value
x=value+integerSet the relative motion (x direction) used in fake-motion to value
x=value-integerSet the relative motion (x direction) used in fake-motion to value
y=valueintegerSets the y position used in fake-motion to value
y=value+integerSet the relative motion (y direction) used in fake-motion to value
y=value-integerSet the relative motion (y direction) used in fake-motion to value
button=valueintegerset the button to fake with fake-button-press, fake-button-release and fake-button to value
key=valueintegerset the key to fake with fake-key-press, fake-key-release and fake-key to value

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4.5 Mark

First tokensArgumentsInterpretation
Marktime stringIgnored. This feature is intended to let the user do whatever he/she wants to. This will obviously lead to modifying the source code etc.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4.6 Exec

First tokensArgumentsInterpretation
Execcommand stringThis is used during to replay to execute a given command. If no command string is found Xnee will try to read the command from the environment variable XNEE_EXEC_COMMAND

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.4.7 Project information

Project information directivesArguments
ProjectNamestring s is the project name
ProjectDescriptionstring s is the project description
ProjectCreationDatestring s is the project creation date
ProjectCreationProgramstring s is the name of the program that create the project file
ProjectCreationProgVersionstring s is the version of the program that create the project file
ProjectLastChangeDatestring s is the date of the last change of the project file
ProjectLastChangeProgramstring s is the name of the program that last changed of the project file
ProjectLastChangeVersionstring s is the version of the program that last changed of the project file
ProjectCurrentChangeDatestring s is the date of the current change of the project file
ProjectCurrentChangeProgramstring s is the name of the program that current changed of the project file
ProjectCurrentChangeVersionstring s is the version of the program that current changed of the project file

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8. Xnee Internals

This chapter is intended to explain the internal design of libxnee. Hopefully this will lead to a better understanding of how to use Xnee and why some features exist and why some don’t.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1 Synchronisation

We will try to go through the basics of how Xnee implements synchronisation and try to tell you, by using examples, why synhronisation is important.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.1 Why synchronise

To understand why synchronisation during replay is needed an example is given.

In this example only mouse and keyboard events are recorded. Think of a session with a web browser.

During record the following is done:

  • Start galeon (or another web browser) via the GNOME panel
  • Press Ctrl-O which pops up a window
  • Press the left button in the textfield of the popup window
  • Enter the URL you want to enter (e.g http://www.gnu.org)
  • Click on the OK button
  • Then click on another URL (e.g GNU Documentation)
  • Then click on another URL (e.g On-Line Documentation)

When replaying this session it is often useful to synchronise the recorded session with what’s happening "right now" on the display since sometimes (or rather always) there can be different response times from the same URL.

During replay the following is done:

  • Galeon is started
  • Ctrl-O is typed which pops up a window
  • Press the left button in the textfield of the popup window
  • Enter the URL you want to enter (e.g http://www.gnu.org)
  • Click on the OK button
  • ... due to an enormous amount of visitors the GNU web server can’t respond as quick as it did when recording. So when the next thing happens
  • Then click on another URL (e.g GNU Documentation)
  • ... the page hasn’t been loaded and when the next event is replayed
  • Then click on another URL (e.g On-Line Documentation)
  • ... the link isn’t there and we’re really out of sync with the recorded session

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.2 How to synchronise

Instead we could record some more data than just the mouse and keyboard events.

During record the following is done:

  • Start galeon (or another web browser) via the GNOME panel
  • Record some X data that tells us that a window has been created
  • Press Ctrl-O which pops up a window
  • Record some X data that tells us that a window has been created
  • Press the left button in the textfield of the popup window
  • Enter the URL you want to enter (e.g http://www.gnu.org)
  • Click on the OK button
  • Record some X data that tells us that a window has been destroyed
  • Then click on another URL (e.g GNU Documentation)
  • Record some X data that tells us that a some text has been displayed in a window
  • Then click on another URL (e.g On-Line Documentation)
  • Record some X data that tells us that a some text has been displayed in a window

The non-mouse-or-keyboard events recorded (window created & text displayed) are record for synchronisation purposes.

During replay the following is done:

  • Start galeon (or another web browser) via the GNOME panel
  • wait for: the recorded X data to be sent again
  • Press Ctrl-O which pops up a window
  • wait for: the recorded X data to be sent again
  • Press the left button in the textfield of the popup window
  • Enter the URL you want to enter (e.g http://www.gnu.org)
  • Click on the OK button
  • wait for: the recorded X data to be sent again
  • Then click on another URL (e.g GNU Documentation)
  • wait for: the recorded X data to be sent again
  • Then click on another URL (e.g On-Line Documentation)
  • wait for: the recorded X data to be sent again

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.3 Synchronisation is needed

So by recording more data than just the events to be replayed we can synchornise what was recorded with what is going on when replaying. But the data has to be chosen with respect to that the data:

  • differs from different sessions (Gimp and Xterm are really different)
  • slows down the replay session if there are too many
  • is hard to choose since the X protocol is rich
  • differs (comparing record and replaying)
  • can have different ordering (comparing record and replaying)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.4 Different data for different kind of sessions

If we record an xterm session with all data being recorded and compare that to a recorded GIMP session with all data being recordr we can see that the data to use as synchronisation data differs. AS an example there aren’t so many windows created/destryed during an xterm session.

The solve to the the problem of finding out what data to use as synchronisation data one can:

  • use the project files delivered with Xnee
  • analyse the application (using Xnee’s --human-printouts option) and do some "trial and error"

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.5 Slow replay session due to too many synchronise data

The synchronisation itself doesn’t take much time but there are timeouts that makes Xnee paues for a short while (see above). If there are many such timeouts it will lead to a slow or shaky replaying session.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.6 X protocol is rich and asynchronous

For an end user (with no X expertise) it is hard to read the X protocol specification and make assumptions on what data to use.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.7 Different data sent

Even if one starts up a machine from scratch (reboot) when recording and from scratch when replaying there is no guarantee that the data is sent in the same order or that exactly the same amount of data is sent.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

8.1.8 Buffers and timeouts

To enable synchronisation Xnee buffers data:

  • that was read in the session file but hasn’t been sent during replay
  • that was sent during replay but hasn’t been seen in the session file being replayed

For every data read from session file (during replay) that isn’t replayable (i e device event) Xnee stores the data in a buffer. Xnee also stores the data sent from the X server during playback. The data received from the server make the buffer entry for that specific data be decremented. If, on the other hand, the same data was read from file the buffer entry for that data is incremented. Before replaying any replayable event Xnee makes sure it is in sync. If Xnee is in sync the replaying continues. If Xnee is out of sync it will look for its thresholds and see if it is inside a user specified range. There are three thresholds:

  • positive maximum nr data read from session file
  • negative minimum nr of data sent from X server
  • absolute total maximum sum of the absolute values above

If Xnee read one data from file (e.g the event MapNotify) Xnee checks if the buffer entry for the specific data is bigger than the positive maximum value (after having incremented the buffer value).

If Xnee receives one data from the X server (e.g the event MapNotify) it checks if the buffer entry for the specific data is bigger than the negative minimum value (after having decremented the buffer value).

Xnee also checks if the absolute sum of the differences for every entry in the buffer is higher the a total threshold.

If Xnee is getting out of sync it slows down the speed a bit and tries to continue. However after a while it may happen that Xnee considers that it no use to continue since we are too much out of sync.
Xnee compensates for the delay during replay that is caused when being out of sync.
It is possible to tweak the thresholds using the --maximum-threshold, --negative-threshold and --total-diff-threshold options. Is is also possible to turn off synchronisation completely using the -ns option.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9. Xnee Requirements


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.1 Runtime requirements

Xnee requirements:

  • RECORD extension
  • XTest extension

You can use Xnee in replaying mode without RECORD extension if synchronisation is turned off.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.2 Development requirements

For development requirements, please look at the DEVELOPMENT file that is distributed with all packages and with CVS.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

10. FAQ

Where do I send questions?

xnee-devel@gnu.org

Where and how do I report bugs?

Turn on verbose mode cnee --verbose and save the printouts. Include all printouts and log files in the mail which is sent to bug-xnee@gnu.org

Can you add xxx functionality to Xnee

Send an email to xnee-devel@gnu.org and we’ll consider it.

Why the name Xnee?

We wanted to use a recursive acronym, as GNU (“GNU’s Not Unix’). After having read the Wine documentation, we thought that Xnee is not an Event Emulator would work fine since Xnee is Not an Event Emulator but rather a event recorder and faker.

What does the name cnee mean?

cnee’s not an event emulator

What does the name gnee mean?

gnee’s not an emulator either

What does the name pnee mean?

pnee’s not even emulating

What doesn't the name gnee mean?

gnee’s not an Event Emulator

What license is Xnee released under ?

GPL version two or later. Which can be found at http://www.gnu.org/copyleft/gpl.html. Xnee will switch to GPLv3 as soon as GPLv3 is released.

Where is the CVS repository?

You can find a CVS tree at http://savannah.gnu.org. You are more than welcome to join

Is there a GUI frontend for Xnee ?

Yes! Gnee.

When setting ranges (integers), how do I know what numbers belong

to X11 data? You can either type the data name directly (e.g MotionNotify) or you can use the print-xxx-name options.

  • --print-data-name
  • --print-event-name
  • --print-error-name
  • --print-reply-name
  • --print-request-name
When I replay to another display the characters are not correct?

Make sure you use the same keyboard mapping.
A typical example:

Record local host using Xnee:
cnee --record --out-file recorded_on_local.xnl

Store remote keymap:
xmodmap -pke -display remote:0 > remote.map

Store local keymap:
xmodmap -pke > local.map

Copy local keymap to remote host:
cat local.map | xmodmap -display remote:0 -

Replay previously recorded session:
cnee --replay --file recorded_on_local.xnl --display remote:0

Copy the original remote keymap to remote host:
cat remote.map | xmodmap -display remote:0 -

When starting Xnee I am informed that I am missing the RECORD extension

Your X server doesn’t have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following:

Can Xnee record more than one display?

No, we used to consider adding the functionality but have no plans to implement it anymore.

When starting Xnee I am informed that I am missing the RECORD extension

Your X server doesn’t have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following:

  • XFree86 4.0 and higher Make sure that the RECORD extension is loaded. This is done by letting the Module section in the X config file (e.g /etc/X11/XF86Config-4) look something like:

    Section "Module"
        Load "dbe" # Double-buffering
        Load "GLcore" # OpenGL support
        Load "dri" # Direct rendering infrastructure
        Load "glx" # OpenGL X protocol interface
        Load "extmod" # Misc. required extensions
        Load "v4l" # Video4Linux
        # Load "pex5" # PHIGS for X 3D environment (obsolete)
        Load "record" # X event recorder
        # Load "xie" # X Image Extension (obsolete)
        # You only need the following two modules if you do not use xfs.
        # Load "freetype" # TrueType font handler
        # Load "type1" # Adobe Type 1 font handler
    EndSection

    The important load directive (in this case) is the following line
        Load "record" # X event recorder

  • X.org, XFree86 (3.3 and lower) or any other Xserver Recompile and reinstall the Xserver and make sure that RECORD extension is built into the Xserver. Please look at the documentation from your Xserver "vendor" on how to do that.
How do I build VNC so that I can use Xnee together with it?

Download vnc source from:
http://www.uk.research.att.com/vnc/xvnchistory.html

In the file Xvnc/config/cf/vnc.def change NO on the following items to YES as below:
#define BuildRECORD YES
#define BuildRECORDlib YES

Download the Xfree86 distribution from http://www.xfree86.org. Specifically, the following dir, (currently in the file X430src-3.tgz file ):
tar zxvf \
X430src-3.tgz
xc/programs/Xserver/record/
xc/programs/Xserver/record/Imakefile
xc/programs/Xserver/record/record.c
xc/programs/Xserver/record/recordmod.c
xc/programs/Xserver/record/set.c
xc/programs/Xserver/record/set.h
xc/programs/Xserver/record/module/
xc/programs/Xserver/record/module/Imakefile
cp -rf \
xc/programs/Xserver/record \
vnc_unixsrc/Xvnc/programs/Xserver
cd libvncauth/ xmkmf make all
cd Xvnc make World |& tee LOG

Verify the build by running xdpyinfo in an xterm in the vncserver and verify that RECORD and XTEST extensions are loaded.

How do I ensure that the mouse, during replay, is at the same position (x,y) as when recorded?

Use the --store-mouse-pos option. This will cause Xnee to store the mouse position before starting to record. This position will be used to set the start position before replaying of recorded data starts.

How do I ensure that the same window is focused as when recorded?

It’s simple, just make sure that you record the window getting focus.

The window pops up at different positions when replaying, can Xnee handle that?

Yes, use the --recall-window-position option when replaying (with cnee). This makes cnee try yo reposition the window as it was positioned when recording the session.

Xnee seems to mess up my entire session after replaying a sessions which was interupted by Control-C?

Xnee records the KeyPress belonging to Control. After that the system sends Xnee a signal which makes Xnee stop recording. So you end up having a Control KeyPress recorded, with no coresponding KeyRelease. To solve the screwed up session, press Control (which generates a KeyPress and the wanted KeyRelease). If you want to keep your recorded session and not want this to happen again, remove the last line in the recorded file starting with 2,.

A better way to interrupt Xnee is to use the stop key option, e.g in cnee --stop-key F1. This prevents the above situation.

Autorepeat is turned off by Xnee, how do I turn it on again?

xset r on


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A. Copying This Manual


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.1 GNU Free Documentation License

Version 1.2, November 2002

 
Copyright © 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
  1. PREAMBLE

    The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

    This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

    We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

  2. APPLICABILITY AND DEFINITIONS

    This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

    A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

    A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

    The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

    The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

    A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

    Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

    The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

    A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

    The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

  3. VERBATIM COPYING

    You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

    You may also lend copies, under the same conditions stated above, and you may publicly display copies.

  4. COPYING IN QUANTITY

    If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

    If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

    If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

    It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

  5. MODIFICATIONS

    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

    1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.
    2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
    8. Include an unaltered copy of this License.
    9. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.
    10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.
    12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. Preserve any Warranty Disclaimers.

    If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

    You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

    You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

    The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

  6. COMBINING DOCUMENTS

    You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

    The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

    In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements.”

  7. COLLECTIONS OF DOCUMENTS

    You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

    You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

  8. AGGREGATION WITH INDEPENDENT WORKS

    A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

    If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

  9. TRANSLATION

    Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warrany Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

    If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

  10. TERMINATION

    You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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.

  11. FUTURE REVISIONS OF THIS LICENSE

    The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See http://www.gnu.org/copyleft/.

    Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

B. Index

Jump to:   B   C   D   E   F   G   H   I   K   L   M   P   Q   R   S   U   W   X  
Index Entry Section

B
background1.3 Background
Build VNC to be used with Xnee10. FAQ

C
can Xnee record more than one display10. FAQ
command line syntax3.8.1 Command line syntax
Comment directives7.4.1 Comment
Create a project file7.1.1 Create a project file

D
Define a simple macro5.6.1 Define a simple macro
Define another simple macro5.6.2 Define another simple macro
development requirements9.2 Development requirements
Distribute the replaying of mouse motions5.4.2 Distribute the replaying of mouse motions
Distribute the retyping of a file5.4.3 Distribute the retyping of a file
Distribute your mouse motions5.4.1 Distribute your mouse motions
distributing3.2.4 Distribution

E
Example Xnee Session files2.1.7 Example Xnee Session files
Exec directive7.4.6 Exec

F
FDL, GNU Free Documentation LicenseA.1 GNU Free Documentation License
features1.2 Xnee features
Functional overview3.1 Functional overview

G
Getting started2.1 Getting started
GUI frontend for Xnee10. FAQ

H
how to synchronise8.1.2 How to synchronise

I
Insert marks Xnee with key combination3.9.7 Insert marks Xnee with key combination
Interupting xnee3.9 Interupting Xnee

K
key3.9.1 modifier and key

L
license10. FAQ
limit the data3.9.10 Limit the data to record
limit the events3.9.9 Limit the events to record
limit the events3.9.11 Limit the time to record

M
Mark directive7.4.5 Mark
missing RECORD extension10. FAQ
missing RECORD extension10. FAQ
modes3.2 Modes
modifier3.9.1 modifier and key

P
Pause Xnee with key combination3.9.5 Pause Xnee with key combination
Pause Xnee with key combination3.9.6 Pause Xnee with key combination
Pausing and resuming Xnee with key5.5.2 Pausing and resuming Xnee with key
plugins3.10 Xnee plugins
Project file7.1 Project file
Project information directive7.4.7 Project information

Q
questions is sent where?10. FAQ

R
ranges3.3 Ranges
Record a gnumeric session5.1.4 Record a gnumeric session
Record a gnumeric session with synchronisation data5.1.5 Record a gnumeric session with synchronisation data
Record another display than the default5.7.7 Record another display than the default
Record keyboard5.1.2 Record keyboard
Record keyboard and mouse5.1.3 Record keyboard and mouse
Record mouse motions5.1.1 Record mouse motions
recording3.2.1 Record
Replay a gnumeric session5.2.6 Replay a gnumeric session
Replay a gnumeric session with synchronisation data5.2.7 Replay a gnumeric session with synchronisation data
Replay a gnumeric session with synchronisation data setting threshold5.2.8 Replay a gnumeric session with synchronisation data setting threshold
Replay directive7.4.3 Replay
Replay keyboard actions5.2.4 Replay keyboard actions
Replay keyboard and mouse5.2.5 Replay keyboard and mouse
replay mouse motions5.2.1 Replay mouse motions
Replay to another display than the default5.7.8 Replay to another display than the default
replay to another display the characters are not correct10. FAQ
replay using double speed5.2.3 Replay mouse motions using with double speed
replay using half speed5.2.2 Replay mouse motions using with half speed
replaying3.2.2 Replay
Report bugs?10. FAQ
Reporting pnee bugs6.3.1 Reporting pnee bugs
requirements9. Xnee Requirements
retype3.2.3 Retype
Retype a file5.3.2 Retype a file
Retype the help printout5.3.1 Retype the help printout
runtime requirements9.1 Runtime requirements

S
Script replay data7.4.4 Script replay data
Session file7.2 Xnee Session file
Settings7.4.2 Settings
Shell scripts using Xnee5.8 Shell scripts using Xnee
SIGTERM3.9.3 sending a SIGTERM signal
SIGTERM3.9.12 Send SIGTERM to Xnee
Stop Xnee with key5.5.1 Stop Xnee with key
Stop Xnee with key combination3.9.4 Stop Xnee with key combination
Synchronisation8.1 Synchronisation

U
Using a differet screen resolution5.7.3 Using a differet screen resolution
Using a offset when replaying5.7.4 Using a offset when replaying
Using a window position recall5.7.5 Using a window position recall
Using human readable printouts5.7.2 Using human readable printouts
Using no resolution translation5.7.6 Using no resolution translation
Using verbose mode5.7.1 Using verbose mode

W
What does the name cnee mean?10. FAQ
What does the name gnee mean?10. FAQ
What does the name gnee mean?10. FAQ
What does the name gnee mean?10. FAQ
what numbers belong to X11 data?10. FAQ
why name it Xnee10. FAQ
why synchronise8.1.1 Why synchronise

X
Xnee Internals8. Xnee Internals
Xnee Settings Arguments7.4.2 Settings

Jump to:   B   C   D   E   F   G   H   I   K   L   M   P   Q   R   S   U   W   X  

[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

Short Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by Henrik Sandklef on May 6, 2014 using texi2html 1.82.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back Previous section in reading order 1.2.2
[ > ] Forward Next section in reading order 1.2.4
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ Up ] Up Up section 1.2
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

  • 1. Section One
    • 1.1 Subsection One-One
      • ...
    • 1.2 Subsection One-Two
      • 1.2.1 Subsubsection One-Two-One
      • 1.2.2 Subsubsection One-Two-Two
      • 1.2.3 Subsubsection One-Two-Three     <== Current Position
      • 1.2.4 Subsubsection One-Two-Four
    • 1.3 Subsection One-Three
      • ...
    • 1.4 Subsection One-Four

This document was generated by Henrik Sandklef on May 6, 2014 using texi2html 1.82.

xnee-3.19/doc/xnee_progs.texi0000664000000000000000000000334610532023367013116 00000000000000@chapter Xnee Programs GNU Xnee consists of three different programs, cnee, gnee and pnee. @section cnee - cnee's not an event emulator This is the Xnee command line program. This programs contains most features and is the basis for this documentation. For a user not used to X11 it is probably a good idea to start with gnee or pnee instead or start using cnee in demonstration mode: @code{cnee --demo} @section gnee - gnee's not an emulator either This is a GUI (using GTK2/Gnome) with most of the features of cnee. The GUI has been designed for ease of use. Currently there are no plans for making a separate manual for gnee. @section pnee - pnee's not even emulating This is a Gnome panel applet with a minimal set of features. Ease of use is the motto for this program. It is intended for users not being experts on X11 but still wants to record and replay a session for what ever purpose. By default pnee have settings that need not be changed for most cases. You can, however, launch the preferences dialog and set your preferred values as in most other applets. If you find pnee a bit limited we suggest you switch over to using cnee. @b{Note}: If pnee hangs you can press the stop button twice to make a reset. Hopefully this will solve the problem. @subsection Reporting pnee bugs @cindex Reporting pnee bugs By default pnee writes error, verbose printouts and warnings to stderr which will not be visible to you as a user, since pnee will be started automatically along with the other applets. If you start up the preferences dialog you can choose a file for pnee printouts. After that you should turn on verbose logging (also in the preferences dialog) and then reproduce the bug and send over the file to @email{xnee-bug@@gnu.org}. xnee-3.19/doc/xnee_exampl.texi0000664000000000000000000004464611150615274013263 00000000000000@chapter Examples @section Recorder @subsection Record mouse motions @cindex Record mouse motions Record mouse motions only and save the session to mouse-rec.xnl. @example @code{cnee --record --mouse --out-file mouse-rec.xnl} @end example After having typed this you can move your mouse round for a while. After Xnee has exited you will be able to replay your motions. Xnee will stop after having record 100 events (this is the default behaviour). @subsection Record keyboard @cindex Record keyboard Record keyboard events only and save log to kbd-rec.xnl. @example @code{cnee --record --keyboard --out-file kbd-rec.xnl} @end example After having typed this Xnee records all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions. Xnee will stop after having record 100 events (this is the default behaviour). @subsection Record keyboard and mouse @cindex Record keyboard and mouse Record keyboard and mouse and save log to km-rec.xnl. @example @code{cnee --record --keyboard --mouse --out-file kbd-rec.xnl} @end example After having typed this Xnee records all your keyboard and mouse actions. So now move your pointer and write some stuff with your keyboard. After Xnee has exited you will be able to replay your keyboard and mouse actions. Xnee will stop after having record 100 events (this is the default behaviour). @subsection Record a gnumeric session @cindex Record a gnumeric session Record a gnumeric session. Record 400 events. Save output in file gnumeric.xnl Start a terminal emulator (e.g xterm) @example @code{xterm&} @end example Start Xnee @example @code{cnee --record --keyboard --mouse --events-to-record 400 \} @code{ --out-file gnumeric.xnl&} @end example Start gnumeric @example @code{gnumeric&} @end example Start using gnumeric. Browse the menus above, reset the fonts etc. @subsection Record a gnumeric session with synchronisation data @cindex Record a gnumeric session with synchronisation data Record a gnumeric session. Record 400 events. Save output in file gnumeric2.xnl @* Start a terminal emulator (e.g xterm) @code{xterm&} Start Xnee @example @code{cnee --record --keyboard --mouse --events-to-record 400 \} @code{ --out-file gnumeric2.xnl\} @code{--delivered-event-range Expose,MapRequest,LeaveNotify,EnterNotify &} @end example @* Start gnumeric @code{gnumeric&} Start using gnumeric. Browse the menus above, reset the fonts etc. @section Replayer @subsection Replay mouse motions @cindex replay mouse motions Replay mouse motions as found in the file mouse-rec.xnl. @example @code{cnee --replay --file mouse-rec.xnl} @end example Xnee will now imitate exactly what you did when you recorded this file. @subsection Replay mouse motions using with half speed @cindex replay using half speed Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 50% of the recorded. @example @code{cnee --replay --file mouse-rec.xnl --speed-percent 50} @end example Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done in 50% of the recorded time. @subsection Replay mouse motions using with double speed @cindex replay using double speed Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 200% of the recorded. @example @code{cnee --replay --file mouse-rec.xnl --speed-percent 200} @end example Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done twice as fast as when recorded. @subsection Replay keyboard actions @cindex Replay keyboard actions Replay keyboard events from file kbd-rec.xnl. @example @code{cnee --replay --file kbd-rec.xnl} @end example After having typed this Xnee replays all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions. @subsection Replay keyboard and mouse @cindex Replay keyboard and mouse Replay keyboard and mouse from the file km-rec.xnl. @example @code{cnee --replay --keyboard --mouse --file kbd-rec.xnl} @end example After having typed this Xnee replays all your keyboard and mouse actions. Xnee moves your pointer and writes the the same stuff as you did when recording. @subsection Replay a gnumeric session @cindex Replay a gnumeric session Replay the gnumeric session above @* Start a terminal emulator (e.g xterm) @code{xterm&} Start a new fresh gnumeric spreadsheet @code{gnumeric&} Start Xnee @example @code{cnee --replay --file gnumeric.xnl} @end example Xnee will now do the same stuff you did when recording. It may happen that some user actions are replayed to early. This is so because Xnee has no way of knowing if it is in sync with the recorded session. @subsection Replay a gnumeric session with synchronisation data @cindex Replay a gnumeric session with synchronisation data Replay the second gnumeric session above. @* Start a terminal emulator (e.g xterm) @code{xterm&} Start a new fresh gnumeric spreadsheet @code{gnumeric&} Start Xnee @example @code{cnee --replay --file gnumeric2.xnl} @end example Xnee will now do the same stuff you did when recording. It may happen that the replaying slows down. This is because Xnee is currently out of sync. When being out of sync Xnee slows down a bit and checks the thresholds if it is allowed to continue. Xnee will most probably find itself in sync after a short while. All recorded user actions should have occured the same way as when recording. @subsection Replay a gnumeric session with synchronisation data setting threshold @cindex Replay a gnumeric session with synchronisation data setting threshold Replay the second gnumeric session above. @* Start a terminal emulator (e.g xterm) @code{xterm&} Start a new fresh gnumeric spreadsheet @code{gnumeric&} @section Retyper @subsection Retype the help printout @cindex Retype the help printout If you want Xnee to fake a user typing the help printout from xnee you can use the @code{--type-help} option. @* Start a terminal emulator (e.g xterm) and an editor (e.g emacs). @example @code{xterm &} @end example @example @code{emacs &} @end example Retype the help printout by starting xnee with a 10 seconds delay delay. @example @code{cnee --time 10 --type-help} @end example Move your mouse to the editor and make the editor have focus. Wait a few seconds and xnee will type the help. You will now also have a copy of help text. @subsection Retype a file @cindex Retype a file If you want Xnee to fake a user typing the letters as found in a text file you can use the retype mode. Note that it isn't possible to retype all characters yet. This will be implemented as soon as possible. We'll give an example on how to use this mode. @* Start a terminal emulator (e.g xterm) @example @code{xterm &} @end example Create a text file @example @code{echo "Hi Xnee" > testfile.txt} @end example Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay. @example @code{cnee --time 10 --retype-file testfile.txt} @end example Start the fabulous editor @code{cat} @example @code{cat > copiedfile.txt} @end example Wait a few seconds and xnee will retype the letters in the file @code{testfile.txt}. You will now also have a copy of that file. The copy is called copiedfile.txt. This is a realy a stupid way to copy a file but this option opens up a few possibilities. @section Distributor With the distribution mode Xnee can send your device events to multiple displays. @subsection Distribute your mouse motions @cindex Distribute your mouse motions You can distribute your mouse motions to the displays frodo:0.0 and sam:0.0 @* Start a terminal emulator (e.g xterm) @example @code{xterm &} @end example Start xnee @example @code{cnee --distribute frodo:0,sam:0.0} @code{ --record --mouse} @end example If you have setup authority correct on frodo and sam you will see all you mouse motions being done on those displays as well. @subsection Distribute the replaying of mouse motions @cindex Distribute the replaying of mouse motions Replay and distribute mouse motions as found in the file @code{mouse-rec.xnl}. @example @code{cnee --replay --file mouse-rec.xnl} @code{ --distribute frodo:0,sam:0.0} @end example Xnee will now imitate exactly what you did when you recorded this file on your host as well on frodo and sam. @subsection Distribute the retyping of a file @cindex Distribute the retyping of a file If you want Xnee to to distribute the fakeing of a user typing the letters as found in a text file you can use the retype mode together with the distribution mode. @* Start a terminal emulator (e.g xterm) on each of the hosts @example @code{xterm &} @end example Create a text file. @example @code{echo "Hi again Xnee" > distfile.txt} @end example Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay. @example @code{cnee --time 10 --retype-file distfile.txt} @code{ --distribute frodo:0,sam:0.0 } @end example Start the fabulous editor @code{cat} on the terminal emulators on each the terminals. @example @code{cat > copiedfile.txt} @end example @* If you have setup authority correct on frodo and sam you will, after a few seconds, see xnee retype the letters in the file @code{distfile.txt}. You will now also have three copies of that file. On copy on each host. The copy is called copiedfile.txt. This might seem like a stupid way to copy a file to three locations but this is just an example. @section Key @subsection Stop Xnee with key @cindex Stop Xnee with key You can stop xnee by specifying a key. Make sure that this key isn't grabbed by another X client (e.g by the Window Manager). Let's say that you want Xnee to stop recording if you press Control and h. @example @code{cnee --record --mouse --events-to-record -1 --stop-key h} @end example This will make xnee record mouse events until you press h. All printouts are done to stdout so you can see that Xnee stops when you press the key. @* Move your mouse for a while and you'll see xnee print out lots of lines. @* Press h. @* Xnee will now have stopped recording. @subsection Pausing and resuming Xnee with key @cindex Pausing and resuming Xnee with key You can pause and resum xnee by specifying a key. Make sure that this key isn't grabbed by another X client (e.g by the Window Manager). Let's say that you want Xnee to pause recording if you press p and to resume when pressing Comntrol and r. @example @code{cnee --record --mouse --events-to-record -1 --pause-key p \} @code{--resume-key r} @end example This will make xnee record mouse events until you press p. All printouts are done to stdout so you can see that Xnee stops when you press the key. @* Move your mouse for a while and you'll see xnee print out lots of lines. @* Press p. @* Xnee will now have paused recording. Move your mouse for a while and note that nothing is printed. @* Press r. @* Xnee will now have resumed recording. Move your mouse for a while and note that xnee begins its printouts. @section Using macro Macors can be used in various applications allthough many applicaions have a macro functionality built in (e.g emacs). @subsection Define a simple macro @cindex Define a simple macro There are plenty of tools that bind a key combination to different actions. For various reasons the author of this manual is familliar with xrebind so we will use xrebind in this example. @* The first thing to do is to decide which key combination to tie to the wanted action. Let's say we want to use one of the funtion keys, F1. We then have to find out which keycode belongs to that key. The action we will bind to this key combination will be the replaying of a recorded session from the previous examples. @* We use Xnee to find the keycode for F1. Start xnee. @example @code{cnee --record --keyboard --events-to-record 20} @end example Press the F1 key and see what number was printed out. It will look something like this: @example @code{0,2,0,0,0,67,0,90300078} @code{0,3,0,0,0,67,0,90300156} @end example The interesting part here is the 6th column. In our example we find 67, which is the keycode for F1. @* Now we move on to setup xrebind to grab F1 and bind that to replay the mouse motions from the file @code{mouse-rec.xnl}. Open or create a new file in your home directory called @code{.xrbrc} and add the lines. @example @code{XrebindGrab} @code{@{} @code{ Action = Execute} @code{ GrabKeycode = 67} @code{ Modifier = AnyModifier} @code{ Command = xnee --replay --file mouse-rec.xnl} @code{ Comment = Starting xnee replay} @code{ AutoRepeat = false} @code{ Fork = true} @code{@}} @end example Let's try it. Start xrebind with verbose printouts. @example @code{xrebind --verbose} @end example Press F1 and the recorded session from the previous example shall be replayed. You can also see in the verbose printouts that xrebind executes xnee. @subsection Define another simple macro @cindex Define another simple macro Let's say we want to bind Control and e to execute the session as in the example above. This time setting up xrebind is a bit easier. @* Setup xrebind to grab F1 and bind that to replay the mouse motions from the file @code{mouse-rec.xnl} by opening or create a new file in your home directory called @code{.xrbrc} and add the lines. @example @code{XrebindGrab} @code{@{} @code{ Action = Execute} @code{ GrabKey = e} @code{ Modifier = Control} @code{ Command = xnee --replay --file mouse-rec.xnl} @code{ Comment = Starting xnee replay} @code{ AutoRepeat = false} @code{ Fork = true} @code{@}} @code{e, Control, Exec, xnee, --replay --file mouse-rec.xnl, \} @code{Fork, NoAutoRepeat} @end example Let's try it. Start xrebind with verbose printouts. @example @code{xrebind --verbose} @end example Press Control and e and the recorded session from the previous example shall be replayed. @section Various options @subsection Using verbose mode @cindex Using verbose mode To enable verbose mode, start xnee like this @example @code{cnee --verbose --record --mouse} @end example Move the mouse for a while and you'll lots of verbose printouts that usualy isn't there. @subsection Using human readable printouts @cindex Using human readable printouts To enable human printout mode, start xnee like this @example @code{cnee --human-printout --record --mouse} @end example Move the mouse for a while and you'll see the data printed out in an almost human friendly format. @subsection Using a differet screen resolution @cindex Using a differet screen resolution If a session was recorded on a screen with another resolution than on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee to use a specific resolution when replaying. To do this, start xnee like this @example @code{cnee --replay --file mouse-rec.xnl \ } @code{--replay-resolution 800x600} @end example Xnee will now replay the events recorded in the sessions file @code{mouse-rec.xnl} as if the screen has a resolution of 800x600. @subsection Using a offset when replaying @cindex Using a offset when replaying If a session was recording a centered window with a window manager and is to bo replayed without a window manager (still centered) you can use the offset switch to make Xnee replay the events in order to get the coordinates right. @example @code{cnee --replay --file mouse-rec.xnl \ } @code{--replay-offset 12,-7} @end example Xnee will now replay the events recorded in the sessions file @code{mouse-rec.xnl} and adding 12 to the x coordinate and subtract 7 from the y coordinate. @subsection Using a window position recall @cindex Using a window position recall For some reason a replayed window may pop up at a different position as when recorded. Xnee can try to solve this by adding the @code{recall-window-position} option during replay. @example @code{cnee --replay --file mouse-rec.xnl \ } @code{--recall-window-position} @end example If a window pops up at a different position when replaying (as whe recorded) Xnee moves the new window to the same position as when recorded. @subsection Using no resolution translation @cindex Using no resolution translation If a session was recorded on a screen with another resolution than the on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee not to use translation. To do this, start xnee like this @example @code{cnee --replay --file mouse-rec.xnl \ } @code{--no-resolution-adjustment} @end example Xnee will now replay the events recorded in the sessions file @code{mouse-rec.xnl} as if the screen had the same resolution the recorded one. @subsection Record another display than the default @cindex Record another display than the default If you want to record another display than the default, as set in the DISPLAY variable, you use the @code{--display} option. @example @code{cnee --record --mouse --display frodo:0.0 } @end example Xnee will now record the mouse events on the display frodo:0.0. @subsection Replay to another display than the default @cindex Replay to another display than the default If you want to replay to another display than the default, as set in the DISPLAY variable, you use the @code{--display} option. @example @code{cnee --replay --display frodo:0.0 --file mouse-rec.xnl } @end example Xnee will now replay the mouse events on the display frodo:0.0. @section Shell scripts using Xnee @cindex Shell scripts using Xnee Insted of onvoking Xnee for every time you need to fake events you can make use of the shell functions as delivered with Xnee. With these functions you can start one instance of Xnee and fake device events whenever you need. @example @code{#!/bin/bash } @code{ } @code{# Source in handy functions } @code{. /usr/share/xnee/xnee.sh } @code{ } @code{# Loop and press buttons } @code{TMP=0 } @code{while [ $TMP -le 5]} @code{do} @code{ TMP=$(($TMP+1))} @code{ xnee_fake_button $TMP } @code{done} @code{ } @code{# Just a simple example ....don't bother to understand } @code{tar cvf /tmp/crap.tar *} @code{sleep 2} @code{ } @code{# Fake ls and Enter } @code{xnee_fake_key l} @code{xnee_fake_key s} @code{xnee_fake_key XK_Return} @code{ } @code{ } @end example This example will fake press and release of the mouse button and do fake press and release of ls followed by a press and release of Enter.... and of course, you'll get a tar file in /tmp. Make sure that the path to the @code{xnee.sh} is correct. xnee-3.19/doc/stamp-vti0000664000000000000000000000014312332167175011717 00000000000000@set UPDATED 10 February 2012 @set UPDATED-MONTH February 2012 @set EDITION 3.19 @set VERSION 3.19 xnee-3.19/doc/COPYING0000664000000000000000000004311010641032701011067 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. xnee-3.19/doc/xngener.jpg0000664000000000000000000011560412332167165012230 00000000000000JFIF<< ICC_PROFILE mntrRGB XYZ acspAPPL, desc|cprtx(wtptbkptrXYZgXYZbXYZrTRC gTRC bTRC desc"Artifex Software sRGB ICC Profile"Artifex Software sRGB ICC ProfiletextCopyright Artifex Software 2011XYZ QXYZ XYZ o8XYZ bXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC       C "  b   !"8X17VWvw#2AYu$36QTU49Bat%&)5Rf'Dgq ?0Wy r&+źrlÐ܏2$p8dFe!% q*unO[~?i} MKl]9vILAL\-BAotJUf c: ӞT}F*Tu#|jCii mԽJo_N/O:_"`~d덵-G[G;de윩\_*-pSr}u%%*Kj)KҍLi[1x[[nsA̴LCV^4-!d sY zWC:+9q &!8KYR58WC_U^)]w>wQs9|]wչ<]g+ɩN,[lGFGy}]WBeZh48n3ؖdjIn$бWf=k*MIM-)m3(%LO1 ZVM&1AJծ !ԲQnkTROFK?=N͒ )&Rl+/ZJFLjJUDBoɈ%JQ "#Rm3j#M2Rj 6v.RX(!eL2q) Ji2####XS53MvY$zMnϗn8\È-˅؇4bf19!؇!8}uRZ^ƕVhYn΅jO=e=Jwzr;տ O7 7֛d]jy˶.i4|M S)#HmBfKI9q>Cw4@ט,3,C1S8ڵog;,uԦٽYeL7R[|F(ge0v-MW۪EtXW|er9ڐ6⺿= 2ȹe)OՌPZ. ڝkX6Ihm$jlg8TI1j5̈ԥfiVefZ>2kԭ}LQveK[гn [6[[HihmhC6j4(MrҮ ,>Qn\W/HW Фؤi,bZݣ+ޫr_}.RdD oow>xͺwEUSQvVuʴBx;[݌0RZQ)dR$pthWrOȿf̬UK|:FD~#53Z5i7վ.V-V&i)/W{myJoUz?7so!'gZ|$n[V1U4h])-p9A!%a JsSI}i{HȺO۩HZƯLaD-Y6ۉBxi<6ZBz}UzKJIw׺3y9<`Zl1Uns`ԮM4[wTʵTi64g#%!j)'%sTEW{doܓfᶯiBT u:4p+ sS%X&7RTl1nR3MLxһݛnSz˟yq;8$r܌Γ/1om] 'b26Zcu&^p([fi>&t\x?_\MjGf{5YV>EQdȡ0v_R´(i3tܐe {1Cܼf$Qmu9H[m!L.7RBGZMWj?hZoM:z.7RRJodiL$XitЯVzӺǪS>+ƜY%iB{(ED}Ajz9zpf DZEEQ|RRR$5.Rn0&sR8j0[8ǹ&&v˼6\d37q$ۉ3d?+u]gۂG j+.Z5QvexW>#Ŵ;-ɈJiG=^sns*ԉKqRY)IpmѶ{nkZ䘖*XaNNCtwt[HiOq%(g['zi6:LlIrܴ;Z\fK.3%%[ ٢;Nќ?Alb{bS3E^j1&v֣Z6d) =I4*Үr=]^zۥs{ Ao5Tr7-9R9"3#3^k"MV\)[\si4vbnqK ) J_H#VaԮ[6Xz~/fRInHr+OBDd<#D8k51UF9=1)$d:E!;ȍQfnƜe"R lֵ!F`M=Z?O-=9'UO z[SuJLoDҸl*R̍JXUӎ2d ڴ+w+l8GTeLo|misog)ҁ'j-Τ^CTITf.Q1*BjtK$ۆq[8|(oN8w+FAfR[W)R 73H}m]+uWNnӫ5$AciiIaq w掎 N]tt M͛jRҙLR_ jrƊ3j%.Sh6 ]K~lJQHKq-HmF#C24rJԖ4_uWfŃND kfRB^9B|HW: ɦf6KgBqƫ-'I4lqn-J{Uò >Uы*Cwp4MX Zv,9eT*hZmKvBm["og|Uؾ{pX*u*e^f}))QԃSk4ڐJ8K,+7;½Γo,dXԓR3%JAD]=0 uޫ, ܖ7bJwmxt:PSSԜt2RbMnh6%9jҗS ~޿}CxEvpw/|Vmq[-#4՚hShrkC2ҤKo+2I8JM#31䞏\m+LvkiT%ԟIz49 -7BmIYҡ +;˷*xJʿ.5vwdЭ Oڽ%LW5!4Qi{6{ KpGN-g=Qɨtv:,;!y| $riYqdVwnU>:ەyϼ(c>cYSDY6f; s*151MM%8QD&ВⲞ R#MhZJv:M5J"'ZR&2([EZRC:޸ײ>L$\'Ց&H]*?dJ.pjc2|?W>33Ɩm*]&w"2dŒ-/d,s$,h6pWQt Rnjr嶥Oǔ̖-L dJ4D`;^y'RxQzMA)eGbk7RK4'M3c$ 'S3pɚ)϶ސUVUBsjbu)2`/hYֿ Žd|iol):{ 64Z iM\չKo5Ȝo6ڿ kcu[-؝LsFw]Q,%˲ʍ3bQS7[QX>ۨ!fkKF (K 77ƹãUFԷqE+!^-v%G{cbU#=_BqC3VDjb$V??VP+ZE=Ow&KqͮuoT|[okcav/Ech;v/Echs~a޻j:SX3iO%)r5<${g9 Xg59WtnwRZ#yo9G[V GDEWrĥ4pvBfJպ_܎g r zd<DĪ}u:5Ef1LZLeR[ffs0K2:ձ5ܹY;\%/p#uD]D$,dIUc޸4WzIJEF,tƭ=p)I7[_LUސ,[2=Ǿ7ե7KƁ̋\_[Eǿ  .gVUJ1_r* D'{vQg ƍ9;T l2&m-aSԄ++¾ 45/isx (3OQg Ɲz㝽sFdYHpZGG6oGqps-9:!?SmtXz-‰&THزҕ$̿FF%nKUv3鉓vɎI&RiVв=2Qწd3k낍~vSYl{iWU۱`5(gLcJ.wZ(L56뷬{C]w]M}&cLJKi:5U$fI#3Qa~QY* SB5:PmV̉ΡmJQ{[2ޥ# D\= Ԥ|2tslEmRha#ZM\%Jo#ܓ[4Vm&vJRE uZ6xc6uM*c`SbAz:xQ9IIdJ۳?6dUp\̾inW_RkQzvMj6z .RؐeO?% ]vyO%_<W뷕n=Ia뷕n=IcrfHkR7,+yϸۈ7 t*Y1R?1gǿaC]7g}u g?:s\.SmL%2eFZu<2fD==nGG5oaC%v÷i#/]RoV2-*B=vk)ffR(u\ijݽ.ѣOg+pqrö YheO&~ߩJTj|\ A1׻ [(qI%#2ܐ>U{ږt\6HCe]:TZo-&;4%QpDf$ҭR'icɧ|ͧ}{ӊfӾI1F%L*MPܧᬍZK;[qm۶}m;ZcZk*փԨ>=.9Xm-KW Fj=33 Zӵlj[ZʶVVR7+kRd'kRbRϴzgfKŹc Z^jDʴt#S*drV|JfH=@\׬k-~6ZFn8\È-˅x9fcr mAJۿym+%ȼ&շoH_;"n8-+~L2$rFLibS]>R` &nz7)m iV} ֞&1!*\4UV{Kmhf<6/UeKUMEA9Ld$pm=F|GGilڥvZFJ#)Tk`X"[V kJq̡⒔iA%%{@>N֡X֭ʵ*-OKFDVKm7ƳR„$QmG٣[5́. D)!VM4:%(҄ZdFAڈ^cޏ2"=eT`PW_D3:cMq'ngUolN\/7)ٴzρnddddJBҢR- JJd^ZJҦPȕmF;&C^bK$N64 IM&FFFd`2Ž4wiıMaKf-HLmB jCQ[#Jnr2=r1i8^*'re)2R^#F ҥ^xBj. nMLHL㲧!L&֗Oen" C"d6\,k;VR+6ZV͵I_gDZ c1- 1T}H39ݝcF>yf '4h/VL%riէgǿaC]7g}u W7Ժw5rPKp̮wgP|D|钶}*eHUToBBJUݨgLȏc.c&KVܗվ O7v^Z%{Ź6k}625ONGzgAܞ|;_ aiybs vr*l(]O3M 6pm~^,)uB25G:c:cPJLT%(ۋ2<l[I)R֤! ZA38Ӧ8 Y4;4-.UBR͸3.cVŹ$-jB:q&(Mԓ3-9FqBЙMS,/djBz͒Vm?øw,eu#hxr/--l\L Ԅ{%N(LSz=>4n4XKLIChBH$DI"""""M;!1ji.mA[Ԧ q:ܧfr>bW-rtc>Q) JHZD-*J*I켱eqBVj=gzkҡFG%l{!m%em`Q_HXP]Mfj[q.&]uA J3m M127HjKrI8\LьFFFFD-*%!hQд*$&Eɫsִr^%CKLbTd2Ө$pڒjQ-)Hm|HJH?Fvc;jukEYb9ʨba.<i*uKi58\J-Ԣ"2!5o}I7umPQfxU.Jd[DIdMKIl2.Wa;pcf[hCmֵ*Ц$3?׎[:5;JU*D\|r댦)3dۈq(|Jsci^C.G~~V۩4-&wcI_ŏ?Mz ΘPFShBDQTY*u}=I&Sfّ-ԙIظ9+yS|ƘvmfQjjv7PKQXj 6NG'MpUW+YI5,'”)q%FRIhIBk|.,uZE5u&G"NJH68A,>eAk/Q˖93䮓MWR],l۴EN-NJ#4-*ROe䤭)=z5A_P2Uvש9sɧr<%Kskc>jvh{бu ʠ!XA}"pvְ}6KJ-$ yMM1owsIx][r"38Ӧ8 Y4;4-.UBR͸3.cVŹ$-jB#j7Qg5gc` Fb\iJ߫Q' !\d6 Lm]lJj{~ꦱ!2ڇ[39JTJK$i%o_NǓN*N֖}c_2t\j{1i쭦Km)7ZA!'űӘέ9Zv-k*ڥ[XX7VR7+m־$Nn$V8֥(O֥ڥiXQ-Y3"cih VfQxdC ۘKc|Ȝl%$oϺL՞;զ;EhP+P ר/:JLd{vs^6""QV3ZfD9zkG @5ɺXO18٦JH ?GvTePqPnjQai?Jzg|sTM7SR^33Rn6£C(*JК3fO4jaKZ}\< 6`em(ҲmQ*B3C(ql͙?S'ҶnR-is|(}Q625JɶID J 4)ؿѺ*KP"rTSI$(BP! `4)ؿѺ*KP"rTSI$(BP! 'Ƞ2ƿg>~YRgtC+RrHҞ.q8;3s]!@0䳷?(# 홞:RV%?@cc.'/ti~PhtyVto~O SOԟ)ml*R8L3BO"u@gO{Zv[C׭?;y­:[th//Cɘ kT#O7ՒۍRn0KRµ- kv`4)ؿѺ*KP"rTSI$(BP! =iqoM^8 `֟VuOpzh =iqoM^8 `֟VuOpzh =iqoM^8 `֟VuOpzh =iqoM^8 N]t޸?fTaKqjZP>ĤNǓN*NOz*ޚiqoMp}Xi_3ir: +a|kUvq jԟ̢P"A}M)[J!F=JOiqoM^8 `Icn#7 5 "UmR:6G0&F{o-OG u_:1ǗMrn uRk?UqjB""e@e~.>OF%K5<&s2%S=o }fdqWX:~??@(L*koKy 7%c`^mc0zyX6GE^&VfSf=NaӢ.BY)Hu1#]C$IsvNrHZz [FuvũRXlY4N2+0JB}I jܧfr>bW-rtc>Q) JHZD-*J*It3n+w&tT wiWhIY&ޒ$bY%(ZR^4,/7)ٴzρnddddJBҢR- JJdA/F)- TiB375iu.%QCFC (u)RO{pOnH8;&@uuaJEf4w\Q'k>4FnFpHw .B_Kv¶N׆4Vi^%,s܈'[qջڒe-ބ]qYRtVF]]ʧJ_UKo>J=M%$i32/'nK1tw-vy OUS+7DO ҕ;{LWsX EWҬTu;|IIt9m$qA8,4q)dG ?}o;6DC[}WT9l8!ӭ%I2dg=OZX.-bdTtbκOM'FRR ̷=]>ed7aRɩH}˫q7ޒud5$->QnVJo.PK'.WҨ&ypN5 sl9ƥݡi2F,oшf=nsp̛|i$#۵mx[63C,+* *E>*]Ulv8y6x{)#QGjLk V!6Uvi[# [q)-&d &L4qVēIjHowm.DRrTYsԅZBD832IA7MT73O u::J)dkIE͎M.0FL뗛趖Je~_lcRtInZY>e;7FA% %&i }}yBol:S)͹\M֡r))j25-e $弓,q.j2yW1>@;:-B帝L/ j&eY(LeH!'ٙǶ䤙Dddf8 Ru*.KAjif[ԅLe\a5Oem-cWluzΣG}eypڿ1ן _|/p>ypڿ1ן _|/p>ypڿ1ן _|/p,2byw#ԯ)e6ƛ4ZB%)HsX>Iq(/r]=. wemteWYTyg^>ĆBZM*#c!>˕I@n :ꌕ.{ Ĵۗ_TYQIbK3&&\s*7,imELyNeZTu4! ܝu)Oj/@^Y695IKZk*D5!_4q u-\;l-:[^~XӷjR.u:/JȷBOnԧb?CB~_0ݟS/L=y*$.fFg(3ݏ\uH)ckfznk.7QCKRƞ-;/qW6M^($t׬[E.G6h3iTNjov=dfYP+$PMN7N=I\AV9\ndN+ߴ˄=٢p,|GYbTqĦIPP[B[4!IY܈Ȃ zկM g_X3Wz{uxpk/\8/s'/;Rq*ZqEvSQTlz%SԵFj5f ">P֡kSٹ;S/!Y~6%G㆕ - TiB/H/F)/H #чԷd_Q?fS&#kJDIKD:tjWd>-HRK%i.Т=*+Y͠jKp݉>ymԡԾ$/"VFyjֽ㥷Mnrs!KLA2ڸuH 4T|Y)Ot|^G(g- .>Lo00q65$D4i }e|chL-n-Du!F[[5n;2^A\hEyuF %&G,ϰ>;uد&s/ vڧaJ]6Mqda*3r?5B9lJdУ"Qtb¦cLuuREN¤dʥ\7D.3ntj+H.ĒykB;7 .D} 7>:h-%N)Jܖ2 H3"Qn[KrPY! BSUH1$>"r3Js'\=hn/4 ۷S+6=uv p="x@Zٸͫdpġ8&t&| #r"""#R֥P$kZ#̼!\Iϫ[8ɎGۈmKQJƶZPfI#uqj XH׶A CDtc.6݈ddddiZRhRRTdabUk효qҺ >'3R)F4Z 5u@:z:t}_rnuz6ߦȭRy5b6QZw2BWž"I+b㧫 Ue&cY^?f1w^[du"hRd<3t>3"NߐVx.>c[UyRjo˦0󓠑gԤ|n;GmɨRmkiu+ڝHpYDL"">VmJ|Edd D zZqTM}yљ#QkJR2N:J+cҫAgc[,KLNvuҮ%Ȉi=?&NK.R $s#t/gvoa{Ѯ )CSth_$JMkIG$";D=I~\r8cS;Q%-Å%\l[q~aےtՕF1,D?%:\7ԦH^ |IQ+#kXa7+-(&mRlI".".͇&Tv%%WcSn1aǐDX[LǟqM9̒..gmGºtAAS;,S3K|M&Rmw o -Hy։ B:J26/$M?:w->]c>{[lqפKlr]nUn9olZsęJԅqoL}2.>9f,V5ciUPWNsH-e- A$ Io W%5$…EܓQB$VOe;[#5HGlͻU.eSs~ .ӍS.zRݍmiďeVa2e_;HNU m2:ˉmDJ#2eO@@UN6Q"4ƞii%!hZLIRLc##!pXd+1QjX7OLuD%M)Y=m5$ze-U!iN]ClbYR's! FZ][_zn(6ɍ^r {Kd} GW t߇ctAL1\ U]bLWnd/y[8Sѱ/ - S\Tw F oL%FhħDD7:R1mcMhݗgUFe II҂32JK}" ly>fV}0==+FtϙL2ٳҹgLYWFWFiz{Uؖdo;PvG TrOM%O*mJ2RM$gD`fG.G=fLMe^,+LYiǕ=(q^U~ ͙"8?K.;Q} xڙ6868`_o7&RlNg"[f|+Oad'rnn;b܁qү8 CMcFnDsKXIJ2[$C@a+`0B5YzڌԄAue/[*4?hU ]ںۢF}& %[Y";%Oڕ%I2qě)w?`fgkyUfv7_*{gkyUfv7_*{Qi&D5;ۉ;4jZRL2.?=hMyo*U" ȧkSzUNfPHµ'O[_'}"Q%gHh:\{= 1hЪ&pJط"}}wGɟ~&>o4tm)yYdpġ83I3i٘DDDFJ4Iֵ%)%)DGi__oЧ ˣZZҵ[GWjLÎyV=#i+G2(Ў%:n-teVmUl7u8pDꏤJ2.KZdj#SqYk{P|SwKmVZq( B*hU':) ReĮ-}__.ˡģ m fgd^6zW<3+>͞#:gϦ B{\3|̬`3n3N'HKE:Y~h[D#NHqI?mc-hOM NuiќRv! 6͙pmMhY쮉5jjzUŻ-ֈ+tH߅DfG5fkej$,̍:zH4J7\+{Y٘ .V^Y#J&IY=_|o@]li]Ce6|z$TZ:35ZSfl/mWUvN֫^25vunJ_)rTNcMbRIJIqGw%XrHf"ܴKᏱ\nn#dѿoOEُ.}~`Btm-'DF[ghWoEC_j\p8VuauxP"F4| K^/)/-V +~6KrqiZI[YlD؈XNOɹ#w}2oR꼾q7ǿ 6w}!`O:=PBAASIp` NQ\v=n]}IbE͇s2AЗ(fD=}7qOH`θ;GVN¸eǬ[֬ q$HUD&ԈDz!HؒQ7hr} T˴jQRv%k;ke|=NnI%9߉E]@i͠#i;%*e4Z/P̸IO xKb22H-s=T9^WkBڋ$RV]d2F^2{Lb2iw=&'ÑC6Z:wZ3RKn$ > R]e挑*)2$ܨ-q+ciR Z>g˗B\hqJ}On6nhBŶmwtQEյQ^h*Ea*d\Fn08ə/ 36Wi56VLmWk|ƵFǡK2]T8KZfQ˿+ꌅh]$Td/3Gf=Xi_3ir,y4⯙YI^f"z.űn TD*63hq|_/}۳ǽNǓN*NMO<ě)w?`p#$Ot_V0s%Pfo4ƭUW@*wSJ^SinHW -EMd~Qg.,SM5*|oeʀL}&\sHZO0i4Bb;U9OލSf7^ҧm (Hu^ҏ'?RqBX1s3ܻLnAL t,l]zQDg_! OM;ˇ3y߾Ù ({qwvypo8 WH}&QeW޺N\IK$&fQ}\t=g6[=ՕTW)WI[N9rI$ȉO4V>+t\x?_\Mc\5 F)LgJ:f]mndDh23"ܑg==i%5HU6Ӭ<\A υI߳s\eglEUdӎnDܤI->"2"i-k>>n*MVSi7%JJrd $ވL8Vm>=" ]$Td/3G'!y?1NǓN*N'icɧ|ͧ} ߕOFB4I2H,y4⯙{OX юCl.j.مSuX_ ROcJPemtJHWoTe.}d"AHT cLҟy4o[rjݷZym/mf4"Qlfdli4lrZs5ݟ]HXʓ AFZ*CrHR<܍LliT T: MGn$8qK,Fa[iD!)"I$tjiT _jʅBDSi;!ÈYb3 'm$IB$Hվ+s*KY3f-SrɊⰪs$"RVG:t}_+]G l I`q. F^Vv,7N哮SIJ..m+Woћ}kqm;wԬ.دEn)FaL0}4߱F9+JwKPjuyBo4!N=~'~1Tā7T.ѫJn8UáYZ1R>l.ضmNg>Od#qOHlJmO<;nt)etܓ-ۍ%#%vh{=7NڝU˜+Q+VNS{nMnJY'$q+c$+8P){"uqՙq-$H\=˵W,34I_DZ1uV_T^ q?mBMEku[ݧ-Bwh=e 1ZM#em7b*Ed+F K/KW #cD֮ ,AZ*u ҺV\m4YQy6lc?rp[ӯ*kqRErKDtٙ!iz*xix74IRTrU߇kjT.ϡir9rg'HظxS=2>qV43Zn[c%Sn^%]r%+lːBMM Ffae䷵E~ZfmNZ-tS6*M^[4èG⧜ݝ6Rɵ;T7[Sij r6y%̛)$7uW%Ϳ=~Z鵁:z,޵kk4X|*4OQnp\wHSV>+tpxbҾ wX̟'ώě~,>e#¸zRJ" DmKRn85m[n֦Fȹ3"_6veɪW [ra N4gB %8rX&Ff|)0ZsiUBMYSHf-( >[{(I敭LsRbal WbďcVIgw];<&Ͳ"4]zSL̫:ԼiWQ"cEO**Q}*L5P>jGcvj$k>yT)GԘ?ZJÄ#%J4]XzX|I4#"1bیۘ ȤI?1uI,^ϰ! Ě#IkBrk+7̀=0OO럼' }s zy>?~\''B vJq=w^7¢WKr#%SAnRG3c+~ib.ծ2j4kzOVK$>fZIEdJIcV|V3's*%]XfOUq']}q4=~:z/j:T"s,vL.RBaӹN-m&HQi 㧫 WN~~5V]Vgȃ vDT\=-6E I{fLw+K^X-үaEqQc-ɢtҢBf[neQ}nu[5)ZwN3V(5&kkCm!-t|fk%_bvbxۍ[{fE_=qʍ#S[><Տd?~|p$سt|V3's&ş}6@ !VR+xs(7 dhQeQvi=i(M9\l.-mLj9+KJioFmoI=M_r=#yX:ߗ\u {Bi.|r૝ۆ"fM9v>eHUUOye]7\jI<q-[n۴}t]i?MhYOWELj3uMisSGMD{zbyVq[FiNĴ6ٿh}} 9=Km2iU]jUK2]N:hԵFj5؝&U6 ">fk} 9=J,y4⯙bvOWELj3uZߍdtyd{WeC\R*:eG[&$(Km}܅F8ֽmZnNBr$8֎6$76YlFcq^sY3V|aLzeVA2q -5p_[n_c-{afb5Z,K*}ގ}BTҒG4[մ-L!d$V+ǐʟK؎8-I#54XrkK ]ЩtN.^&~.Ծ +O﫩//F)- TiBwG.JfTo~oOx㟃yEτ6*OڛN5qm0k-LT2;6[Ϋh>3= FȔ;/wxZ81R\eaOM)թK܈,)X,.-{䫒ޝ\1Q MQr;O >[=F$[>fF(NemD#bi adDN*;ZRfF?/jNр Bes7,5gnrer1)sD$\*#Y$['I.;y>η]znjq*B[鯖V~:REF.ׯڗќSb@u8]Mz]}K.5&$"*]%JZ#w)$|#Ipu\q9 M n-zڷD MZ3 J4NrZtK%ȏtSq5EZy;rNT&\< n"ԅ#D"InZqin}dFXmeۥP%(ٔR!d6 J"5pE5}K5-ëĖ[yT^IYI܌[^m;]86.$b'aؔ7"[[(CRKL#Yٱko1^:R)Cw DvWˎ>QҧRd[QW:vܳ-ψo˪Wsv(Ȩ՜Ld<#)5 'KtqGM(VʚRؕ)(@\-OCHAsC5!_FG’?*i/f{sݷ-qqNz:Np3j8) 6I;Td ,aؔ,awdk˼,>q/Aeʴ9^sBk-+mA+b5MY[+x<m"%r,u9.zΤԓA3%F쌤Ϸ0ŕ+=vݚ(7R%k!L[NH]~kʯdeZ=*ޫSQk6TڻK3*2&}I6K*KFDP:퍮ےf'ȸӛpS+S& hq5)d' W=K@-۠7L;F%pQ!0Ss_m ŨȐ))܋EMYb2bVj6[6*Mi JCPB8m$j%Knޭ?qEcdomWuN5놇>nˆu1\JN:Vi܀t=gcv ʶ@=oS)TcgQf^Eˎr;i%lfd_eSlk,KܭX8z2(,I]KgnҢܜeȯ:OhϵI boܴ[n.""ZiIy)'iW)3r5vg.TX~P'}]NG/{^j_FpROwfKv?OU~IZ3/*tJ^@mJ! EX=i~(DF`4|ۿ`;:4`W<O(;_n |ۿ`;:4`W<O(;_n |ۿ`;:4`W<O(;_n |ۿ`;:4`W<O(;_n |ۿ`;:4`W<O(;_n^&~.Ծ +O﫩Xzg]Tzf{dLD;)[ZRnfdB'TX~P'}]NU4u)O^γNd>GXsѝoof۞(,iP/\9uM"ߓcK㊸S\S|ql"vc20 zXw4'MX[8v74=cX1WrمƄ:VD[(z^=,Y͘w ~V=,; zX=dzY,0wK7efzBՏKƄ?i8Yo,?#`ه޸Пg5cýq?jǥG2pzyfX?6a4'MX\hO3cf̰~l=,Y͘w ~V=,; zX=dzY,0wK7efzBՏKƄ?i8Yo,?#`ه޸Пg5cýq?jǥG2pzyfX?6a4'MX\hO3cf̰~l=,Y͘w ~V=,; zX=dzY,0wK7efzBՏKVN֬+Zj ?I)mڜ-eۙLdtc#O 5p)\IRxHirf-Rc"@ִ֫jZ kk' jJx msF"ҝurIe:)uVdMd jJxȸw2-ـ*9GR(uvZyUXLz|p0.4n+Ogi f?Y>՛kEs"]ÜIOqp![£#Irـl|2dzw{QnXj5TĄ ̸m(EZX̟'ψOhucⱙ>OWELj3uP[XP ]Qtq5vf\9CMe|].{ґr]P cҗ娋f[ūdQoIxʷvjQۗ'tP.xۓۨAlڒ!8ݥr"V`ѥqX/ 2m=Rzp,J|gmflvwJ?_wddb=s.D*ة܇_vݴIb.BtʨϴV&G,[o>/[k8Bҟ=.U[Atd%nL:&mO5kJmJ3?mՌ*%aKX+sl'QZ4%84IB[k\,Y"YhP_ S&zʣMMNBܟԜm’QI4rԴe%%ú|ŷ2Ϸn %.KAbFF+Ha#mJR""""/h}`"XfOUq']}q4JX̟'ψOh T(M_ŭꈿtZ(~8ܚM3cvJeBIJSVD/h]8JǰnELj3uxnee-3.19/doc/xngener.dia0000664000000000000000000000364610012122110012155 00000000000000\r6+8& ؙdG'iwJ%6! J[ McC"yxIsg/fIE=p/0(ӫ8$fqoZb@ɲ,GI| 'J;{'G2ZeK$Qdy5J{Ϊ^YcCͣɯPfa[v8s- hu_΢|kD2( )ub%{Ayyka%&JW`e~nB(q+ R,.l[gQRl M:;$;qcͣ񸜞^49׸!NˆZy<6ŮЯ7W%kײ:Wfÿ̨\G(xw- @Z]^< )EXxVO W3*t+H9HV뺧0<¬J9LM<`8uaJsQ̍MD17*П1MWqbtAa:s?h'K8q(69!V{1<׼7ksD㈹C8 \}E"3Igꮙ|&2ֿf++)FA|@âP(/==\gs4}\/u.*@q/-\\HC@I1 8 ]cqKDlqzkZk?^%b4rgB0ׄ 页k^Q'$u}POSD A@bl^ۆey,Is(I->D Fm?O!rÝ""?nU Cn:BٷMh;1r3i0$ %r#WElp%6 jM ^Ij#+4SoJ3jdgefcPfm2CV=/?3:LA4'(*۳}&wxcʣV/<[lrT1;: }TX o/5}]eu>ϕ,,FӴNϒWyMAbDDzZfI=Y %DSk1\;6[65Bw\dko4.=#.A5dUxqDЅW3Ʃ+LͤWVLQ5,\aCqwca(8Q8A !],%1DaHeh\HfU ;#>PܱA0y-[Ž_/ҿa6V q.U K/]4I S r+%=$!ݹuupCk:$~a@)V%tT!`)RAv9WaF}G'}sN`QBW )OY؝lGkmBTqPyUs SbZ0ʓ V4**(BQvb vaQhV!J,:M1XAIELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC       C " V  !W1XY"8w#27Av9QVa36Bu$qt%4br5S ?X3's26I䱱v^L| .419Ţz(fcM,fO* ?&8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp]8ǷKGtp܏v{"-eC-&C[%($g,O[Zv.?Ep\Aƣљقc,95 򚺍)$$jd_߯ope(>DLvMR]fD]d"hLau_TʌYQJЈRW&85#y.T=  Kw=GePiݽB*g5RY.2mD뮣ZT|'gܿ2%P;MMrBiKGRJIm($jH_ boxβ-~3 z=Hmzk6"=?QhU]2 wmfҨH3L8͑nG[R8IO0H#3mš$3P =mk_%k_豙>ß'ֿ:?Ep\AJ:[?! Zj #/NпjΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HX{cWNd*տPKUsÊmHVТ&i=5#2WJ>};''m7ăO-/oҏn5: ڏ)ߙK&OLyG;-7;צS9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|HhΟ9<i$ryi}_l|Hhj*J]SK2[e6S⌒%$j5O9<i$ryi}_l|HXyB6qO#ձmXĭBWMb""7]e_8u' Rۼڷ4Cݕ>ryi}_l|Hryi}_l|Hryi}_l|Hryi}_l|H{o't=D;݆6痙e9ŜleEE*2G:z7)S$h1sEA۟aCDLϋ9R^8P6LN:#mH|DF{[ m/2ˑs?9"ʋ)Udu"nR &XIs{bNȔ~֭M? s/ҕ%y撅-MDAW*w~~,ܧfձAW-s: =Q) J+Bd-)RM*IdË%agM֓p ,bTř2̛qMm-֥6Qpr]޴Vw(ئQkmKBRlI4iq)RK$Ȕ] #X<Ô>ۃp]g1I!J-Tƿm VQ) IZM*"QC śmW7S}_E7䳪<;>֚J7wwZծǵ߲N͖L1%YUwrPPN?ԢINI)XqΚ?9WSX_*ҳ~/ ݸ(tے:Ç^IqIm6;%$j%);lGS^_5dQ(EN,x4AuDImZIQSG0(A9t7jVhJzm|[ [z7،yIKW6e1Kg sPV*LNʔhY%,r0uTZ%R5:HȔE6rVމ\42HFdddd-*$ IдI4$e @/0&UomjNJz Zzhj[M[AmBG%Z4įĭP+QTUn}_CJҤ(IRTnSj +r9ƝIԌDi2Z&$֡39Am;!+C!eLM3Cn8)1("RܖjJIMcmK.8G=}_RTs̉"ߩ̈IϦh&ded4j.ctW-V߭B'ɪ4DV"fy ROCJW,9YJO(Fh;uQUW RQsEB@(G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7G^z!7 (G^z!7AFzW=lNٙZ_9LZ abZJ%EQ Hj ~9{MVC,eR)IvBȒG'GX:6Xe^+N"kľ2F\G_UoΜm)):RQ%^oBi:6Xe^+N#K !З{Y@z ,wTc}x;#//B^fx_*l>ʼVCSeU<  xDЩ*ZwqM?Wӻ:/k7t%^oBi:6Xe^+N#K !З{Y@z ,wTc}x;#//B^fx_*l>ʼVCSeU<  xDЩ*ZwqM?Wӻ:/k7t%^oBi:6Xe^+N#K !З{Y@z ,wTc}x;#//B^fx_ݶ_&_ n{֣Rݢ:nlGKm-O]4~i;8u >JyH5G[dDf/ui-~rL :@Qpb.mϰ%.@yyNHӼfMD mW=ժEkǸ`ķ6hoq6-VkWZPFg0sh3ֻ*Cf)וR:3RM(nwwHmdҷuQ85a܀Wl |a3T;kTfez: M)#CZQIj旤NOgoܟv^N-ceIWSpf1+Q4잨8mU=㲲,y3EZ6FkY"!QФ5+C=OO@ `ioJD׎=T TmT;S5))d'ԍL̋zrZnJVSX:PHRJoTJG$̈PdǻSyg̃%طLr+Q0*-[uG^$<65)D[6֍ZLGj*q~Gpo)bݜӭN-= rA%"5DjeDa߀r Xv+^.6>Ar6͇s-+#%%H#-=eBګ hwzezo`nuM̃yQ4T *4FZ\9Lbߣ2̕5pZ A˻ć9LIZM:Ե -)zF'zE=lx 33W|hEt~Jhw.їM:ԢDŵ;z*R6C&Xil7+U5uf|*u:$[!o|ey$mo']5-CָaY)tӪR9ƓBq]Mw{Cӯ -Wlo}.v'A؛荈d)Hg/bo6! ;`[PcajA~C*;Mn;"[d6Ҍr:5wFuQU.g%ԡkUq*2S]IE+B"Qn[환BSh-'cHfZ_KfYsmS(8z8ٔzSD3V.F}}e\mK$9PjzzD9LsiU9\fԂYEon߅2Д}XmAiűFISexJ6uInM$fdjfDd-rַ.giO4Hu(sUCD1ZzjQuꀫ9+) Ɂ.*g Z 31dhmW2FƈqFFUS[S^?#LmBm6}Pse8_1ęAY_P]S{kEvGs2;.GRd5kr_[Q͞[/AzrپöX<ܦ*Mt\4VfΦ3iJIm$0Tgmw$|mݳ2_rT*}̀;K(B .G9yĚiuC5{lW•%ƊqU2YTĶBR[m:hfg*Wg1V_QV(pfz G)*RRj4̴=OBt=kގ*F&K#&Zf^Ll;&0]{RoEGЦӐ|y!l"ZR)d,v}$c=EeTZJmtkȞOLTJR"ܦV>ZT(/F7q&i6yF(ܲ:j\>TBy1PJgqi'R{#-t2+)T|VSZ]>wmDh1ܣR[ J$鿺[ƝNoq-f2=QүK:dy:sZFaԕD~<+^tS:z 3O^RSjI=M&b k6:&٥; ]C;94礿"1:GMDRB.u:$]G.emE@++Wv<4g4%Aȗ~I 3#!s˜N.09/k6NwDg(ԃns*7s'y,%6 l+j_Kkƪ *?O&1~n쯊eõiȋ*pIV8JJ$eKؙĩLBf۬>[ ʞO!(tq+樵CԌE}~V;X?yaP>PX,/)qaՎ X`;_ `@A`^۬8E}~V;t\l'g5c(, u{n~ XaqaՎ/mX_ t\l'g5cE}~V;X?yaP>PX,/)qaՎ X`;_ `@A`^۬8E}~V;t\l'g5c(, u{n~ XaqaՎ/mX_ t\l'g5cE}~V;X?yaP>PX,/)qaՎ X`;_ `@A`^۬8E}~V;t\l'g5c(, u{n~ XaqaՎ/mX_ t\l'g5cE}~V;X?yaP>PX,/)qaՎ X`;_ `AM6ȸ$dvL RJ1,%Mk&ԭ=M}: Xcմ8v15ka"[JtUW9L8sqrTn =FC#.TgO*gdƋNk-G5v\5TP&G`rypaL5Vi: /lٳ.xlr< 6l (D6}܃͛>B@/H -{f͟xw fϼP tA^ٳg(]: /lٳ.xlr< 6l (D6}܃͛>B@/H -{f͟xw fϼP tA^ٳg(]: /lٳ.xlr< 6l (D6}܃͛>B@}.v쳱3F=n÷*2<$i{4PRm"ƻ3Y ǜ6n Zu@R+oݯg꼐C?U?`i|9[}N~?iwk 4fӕ3@>VvK@i|9[}N~?iwk 4fӕ3@>VvK@i|9[}N~?iwk 4fӕ3@B.<6\WV \O'HvН TRZ=麭Z**?O&1ir]&kmtr% 6^m. 'T]_z9mSBbl߲Cߵ;_.9mSBcK@i|PN= [~л_9mSBaCߵ;_.4f[~л|PN= -Cߵ;_.9mSBcK@i|PN= [~л_9mSBaCߵ;_.4d&Йwf;2r5&}QC+KHY[N4&[9_5PZŭꈿ3˕bg'e{rU)RQ*aRÈIyfDgռ4O;q }T_?={iGo!V׶vn4XgOG^~Utu[׶vn{iGo!VEtu[G^~U`={iGo!V׶vn4XgOG^~Utu[׶vn{iGo!VEtu[G^~U`={iGo!V׶vn4XgOG^~Utu[{pedqS˗E^˭UdJT̊._qf8l ̈I8h}`#A T ]I h-vRl;:|W6MRb"eϯ&l_v>5RT:-XˉDyO)ZIYhj"5nȿ-mv۔'$*eTENhJd*;R'yߩ~Kּ)[:Xy6En[CG`"_'E"CJB4JI,!?;M [)Q6o8>TeOyf>QB7rFK@RW7Een;:մo+e wvae6֭Z-a w3Qif5E1ogI[j=zkC$7z(NHT*=TdДTv O6:RC;,{%+6+UJBdRO'TDJ#q'idrJToid߷ BwBez\).RT@z֢&m/}$7@q9ZeҶM-񱸿Hj_ĤQ*GP&0_ݍܣ)JLឭJqJ(qJKF4%xaYxs#V 6VgNJ Gri]9(-dRs7 ȴI@4Esntu3iu'hZ_-zP]Ԫi*cSƺs=w5AHvS6wH(2ťY908MBG~q12Ez"f龨+Uf["KTzBtqqh4jȒDZU ZJ"$!I= fZ]9k0jJCӅJLUG(fKvСkYH&2RS4 D"=#VzOA+/QږcxtuUvtɾ D$_:O鿫s{]榧M[-IEB2}IKN4j=I=t33-=#9s[mVm;pSQWq)IR:xx˨C7ܳѳN9ߔ iPFs)NƬ7R%)EY5,[S)X,TܲE1HmJ43^XjIMIi$̏S _BFL@b5&Ѓ=2QfknK6m>*ך8_JKL̛CF0Lz)*%ծ[սKnRBZ!0\ߔ8H-7wSk #WX QPZŭꈿ33W|hEt~JhyT_*(^Rה|3[齻^}sǸF~i3!GM'.bFm+/6iBw̑(u Kwg#H!?Q&N!t6!=pcڥ7!=%KZ[dzEy7J;+ŰOu8U֥uS˛g|7 ȷ[M#ߩ="-G[iֳ]<8rH҂5)<$4 6V"jЪQ !6jIe2ԏ~RgwT5ڣӣTU ѝD6DѺ8m9+ͧ][j5!ksu;{/FXK-k߽mjUYѫ2 LYj^ zdLJRmIY%IzLU=m 5;-N!ĶS)yJG>h#rǪhcJčxzzFzMfG{r|V^enLh.q)#R$YWRVWiY6Ԗe!m8= )YzhF?z-Y:diAjg#Qk(e/,kθҡ̵Ŵ& k&Pr Ms&4ۋ/6+L{e"]o?U,uTͩ QODԒTMH%ĄGQAxmֽl}E3]B"[*aZ'N$(Ԍǥ Tie\Fe1([=}_6iGg-^m>I,:(qS(%[Vٛitj5S"OO6G2Kf-&ԟHRUh:BHZ9{ԶICDI34Qc5x[SCӪ(Z‰1iI-$fh322u{eƴ{CdS.ykѣ=#pi'yЧY8噟1v-+"c,U6o.U 4˛ ~JmFhC0@Ut|vM&eɉUN ">i55f$ S_;Χq;ԺOHΛ"F4ڛ*UK{$7tHrD6,F(┄nwuJ׽pkLyU^J;v7I~Y%hWEsK-4Rn z :> R"$îӧY 1.K{ҒiBjR^!og rTZ~Ym{q4Gl=>FEio,{nmˎhr< -qRKDq*JL/GWIkٶOreZ{~ *KpZQ)Ci"5%$j]_+o*?O&1ZUyQy3@;^Ͽ\m!GI'YY5,ymeRd:Fj󬩕mib1~QhO|Qrc4:8VФ2˯n6ͩJZM*JRQY|a! _p7Ds̝/tq/;^<4Dms/" }{G;|ޢGE?#@tOV>! _p7Ds̝/tq/;^<4Dms/" }{G;|ޢGE?#@tOV>! _p7Ds̝/tq/;^<4Dms/" }{G;|ޢGE?#@tOV>! _p7Ds̝/tq?gn"mñfnIzeŘ$ӈI"r\gLEbɻ}\=.4f%Rq!(Z%U DZrƈ;?.|/wlcp,:r2# 9y2^o%*3u޽5-y[~-PQO^ _o<ywQ17wy=wtRV\FQv*&6ʋW/6e) M0Ҥz @-e(]>7Ykҙaҙ`7Yk-e(]z)q)qoe|Zhwgg}fXtgg}fX#-e(]>7Ykҙaҙ`7Yk-e(]z)q)qoe|Zhwgg}fXtgg}fX#-e(]>7Ykҙaҙ`fՙ$^")<6(b8ڇBCRH=ԵJ3R֣33RY,5j_V)E. Gy敤tKΆ0~[5(P]X(Ѣ)!l'U87ҢӨU 9ͩ|Z]֯.biƙoDDpkqG7YֺfQʥܖoC䈐2n\m$JMKCE,+4v]g;h+[v"!Q2Ko'!HYMz|đ$]^;VPdMq.)\Y>?9jͿZ}N=UrD:;[2"Ԉ됆sc|jLt;e|cuR%5V-h̒IΡZ^Wqpe넮jVUk{;îΙL6˯H_:547/IMm5Z\1*ˈyZ_kRqM5G~.0UD-Ŏjaڥ[FM& 6PHe4eIkV18ʖ.7V[NnѓjJд)RT k9&Rsg6ł┄6PM^hRtjZ M#?'gl.Eʻ"rYTdRIH8sq}Z"TռEl}f&T,siU=P |GnL&iGW3!l+ȹS!1n5{SM[q1"dn:n:9pН庮L8*ds*R=lx:5]7^Sq<\,0ZcOѰLm>u.$Β^5Um֤&BP`Ia%8Q8J#"=Q+R]zS8˜*=>v^[&@G?pShI(ͽ䨌%/!߫1]by\ԊM61,N}Il2YJY"/코p.bW-rtc=Q) JHZD-*J*IQ-]*pU~ޭt*IqyrSZIoD6"2 $IJ)fZ.IhF;55ZK$P/D5^IRiiNA J\R`Όg52222%!iQ) BIQ%I2) 99cP^Y{]F(7#ђĨ~OPnF%P>/[tmBEJf<=Mu (qG;&KFZZ3m*'RҔm= Ưvj3Jfh)JLt$dB .a۽ͯzM)W*6SI 2.nCILI#!("I-)K4f񍕙H-j]G"˘RtEIWQ$%)m;ԛ/d.PkڳcVr*J:ޜ.6d4JğhF׏2嶨jTxZEV:ͅ)qYh)'dd=0ժ.RO]j]PIթ$rE BI8Q%%(Z! KNVFNA J\R`Όg52222%!iQ) BIQ%I2*VuX*U &>۪6jYulJ&e_bl˷m7e UsRIXJR*QݙDV'UIҖ2R[y rI8\LьFFFFD-*%!hQд*$&E JFv TP'ɶ?G~FZ-n5qn8IjCc˛)m Ypd#-RdiTχҔN6OSHguD QDKKzƸd7 k]*MzY%GyHS#XkB>uZ믠=NzKy:Ve,?$*1#.j[{&d楷 M`՛ ΍mvcljOQ5-sh_hh.,b5yE 8Z mZQ蔠[a*F\ɴ-UF5:J S32b>Oz&ӗ켱Ut<N-4yhURջ̡RLy-(N:t<ʣkkq6ӵPJrLMH0{i&JRШTȔm:;q!ÈYb3 M$ II$DDDD@M*JBS"Sć#)e6Km6H%$I$2Jv\jO)s]r~>(7'gүl۶? (7'gүl۶? mBs[Aҷ-MIa!WI sRI3 ̿5-dm.ݔO]6|MX;*lUGU\W69+-#R} A,;'r0Ĩ;Z\Mn4}(ү#R4!'~s :Vh.O}v+PTYlͷ;)jB q667b4UBDSiۉFRm$m%JHI"""""iT T: MGn$8qK,Fa[iD!)"I$~yemocݺ<㤦333)QzM?_nޜkkΧ8׫O3}j;IKɌSNnҫHIG)2*f"4鮅H2/k6m OpeH4~݁\,E6} kp̽*3Qy;8<7Y("y;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/Hy;8y;8/H-sr_ 4z&>M\5i/5ϻ"pu/-JjdI+}WF%$^@0go(,(ګ/ְ&]i5r+/n0CM/pZhQY˺]zDDIF1"3'iՠ҂5z@vnA*#z^vBihBRe2"5$JT}f^W~DΘ/%*.9*Tu =\M%$)01=j$EըN=q&6컪UvLǯH[8(mWd]24ޑѳ(PfgPcCZm2wpIhNu ƨ^ihN55nƄ{ڒmFzn^Zد0bo/w1ub77|ŵLz1~ ;Tecn%7Yꈺ=\Cb ;aw[b́O*d5݌n y!#6ѽԓԇC-z]*r܏UU[1 Lr <87wLU=3>ghk}ylTh1Q5Hn:m!IZwcl/xlUzYU <i]TJPy5C+AMԍ@=3f+BҼ^ ͽYr Ðˑ eRqOn *Ri$[B׭fX&P$Eh'D/{LY5Jtx6G2Vj-{@m eͧTc۔[zJ`HCR(c\g Hd\]ky:2WQ2͋?#XzÇ.G2eWj*!Q79fTfBOtڛɰ.L2IYjHu!HD GyTM2SܰۯΓO~ҪUaiF.iD6)'JTNq?}@;2g/USOt_F?xnee-3.19/doc/xnee_general.texi0000775000000000000000000002201412272275605013404 00000000000000In this section you will be given information about key concepts in X11 and Xnee. It is vital that you read through this chapter. @section Modes @cindex modes Xnee has four modes: @itemize @bullet @item record @item replay @item retype @item distribute @end itemize The distribution mechanism can be used together with the other three. @subsection Record @cindex recording When record mode is used Xnee receives a copy of the data sent to and from the X server. The copy is printed to a file. Xnee can record the whole X11 protocol, not just mouse and keyboard events. @ifnotinfo This picture gives an overview of Xnee and the files used when recording. @* @image{xnrec, 10cm} @end ifnotinfo @subsection Replay @cindex replaying When replay mode is used Xnee reads data from a file or stdin. These data is either sent to the server (if it is a keyboard or a mouse event) or used to synchronise with (if any of the other data). @ifnotinfo This picture gives an overview of Xnee and the files used when replaying. @* @image{xnrep, 10cm} @end ifnotinfo @subsection Retype @cindex retype Xnee can retype the contents of a text file. This is useful when combining replaying of different recorded session. You can change the text written in for example an editor (e.g emacs) without having to re-record the complete sessions. @subsection Distribution @cindex distributing Xnee can fake mouse and keyboard events on multiple displays. This distribution mechanism can be used when recording, replaying or retyping. @section Ranges @cindex ranges What data to record is specified using ranges. Ranges has a start value and a stop value. The following data can be recorded: @multitable @columnfractions .10 .45 .45 @item @tab @b{Xnee name} @tab @b{X Protocol Name} @item @tab core-requests @tab Request @item @tab device-event @tab Event @item @tab delivered-event @tab Event @item @tab error @tab Error @item @tab reply @tab Reply @item @tab ext-requests.ext-major @tab Extension Request @item @tab ext-requests.ext-minor @tab Extension Request @item @tab ext-replies.ext-major @tab Extension Reply @item @tab ext-replies.ext-minor @tab Extension Reply @end multitable When specifying the ranges when using xnee you can either type the integer value of the data or the name of the data. To find out what number belongs to what data name, you can use the @code{--print-data-name} option. For an explanation of the X protocol data, please read the "X Record Extension Library" or the "Record Extension Protocol Specification". @section First and last motion event Xnee has the ability to skip recording of succesive motion events with no other data in between. This option is intended to reduce the number of data recorded by leaving out unnecessary data. This feature can be invoked with the @code{--first-last} flag. @section Delay Sometimes when Xnee starts recording data, the keyrelease (caused by pressing and releasing RETURN to execute the Xnee command line) is recorded. This single keyrelease (with no corresponding keypress) might confuse the X server. With the @code{--time } option Xnee can be paused for a number of seconds before recording/replaying/retyping starts. @section Verbose When enabling verbose mode (@code{--verbose}) Xnee prints a lot of information about it's state. This option is only intended for runtime debugging. @section Human printouts Sometimes it's hard to decide what data to use when synchronising. To do this you have to analyse what data is sent from the server when recording. Instead of reading the data number, s tring representation of the data is printed out. To enable this option, use the @code{--human-printouts}. @section Invoking Xnee @subsection Command line syntax @cindex command line syntax To get information about how to use Xnee's command line options please use the man page(s). @subsection Project file To use a Project file use the @code{--project} option, e.g @code{cnee --project xnee/projects/netscape.xns}. @subsection Session file To use a session file use the @code{--file} option, e.g @code{cnee --file user1_session.xns} @section Interupting Xnee @cindex Interupting xnee Interupting Xnee when recording or replaying can be done as follows @itemize @bullet @item user specified modifier and key @item limit the number of data to record @item sending a SIGTERM signal (e.g pressing Control-c in a terminal window) @end itemize The prefered way to interrupt xnee is to use the modifier+key. @subsection modifier and key @cindex modifier @cindex key It is possible to specify a modifier (e.g Control button) and a key (e.g 'a') that will stop the Xnee session. When using this option make sure that the modifier/key is not used in any way by the applications you are recording. You can specify a key+modifier to stop, pause and resume xnee. You can also insert a mark in the recorded session file. @subsection limit the number of data to record By specifying the number of data to record (@code{--loops}) xnee stops when this number of data is received from the server. When replaying the same amount of data is replayed. @subsection sending a SIGTERM signal @cindex SIGTERM The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm) and then press Control-c which will send the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you'll end up lossing that battle). When using Control-c to stop Xnee you must be aware of that the pressing of the Control key gets recorded. When replaying a recorded session ending with pressing of Control your apps may think you are pressing the Control key. A simple solution for this is to press and release the Control. @subsection Stop Xnee with key combination @cindex Stop Xnee with key combination Xnee stops its current action when the user presses the key combination as specified during setup. Xnee will be shut gracefully. @subsection Pause Xnee with key combination @cindex Pause Xnee with key combination Xnee pause its current action when the user presses the key combination as specified during setup. Xnee will be in paused mode until the user stops or resumes Xnee. @subsection Pause Xnee with key combination @cindex Pause Xnee with key combination Xnee resumes its current paused action when the user presses the key combination as specified during setup. Xnee will continue where it was paused. @subsection Insert marks Xnee with key combination @cindex Insert marks Xnee with key combination When the user presses the key combination as specified during setup Xnee will print a mark in the session file containing a time stamp. This feature is intended be used when you want to mark an interresting time/event during recording. After recording has finished you can add Xnee scripting calls to Xnee which will be interpreted and executed as if they were recorded. @subsection Limit number of data to record There a a few ways to limit the number of data Xnee records. @itemize @bullet @item limit the events to recored @item limit the data to recored @item limit the time to recored @item send a signal to xnee (SIGTERM) @item use a selfmade record callback function @end itemize @subsection Limit the events to record @cindex limit the events When having received the specified amount of events from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. @subsection Limit the data to record @cindex limit the data When having received the specified amount of data from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. @subsection Limit the time to record @cindex limit the events When having recorded for the specified amount of time from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. @subsection Send SIGTERM to Xnee @cindex SIGTERM The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm). By pressing Control-c xterm sends the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you'll end up lossing that battle). @section Xnee plugins @cindex plugins Xnee supports plugins since version 1.07. For information about how to write plugins, download the source code and look at the plugin example which is delivered with Xnee. xnee-3.19/doc/xnee_copying0000664000000000000000000000071611544153751012467 00000000000000Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Henrik Sandklef Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ''GNU Free Documentation License'' xnee-3.19/doc/xnrec.jpg0000664000000000000000000011253312332167166011700 00000000000000JFIF<< ICC_PROFILE mntrRGB XYZ acspAPPL, desc|cprtx(wtptbkptrXYZgXYZbXYZrTRC gTRC bTRC desc"Artifex Software sRGB ICC Profile"Artifex Software sRGB ICC ProfiletextCopyright Artifex Software 2011XYZ QXYZ XYZ o8XYZ bXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC       C  "  _   !18W"7VXYvw#2Au39QUt$BTaq%465&brs ?0JTЦI 鵪5F`5QR[[qUi;:P-O:RIRTjQl>TE;|mZ8nٸ)X̏Nzh(uUzM-ӇKFL};ُ(H3RV& z[VЙqsnn&5Lq=Eq3_ruFtU:Su&DE4^R[M¥GR *Eǀ3牢wϟ.-ӕqDz3̊uӻ Kqe*o8jRw{c{=rMl="%4sB-u4LI0^$u Xebd_.-bjDBcɣ> +(O%=[]ayUbEФJxԚ0q4namg´вR,zH5KO7dn\,BƤdT4 qG8K6K5T$O/f|.-M5Zn[2 «4˱>Z;6d>G<͚uJ2TruomӬit%OTCn|RdZ!eCJQiJ3j}̖٧ƪ)˦ݯ"*1"8by{!$փ2J̠]k&16J=Rn\tQR9RjFFlon<(5K>?osi>׃?7={_xRycjZ[SjǣeJ0 DS un2H [`[1\koSPj2;in:MFxɓ4I%'MrZƚDt24 gT"י2/02GgqO;q*$DJn?tMu^-+>K*[չOɪJY. ܝ4Q)aj'/iU*oP]x{!G08=qI%|K*!z9ffSoe4W ̣ӨJB fӜ\ ښۖqf*u^WZmR^]au2Җq)"3Jdf+YrIzV$be*?! l.wRW B1!BvKjZO2Rq ]_lJZӼdIBl~r㸶4E&NA!iRͲA#?#?nX_٦k}VXͩ: TwS=8zI>⏍MFe[Խ]hja:b9fF/Yn.j{u0',H4d&rF)#^ ] Mi5Giiw+II~rLÏ>~Ov7Dr{VYU]&|Z/HFkQ1nE[.Ŧ8HC&%Wׇ4s,L:;Ϸ[%b5&.+S*(`ҥU^.XqeV9CqLLFDDDFJ4Iֵ%)%)DGBꎠzA, GײElJR[ҽN# / (ajnPzWBXvtzcq_pJ[pި%R)FFYxM|i(}RZQ=k4+ۚ"/.}K sIBǖ2~lL'}7%qMO7rԔ˜ޏ y UK<\9K:@abw.TT+=QhQ&us!жM/ilij#D&M ]Z]7.~?"H=p;+NS}KsԎbI屟,Ó/^˻(XJnRٍnS)I)jwE& $9]Cb&Q\{r)$w;6 u'mJeĶ+1iBLG3r%wo=I?~7إPjŽs~6[{L9KmvYn\≠}dG !9D6{-z|OfiT@['8jbRGhipOd9IJlmKW%!w+>dދEs&p>Ռͩ{*Sal.Rtc}*E)o]&J݁IrCC2^R[Ku :[~ZG*cV-LaT-XsZr^6I m|Y7BMu!ťfDv]4+լ޷LJREa8%-\(Bd؈ϰyX)XĦdi]f۬oryl7->%ۖdgyۇ]mb>\MXZbJDe ˕NY:l$9 6[m!_9 Li7<+bLP}uWlz}q&Jum8Ke0i.4l vs!u,zda  r#@xJRjqk\وĤF҈꫷~'&&`,$A,+js;oM: 0ߗܪ%7y*Bp'O8ƒWR2;uzFEr7 %L9 cd68W"Lf4. ͮ#E5S93X[sݛAOF1.]J}FF6Zɦ\2BwZ̉)%('Ul4jg*V<$IhaBlfdk$!FHSX?P_{OR,9'bʃpcW^lݖկt"y:Y*OȬR۔a} y#qv}ۙlOR'l \yn$NL %G iC)qfLuvK*ӕrX~oJR;Y&e~Mm6IUö@SE}Cei3m?OG,Q[RnHEet5U>t0%8+6$8җ֮Kʸ@\q\ !YF7iTy/w;IZ4: pkDӗŞԇ?u|F̬L=c% ᫁ 5+b/#Tuk^س %q!ىUͤ6#&Iϼq&SЉisd%:Up Ojö٧;xV딵d-k6뼾3J8SRD8_-BqtG/siu*Cg%:ҥ67Xum9)!3K$<&p`X$Y$Я[+DѪLrdZ渒}\ՠ%(n-Ծ($z@~5CbIǏ#R=e@-Yȧ:%yW)F6i."4wVZpi fTaPE|s[KyS٩O1IOȗ=nknDΦKT3JGx#_fߠZ=0KM9:ʀrvO9h~"tI[֒w+oFa.e]!,2z}$+Vn;62"%p/8ڞn<pfL8:h׶nLGd]T{3OrTBy$[%;vWSSP뭵.k;4Hg'S-qr\rPa 7a-8Rt|/`ķ#d"LC򟒴'-nFqp$frX Kg}LYYzI| Q8Er&j%)_5(CF>4mGQMLxרuŗ>ʇcƽCoFN x @c2-7m68c2-7mЅuk3!RzJMj;K4ێe'T7fIF_WAC=wHOG&Y/ìSbΏ򤲗QN3𨌷5?ތrG&Fë7>?ތL6v`|tXV}B*gx9k"-~gày(K> x @d.iV'^=O@O7̟)<|I~k@tlQeQ}ʴ)oƝ\{sѿʃ&呯ljaMfW/`Ww_# \=2,vUZ:]КbMH%Ե+e4ɘ?PP?x}}ʘ|"73ۚ5K{~ta \7F@ _zYU(e祟[jH~0%QV62e=6^C8x\i{;fCm*GNɍ[틪")wuJr)rKNsdG_p%^hC%F [[=ݘ܇W$[4ZԋzK‹). '=Ϻ'|;Pu- TTW܇P_A+b=-2?0tKиnXWD8PhR8JJ ٓse.݄ecn.U嵣>)* `ϖe dm$Fg$C1nIW}W~o4Si.3mn4d$JmG3CtLgҨiyJO2i%jO=tZXT6H;3 EڱQTk+[%LEQ{6T` 4OKA%{l{Oßf/⣨7JGQ(n4fK^9eEa* O nͧchnk5)r$$g TuO#C,94 ͔˭ *c\y#'\XzU㻼{yyhC|-Os5ETqf~BtJidj QyOŊ"g{%ē3 ̺J&Do+Ѻu[crXyL>p֤DpY\0v:rRfǂuߧDVqGJB%!5+i;Ŗk<cirJoyCd6jRjRBڶdy~.`G]Q%$jYy stv|DW.tkێ*=R&GFwN:v%N8n0( 4rte{GXt)S4{΍Jٓld8|-ʎs#!+2BTۆIRHܲv>-8m;Ѐ h2Ϗ[<۔5}z:\Jb*D'R)q,mF"4IVpCm*JbƳW6RقRԵ7/֍}nx v?ysm|c*V[91?- G;6?5#u=Q풔I7?{v(9, ?ΙiTrP *2DKP3n,f˘UnI$KZ-itΘN⣔2giPviZ"\qc6f\Ǘ­rI%*ZԄ!kMxO'dzM1^0^Ѭn5j#^FiA!II!60">uSLr)kWkF׹Pn18Gs6 W s̆ldoYc~>%L4FmoxqLqN4;Ι.UBRR\".cN$ B&@yFmZ@+G7@Q^2vԵFBw5-HBTƬuj>j`h[s EJmiC' Q*y| 7ie;j3=fz6cdP#&Yz3<%35Fli#4(cA^g4@k_],k[а\uә 1+JvK7:)ǹȈ21NmIeA&О`ę* [SDi#u6,fIq)fG:"0Վo:W.=fX̃CG.HAs_ S+ܯ]BҎ8ծ8]z5X<%ʤJQFee|)'Y3$д6)Δu]Ѣj1ش5LU:U!D\+4S JtH2cLD)(ZW]U~_a\D$f\W’u2KJL Cn &N EJ14H}m[I[RDFfgDC54 lka!R*b,%RÊKO+c`Ҧ$ s6fʝ%RN456$:zY5)Y56B%>hm S@ٛ*tI:d$ؒwidԦg[ڍ FܔkY)Mh& xN❋}iPwu2\D\ǗbI%)B!KqLqN4;Ι.UBRR\".cN$ B&@{\ӿw3 s7\X6bx_Qv/C.*1R!XmDl-'H{a=n V}\21NYq ՝XjYX;*ߺMؖA%Ҷ]V}o묑6j3>Jw=@lx Sy+^;M\5IO)!N3mKeIQ(Q}Г3K_(C_(@\LiW͍g*l#izkfNYy˫BRIZ![%[qx/iS~/w *KP"rTSI$(BP! ]^@J^@JK@fWP;%k҇WP;%kҀZZ4iuzk>V(uzk>V( -]^@J^@JK@fWP;%k҇WP;%kҀZZ4iuzk>V(uzk>V( -]^@J^@JK@evMf17Dzݳbڔ93sVRao) 3{bRDgٹyv]WΌqzܵ[7n&.SYhG!)-ϱ)". TH`MOCJhqdK#Biv ڇM;_ īqO`i{Pkwz{Pkwz^:mi^:mi^4fvzN^uDwWElHTT*KE-%ԸDICh3B"mzՒKGbif”8*)*I_/7)ٴzρnddddJBҢR- JJd])Ne7N5V]PI)ddZ FIKIR"B4-:#/7)ٴzρnddddJBҢR- JJdA/F)- ibr%Z!Ҧ]-\jE{I %$5CmcڭCZr]!1i0e2Q!/l\\(2Ind&ZkfViCvӜrGnF>DĴѯeqQl5b\uRm. L:cH4'{l%pAKT-VdF %ҧٸN(t.4.Bd9?&E7fw=fա@'}.>iW ns#""` $ۊM^zԩRAgUSHQHQ\[m?{ŖS=R/(gQS<ڌ2BV  _(DID[+E=&׍ ~.Zg"͌sc%h>Q)Ue>{L2եrK+h-6\ H)l&s|O-[YnEd7,0ULq p[N4k48ӭ,m8IRD2!:ŶuvAb$`Lը Cݨ{;[CNjcclưn[EuĺJV*o:$fb̏}s1S9#hГ2eXԜ+Ft 1{6m6]Kݎ5(DD`-~M+7xQ7]jBU$NѼITÜF{p[7=hw̻Tlnz2Tu ͔f:fA6i%n.PZ}:4w>?fzZ K!MIYt(IRGHl67uʶ!O`=Ĺe[2p(S"% uWJwOUĎ2%>m.H.%QЦxum?ĝr23vH̔Dp/+ދ߰(j.#9LnKr㯾引 -xG"2 PuUɏ1(Vq?io6J qL! n 8fHe3=w0i${R, Cn?5ԔZ[Ҥ={PM,D\/|3ٺǷ&^R/4%)UȪٵHI(7!Rչl܇d_UJŻx -)*ݫPT@Bi+}&D(F{B50GpՍK*\B9P3"S1\bC/IFoFV\*vLꔙ3ou]z"d*lډ68 5!$H=KZ;'&Pk JMt~-%!kB&{BJyUX{\m;uvDoFc啫,*2#m=gw Wey5G˚>̯EVJt͌gHq ;_|\sV"GvùTz&M6[N7BV#BAӱinC4~f ~3 9EMueZw{#Tbpws\&4n]Ffdc4lfۨώ1RIC} Hf:bNpԣWaڇM;_ ǯ᧫P,4tӵнL=tӵнLih/j64/Sj64/SZ3KڇM;_ ڇM;_ Ɩ {XbW.3|YEj-*=*cϴĆDO۪嬉H3BQ6f;6qoW#3:̌HZTJBТ%iRTIRL܇f^tH%c[gA6iUjedeeP垉LzVuP#K~3$) ITf䶂B+Jj~ܧfr>bW-rtc>Q) JHZD-*J*IT~??8@+V]2ō_OTt(҇RTDe*>{p͹-*~Ww6Bզ#DR&QQet*N*-yڗIs b, d= u2Z5gU{w{B toKw^гnDju-nb.KN k5>QGz伥Bn4t{Vn̹F]5ڪbSD>ĔUi>3u9.ݎQovuIh}sΆ4)KB3Kdpn*^/͔eu\si mJAJ᜶dQ\l2lTPr* YZpiQ q KV33R^sYk՚tηm(9Fm4#)dꏚ?ƕ|)$p~yN*LT^Fr%Rڋűz"O4 /%Yz!VM;hKefj%{ ;-thzKJLJPrDfĦ\$&mD|M15 r D+%i\'}'\"$۞V;\Ujs.qվ:fZi+t KΖ[,g7N1-WN]Y*\AHj_%Sx:**-V|3'ptsU1wjFtl;λgtԡfC *.:g{!8ovnJ9Y9)khݗM~LGmN)3A)dfdG͎5MnVzVerr"u>Ob%g´IRCK@f~3KY9v|,W3S>ZqwĔ8u_sfH> - ib/H/F)/H #ч5-3WGj[2g1VLvʜgsBbRҳRT#Т>k(;nzwE)sZy1m^;!+J Y(д(m̔ ϱaΚU1gZJ~](&"R3dGj+f$$u۾Qe{X-bkJ EBeFL|;hN[NΧ&w]L֣2nI%Iſ܋؉o*㥳C&JIܘb's8Or[3kJQTD6Zi;pA]S,9$G5= .W)nf,8%;F;2eN\O>ÇiNbbDQ8K"Q$h=t[W}15JVZLtjI줒3NK~ɣ#^M%-~J-O9jm\lN{Ƕl^i__n߱NgOY oا 3q'myh T^Y/ؿd[qs=ܱ{W/[oFTyZK-OU&LRIƩI|"*Տd?|c1eGP2ƹ5O1e:3mQwoE3>gwm˾ЖrV(}#7pVD9r(5N?3q.<<ĵ"FjԪ*vSQc.ȏ%$IMۉ3JФ(Fdddd)֓tE]v ?SԲ-5(kRH:ų%u$]$8JJ;)+HZrY-` "eÃ.n\l04(.%IK# RsJMZ_CЪq*4ڌvÙĖI)[q&iZ%̌:z:4}_Ԭ{Nu<Ԗis]#RBI/r}kJI&-̻7۰Pn =_|jZ˹Mu+ލ^UXiX"mŶ3渄IIv^Ø\UJ\u(iI,Ƣ#2"Q݃֕cs4 ];YGd|PdӤݽI=!^lAb|c>WF\3XJ%R}M29fL-7K>I) RȈH֣VI)0*>խu5p1S 'RFԄ.$i_{twڧQOM.a(R%N+ߴ~pPWxߘV1) iJRILD(ػ[pV.݌歚vu sN#Q&][jϗ\n[JAꕘU 3!t 0w-AÒliu)tt]# 'J|F @hK,0 Kd).Ĥ+څ;xk=S79@b7l::i/rkQ wԱ _ RTyuv;H@C%q*Cnp&n%+>(,jNyZwݧwUViutzOFnLwّhԇtJI9T~~,mODU? Otg-Z}4jz<]t>#'n21tAAS2y2fZyUTۭĀl>$edϼQ'T_ԅ77A&ڊhW9O?>4t$Iu))̓kӱvPάՎM-ɞW>,Uahp+q;Nl˲57_X%߷47/Ri'h]Z%q8 JK'HIqf0B9&׵NLBU9FD|uirmߴcF( 3 ;1.`{&.jPNRJRQfi3N1"+(h0Q^nzRK`S^.5)d+#I?FdvC}} q[Y)!E)&]FFFFCS 3zXՌmmB.SuJW KFI%?J=ǭ|KJ?\v^ŏ>>!U9fԕ% gOb!3Ξ?Za=~ZCg\Z]θ-:5NJ/%yd$mo_eD)wB߂` /Vǒ#R$S34Ls2JH>S:f, -ՙA\-=ٟ {%IZfG.G=fLMe^,+LYiǕ߄{PU~M͙"8`3*~MG2J1y}_HȒIZ#q"J@h/F)3 X[Ȳ?;  (4{̋oUۥ(><֡\|6ej;Rɕ?mlK43~QfZ*vj4ڌvÙ,É%6n&hRLJ#2222H6S]7oyS=|Y}H:3ś<7ԅ[S=|Y}H:3ś<7ԅ/l먭92Rvs%pcҵ8R+ˏnxOb͞OB Ե5v*N ңJ1ڝi'Nqs\$!$o4}9 >XwKwՍnTFLJc|f>\$-̸ba\Qg_n|@]^tOHOX̟GDW'SRtp Ac1D)Bd$#庍elddjJHR}ʜSEYkg.puraAq(JYes5IԺMZ_CЪq*4ڌvÙĖI)[q&iZ%̌akK?5ϐbJ.M2K#:S̾iW"3&%k$ȿn8a+[ 1s䶖%rC$'7^sҎdk0~z/u'8̓Eզ3}JeHzTj/0amp9UEHR =_|jy\gF\+T\]FQ[r^e('%)\;nf{&ۖPֽZoçv/7PiO8JO,46*[f[FfHt'S wj[SI6[n>7h^~AG[pѥȟLܖ2=D{hv2͡uѲ&-uҲYw50f"hq6{H^DZSd¯ļծ rdՙXJLɿR&g5ǘe圯eUcɍ4c6%5J ԦE2"J_ue?|C SqOكi9w]q݊:̢֧R$ڝs6If{w!tAAS2@ݗTeFvե kK`eu<+s=3b2=vden]4LKzw4'0ӉHp/mJ4Fev6:NP`PV@.3Kd& "2A'O=~Z:z,kk+GH~~|l^Meh<2h%&>&f\&[{{VsKr޼/uzX|Nl4;3S>U2CC5vZjA-p-8v3{|3'YiX7k[KZi˯f[ҳRC )48{:FJij&BTI".FurW,],ib>fP\M +If'K3YBM DG EV֕U|sܹg N(ԵN0KJZ[I8"&i[ZVWk۹΃r湜58RN*,e8\d/e)jo$Ȉm2(K.;Q}x"t{㿥Gا e?~wNXGH6S]7oyKW7d*Tk.VB(vLyҐK#Gp̏کdl]r2Fr53ʹ^aٔ)h%-ƛA,"YI .( 7+̴4ŗkZ"p*=̪bT)/mM6Rk3sk7 [n^y;DʎTM)6-AlyS1jq(W5$p)3 py$X62?H5:d6%LT䲹)|6rYY(R~Nb{Zfg3INm5茺ˈL&ʔؗTd\[~A}(y3/!_hU_gh"wJO7 #Ha&SӺP$b{GJ?LBk.6G@*߼C _y " -j/BsC{ ѴQҎu-^v~*{ԓ=dYw)JQչvEǀ3牢UՏd?|.<\q]y;)-4K%?\pvιOLtYpOG8i?RS ->9͹d|\jt4eYMwuVw-}IFDGH-J35n8iGJ8IXUwUgr߯d*)$dJQ-q(dT3Z㋚gOG_w@NzəsOtyZ#wEMuWr%TV&*k$-;ùdpgG_w@h TLxVU"vL˗*mFuW}o\)V3BRU]+Xtyⷭ=۩Z>Hʕ-GcZԎ:i6jo.ř(FտM~]qQn*IKc9%1mǢESmB8J3ŋ_ue?|C SqO`R~??8@3V;4XgOE֭~wm`PvY.ʵmj4tnj~(O֒FI-3"49f TK\ȵEzhܕPQ$FDZ$j - ib/H/F).tЬkVz3oU*2yKsp p =Fb#>Z'3XA*c2}>n|AXgܚ:ƕˋZTɴ(ȍkZ J=@=} =P:'3XA5/čj~B`!N} =P:'3XA5/čj~B`).@44c{kpj ?`jlsLEv:PrQwuzэtN[}Qv"SmHW Т&i=#2}$lP~/čjWGH/,:ٯUM-i6q*3 N ˇ+ABO(n\WFW ukǡ@۵ZA.]_::󄦒I6ȋn'bKGWMrZ[Oƌ S%-{H>WoٛƇnضV5 ]$Č.-:k#undF9KIMbʔ{F :bG} >"Fj{q0";7}mMpԩ/%q/9 .=wvշD-{n4[:M$JwQLǦ*J?LBk.6GBGɟ|Mz}4(bh~*Տd?|.<n|pسt|3'M?WJlP \'\.T0imRZ-q ГVFgjƦ)Y;*BƏhT4N%24Sy1-ՙ=O+<ϙQOv!Jz]F}q$J[6%4|{/t"#uߔSe vgPrveQܜ)ܹfIh_@,;رgclL{(ĹP\G'n1O.2HisD؋c2V;r/BbD"+紗9K#XX| 4#K R]#l[r DԩmCi7K)&2I"=$k' '}鬯߳63&_jG[|E]oӋ(;eyuNIZ81wtj; 8f7rsfĬZKfApS$4ZkvQ*4j c 23ǐ̔.2cౙ>7>"{D"7k[sjB$5 ajA %J=acuRv-ܜ){,;ߦ]3 UWSmyOr}lLа w}`Tz35_L?vnLT;~BJKZԞ L=Zް|`1q?jǭUƄFѧۿp:tiUƄFW&zF;_nƊᰈ3-mbRB"F9Ϋ V=l:4'3MX?X>0vO~:4'3MXП5ct`:4w 7V&+i˧Ԯj|=.J I!wП5cītR폹L?7yu{][t{㿥Gا(K.;Q}x )ptpxbҾ wX̟GG6,]+M7[ynk B;yRk\B+I[`a\%xqoxgaQڋ6? n<ǒjC,Ȕ$]A];]ԋ漰mm޲WFT䶆.9?mB)3G`0SPR*/Ŏ.̐H'd)"7VHJRJQs=}`t]i?mhY0vͻ:8tc|U}Z**>ت>uIJĵIK}q?jǭti|`1q?jǭUƄFѧۿp:tiUƄFW&zF;_nѧۿpsW&zu\hOg`:~|`F;_nu\hOgaq?jǭ:%S \*|?]bk:.6֤dd`7{B~#?Տ[Qnx\wHzE,]/ٱ݅pfATށD5aSNJq) 5lF |3' I֛~,UzCWZ>ĵBuQ2ZAv&Lqf' _'l|R7f}8ui3>:3ś<7ԃS=|Y}HCH!o p_'l|RLqf'  #_FgӇ\/#3ìS=|Y}H:3ś<7Ԁ@:֢^X%j.쪡Mm8Yꌏ'g|i!n~بb͞OA)N,b͞OA)N,b͞OA)N,b͞OA)N,b͞OA)N,b͞OA)N,jc2}>n|E]xמ&O/koP;^?Giv[*%5T2NJ&ܷmXN건c-kڪ^wM: ȒZ8p!iQn]Qv,&X4FQ5Di$v^}/%JKδG u(sOg|`WscI)*RL##?y]uzX|Nw !+/"F!+/"F)w]^>_%Sx:**q7Kȑ~q7Kȑ ]W9WT^,|ʾJz?M$oM$oucUU;׃Kr޼.xxuzX|Nw !+/"F!+/"F)w]^>_%Sx:**q7Kȑ~q7Kȑ ]W9WT^,|ʾJz?M$oM$oucUU;׃Kr޼.xxuzX|Nw !+/"F!+/"F)w]^>_%Sx:**q7Kȑ~q7Kȑ ]W9WT^Kug`269\m:֫qe>,%,M2Df=]>CW^DCBY IJrX-@ Qnx\wHzE|J4Oz@S;],.|0aBߠRD숱dN50DMjQ"qT5A%5ăql>ݼCVqn Ћqaѷ2ҸQO+yOuֶ$I|E r'ҍ_P["}([(><^E_=qҍ#S^(ic&,ME'o|@kI(h>7 Kr?s[[T+طUvfw'*-%[I-ԶbR'wkt2Wj|F+8Ǻi]gg.t8*UjmQi٘KEģZh2Iې]UX>^kDRMT*+Rl.7Z$c2"MӔZUFF$TJ ԘlMMg"Z4 3 ؗU f". Jm=U*ͨɗ(8|۱[%˦<]"J{)lԆaD$)d$r.8~F(- >jb - ib/HuURqw\,WweĮ݉64iцMZYZZ#b鵟JZɵɎ=ٳ*B[ 2m26v qW-L隨vp GHi6O%/pnlA/dm:0}T K+S+Zl]6[KBY616y%HVafMfFێsjJs]kd o ϴ:̮k"qItmdRVYĜMR%C 6<sGԗi\qd%$}H4SY|sB5p^ngeTQk*V]Z3˨ۋrTeME-4;SkQWnʴ?uU*x~GKa]'R<$>(hYIyjЯ5e]Un\~m]Oq*"rBި-!H4D{%k1=m1./6f1To*IPNJ& #Y$)n7FѮQ휑nT01>mR-*")sA64:d&+~QdNnң3N:4*\׾5V([HnTiREuk8rжʛ/]b|wߚqQi--dnbX\ܙSko8wt|~sZ֧)p VմE6r#KVi$i<) J4+hgSY,B2Nr[2qJfOIIlsi)-DLZ/gL.͸S|eEȶ,yٻqӧӤ03RVʤ4P>K٤A`tLźeZΰ.f "iTf>2hee3B fKJ1IpLe}JY^"~nxbc)H4żt2”jqNq]\yr҅Iבk"nLWNQz4KIiHCT.Kmi%Mz.5klW NRv1+n;P-[mCm4V{Uɫ4Cq%;^Eiu EoFSe5m!i'(MVVzX16*j![4J9['H',C.I 8mFgJZĥfvk=f`~]K[oN-p71$5qZy?cn!Ve^Ɖ.ɹRI,p3iĩMjH@S::6NJ*jT53 TgJbLio ?tIzǤ9a()GtRnɔYF}?*2y1yjRM/KCw]y[,=k c)i*eŃ˙&l9%p~c8JRӶ5 s$WLIU%R#TjrR-JIZѭKt\+R-|aS}-bMۦjE)(i($hLWRkZ-HI:EߣkH/qBlUJH:|Z)wn>weĮ݉>b:-38znMS#"Aʵҡ5QJ'cNpMJA~\Ǹ.j.X*6.FcJL3%V+d$5ֹHG@S孾tgK/dJNROeo`aLE˹`{1܃?` >g%;:0OFb3;hj[LmU&Liʫ P^5y{Jsvl͗l۳.uoԿLvZd&km1FQRLiy/8)R֥fffffqٺUR"P-:W^g7$l>#5.2i#IQ)]?j[߭Bj.مShRmiBԓR#3(y3/! T*J?L@%-2b/7$7+Iv5]۪۶*9-QZ"V(uzk>V( -]^@J^@JK@fWP;%k҇WP;%kҀ6|ХZ׭J(x;Tܸ-+GN*-˱I#.!^@J^@J~)X⯩Bv>-8m;ЊOZZ.❥N*N"JiT T: MGn$8qK,Fa[iD!)"I$fWP;%k҇WP;%kҀZZ4D;Lzӎs5s]^ ܜQ.zw-j{bOF4LjM]˨Ԫ6= \ɒS} \qFjZԣ5I`:qoI,3.Vʹ,8Yy46ժdpЎZ6A%$FjIcu[yA-h3b;Mfc)FmʞԤղx^±1^^۴vrq&HDhm)5hLbW'TXW%WTTLbݿJ>ɹ ap3!R2粩1>-2T%QDoabRu "؃xTZmRg#"7Y{R\I332%Ԁok; SwJͥë&#"+n fϜug=u׆p >4Z[W 5r^ZǠ,$JMhhݨ{;u q>Vm #Ɗ(&Jhߛ&DD،*^ N6g/O{P TpYoq,}$`GPvѷ/<]v[5jmb[/Ȩ>t>iqW 6Y$ԝ̈ѩ\ e_ ^S.3S\'ے(u{p4JVȶ20X GbBT-UXOjMHJMF9I[ukby\2t͢Im& f)N$i34n[xl_ ̭ūjm&_n{!H2 ҏ'?btె70"<7oyΜmt[o6F KhFm$ )qD]QҰ6_Ӧ[K! Qy!9((CN(Z!f|ou&f%yczۆRZR'dRnJO|dG,SnLCjTa[Eo9Sq}蒒QRdS[o]t'(3^U"$ΕeBD" km<2U@^Զn{kh/(?7L|G3kEK5(︞1݊?Fz.=)R⚉R[#BJ."-J={:I2xY2%^^jnt*Sڞ5E[qaR^ku8I%sU|E}8\źn¶o^jLi.)<&%M7ڈi5o}@<i`K3 J)TQM qK3B]-ۼi:[D5D~mĩIȊhzQ)2#ZH5:(Oe‰Yl˹V@4FNu-]qIi\)$،W}mK)YUkT,B )Tqsc) 4tχ}ԛ):X>PV_Ig;re.txU9i9`' .z+z>%K\nTО~D*RixdQhs|qŸ㻮z+vzڕ!!~q߾! 2˜^EvVhƸլL7"jqf6mʐF-ҳ/lֳ%w|_]B1(" )DӫdZFdE ؾx%]'x,a{O&~!*;c n`3.VʹŸ羋]wߐ!V)uMG"3Q"8 u3b؈. ԩWʴQM,|>ʾUz u*icU;CSKiޢJX}|NTZw(R>e_*ӽD:4*V / ԩWʴQM,|>ʾUz u*icU;CSKiޢJX}|NTZw(R>e_*ӽD:4*V / ԩWʴQM,|>ʾUz u*icU;CSKiޢUGɟ|JNXGWSKiޢ.=X D鶭֕>C-%)I҂32JK}"Ptb>i8PsZt$C4%U #;|j-ZnPS%_7!ԗ|l Ѝԗ|l ЇR^\/B4XgOR^\/BIxp`=Ixpu%_7#Et%_7!ԗ|l Ѝԗ|l ЇR^\/B4XgOR^\/BIxp`=Ixpu%_7#Et%_7!ԗ|l Ѝԗ|l ЇR^\/B4XeN:$0"WOl^*s<;F$̏oʧk^_EVE e,Nl^JrAipҤnDg?&/C'ZSl޶Wq)/7+lﴤ%ڒhpt3\X5b; L^ U䂂7%%%mw%kB\J#yX^q:”ҸI_QDZx'lBq'myhﵳhTPz.<)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+)?[?.!+[?.!+5hTPz.< remote.map } @* @* Store local keymap: @* @code{xmodmap -pke > local.map } @* @* Copy local keymap to remote host: @* @code{cat local.map | xmodmap -display remote:0 - } @* @* Replay previously recorded session: @* @code{cnee --replay --file recorded_on_local.xnl --display remote:0 } @* @* Copy the original remote keymap to remote host: @* @code{cat remote.map | xmodmap -display remote:0 - } @* @* @item When starting Xnee I am informed that I am missing the RECORD extension @cindex missing RECORD extension Your X server doesn't have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following: @item Can Xnee record more than one display? @cindex can Xnee record more than one display No, we used to consider adding the functionality but have no plans to implement it anymore. @item When starting Xnee I am informed that I am missing the RECORD extension @cindex missing RECORD extension Your X server doesn't have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following: @itemize @bullet @item XFree86 4.0 and higher Make sure that the RECORD extension is loaded. This is done by letting the Module section in the X config file (e.g /etc/X11/XF86Config-4) look something like: @code{Section "Module"}@* @ @ @ @ @code{Load "dbe" # Double-buffering}@* @ @ @ @ @code{Load "GLcore" # OpenGL support}@* @ @ @ @ @code{Load "dri" # Direct rendering infrastructure}@* @ @ @ @ @code{Load "glx" # OpenGL X protocol interface}@* @ @ @ @ @code{Load "extmod" # Misc. required extensions}@* @ @ @ @ @code{Load "v4l" # Video4Linux}@* @ @ @ @ @code{# Load "pex5" # PHIGS for X 3D environment (obsolete)}@* @ @ @ @ @code{Load "record" # X event recorder}@* @ @ @ @ @code{# Load "xie" # X Image Extension (obsolete)}@* @ @ @ @ @code{# You only need the following two modules if you do not use xfs.}@* @ @ @ @ @code{# Load "freetype" # TrueType font handler}@* @ @ @ @ @code{# Load "type1" # Adobe Type 1 font handler}@* EndSection The important load directive (in this case) is the following line@* @ @ @ @ @code{Load "record" # X event recorder}@* @item X.org, XFree86 (3.3 and lower) or any other Xserver Recompile and reinstall the Xserver and make sure that RECORD extension is built into the Xserver. Please look at the documentation from your Xserver "vendor" on how to do that. @end itemize @item How do I build VNC so that I can use Xnee together with it? @cindex Build VNC to be used with Xnee @* Download vnc source from: @* @url{http://www.uk.research.att.com/vnc/xvnchistory.html} @* @* In the file @code{Xvnc/config/cf/vnc.def} change NO on the following items to YES as below: @* @code{#define BuildRECORD YES} @* @code{#define BuildRECORDlib YES} @* @* Download the Xfree86 distribution from @url{http://www.xfree86.org}. Specifically, the following dir, (currently in the file @code{X430src-3.tgz file} ): @* @code{tar zxvf \} @* @code{X430src-3.tgz } @* @code{xc/programs/Xserver/record/} @* @code{xc/programs/Xserver/record/Imakefile} @* @code{xc/programs/Xserver/record/record.c} @* @code{xc/programs/Xserver/record/recordmod.c} @* @code{xc/programs/Xserver/record/set.c} @* @code{xc/programs/Xserver/record/set.h} @* @code{xc/programs/Xserver/record/module/} @* @code{xc/programs/Xserver/record/module/Imakefile} @* @code{cp -rf \} @* @code{xc/programs/Xserver/record \} @* @code{vnc_unixsrc/Xvnc/programs/Xserver} @* @code{cd libvncauth/} @code{xmkmf} @code{make all} @* @code{cd Xvnc} @code{make World |& tee LOG} @* @* Verify the build by running @code{xdpyinfo} in an xterm in the vncserver and verify that RECORD and XTEST extensions are loaded. @item How do I ensure that the mouse, during replay, is at the same position (x,y) as when recorded? Use the @code{--store-mouse-pos} option. This will cause Xnee to store the mouse position before starting to record. This position will be used to set the start position before replaying of recorded data starts. @item How do I ensure that the same window is focused as when recorded? It's simple, just make sure that you record the window getting focus. @item The window pops up at different positions when replaying, can Xnee handle that? Yes, use the @code{--recall-window-position} option when replaying (with cnee). This makes cnee try yo reposition the window as it was positioned when recording the session. @item Xnee seems to mess up my entire session after replaying a sessions which was interupted by Control-C? Xnee records the KeyPress belonging to Control. After that the system sends Xnee a signal which makes Xnee stop recording. So you end up having a Control KeyPress recorded, with no coresponding KeyRelease. To solve the screwed up session, press Control (which generates a KeyPress and the wanted KeyRelease). If you want to keep your recorded session and not want this to happen again, remove the last line in the recorded file starting with @code{2,}. A better way to interrupt Xnee is to use the stop key option, e.g in cnee @code{--stop-key F1}. This prevents the above situation. @item Autorepeat is turned off by Xnee, how do I turn it on again? @code{xset r on} @end table xnee-3.19/doc/xnee_intern.texi0000664000000000000000000001765511607021045013266 00000000000000 @chapter Xnee Internals @cindex Xnee Internals This chapter is intended to explain the internal design of libxnee. Hopefully this will lead to a better understanding of how to use Xnee and why some features exist and why some don't. @section Synchronisation @cindex Synchronisation We will try to go through the basics of how Xnee implements synchronisation and try to tell you, by using examples, why synhronisation is important. @subsection Why synchronise @cindex why synchronise To understand why synchronisation during replay is needed an example is given. In this example only mouse and keyboard events are recorded. Think of a session with a web browser. During record the following is done: @itemize @bullet @item Start galeon (or another web browser) via the GNOME panel @item Press Ctrl-O which pops up a window @item Press the left button in the textfield of the popup window @item Enter the URL you want to enter (e.g @url{http://www.gnu.org}) @item Click on the OK button @item Then click on another URL (e.g GNU Documentation) @item Then click on another URL (e.g On-Line Documentation) @end itemize When replaying this session it is often useful to synchronise the recorded session with what's happening "right now" on the display since sometimes (or rather always) there can be different response times from the same URL. During replay the following is done: @itemize @bullet @item Galeon is started @item Ctrl-O is typed which pops up a window @item Press the left button in the textfield of the popup window @item Enter the URL you want to enter (e.g @url{http://www.gnu.org}) @item Click on the OK button @item ... due to an enormous amount of visitors the GNU web server can't respond as quick as it did when recording. So when the next thing happens @item Then click on another URL (e.g GNU Documentation) @item ... the page hasn't been loaded and when the next event is replayed @item Then click on another URL (e.g On-Line Documentation) @item ... the link isn't there and we're really out of sync with the recorded session @end itemize @subsection How to synchronise @cindex how to synchronise Instead we could record some more data than just the mouse and keyboard events. During record the following is done: @itemize @bullet @item Start galeon (or another web browser) via the GNOME panel @item Record some X data that tells us that a window has been created @item Press Ctrl-O which pops up a window @item Record some X data that tells us that a window has been created @item Press the left button in the textfield of the popup window @item Enter the URL you want to enter (e.g @url{http://www.gnu.org}) @item Click on the OK button @item Record some X data that tells us that a window has been destroyed @item Then click on another URL (e.g GNU Documentation) @item Record some X data that tells us that a some text has been displayed in a window @item Then click on another URL (e.g On-Line Documentation) @item Record some X data that tells us that a some text has been displayed in a window @end itemize The non-mouse-or-keyboard events recorded (window created & text displayed) are record for synchronisation purposes. During replay the following is done: @itemize @bullet @item Start galeon (or another web browser) via the GNOME panel @item wait for: the recorded X data to be sent again @item Press Ctrl-O which pops up a window @item wait for: the recorded X data to be sent again @item Press the left button in the textfield of the popup window @item Enter the URL you want to enter (e.g @url{http://www.gnu.org}) @item Click on the OK button @item wait for: the recorded X data to be sent again @item Then click on another URL (e.g GNU Documentation) @item wait for: the recorded X data to be sent again @item Then click on another URL (e.g On-Line Documentation) @item wait for: the recorded X data to be sent again @end itemize @subsection Synchronisation is needed So by recording more data than just the events to be replayed we can synchornise what was recorded with what is going on when replaying. But the data has to be chosen with respect to that the data: @itemize @bullet @item differs from different sessions (Gimp and Xterm are really different) @item slows down the replay session if there are too many @item is hard to choose since the X protocol is rich @item differs (comparing record and replaying) @item can have different ordering (comparing record and replaying) @end itemize @subsection Different data for different kind of sessions If we record an xterm session with all data being recorded and compare that to a recorded GIMP session with all data being recordr we can see that the data to use as synchronisation data differs. AS an example there aren't so many windows created/destryed during an xterm session. The solve to the the problem of finding out what data to use as synchronisation data one can: @itemize @bullet @item use the project files delivered with Xnee @item analyse the application (using Xnee's @code{--human-printouts} option) and do some "trial and error" @end itemize @subsection Slow replay session due to too many synchronise data The synchronisation itself doesn't take much time but there are timeouts that makes Xnee paues for a short while (see above). If there are many such timeouts it will lead to a slow or shaky replaying session. @subsection X protocol is rich and asynchronous For an end user (with no X expertise) it is hard to read the X protocol specification and make assumptions on what data to use. @subsection Different data sent Even if one starts up a machine from scratch (reboot) when recording and from scratch when replaying there is no guarantee that the data is sent in the same order or that exactly the same amount of data is sent. @subsection Buffers and timeouts To enable synchronisation Xnee buffers data: @itemize @bullet @item that was read in the session file but hasn't been sent during replay @item that was sent during replay but hasn't been seen in the session file being replayed @end itemize For every data read from session file (during replay) that isn't replayable (i e device event) Xnee stores the data in a buffer. Xnee also stores the data sent from the X server during playback. The data received from the server make the buffer entry for that specific data be decremented. If, on the other hand, the same data was read from file the buffer entry for that data is incremented. Before replaying any replayable event Xnee makes sure it is in sync. If Xnee is in sync the replaying continues. If Xnee is out of sync it will look for its thresholds and see if it is inside a user specified range. There are three thresholds: @itemize @bullet @item @b{positive maximum} nr data read from session file @item @b{negative minimum} nr of data sent from X server @item @b{absolute total maximum} sum of the absolute values above @end itemize If Xnee read one data from file (e.g the event MapNotify) Xnee checks if the buffer entry for the specific data is bigger than the positive maximum value (after having incremented the buffer value). If Xnee receives one data from the X server (e.g the event MapNotify) it checks if the buffer entry for the specific data is bigger than the negative minimum value (after having decremented the buffer value). Xnee also checks if the absolute sum of the differences for every entry in the buffer is higher the a total threshold. If Xnee is getting out of sync it slows down the speed a bit and tries to continue. However after a while it may happen that Xnee considers that it no use to continue since we are too much out of sync. @* Xnee compensates for the delay during replay that is caused when being out of sync. @* It is possible to tweak the thresholds using the @code{--maximum-threshold}, @code{--negative-threshold} and @code{--total-diff-threshold} options. Is is also possible to turn off synchronisation completely using the @code{-ns} option. xnee-3.19/doc/version.texi0000664000000000000000000000014312332167175012430 00000000000000@set UPDATED 10 February 2012 @set UPDATED-MONTH February 2012 @set EDITION 3.19 @set VERSION 3.19 xnee-3.19/doc/xnee.txt0000664000000000000000000031520212332167172011552 00000000000000Xnee Manual *********** 1 Summary 2 Getting started 3 Functional overview 4 Installation 5 Examples 6 Xnee Programs 7 File types and format 8 Xnee Internals 9 Xnee Requirements 10 FAQ Appendix A Copying This Manual B Index 1 Summary ********* 1.1 Summary =========== Xnee is a suite of programs that can record, replay and distribute user actions under the X11 environment. Think of it as a robot that can imitate the job you just did. Xnee consists of one library and two applications cnee - command line program gnee - graphical user interface program pnee - a Gnome Panel Applet libxnee - library used by xnee and gnee 1.2 Xnee features ================= Xnee can be used for multiple purposes, although it was initially designed as a test tool. The most used features are the foloowing: Test tool - Instead of performing test cases for a GUI (or CLI program) over and over again, the test cases can be automated. Simply record a user session and replay it later. Performance test tool - If you want to simulate lots of simultaneous users in a network (or a local machine) you can use Xnee. Simply record a user session and start multiple instances of Xnee. Demonstration tool - You can use Xnee to demonstrate the features of your program. Simply record a user session and replay it later. Distribution tool - If you want to send over your mouse/keyboard actions to another display you can use the built-in distribution mechanism in Xnee. Macro recorder/replayer - By binding a key and modifier combination (e.g using xrebind) to replay a recorded session you will have a Window Manager and application independent macro. File retyper - Xnee can retype the contents of a file. This can be useful during tests or if you want xnee to answer some command session without having to record the session. X11 protocol sniffer - Xnee can be used as a sniffer for the X11 protocol. 1.3 Background ============== In order to verify that a program does the job it's supposed to do, certain tests have to be made. These tests are, IMHO, perhaps the most boring things a programmer can do. Xnee is designed to reduce the programmer from this burden. Xnee started out as a commad line program. During the development phase the main functionality was broken out to a library, called libxnee. The command line program was renamed cnee. The thought behind making the library was to enable the writing of other clients than just the command line. Today there is a GUI program, gnee, and a Gnome panel applet, pnee, that uses the library. By using xnee your testcase(s) can be recorded and later on replayed. Xnee comes with other features For more information about these, read the Introduction. This manual mainly focuses on the command line program, cnee. There are however a seperate chapters for the other programs. 2 Getting started ***************** 2.1 Getting started =================== To get the first feel of Xnee some simple examples are presented. 2.1.1 Simple replay ------------------- Start a terminal emulator (e.g xterm) and then start Xnee, cnee --replay --file example1.xnr & ....dont forget '&'. The file example1.xnr contains keyboard events recorded during development of this manual. When replayed you'll see what was typed and of course more important you'll get i first glimpse of Xnee and its capabilities. For information on where to find the example files, see below. 2.1.2 Simple recording of Key presses ------------------------------------- We move on to a (very) simple recording session. Start a terminal emulator (e.g xterm) and your favorite editor. Move the pointer to one of the terminal windows and start Xnee. cnee --record -o example2.xnr --device-event-range 2-3 \ --time 5 --events-to-record 20 Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you can type whatever you want to record (20 press- and relase events of the keyboard are recorded). We are done and you have recorded your first session! Leave the desktop as it is and go forward to the next example. 2.1.3 Simple replaying of your recorded file -------------------------------------------- Start one terminal emulator (e.g xterm). Let Xnee repeat the stuff you did in the example above. Undo all changes in the editor that was made in the previous example. Move the pointer to one of the terminal windows and start Xnee. cnee --replay -f example2.xnr --time 5 Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you will see your typings in the example above being repeated. 2.1.4 Simple recording of mouse motions --------------------------------------- We move on to another simple recording session. Start a terminal emulator (e.g xterm). Move the pointer to the terminal window and start Xnee. cnee --record -o example3.xnr --device-event-range 5-6 \ --time 5 --events-to-record 20 After 5 seconds you can move the pointer around (20 motion events are recorded). 2.1.5 Simple replaying of your recorded file -------------------------------------------- Let Xnee repeat the stuff you did in the example above.. Move the pointer to the terminal window and start Xnee. cnee --replay -f example3.xnr --time 5 After 5 seconds you will see your mouse motions in the example above being repplayed. 2.1.6 Simple retyping of a text file ------------------------------------ Let Xnee retype (type again) the text in a text file. Move the pointer to the terminal window and create a text file containing the command 'ls -l'. echo "ls -l" > ./mytext.txt And after that you start Xnee. cnee --retype-file ./mytext.txt --time 5 After 5 seconds you will see Xnee type 'ls -l', which probably will list the files in the current directory. 2.1.7 Example Xnee Session files -------------------------------- The example file above (example1.xnr) is a session file that has been delivered with the sources (allthough not installed), rpm and with the Xnee Documentation Package. The file(s) can be found: Distribution Location RPM /usr/lib/xnee/session Source ./sessions/ Document Package ./sessions/ 3 Functional overview ********************* 3.1 Functional overview ======================= The Xnee applications (gnee and xnee) receives X11 protocol data (e.g. events) from an X server (using libxnee) and print them to a file, called Xnee Session File. Theses events are later read from the session file and replayed. Gnee and xnee can read its settings from a file, called Xnee Project File, or from command line (cnee) or via the GUI (gnee). Events directly generated by the user (e.g KeyPress) can be replayed or faked. Requests, replies, errors and events not directly generated by the user (e.g MapNotify) can be recorded as well. By using these data Xnee can replay with synchronisation. In this section you will be given information about key concepts in X11 and Xnee. It is vital that you read through this chapter. 3.2 Modes ========= Xnee has four modes: * record * replay * retype * distribute The distribution mechanism can be used together with the other three. 3.2.1 Record ------------ When record mode is used Xnee receives a copy of the data sent to and from the X server. The copy is printed to a file. Xnee can record the whole X11 protocol, not just mouse and keyboard events. 3.2.2 Replay ------------ When replay mode is used Xnee reads data from a file or stdin. These data is either sent to the server (if it is a keyboard or a mouse event) or used to synchronise with (if any of the other data). 3.2.3 Retype ------------ Xnee can retype the contents of a text file. This is useful when combining replaying of different recorded session. You can change the text written in for example an editor (e.g emacs) without having to re-record the complete sessions. 3.2.4 Distribution ------------------ Xnee can fake mouse and keyboard events on multiple displays. This distribution mechanism can be used when recording, replaying or retyping. 3.3 Ranges ========== What data to record is specified using ranges. Ranges has a start value and a stop value. The following data can be recorded: Xnee name X Protocol Name core-requests Request device-event Event delivered-event Event error Error reply Reply ext-requests.ext-major Extension Request ext-requests.ext-minor Extension Request ext-replies.ext-major Extension Reply ext-replies.ext-minor Extension Reply When specifying the ranges when using xnee you can either type the integer value of the data or the name of the data. To find out what number belongs to what data name, you can use the '--print-data-name' option. For an explanation of the X protocol data, please read the "X Record Extension Library" or the "Record Extension Protocol Specification". 3.4 First and last motion event =============================== Xnee has the ability to skip recording of succesive motion events with no other data in between. This option is intended to reduce the number of data recorded by leaving out unnecessary data. This feature can be invoked with the '--first-last' flag. 3.5 Delay ========= Sometimes when Xnee starts recording data, the keyrelease (caused by pressing and releasing RETURN to execute the Xnee command line) is recorded. This single keyrelease (with no corresponding keypress) might confuse the X server. With the '--time ' option Xnee can be paused for a number of seconds before recording/replaying/retyping starts. 3.6 Verbose =========== When enabling verbose mode ('--verbose') Xnee prints a lot of information about it's state. This option is only intended for runtime debugging. 3.7 Human printouts =================== Sometimes it's hard to decide what data to use when synchronising. To do this you have to analyse what data is sent from the server when recording. Instead of reading the data number, s tring representation of the data is printed out. To enable this option, use the '--human-printouts'. 3.8 Invoking Xnee ================= 3.8.1 Command line syntax ------------------------- To get information about how to use Xnee's command line options please use the man page(s). 3.8.2 Project file ------------------ To use a Project file use the '--project' option, e.g 'cnee --project xnee/projects/netscape.xns'. 3.8.3 Session file ------------------ To use a session file use the '--file' option, e.g 'cnee --file user1_session.xns' 3.9 Interupting Xnee ==================== Interupting Xnee when recording or replaying can be done as follows * user specified modifier and key * limit the number of data to record * sending a SIGTERM signal (e.g pressing Control-c in a terminal window) The prefered way to interrupt xnee is to use the modifier+key. 3.9.1 modifier and key ---------------------- It is possible to specify a modifier (e.g Control button) and a key (e.g 'a') that will stop the Xnee session. When using this option make sure that the modifier/key is not used in any way by the applications you are recording. You can specify a key+modifier to stop, pause and resume xnee. You can also insert a mark in the recorded session file. 3.9.2 limit the number of data to record ---------------------------------------- By specifying the number of data to record ('--loops') xnee stops when this number of data is received from the server. When replaying the same amount of data is replayed. 3.9.3 sending a SIGTERM signal ------------------------------ The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm) and then press Control-c which will send the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you'll end up lossing that battle). When using Control-c to stop Xnee you must be aware of that the pressing of the Control key gets recorded. When replaying a recorded session ending with pressing of Control your apps may think you are pressing the Control key. A simple solution for this is to press and release the Control. 3.9.4 Stop Xnee with key combination ------------------------------------ Xnee stops its current action when the user presses the key combination as specified during setup. Xnee will be shut gracefully. 3.9.5 Pause Xnee with key combination ------------------------------------- Xnee pause its current action when the user presses the key combination as specified during setup. Xnee will be in paused mode until the user stops or resumes Xnee. 3.9.6 Pause Xnee with key combination ------------------------------------- Xnee resumes its current paused action when the user presses the key combination as specified during setup. Xnee will continue where it was paused. 3.9.7 Insert marks Xnee with key combination -------------------------------------------- When the user presses the key combination as specified during setup Xnee will print a mark in the session file containing a time stamp. This feature is intended be used when you want to mark an interresting time/event during recording. After recording has finished you can add Xnee scripting calls to Xnee which will be interpreted and executed as if they were recorded. 3.9.8 Limit number of data to record ------------------------------------ There a a few ways to limit the number of data Xnee records. * limit the events to recored * limit the data to recored * limit the time to recored * send a signal to xnee (SIGTERM) * use a selfmade record callback function 3.9.9 Limit the events to record -------------------------------- When having received the specified amount of events from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. 3.9.10 Limit the data to record ------------------------------- When having received the specified amount of data from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. 3.9.11 Limit the time to record ------------------------------- When having recorded for the specified amount of time from the server, Xnee stops the recording. For more information on how to use this option, read the man page for cnee or the user manual for gnee. 3.9.12 Send SIGTERM to Xnee --------------------------- The easiest way to send a signal to a process is by launching Xnee from a terminal window (e.g xterm). By pressing Control-c xterm sends the SIGTERM signal to Xnee. When replaying it can sometimes be hard to move the pointer into the terminal window (e.g if a lot of motion events were recorded that will let you compete with Xnee on where the mouse pointer shall be located. Beleive me, you'll end up lossing that battle). 3.10 Xnee plugins ================= Xnee supports plugins since version 1.07. For information about how to write plugins, download the source code and look at the plugin example which is delivered with Xnee. 4 Installation ************** 4.1 Installation from source with the configure script ====================================================== To build and install Xnee do the following: Download the following source files into a directory (version numbers given here are just examples) * xnee-3.02.tar.gz Unzip the source file gunzip xnee-3.02.tar.gz Untar the source file tar xvf xnee-3.02.tar Enter the Xnee directory cd xnee-3.02 Generate the makefiles ./configure or if you want to specify which directory to install xnee to ./configure --prefix= Build Xnee make clean all Install (as root) if you want libxnee to be installed. If not, skip the following command. Installation of libxnee is not needed to build cnee and gnee. make install 4.2 Installation from source with default Makefile ================================================== To unpack, build and install Xnee from the sourcefiles do the following: Download the source files into a directory Unzip the source file gunzip xnee-3.02.tar.gz Untar the source file tar xvf xnee-3.02.tar Enter the Xnee directory cd xnee-3.02 Build Xnee make -f Makefile.xnee clean all Copy the Xnee binary (xnee/src/xnee) to a directory cp xnee/src/xnee /usr/local/bin 4.3 Installation from CVS ========================= Download the xnee source code from the CVS repository at . Instructions on how to do this can be found there as well. Build Xnee cd xnee make -f Makefile.cvs ./configure --enable-doc make make install (optional) Build Xnee Documentation cd doc make manual make install (as root) cd .. 5 Examples ********** 5.1 Recorder ============ 5.1.1 Record mouse motions -------------------------- Record mouse motions only and save the session to mouse-rec.xnl. cnee --record --mouse --out-file mouse-rec.xnl After having typed this you can move your mouse round for a while. After Xnee has exited you will be able to replay your motions. Xnee will stop after having record 100 events (this is the default behaviour). 5.1.2 Record keyboard --------------------- Record keyboard events only and save log to kbd-rec.xnl. cnee --record --keyboard --out-file kbd-rec.xnl After having typed this Xnee records all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions. Xnee will stop after having record 100 events (this is the default behaviour). 5.1.3 Record keyboard and mouse ------------------------------- Record keyboard and mouse and save log to km-rec.xnl. cnee --record --keyboard --mouse --out-file kbd-rec.xnl After having typed this Xnee records all your keyboard and mouse actions. So now move your pointer and write some stuff with your keyboard. After Xnee has exited you will be able to replay your keyboard and mouse actions. Xnee will stop after having record 100 events (this is the default behaviour). 5.1.4 Record a gnumeric session ------------------------------- Record a gnumeric session. Record 400 events. Save output in file gnumeric.xnl Start a terminal emulator (e.g xterm) xterm& Start Xnee cnee --record --keyboard --mouse --events-to-record 400 \ --out-file gnumeric.xnl& Start gnumeric gnumeric& Start using gnumeric. Browse the menus above, reset the fonts etc. 5.1.5 Record a gnumeric session with synchronisation data --------------------------------------------------------- Record a gnumeric session. Record 400 events. Save output in file gnumeric2.xnl Start a terminal emulator (e.g xterm) 'xterm&' Start Xnee cnee --record --keyboard --mouse --events-to-record 400 \ --out-file gnumeric2.xnl\ --delivered-event-range Expose,MapRequest,LeaveNotify,EnterNotify & Start gnumeric 'gnumeric&' Start using gnumeric. Browse the menus above, reset the fonts etc. 5.2 Replayer ============ 5.2.1 Replay mouse motions -------------------------- Replay mouse motions as found in the file mouse-rec.xnl. cnee --replay --file mouse-rec.xnl Xnee will now imitate exactly what you did when you recorded this file. 5.2.2 Replay mouse motions using with half speed ------------------------------------------------ Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 50% of the recorded. cnee --replay --file mouse-rec.xnl --speed-percent 50 Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done in 50% of the recorded time. 5.2.3 Replay mouse motions using with double speed -------------------------------------------------- Replay mouse motions as found in the file mouse-rec.xnl but with the speed set to 200% of the recorded. cnee --replay --file mouse-rec.xnl --speed-percent 200 Xnee will now imitate exactly what you did when you recorded this file, allthough it will be done twice as fast as when recorded. 5.2.4 Replay keyboard actions ----------------------------- Replay keyboard events from file kbd-rec.xnl. cnee --replay --file kbd-rec.xnl After having typed this Xnee replays all your keyboard actions. After Xnee has exited you will be able to replay your keyboard actions. 5.2.5 Replay keyboard and mouse ------------------------------- Replay keyboard and mouse from the file km-rec.xnl. cnee --replay --keyboard --mouse --file kbd-rec.xnl After having typed this Xnee replays all your keyboard and mouse actions. Xnee moves your pointer and writes the the same stuff as you did when recording. 5.2.6 Replay a gnumeric session ------------------------------- Replay the gnumeric session above Start a terminal emulator (e.g xterm) 'xterm&' Start a new fresh gnumeric spreadsheet 'gnumeric&' Start Xnee cnee --replay --file gnumeric.xnl Xnee will now do the same stuff you did when recording. It may happen that some user actions are replayed to early. This is so because Xnee has no way of knowing if it is in sync with the recorded session. 5.2.7 Replay a gnumeric session with synchronisation data --------------------------------------------------------- Replay the second gnumeric session above. Start a terminal emulator (e.g xterm) 'xterm&' Start a new fresh gnumeric spreadsheet 'gnumeric&' Start Xnee cnee --replay --file gnumeric2.xnl Xnee will now do the same stuff you did when recording. It may happen that the replaying slows down. This is because Xnee is currently out of sync. When being out of sync Xnee slows down a bit and checks the thresholds if it is allowed to continue. Xnee will most probably find itself in sync after a short while. All recorded user actions should have occured the same way as when recording. 5.2.8 Replay a gnumeric session with synchronisation data setting threshold --------------------------------------------------------------------------- Replay the second gnumeric session above. Start a terminal emulator (e.g xterm) 'xterm&' Start a new fresh gnumeric spreadsheet 'gnumeric&' 5.3 Retyper =========== 5.3.1 Retype the help printout ------------------------------ If you want Xnee to fake a user typing the help printout from xnee you can use the '--type-help' option. Start a terminal emulator (e.g xterm) and an editor (e.g emacs). xterm & emacs & Retype the help printout by starting xnee with a 10 seconds delay delay. cnee --time 10 --type-help Move your mouse to the editor and make the editor have focus. Wait a few seconds and xnee will type the help. You will now also have a copy of help text. 5.3.2 Retype a file ------------------- If you want Xnee to fake a user typing the letters as found in a text file you can use the retype mode. Note that it isn't possible to retype all characters yet. This will be implemented as soon as possible. We'll give an example on how to use this mode. Start a terminal emulator (e.g xterm) xterm & Create a text file echo "Hi Xnee" > testfile.txt Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay. cnee --time 10 --retype-file testfile.txt Start the fabulous editor 'cat' cat > copiedfile.txt Wait a few seconds and xnee will retype the letters in the file 'testfile.txt'. You will now also have a copy of that file. The copy is called copiedfile.txt. This is a realy a stupid way to copy a file but this option opens up a few possibilities. 5.4 Distributor =============== With the distribution mode Xnee can send your device events to multiple displays. 5.4.1 Distribute your mouse motions ----------------------------------- You can distribute your mouse motions to the displays frodo:0.0 and sam:0.0 Start a terminal emulator (e.g xterm) xterm & Start xnee cnee --distribute frodo:0,sam:0.0 --record --mouse If you have setup authority correct on frodo and sam you will see all you mouse motions being done on those displays as well. 5.4.2 Distribute the replaying of mouse motions ----------------------------------------------- Replay and distribute mouse motions as found in the file 'mouse-rec.xnl'. cnee --replay --file mouse-rec.xnl --distribute frodo:0,sam:0.0 Xnee will now imitate exactly what you did when you recorded this file on your host as well on frodo and sam. 5.4.3 Distribute the retyping of a file --------------------------------------- If you want Xnee to to distribute the fakeing of a user typing the letters as found in a text file you can use the retype mode together with the distribution mode. Start a terminal emulator (e.g xterm) on each of the hosts xterm & Create a text file. echo "Hi again Xnee" > distfile.txt Retype the contents of this file to another file by starting xnee with a 10 seconds delay delay. cnee --time 10 --retype-file distfile.txt --distribute frodo:0,sam:0.0 Start the fabulous editor 'cat' on the terminal emulators on each the terminals. cat > copiedfile.txt If you have setup authority correct on frodo and sam you will, after a few seconds, see xnee retype the letters in the file 'distfile.txt'. You will now also have three copies of that file. On copy on each host. The copy is called copiedfile.txt. This might seem like a stupid way to copy a file to three locations but this is just an example. 5.5 Key ======= 5.5.1 Stop Xnee with key ------------------------ You can stop xnee by specifying a key. Make sure that this key isn't grabbed by another X client (e.g by the Window Manager). Let's say that you want Xnee to stop recording if you press Control and h. cnee --record --mouse --events-to-record -1 --stop-key h This will make xnee record mouse events until you press h. All printouts are done to stdout so you can see that Xnee stops when you press the key. Move your mouse for a while and you'll see xnee print out lots of lines. Press h. Xnee will now have stopped recording. 5.5.2 Pausing and resuming Xnee with key ---------------------------------------- You can pause and resum xnee by specifying a key. Make sure that this key isn't grabbed by another X client (e.g by the Window Manager). Let's say that you want Xnee to pause recording if you press p and to resume when pressing Comntrol and r. cnee --record --mouse --events-to-record -1 --pause-key p \ --resume-key r This will make xnee record mouse events until you press p. All printouts are done to stdout so you can see that Xnee stops when you press the key. Move your mouse for a while and you'll see xnee print out lots of lines. Press p. Xnee will now have paused recording. Move your mouse for a while and note that nothing is printed. Press r. Xnee will now have resumed recording. Move your mouse for a while and note that xnee begins its printouts. 5.6 Using macro =============== Macors can be used in various applications allthough many applicaions have a macro functionality built in (e.g emacs). 5.6.1 Define a simple macro --------------------------- There are plenty of tools that bind a key combination to different actions. For various reasons the author of this manual is familliar with xrebind so we will use xrebind in this example. The first thing to do is to decide which key combination to tie to the wanted action. Let's say we want to use one of the funtion keys, F1. We then have to find out which keycode belongs to that key. The action we will bind to this key combination will be the replaying of a recorded session from the previous examples. We use Xnee to find the keycode for F1. Start xnee. cnee --record --keyboard --events-to-record 20 Press the F1 key and see what number was printed out. It will look something like this: 0,2,0,0,0,67,0,90300078 0,3,0,0,0,67,0,90300156 The interesting part here is the 6th column. In our example we find 67, which is the keycode for F1. Now we move on to setup xrebind to grab F1 and bind that to replay the mouse motions from the file 'mouse-rec.xnl'. Open or create a new file in your home directory called '.xrbrc' and add the lines. XrebindGrab { Action = Execute GrabKeycode = 67 Modifier = AnyModifier Command = xnee --replay --file mouse-rec.xnl Comment = Starting xnee replay AutoRepeat = false Fork = true } Let's try it. Start xrebind with verbose printouts. xrebind --verbose Press F1 and the recorded session from the previous example shall be replayed. You can also see in the verbose printouts that xrebind executes xnee. 5.6.2 Define another simple macro --------------------------------- Let's say we want to bind Control and e to execute the session as in the example above. This time setting up xrebind is a bit easier. Setup xrebind to grab F1 and bind that to replay the mouse motions from the file 'mouse-rec.xnl' by opening or create a new file in your home directory called '.xrbrc' and add the lines. XrebindGrab { Action = Execute GrabKey = e Modifier = Control Command = xnee --replay --file mouse-rec.xnl Comment = Starting xnee replay AutoRepeat = false Fork = true } e, Control, Exec, xnee, --replay --file mouse-rec.xnl, \ Fork, NoAutoRepeat Let's try it. Start xrebind with verbose printouts. xrebind --verbose Press Control and e and the recorded session from the previous example shall be replayed. 5.7 Various options =================== 5.7.1 Using verbose mode ------------------------ To enable verbose mode, start xnee like this cnee --verbose --record --mouse Move the mouse for a while and you'll lots of verbose printouts that usualy isn't there. 5.7.2 Using human readable printouts ------------------------------------ To enable human printout mode, start xnee like this cnee --human-printout --record --mouse Move the mouse for a while and you'll see the data printed out in an almost human friendly format. 5.7.3 Using a differet screen resolution ---------------------------------------- If a session was recorded on a screen with another resolution than on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee to use a specific resolution when replaying. To do this, start xnee like this cnee --replay --file mouse-rec.xnl \ --replay-resolution 800x600 Xnee will now replay the events recorded in the sessions file 'mouse-rec.xnl' as if the screen has a resolution of 800x600. 5.7.4 Using a offset when replaying ----------------------------------- If a session was recording a centered window with a window manager and is to bo replayed without a window manager (still centered) you can use the offset switch to make Xnee replay the events in order to get the coordinates right. cnee --replay --file mouse-rec.xnl \ --replay-offset 12,-7 Xnee will now replay the events recorded in the sessions file 'mouse-rec.xnl' and adding 12 to the x coordinate and subtract 7 from the y coordinate. 5.7.5 Using a window position recall ------------------------------------ For some reason a replayed window may pop up at a different position as when recorded. Xnee can try to solve this by adding the 'recall-window-position' option during replay. cnee --replay --file mouse-rec.xnl \ --recall-window-position If a window pops up at a different position when replaying (as whe recorded) Xnee moves the new window to the same position as when recorded. 5.7.6 Using no resolution translation ------------------------------------- If a session was recorded on a screen with another resolution than the on the one where we replay the session xnee will translate all coordinates automagically. However, you can force xnee not to use translation. To do this, start xnee like this cnee --replay --file mouse-rec.xnl \ --no-resolution-adjustment Xnee will now replay the events recorded in the sessions file 'mouse-rec.xnl' as if the screen had the same resolution the recorded one. 5.7.7 Record another display than the default --------------------------------------------- If you want to record another display than the default, as set in the DISPLAY variable, you use the '--display' option. cnee --record --mouse --display frodo:0.0 Xnee will now record the mouse events on the display frodo:0.0. 5.7.8 Replay to another display than the default ------------------------------------------------ If you want to replay to another display than the default, as set in the DISPLAY variable, you use the '--display' option. cnee --replay --display frodo:0.0 --file mouse-rec.xnl Xnee will now replay the mouse events on the display frodo:0.0. 5.8 Shell scripts using Xnee ============================ Insted of onvoking Xnee for every time you need to fake events you can make use of the shell functions as delivered with Xnee. With these functions you can start one instance of Xnee and fake device events whenever you need. #!/bin/bash # Source in handy functions . /usr/share/xnee/xnee.sh # Loop and press buttons TMP=0 while [ $TMP -le 5] do TMP=$(($TMP+1)) xnee_fake_button $TMP done # Just a simple example ....don't bother to understand tar cvf /tmp/crap.tar * sleep 2 # Fake ls and Enter xnee_fake_key l xnee_fake_key s xnee_fake_key XK_Return This example will fake press and release of the mouse button and do fake press and release of ls followed by a press and release of Enter.... and of course, you'll get a tar file in /tmp. Make sure that the path to the 'xnee.sh' is correct. 6 Xnee Programs *************** GNU Xnee consists of three different programs, cnee, gnee and pnee. 6.1 cnee - cnee's not an event emulator ======================================= This is the Xnee command line program. This programs contains most features and is the basis for this documentation. For a user not used to X11 it is probably a good idea to start with gnee or pnee instead or start using cnee in demonstration mode: 'cnee --demo' 6.2 gnee - gnee's not an emulator either ======================================== This is a GUI (using GTK2/Gnome) with most of the features of cnee. The GUI has been designed for ease of use. Currently there are no plans for making a separate manual for gnee. 6.3 pnee - pnee's not even emulating ==================================== This is a Gnome panel applet with a minimal set of features. Ease of use is the motto for this program. It is intended for users not being experts on X11 but still wants to record and replay a session for what ever purpose. By default pnee have settings that need not be changed for most cases. You can, however, launch the preferences dialog and set your preferred values as in most other applets. If you find pnee a bit limited we suggest you switch over to using cnee. Note: If pnee hangs you can press the stop button twice to make a reset. Hopefully this will solve the problem. 6.3.1 Reporting pnee bugs ------------------------- By default pnee writes error, verbose printouts and warnings to stderr which will not be visible to you as a user, since pnee will be started automatically along with the other applets. If you start up the preferences dialog you can choose a file for pnee printouts. After that you should turn on verbose logging (also in the preferences dialog) and then reproduce the bug and send over the file to . 7 File types and format *********************** The files used by Xnee are * Xnee Project File * Xnee Session File These files must follow the Xnee File Format. 7.1 Project file ================ Xnee can be set either using command line options (when using xnee) or by clicking the correct buttons etc in the GUI (using gnee). Instead of setting the same settings over and over again, you can use the Xnee Project File. 7.1.1 Create a project file --------------------------- You can create a project by yourself. This can be done using the 'write-settings' option in cnee or the "save settings to file" when using gnee or you can use the Xnee GUI (gnee) to write one. You can also write one by yourself in your favorite editor. Just make sure you follow the Xnee format. For information and specification on this format read the Xnee format chapter. The authors of Xnee suggests you start off with a generated project file. To get one such file, type the following 'cnee --mouse --keyboard --write-settings new_proj.xnp'. You will now have a file 'new_proj.xnp' with some useful values, which you can edit as you wish. To use this file to record, simply type 'cnee --record --project new_proj.xnp' 7.2 Xnee Session file ===================== The Xnee session files are the printouts from a recorded session following the Xnee File Format. For information and specification on this format read the Xnee File Format chapter. 7.3 Xnee file format ==================== The Xnee Format is divided into different directives. The format is line based, meaning that * there is one directive per line * one line contains one (and only one) directive These directives are definied as follows. 7.4 Xnee directives =================== The following directives are used in Xnee: Directives Description Comment This is used to comment the various files Project These contains information about the session- or project file Settings Data used when recording and replaying Replay data Recorded replayable data (used when replaying) Script replay data Scriptable primitives Mark Lines inserted in the seesion file when a modifier+key was pressed Execution Lines that trigger the execution of an external program Project information Project 7.4.1 Comment ------------- First token Interpretation # The whole line is ignored. As long as the first token is '#' the whole line is intrepreted as a comment, just as in bash. 7.4.2 Settings -------------- Settings directive Argument Interpretation data-to-record integer Limits the number of data to record to to the integer value events-to-record integer Limits the number of events to record to to the integer value time-to-record integer Limits the number of seconds to record to to the integer value display string Sets the display to record or replay to the string distribute string Distribute all recorded or replayed replayable events to the display given by the string file string Read replay data from the file given by the string out-file string Print recorded data to the file given by the string plugin string Use the plugin given by the string first-last boolean Print only first and last of successive MotionNotify events verbose boolean Use verbose debugging printout buffer-verbose boolean Use verbose buffer verbose printouts (not built by default) time integer Delay the start of the Xnee action all-clients boolean Record all curret and future clients (default) future-clients boolean Record only future clients human-printout boolean Prints the recorded data in a (quite) more ser friendly format sync-mode boolean Sets recording mode speed-percent integer Sets the replaying speed percentage to the integer value stop-key string Sets the stop key combination to the string pause-key string Sets the pause key combination to the string resume-key string Sets the resume key combination to the string mark-key string Sets the mark key combination to the string exec-key string Sets the execute key combination to string replay-resolution string Sets the replay resolution to the string replay-resolution string Sets the replay resolution to the string recall-window-position Use window position recall during replay resolution-adjustment boolean Use resolution adjustment, even if the recored resolution differs from the one to replay to event-range range Sets the events to record error-range range Sets the errors to record to range* request-range range Sets the request to record to range* reply-range range Sets the replies to record to range* extension-request-major-range range Sets the extension requests (major) to record to range* extension-request-minor-range range Sets the extension requests (minor) to record to range* extension-reply-major-range range Sets the extension replies (major) to record to range* extension-reply-minor-range range Sets the extension replies (minor) to record to range* force-replay boolean Continue to replay even if Xnee is out of sync max-threshold integer Sets the maximum synchronisation threshold min-threshold integer Sets the minimum synchronisation threshold total-threshold integer Sets the total maximum synchronisation threshold events-to-record integer Sets the number of events to record data-to-record integer Sets the number of data to record time-to-record integer Sets the number of seconds to record store-mouse-position If set, Xnee records the initial mouse position and makes sure that replaying starts from there retype-press-delay integer Xnee delays processing after a faked key press (during retype) with integer milli seconds retype-release-delay integer Xnee delays processing after a faked key press (during retype) with integer milli seconds Settings argument Description Example 'integer' is an integer value. 1 'string' is a string. localhost 'boolean' is a boolean value given by true, false, 0, 1 true/1 or false/0 'subrange' Subrange is gives a range 2-5 or MapNotify of data by specifying a start and stop data. In the case of one data the stop data can be omitted. 'range' Ranges are a comma 2-3,MotionNotify-MapNotify,GravityNotify,PropertyNotify,30 separated list of subranges. 7.4.3 Replay ------------ Replay directive Interpretation 0,0 not valid 0,1 not valid 0,2,void,void,void,keycode,screen,timeKeyPress on key with keycode, used to replay 0,3,void,void,void,keycode,screen,timeKeyRelease on key with keycode, used to replay 0,4,void,void,button ButtonPress on button nr, used to replay nr,void,screen,time 0,5,void,void,button ButtonRelease on button nr, used to nr,void,screen,time replay 0,6,x,y,void,void,screen,time MotionNotify on poistion (x,y), used to replay 1,request number, request Recorded request, used during type, length, request id, synchronisation time 2,reply number,time Recorded reply, used during synchronisation 3,error number,time Recorded error, used during synchronisation 6,EB+2,void,void,void,keycode,screen,timeX Input (master) KeyPress on key with keycode, used to replay 6,EB+3,void,void,void,keycode,screen,timeX Input (master) KeyRelease on key with keycode, used to replay 6,EB+4,void,void,button X Input (master) ButtonPress on button nr,void,screen,time nr, used to replay 6,EB+5,void,void,button X Input (master) ButtonRelease on button nr,void,screen,time nr, used to replay 6,EB+6,x,y,void,void,screen,timeX Input (master) MotionNotify on poistion (x,y), used to replay 6,EB+2,void,void,void,keycode,screen,timeX Input (slave) KeyPress on key with keycode, used to replay 6,EB+3,void,void,void,keycode,screen,timeX Input (slave) KeyRelease on key with keycode, used to replay 6,EB+4,void,void,button X Input (slave) ButtonPress on button nr, nr,void,screen,time used to replay 6,EB+5,void,void,button X Input (slave) ButtonRelease on button nr,void,screen,time nr, used to replay 6,EB+6,x,y,void,void,screen,timeX Input (slave) MotionNotify on poistion (x,y), used to replay time is the time on the server the data was to the recording Xnee client. This time is used to keep the speed intact during replay. 7.4.4 Script replay data ------------------------ Primitive Interpretation fake-motion Fakes a mouse motion fake-button-press Fakes a button press fake-button-release Fakes a button release fake-button Fakes a button press and release fake-key-press Fakes a key press fake-key-release Fakes a key release fake-key Fakes a key press and release Primitive Primitive Interpretation variable values x=value integer Sets the x position used in fake-motion to value x=value +integer Set the relative motion (x direction) used in fake-motion to value x=value -integer Set the relative motion (x direction) used in fake-motion to value y=value integer Sets the y position used in fake-motion to value y=value +integer Set the relative motion (y direction) used in fake-motion to value y=value -integer Set the relative motion (y direction) used in fake-motion to value button=value integer set the button to fake with fake-button-press, fake-button-release and fake-button to value key=value integer set the key to fake with fake-key-press, fake-key-release and fake-key to value 7.4.5 Mark ---------- First tokens Arguments Interpretation Mark time string Ignored. This feature is intended to let the user do whatever he/she wants to. This will obviously lead to modifying the source code etc. 7.4.6 Exec ---------- First tokens Arguments Interpretation Exec command This is used during to replay to execute string a given command. If no command string is found Xnee will try to read the command from the environment variable 'XNEE_EXEC_COMMAND' 7.4.7 Project information ------------------------- Project information directives Arguments ProjectName string s is the project name ProjectDescription string s is the project description ProjectCreationDate string s is the project creation date ProjectCreationProgram string s is the name of the program that create the project file ProjectCreationProgVersion string s is the version of the program that create the project file ProjectLastChangeDate string s is the date of the last change of the project file ProjectLastChangeProgram string s is the name of the program that last changed of the project file ProjectLastChangeVersion string s is the version of the program that last changed of the project file ProjectCurrentChangeDate string s is the date of the current change of the project file ProjectCurrentChangeProgram string s is the name of the program that current changed of the project file ProjectCurrentChangeVersion string s is the version of the program that current changed of the project file 8 Xnee Internals **************** This chapter is intended to explain the internal design of libxnee. Hopefully this will lead to a better understanding of how to use Xnee and why some features exist and why some don't. 8.1 Synchronisation =================== We will try to go through the basics of how Xnee implements synchronisation and try to tell you, by using examples, why synhronisation is important. 8.1.1 Why synchronise --------------------- To understand why synchronisation during replay is needed an example is given. In this example only mouse and keyboard events are recorded. Think of a session with a web browser. During record the following is done: * Start galeon (or another web browser) via the GNOME panel * Press Ctrl-O which pops up a window * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * Then click on another URL (e.g GNU Documentation) * Then click on another URL (e.g On-Line Documentation) When replaying this session it is often useful to synchronise the recorded session with what's happening "right now" on the display since sometimes (or rather always) there can be different response times from the same URL. During replay the following is done: * Galeon is started * Ctrl-O is typed which pops up a window * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * ... due to an enormous amount of visitors the GNU web server can't respond as quick as it did when recording. So when the next thing happens * Then click on another URL (e.g GNU Documentation) * ... the page hasn't been loaded and when the next event is replayed * Then click on another URL (e.g On-Line Documentation) * ... the link isn't there and we're really out of sync with the recorded session 8.1.2 How to synchronise ------------------------ Instead we could record some more data than just the mouse and keyboard events. During record the following is done: * Start galeon (or another web browser) via the GNOME panel * Record some X data that tells us that a window has been created * Press Ctrl-O which pops up a window * Record some X data that tells us that a window has been created * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * Record some X data that tells us that a window has been destroyed * Then click on another URL (e.g GNU Documentation) * Record some X data that tells us that a some text has been displayed in a window * Then click on another URL (e.g On-Line Documentation) * Record some X data that tells us that a some text has been displayed in a window The non-mouse-or-keyboard events recorded (window created & text displayed) are record for synchronisation purposes. During replay the following is done: * Start galeon (or another web browser) via the GNOME panel * wait for: the recorded X data to be sent again * Press Ctrl-O which pops up a window * wait for: the recorded X data to be sent again * Press the left button in the textfield of the popup window * Enter the URL you want to enter (e.g ) * Click on the OK button * wait for: the recorded X data to be sent again * Then click on another URL (e.g GNU Documentation) * wait for: the recorded X data to be sent again * Then click on another URL (e.g On-Line Documentation) * wait for: the recorded X data to be sent again 8.1.3 Synchronisation is needed ------------------------------- So by recording more data than just the events to be replayed we can synchornise what was recorded with what is going on when replaying. But the data has to be chosen with respect to that the data: * differs from different sessions (Gimp and Xterm are really different) * slows down the replay session if there are too many * is hard to choose since the X protocol is rich * differs (comparing record and replaying) * can have different ordering (comparing record and replaying) 8.1.4 Different data for different kind of sessions --------------------------------------------------- If we record an xterm session with all data being recorded and compare that to a recorded GIMP session with all data being recordr we can see that the data to use as synchronisation data differs. AS an example there aren't so many windows created/destryed during an xterm session. The solve to the the problem of finding out what data to use as synchronisation data one can: * use the project files delivered with Xnee * analyse the application (using Xnee's '--human-printouts' option) and do some "trial and error" 8.1.5 Slow replay session due to too many synchronise data ---------------------------------------------------------- The synchronisation itself doesn't take much time but there are timeouts that makes Xnee paues for a short while (see above). If there are many such timeouts it will lead to a slow or shaky replaying session. 8.1.6 X protocol is rich and asynchronous ----------------------------------------- For an end user (with no X expertise) it is hard to read the X protocol specification and make assumptions on what data to use. 8.1.7 Different data sent ------------------------- Even if one starts up a machine from scratch (reboot) when recording and from scratch when replaying there is no guarantee that the data is sent in the same order or that exactly the same amount of data is sent. 8.1.8 Buffers and timeouts -------------------------- To enable synchronisation Xnee buffers data: * that was read in the session file but hasn't been sent during replay * that was sent during replay but hasn't been seen in the session file being replayed For every data read from session file (during replay) that isn't replayable (i e device event) Xnee stores the data in a buffer. Xnee also stores the data sent from the X server during playback. The data received from the server make the buffer entry for that specific data be decremented. If, on the other hand, the same data was read from file the buffer entry for that data is incremented. Before replaying any replayable event Xnee makes sure it is in sync. If Xnee is in sync the replaying continues. If Xnee is out of sync it will look for its thresholds and see if it is inside a user specified range. There are three thresholds: * positive maximum nr data read from session file * negative minimum nr of data sent from X server * absolute total maximum sum of the absolute values above If Xnee read one data from file (e.g the event MapNotify) Xnee checks if the buffer entry for the specific data is bigger than the positive maximum value (after having incremented the buffer value). If Xnee receives one data from the X server (e.g the event MapNotify) it checks if the buffer entry for the specific data is bigger than the negative minimum value (after having decremented the buffer value). Xnee also checks if the absolute sum of the differences for every entry in the buffer is higher the a total threshold. If Xnee is getting out of sync it slows down the speed a bit and tries to continue. However after a while it may happen that Xnee considers that it no use to continue since we are too much out of sync. Xnee compensates for the delay during replay that is caused when being out of sync. It is possible to tweak the thresholds using the '--maximum-threshold', '--negative-threshold' and '--total-diff-threshold' options. Is is also possible to turn off synchronisation completely using the '-ns' option. 9 Xnee Requirements ******************* 9.1 Runtime requirements ======================== Xnee requirements: * RECORD extension * XTest extension You can use Xnee in replaying mode without RECORD extension if synchronisation is turned off. 9.2 Development requirements ============================ For development requirements, please look at the DEVELOPMENT file that is distributed with all packages and with CVS. 10 FAQ ****** 'Where do I send questions?' 'Where and how do I report bugs?' Turn on verbose mode 'cnee --verbose' and save the printouts. Include all printouts and log files in the mail which is sent to 'Can you add xxx functionality to Xnee' Send an email to and we'll consider it. 'Why the name Xnee?' We wanted to use a recursive acronym, as GNU ("GNU's Not Unix'). After having read the Wine documentation, we thought that Xnee is not an Event Emulator would work fine since Xnee is Not an Event Emulator but rather a event recorder and faker. 'What does the name cnee mean?' cnee's not an event emulator 'What does the name gnee mean?' gnee's not an emulator either 'What does the name pnee mean?' pnee's not even emulating 'What doesn't the name gnee mean?' gnee's not an Event Emulator 'What license is Xnee released under ?' GPL version two or later. Which can be found at . Xnee will switch to GPLv3 as soon as GPLv3 is released. 'Where is the CVS repository?' You can find a CVS tree at . You are more than welcome to join 'Is there a GUI frontend for Xnee ?' Yes! Gnee. 'When setting ranges (integers), how do I know what numbers belong' to X11 data? You can either type the data name directly (e.g MotionNotify) or you can use the print-xxx-name options. * '--print-data-name' * '--print-event-name' * '--print-error-name' * '--print-reply-name' * '--print-request-name' 'When I replay to another display the characters are not correct?' Make sure you use the same keyboard mapping. A typical example: Record local host using Xnee: 'cnee --record --out-file recorded_on_local.xnl ' Store remote keymap: 'xmodmap -pke -display remote:0 > remote.map ' Store local keymap: 'xmodmap -pke > local.map ' Copy local keymap to remote host: 'cat local.map | xmodmap -display remote:0 - ' Replay previously recorded session: 'cnee --replay --file recorded_on_local.xnl --display remote:0 ' Copy the original remote keymap to remote host: 'cat remote.map | xmodmap -display remote:0 - ' 'When starting Xnee I am informed that I am missing the RECORD extension' Your X server doesn't have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following: 'Can Xnee record more than one display?' No, we used to consider adding the functionality but have no plans to implement it anymore. 'When starting Xnee I am informed that I am missing the RECORD extension' Your X server doesn't have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following: * XFree86 4.0 and higher Make sure that the RECORD extension is loaded. This is done by letting the Module section in the X config file (e.g /etc/X11/XF86Config-4) look something like: 'Section "Module"' 'Load "dbe" # Double-buffering' 'Load "GLcore" # OpenGL support' 'Load "dri" # Direct rendering infrastructure' 'Load "glx" # OpenGL X protocol interface' 'Load "extmod" # Misc. required extensions' 'Load "v4l" # Video4Linux' '# Load "pex5" # PHIGS for X 3D environment (obsolete)' 'Load "record" # X event recorder' '# Load "xie" # X Image Extension (obsolete)' '# You only need the following two modules if you do not use xfs.' '# Load "freetype" # TrueType font handler' '# Load "type1" # Adobe Type 1 font handler' EndSection The important load directive (in this case) is the following line 'Load "record" # X event recorder' * X.org, XFree86 (3.3 and lower) or any other Xserver Recompile and reinstall the Xserver and make sure that RECORD extension is built into the Xserver. Please look at the documentation from your Xserver "vendor" on how to do that. 'How do I build VNC so that I can use Xnee together with it?' Download vnc source from: In the file 'Xvnc/config/cf/vnc.def' change NO on the following items to YES as below: '#define BuildRECORD YES' '#define BuildRECORDlib YES' Download the Xfree86 distribution from . Specifically, the following dir, (currently in the file 'X430src-3.tgz file' ): 'tar zxvf \' 'X430src-3.tgz ' 'xc/programs/Xserver/record/' 'xc/programs/Xserver/record/Imakefile' 'xc/programs/Xserver/record/record.c' 'xc/programs/Xserver/record/recordmod.c' 'xc/programs/Xserver/record/set.c' 'xc/programs/Xserver/record/set.h' 'xc/programs/Xserver/record/module/' 'xc/programs/Xserver/record/module/Imakefile' 'cp -rf \' 'xc/programs/Xserver/record \' 'vnc_unixsrc/Xvnc/programs/Xserver' 'cd libvncauth/' 'xmkmf' 'make all' 'cd Xvnc' 'make World |& tee LOG' Verify the build by running 'xdpyinfo' in an xterm in the vncserver and verify that RECORD and XTEST extensions are loaded. 'How do I ensure that the mouse, during replay, is at the same position (x,y) as when recorded?' Use the '--store-mouse-pos' option. This will cause Xnee to store the mouse position before starting to record. This position will be used to set the start position before replaying of recorded data starts. 'How do I ensure that the same window is focused as when recorded?' It's simple, just make sure that you record the window getting focus. 'The window pops up at different positions when replaying, can Xnee handle that?' Yes, use the '--recall-window-position' option when replaying (with cnee). This makes cnee try yo reposition the window as it was positioned when recording the session. 'Xnee seems to mess up my entire session after replaying a sessions which was interupted by Control-C?' Xnee records the KeyPress belonging to Control. After that the system sends Xnee a signal which makes Xnee stop recording. So you end up having a Control KeyPress recorded, with no coresponding KeyRelease. To solve the screwed up session, press Control (which generates a KeyPress and the wanted KeyRelease). If you want to keep your recorded session and not want this to happen again, remove the last line in the recorded file starting with '2,'. A better way to interrupt Xnee is to use the stop key option, e.g in cnee '--stop-key F1'. This prevents the above situation. 'Autorepeat is turned off by Xnee, how do I turn it on again?' 'xset r on' Appendix A Copying This Manual ****************************** A.1 GNU Free Documentation License ================================== Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warrany Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. B Index ******* * Menu: * background: Summary. (line 71) * Build VNC to be used with Xnee: FAQ. (line 1780) * can Xnee record more than one display: FAQ. (line 1742) * command line syntax: Functional overview. (line 315) * Comment directives: File format. (line 1140) * Create a project file: File format. (line 1079) * Define a simple macro: Examples. (line 829) * Define another simple macro: Examples. (line 867) * development requirements: Requirements. (line 1657) * Distribute the replaying of mouse motions: Examples. (line 749) * Distribute the retyping of a file: Examples. (line 759) * Distribute your mouse motions: Examples. (line 735) * distributing: Functional overview. (line 238) * Example Xnee Session files: Getting started. (line 170) * Exec directive: File format. (line 1417) * FDL, GNU Free Documentation License: Copying This Manual. (line 1847) * features: Summary. (line 39) * Functional overview: Functional overview. (line 187) * Getting started: Getting started. (line 96) * GUI frontend for Xnee: FAQ. (line 1702) * how to synchronise: Internals. (line 1519) * Insert marks Xnee with key combination: Functional overview. (line 396) * Interupting xnee: Functional overview. (line 333) * key: Functional overview. (line 343) * license: FAQ. (line 1693) * limit the data: Functional overview. (line 423) * limit the events: Functional overview. (line 416) * limit the events <1>: Functional overview. (line 430) * Mark directive: File format. (line 1407) * missing RECORD extension: FAQ. (line 1737) * missing RECORD extension <1>: FAQ. (line 1746) * modes: Functional overview. (line 206) * modifier: Functional overview. (line 343) * Pause Xnee with key combination: Functional overview. (line 382) * Pause Xnee with key combination <1>: Functional overview. (line 389) * Pausing and resuming Xnee with key: Examples. (line 802) * plugins: Functional overview. (line 447) * Project file: File format. (line 1071) * Project information directive: File format. (line 1428) * questions is sent where?: FAQ. (line 1664) * ranges: Functional overview. (line 245) * Record a gnumeric session: Examples. (line 574) * Record a gnumeric session with synchronisation data: Examples. (line 589) * Record another display than the default: Examples. (line 961) * Record keyboard: Examples. (line 553) * Record keyboard and mouse: Examples. (line 563) * Record mouse motions: Examples. (line 543) * recording: Functional overview. (line 216) * Replay a gnumeric session: Examples. (line 653) * Replay a gnumeric session with synchronisation data: Examples. (line 666) * Replay a gnumeric session with synchronisation data setting threshold: Examples. (line 682) * Replay directive: File format. (line 1294) * Replay keyboard actions: Examples. (line 636) * Replay keyboard and mouse: Examples. (line 644) * replay mouse motions: Examples. (line 610) * Replay to another display than the default: Examples. (line 969) * replay to another display the characters are not correct: FAQ. (line 1714) * replay using double speed: Examples. (line 627) * replay using half speed: Examples. (line 618) * replaying: Functional overview. (line 223) * Report bugs?: FAQ. (line 1667) * Reporting pnee bugs: Programs. (line 1053) * requirements: Requirements. (line 1644) * retype: Functional overview. (line 230) * Retype a file: Examples. (line 707) * Retype the help printout: Examples. (line 692) * runtime requirements: Requirements. (line 1648) * Script replay data: File format. (line 1359) * Session file: File format. (line 1097) * Settings: File format. (line 1149) * Shell scripts using Xnee: Examples. (line 977) * SIGTERM: Functional overview. (line 359) * SIGTERM <1>: Functional overview. (line 437) * Stop Xnee with key: Examples. (line 787) * Stop Xnee with key combination: Functional overview. (line 376) * Synchronisation: Internals. (line 1473) * Using a differet screen resolution: Examples. (line 911) * Using a offset when replaying: Examples. (line 923) * Using a window position recall: Examples. (line 936) * Using human readable printouts: Examples. (line 903) * Using no resolution translation: Examples. (line 948) * Using verbose mode: Examples. (line 895) * What does the name cnee mean?: FAQ. (line 1681) * What does the name gnee mean?: FAQ. (line 1684) * What does the name gnee mean? <1>: FAQ. (line 1687) * What does the name gnee mean? <2>: FAQ. (line 1690) * what numbers belong to X11 data?: FAQ. (line 1705) * why name it Xnee: FAQ. (line 1675) * why synchronise: Internals. (line 1480) * Xnee Internals: Internals. (line 1466) * Xnee Settings Arguments: File format. (line 1274) 1 Summary 1.1 Summary 1.2 Xnee features 1.3 Background 2 Getting started 2.1 Getting started 2.1.1 Simple replay 2.1.2 Simple recording of Key presses 2.1.3 Simple replaying of your recorded file 2.1.4 Simple recording of mouse motions 2.1.5 Simple replaying of your recorded file 2.1.6 Simple retyping of a text file 2.1.7 Example Xnee Session files 3 Functional overview 3.1 Functional overview 3.2 Modes 3.2.1 Record 3.2.2 Replay 3.2.3 Retype 3.2.4 Distribution 3.3 Ranges 3.4 First and last motion event 3.5 Delay 3.6 Verbose 3.7 Human printouts 3.8 Invoking Xnee 3.8.1 Command line syntax 3.8.2 Project file 3.8.3 Session file 3.9 Interupting Xnee 3.9.1 modifier and key 3.9.2 limit the number of data to record 3.9.3 sending a SIGTERM signal 3.9.4 Stop Xnee with key combination 3.9.5 Pause Xnee with key combination 3.9.6 Pause Xnee with key combination 3.9.7 Insert marks Xnee with key combination 3.9.8 Limit number of data to record 3.9.9 Limit the events to record 3.9.10 Limit the data to record 3.9.11 Limit the time to record 3.9.12 Send SIGTERM to Xnee 3.10 Xnee plugins 4 Installation 4.1 Installation from source with the configure script 4.2 Installation from source with default Makefile 4.3 Installation from CVS 5 Examples 5.1 Recorder 5.1.1 Record mouse motions 5.1.2 Record keyboard 5.1.3 Record keyboard and mouse 5.1.4 Record a gnumeric session 5.1.5 Record a gnumeric session with synchronisation data 5.2 Replayer 5.2.1 Replay mouse motions 5.2.2 Replay mouse motions using with half speed 5.2.3 Replay mouse motions using with double speed 5.2.4 Replay keyboard actions 5.2.5 Replay keyboard and mouse 5.2.6 Replay a gnumeric session 5.2.7 Replay a gnumeric session with synchronisation data 5.2.8 Replay a gnumeric session with synchronisation data setting threshold 5.3 Retyper 5.3.1 Retype the help printout 5.3.2 Retype a file 5.4 Distributor 5.4.1 Distribute your mouse motions 5.4.2 Distribute the replaying of mouse motions 5.4.3 Distribute the retyping of a file 5.5 Key 5.5.1 Stop Xnee with key 5.5.2 Pausing and resuming Xnee with key 5.6 Using macro 5.6.1 Define a simple macro 5.6.2 Define another simple macro 5.7 Various options 5.7.1 Using verbose mode 5.7.2 Using human readable printouts 5.7.3 Using a differet screen resolution 5.7.4 Using a offset when replaying 5.7.5 Using a window position recall 5.7.6 Using no resolution translation 5.7.7 Record another display than the default 5.7.8 Replay to another display than the default 5.8 Shell scripts using Xnee 6 Xnee Programs 6.1 cnee - cnee's not an event emulator 6.2 gnee - gnee's not an emulator either 6.3 pnee - pnee's not even emulating 6.3.1 Reporting pnee bugs 7 File types and format 7.1 Project file 7.1.1 Create a project file 7.2 Xnee Session file 7.3 Xnee file format 7.4 Xnee directives 7.4.1 Comment 7.4.2 Settings 7.4.3 Replay 7.4.4 Script replay data 7.4.5 Mark 7.4.6 Exec 7.4.7 Project information 8 Xnee Internals 8.1 Synchronisation 8.1.1 Why synchronise 8.1.2 How to synchronise 8.1.3 Synchronisation is needed 8.1.4 Different data for different kind of sessions 8.1.5 Slow replay session due to too many synchronise data 8.1.6 X protocol is rich and asynchronous 8.1.7 Different data sent 8.1.8 Buffers and timeouts 9 Xnee Requirements 9.1 Runtime requirements 9.2 Development requirements 10 FAQ Appendix A Copying This Manual A.1 GNU Free Documentation License B Index xnee-3.19/doc/AUTHORS0000664000000000000000000000061307773126256011132 00000000000000Xnee / AUTHORS -------------------- Authors: -------- Henrik Sandklef hesa@gnu.org Jon-Erling Dahl joda@gadgeteer.nu Contributors (code fixes, comments etc): --------------------------------------- Janice Waddick Juan F. Codagnone Lars Brinkhoff Ton van Vliet Nekrasov Alexander Dr. Adrian Wrigley Conall McGleenan Bianchi Roberto Thomas Riga Stuart Guthrie Volker Stolz xnee-3.19/doc/xnee_synch.texi0000664000000000000000000000000010230721125013060 00000000000000xnee-3.19/doc/xndetail.png0000664000000000000000000003653212332167161012374 00000000000000PNG  IHDRkgAMA asRGB cHRMz&u0`:pQ<bKGD̿ pHYs<<)<IDATxlyND&9Ƙ\+:ꞡ3'k3 vNN6ePAak!M2" &DY)ޱqANJ\v4I야1):1~z?YխSz^~}FP%EQBe('a$e^曐~d?vFe 1G7`29ʝVz@ɣs$Lжl!3dLwG&L'|KI2Y% n3aV19AalĈY6fmĤLƈɀ{'g0CMaȆ 2dȰRQQ|Ud&LM7 ɾiuH0>`$8M4`dX)[%Xe t20VZL s՗c= ѭFa &X Џ{'VraCs$ݽ6VF*k'ܔ2YLN;#}=nc'8Mccm!LŠѲ em|2܁UT»iV8*ONUnMa+p9Y9jۊa~vHdmYuӶ,sfe5wrH< D#* 1[, ɘd!(0fy6dc1ϥk\$eU`9`$%˴ Li A!Yca&AZ&6CM(̋1ɒ J>4+:U&ܿRG#\ت64Y9I}tXeQV-WyT(Y rLv19&ɒDm@La(cL>9>J$1u!HM?c}O7Q8̈́ki?駟}EsS%' e $hF.-M@1R&!i!|v0H63YoLS2S- b32݊-G'mzCwcdUU3Mf~re:6 vZV~VYM0 , f[_'φfdyk}Fv5C@7e(n$cƖEy6Q pR11yTM}ZVm3*cn oq;kLr8G2itDm|s}ʰ2bnsxL&l+$L&j7Eߟ{HX& Z"Gcd^_lfi͐" a2'n}q72F  aVXq:>X,#6d"w*m ]MH 5bbmim i(w>JKZܧ{&R+'0ir)ΛcVN#9V2DiBr*8g{vw(8GmBj+C6Q6{4dͣ$ 'dQ3O?< *܁hҵwȜI۪ 3+*d Q$k)LEOmʴ&L<4QJ)eTQ*O(c LuSfU6CTkt~W F z|Ekm9*>r#bQ5ΘnV}_q}#Ȅken$ 2an>De2^72ۓɏ."UݵT{̝iiZy*%&If猙U ܌ 3iz01n )VI3o'w3i;G&e ] wS}0Q5&c~ƌI2M6)1k<fD3e_-MωJg>sLpӅ9ΨnVH!s9\'Z;O:1sJF;jC;3 ͝_Tm +2EI )&ܙ3nr Ռ)H Ŋ+HqK h;=ڝ\\?П VE |#Lݰ e:p3uM+TM6L?*Qր=Ms45:G\@N{̇->+p6g0*Ӛ0?'k=&G{ͲH"߭uZ|E>ʪ۝W>?F;X7yL'o2#lkgk?ZHޱs*ޱ˿ߞ[&LkcZ3_YvZ_,-M+MPGIa5dļxki{nA2 /fc_goh s͹=yu|]_@B2m3al|w#gXti_7dSP6B?UuKηbʅ!2̍9WEJLs=/m&&J~-Јo=.sjuǣ2m!`UD<>֢NW}>cplox+&nDxx1[RL fƨFi@oh1TwY&,'֍$Y</2T|9L$˱mYVAfoN -M1ɵu̗ AKS!I͑Z99&q-hi49 rc>G;MmfTJXŽڅ*)Kw=el pQOz#FOC#ɉtoX{ ;/~~_3U6_ܰ|KBК?Zց`͉tb'Dw΀z<#3|pWXF{ʴoN+R݀PYqcG[FBTJ3Ҭo/ >F`:6ccL|ʘiRBc%*ȼOAߛf2ʘwLˋ*Zvϸ$,E2UjHwԲ?Rk׷L\p?Ӧ~ˠv2UdkB?gܼ;軲=LNPs\h6]0mBv(Zw*RWT UEVz}Ŝ7*SE =ZUУ2UУ1A[Цd% VDoM}AjhWQBVz7Mh+m@5NnmF[a@+u^E =*SE =*SE =*SE = r,o6Iv1b/q=q`8̏j84`8h}D Ȭ!-{8 Bfez~fY.p%F6PD40 x2TjބIxm5"<@Eb$62x]Ǎ3L$*Cys6j_c8K|$颋n)2,1H]Y*J5nXy.nRHrqgu.6:J/]zݳ%ݴ o[.c* Ul71[ca*۳Ӈ+EzI锘t2nÌD$&QAzDDDHLbbՂ%"1I')byN{=1sĤ CgqCbds޴`W؉ :gy7'dΜDy$NI\D G{++A*#朘{Xy4y|2 I9caW%"7Ř{}lՒtUA&B t3xYis>:̲C$I);@$r%':Ϧ-aGUֶq[q WDMl0k'^QqO^ي3r:~E ahVqcf=1.WܷN~X#䡂SrpAevxŲH%cE(rg<b!%R2c!0[}% k|>W1.In{Μ$,$Y064i BQZb,;qLH2 rA_5Pa`LqHg@Sgk ?7DlHg[3=,5?oQ WMꐍsCzNZ N @.g"Ux3ˁaTwH#;l2p2K*q+ehcP},0g$۞^];:' >0b@$>" 3t#_,!3% ?/pHQ[:ΠϹ{)8ZQZA1%I`љ28^n %e9oxmǗ_Y_Ĉ(q W% y:~3W*4 0ȹ ǭn.𬛢(sD,2Uz׋4p?osg'meMܥll%) نdE?v5pS/ ⶫY;(§HIlBr#y;A09 @)6H`0k/E )Ϛ?Q&"xǀ$q ǹSһ~R nu,^a$2R/#|.N N0ś>i_Q];w|~cEH>_HTBe(Ge(G+,JP6śE!\Цm@ezg(Y8v ![mQp?skZS;K%83D9XfyƁo$!jga38~΅@ܧ^ [i.Xqb l1G@l^h4vK$ QI΅:A댰e"'3M e# PNف`譻Z~Ld gaw8^LjU\岘 5Gx?nws4 G}g+`Qwx}t:\oېsm#j3kUB6H] Mb?\ Qް˓B%Z`>_s|A9&YlT\08? r\(;\6x %}\&Wp=n"LXgբ5i.fIc-T!׈I6KhFAv a>.VXs+#u5!@avVJ9A,C>m`0$Ov'8}d9zYNx +3K@_#aJ-*ޒ[\gms[\"$psomP4m7)@j!2β=o 0^FjŜ 8D=1r9mO:r 7YS4 On,I,0w.$)֙MH{Jtzn}pj9vϜyژIs6Yvr9t#<5$3E`%XdOqXf`+]j.0^PH&x xEzT\{ /_r}9]4EIhgX&ƚsܤ`#@Y`,2/p΂SN0 x, SdI1~>"qV!<hS^4OP_N >zqz Hm~L%,:WIN4pn+@Q 29eZ:d:0 9Rckmx8Xd-eZAߛK؄:edڍM}A8 @s:eRuKsE.lv :o'6<uՆԳtU;xQ/Ւ٘}"7]޵7 Ms9+8xVvD@8WY;?cý Px)_YIL}ϘU*RnwNo&qdDkLqu;ߒ|[{Y5;%<JE i7!\ٷؙ_*4)9]=> H*~6u=4u!E[lHUu FК9*~voH5U NЊ9]Ly^؊`E }I"zr:.OFY&cgK#j#"x u[ ZiUqȻKO FŖN+!RlHHCv.+(NV~Qf/vx+rZ*ag)#^5PMq'e3^z47'Wr/ 9>g~;\!Z4f?"8%Uqf]m3M>`u(/Ryܑ>w4:Ď`s˼Y;ɷ2*AW\M/*VB~@5?$^m/TH1 9DNj^򴙨A매DLlRFb3V*#XzEY+,6i{m0BClu _8GTLqӛ)HP A.>O/ c>7SL37{7;ͭ{HP}םPëRmARPiD7ks|q{zT"+kRSMU!]l-jó" i?K hxz*c=! ^Tb$&1gSF%"HDC\Y6"w[4K}!NWvLB5ߴ Q땤62vPI5aXqaѮ8pIw0ܜn4dKi^H9 ,0̲ `YoMp"ᭆte%CZNΪ]Idۨ sxI63fRft4)䟳xRŴTa&o_1^b'bYw/d*>bV4)䟳>rY7 I(I#~IzXdʆ̖Yk,LhNEd{`'F&>#Ň!A].}![9]JkѬ[ ^Uާ,bv ^e/g`??eGoS?М.%Ms)_[6faD@j rz )oy>+񇖒))hQ=f]]%D-UUAJh4hMMVx-Qv9AeJ-Mk@{A_*ӚP32cJ2M哫AzJE/JE~}Unpؗee3~J -.w?Q~SZʢ1(6F$"˳9j&$鲿$^76c1+Kd>L?^Ve8 ] ,.ckȘ2a=b$-*/1w} #=$bHT:Ϫ&կS]C&ح܊*ۿLHgSj>*!h>]CfLU鐈\ i{EF" Q/*1\wYClw )t5N/.κ:'JiY(Yq>COmszX.:7%}|uؗl^yD0+-Li,=pxmEܝ ZRS={K9d~k7~LaO #EoqێQ68wΆ\xcDnsY0[s9i]˞AXʂi sw=J-W #g-e6x%`02=UjDe##m`8P0Ka s>Rlp!%(D8uzm8cv$sEq`\`PL_[fw2oIZUuܡ(9 sAPlI(JUdC $& [^E =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =:ߴfn47\ʴfC=IiGҫ(GKӚ~Aʴ&6@#JnJP/Ee)*JҴ2AЦȚ1wBhWQBTQBTQBTQBTQBvTd9&AJL+3mLwZUУtr3hڌ8AЂhi(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge:b .'QJ&k ]nZ&)2 1< J(Jo9abtSęf3E.85kCݐ%颋8KA_R5*YmO`EpArEʮqI.-s?qGT-ʴE:\' $1I8lx~$`'ceq&2 }QJiKaiEF80ql s7mNmjT-N )"s·N~X#䡠/KiK&q*} C;Ax -0 < eVaKُ'/G)Ô2mFgNFAnpW[u>D8q`cS!mBj:v.:w@`L3@+ps; w\ }\xdЗT--Ft'K=퓹-i%ҫ(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(G}!m&hEKSE ?ZVFj5ՠ h-Գ*JQ*JQ*JQ*Jі !2A5-M7%=Avb#hZ쩸R/vM6ҫ(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge(Ge4`$K$Y ڨV„ʴi|0qNqSM>,qf}Z *Ӧس fXBC>CqSP63ڪ;EiVk\dQXcBDdIټTDV&"BTGZUH\N ""Dmъ)Q#b䐈t""#HZ= "2P\p:dFDD߹kY}Ub6<ӱ߉Z;ߡ*{P9J0An0<| ~ibd|$) Mx$pp 0Bq`yp|܍+?iX^0JWنY$FQn9!)2 x ,ho~Nu4 d.W}ҴG:췫blJ)zqAs;gvC%qK1gq$bFmh wHKz7-M}cpn8C/Յ`Xd~*6颋.>\ QkeεƆ;E&^+nSU}~; )luY ,#CCś-UCFMҼLEq0s/z\VʦFϜ<8ӌ[*SyMaߔgY崓%HAEzIHp-ph1}UVz}bdneLSdҭz⬻ OG1=,0`=G+TKg9~7{dIK|H,G;{{pT \Ş vqƐs=g Hy X \ w{w8;x|EHaAgA[^__}j}Gx72YfU|c1C|S-3)n9 X1Rd/z?q72j;z9ZiFO-qVdcj@+zTzTzTzTzTzTzTzTzTzTzTzTzTzTztZ\ß9ׂ6QnZ#/E *JQ'+0mC[3/A:L%hWQBTQBTQBTQBTQBTQBTQB4tTQB[ហMh;n -t ҉yG5^E =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*SE =*PY(]$6H *P 9 iP*N "8W%g<~7dSb$7N!S ’%i(Bt1 1^fH 2P/*=wDn '=_uG!=bk1tΦސ'ANYb"2W'3nGKzlCƀgYR<@X{\pe3~Nw 41-X7*ȸ-Fm!&!O'SDDm>-Mkݴ4 qx$|s7q\.> ,|wx6lG`eK )dLH X$YY ^Vơs*WN*u2 K8:`N.YzEIl(`~?*qxoB/8_LrM@C""2##WnL. ɴ M+!bJ4ٛ1^ J~n0hBANj9fy74qV /F 8+tq ߱SlU力zTzTzTzTzTzTzTzTzTzTzTzTzTzTztZ\+DikArL`͙¬(^E =?>H%tEXtdate:create2014-05-06T16:15:13+02:006%tEXtdate:modify2014-05-06T16:15:13+02:00whtEXtps:HiResBoundingBox561x569+0+0tEXtps:LevelAdobe-2.0 EPSF-2.0 ZIENDB`xnee-3.19/doc/xnrec.dia0000664000000000000000000000364310012122110011623 00000000000000\]sF}ϯИ: $ /v-#<>l؎](ȒV{jg/fieg=p/('ëC{~rlOߤgn7`X@irJ;'Nx z'U "W6= ѧIg<͋s?ɳWns[QfL`_u9yծdG/%W4~5I ۠HSJ0J󼨊8VH#RGM:aOS(2lfףf|dlp'mO1"5D5e"G {tˮp2=kc bi[D"PR7SmcqhKDq+, fw>Jhք`mp'}gׂȿãO*H D_O S|iD!16w/MS[9T"n""0n Cn:hP0r^nL:$7 k8܈rk "6h u| $5#)4|4f!!Oeڤ˄2#[ YXC8ia;&ŢB>~"'±#Pwn,E/6iFOYG Րp&L"3- 3] =K4/qjV<Ȯ*@.L0!X%-zBD\jiMd \#(XwXa0qwx,ӌ`'hƼF i [PɛtL,ilǑ[kPaz8^ 1]YaCqQfpDCJ0lUG,/"NQ'粏uz# Sa2yik} #@[6175sqbW% @k5.Y1cr뉀k^q qo jomȋOrYR{GRMzd[ǪeIIt~FRSW;Үph/xDs=Vmm Ěo<J9Jcda&)%f-IY/YZQ'lEE[ I9O4gߞm0TS2H` Ka:#F-Ctco>:k>ܷ1Qq=j<$Trk 琔.1r&ŕkJH ^tVPY7Qh>ȹ>f6 [ &GB3l=UK$/I:}ufM3ֽ-m T\VMM@I2Q%Io{KNъ?˸_8HA[xnee-3.19/doc/ChangeLog0000664000000000000000000000013410001751443011606 000000000000002004-01-16 Henrik Sandklef * pics/dia_gen.sh: added convertion to jpg xnee-3.19/doc/xnee_install.texi0000664000000000000000000000375412272275605013444 00000000000000@chapter Installation @section Installation from source with the configure script To build and install Xnee do the following: Download the following source files into a directory (version numbers given here are just examples) @itemize @bullet @item xnee-3.02.tar.gz @end itemize @* Unzip the source file @example @code{gunzip xnee-3.02.tar.gz} @end example @* Untar the source file @example @code{tar xvf xnee-3.02.tar} @end example @* Enter the Xnee directory @example @code{cd xnee-3.02} @end example @* Generate the makefiles @example @code{./configure} @end example @* or if you want to specify which directory to install xnee to @example @code{./configure --prefix=} @end example @* Build Xnee @example @code{make clean all} @end example @* Install (as root) if you want libxnee to be installed. If not, skip the following command. Installation of libxnee is not needed to build cnee and gnee. @example @code{make install} @end example @section Installation from source with default Makefile To unpack, build and install Xnee from the sourcefiles do the following: @* Download the source files into a directory Unzip the source file @example @code{gunzip xnee-3.02.tar.gz} @end example Untar the source file @example @code{tar xvf xnee-3.02.tar} @end example Enter the Xnee directory @example @code{cd xnee-3.02} @end example Build Xnee @example @code{make -f Makefile.xnee clean all} @end example Copy the Xnee binary (xnee/src/xnee) to a directory @example @code{cp xnee/src/xnee /usr/local/bin} @end example @section Installation from CVS @* Download the xnee source code from the CVS repository at @url{http://savannah.gnu.org}. Instructions on how to do this can be found there as well. @* Build Xnee @example @code{cd xnee} @code{make -f Makefile.cvs} @code{./configure --enable-doc} @code{make} @code{make install} (optional) @end example Build Xnee Documentation @example @code{cd doc} @code{make manual} @code{make install} (as root) @code{cd ..} @end example xnee-3.19/doc/xnee_start.texi0000664000000000000000000000667010524307456013131 00000000000000@chapter Getting started @section Getting started @cindex Getting started To get the first feel of Xnee some simple examples are presented. @subsection Simple replay Start a terminal emulator (e.g xterm) and then start Xnee, @example @code{cnee --replay --file example1.xnr &} @end example ....dont forget '&'. The file example1.xnr contains keyboard events recorded during development of this manual. When replayed you'll see what was typed and of course more important you'll get i first glimpse of Xnee and its capabilities. For information on where to find the example files, see below. @subsection Simple recording of Key presses We move on to a (very) simple recording session. Start a terminal emulator (e.g xterm) and your favorite editor. Move the pointer to one of the terminal windows and start Xnee. @example @code{cnee --record -o example2.xnr --device-event-range 2-3 \} @code{--time 5 --events-to-record 20} @end example Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you can type whatever you want to record (20 press- and relase events of the keyboard are recorded). We are done and you have recorded your first session! Leave the desktop as it is and go forward to the next example. @subsection Simple replaying of your recorded file Start one terminal emulator (e.g xterm). Let Xnee repeat the stuff you did in the example above. Undo all changes in the editor that was made in the previous example. Move the pointer to one of the terminal windows and start Xnee. @example @code{cnee --replay -f example2.xnr --time 5} @end example Move the pointer to the editor and get focus (e.g click the window frame). After 5 seconds you will see your typings in the example above being repeated. @subsection Simple recording of mouse motions We move on to another simple recording session. Start a terminal emulator (e.g xterm). Move the pointer to the terminal window and start Xnee. @example @code{cnee --record -o example3.xnr --device-event-range 5-6 \} @code{--time 5 --events-to-record 20} @end example After 5 seconds you can move the pointer around (20 motion events are recorded). @subsection Simple replaying of your recorded file Let Xnee repeat the stuff you did in the example above.. Move the pointer to the terminal window and start Xnee. @example @code{cnee --replay -f example3.xnr --time 5} @end example After 5 seconds you will see your mouse motions in the example above being repplayed. @subsection Simple retyping of a text file Let Xnee retype (type again) the text in a text file. Move the pointer to the terminal window and create a text file containing the command @code{ls -l}. @example @code{echo "ls -l" > ./mytext.txt} @end example And after that you start Xnee. @example @code{cnee --retype-file ./mytext.txt --time 5} @end example After 5 seconds you will see Xnee type @code{ls -l}, which probably will list the files in the current directory. @subsection Example Xnee Session files @cindex Example Xnee Session files The example file above (example1.xnr) is a session file that has been delivered with the sources (allthough not installed), rpm and with the Xnee Documentation Package. The file(s) can be found: @multitable @columnfractions .30 .30 .30 @item @tab @b{Distribution} @tab @b{Location} @item @tab RPM @tab /usr/lib/xnee/session @item @tab Source @tab ./sessions/ @item @tab Document Package @tab ./sessions/ @end multitable xnee-3.19/doc/xnee_error.texi0000664000000000000000000000000107772666740013122 00000000000000 xnee-3.19/doc/xndetail.dia0000664000000000000000000000365010012122110012312 00000000000000\[sF~ϯИ:_0  i2Ud#)8C{΅v$$3lYVηgy|_mGir#ILz?:Խ&QNpI^fEx:,KH3Gg(8AٓoEEI8GQ82ҳd9ci| ޣOopl͹ۡf(EGpX-nyws(# h}_l%̆6(ҔҪw1{AɼD"͊, (Mc&k";Uq pE-0η1&]eExͳѤ759(F!JJ,|^?x`GWkUpe +Y 6cg_v\lMpK ۻehr{w .u^4CJ aeht;"LH CdZ_Wdfɥ%fTFYq #SŎ̼v薨5F3,uir*ct,4(Lirqm4G .&y/ȋKNȷMϲP{1jobHb:P-N@&s{9j69on _.)FA|@âR()/~{\hsq=o !(.0?&a6LϷpAJ)R>X%Ő(*/,+D}p\"k]>K'ff0U.dz0+v&;9;EuxRAb8'|$ڽvOHc{b26ocIZ@IjI!1ʏy_~^[n()6^0&ʽGnD͏i!y-Q[npI`!^b#Ԁv{wJMi-R\YfM?L-3̐uˏ)(;7,K[itj 5'ϡ?VtCKᆴKg{GYE_øֲNzlpˁk?]xnee-3.19/doc/xnrep.dia0000664000000000000000000000367010012122110011640 00000000000000\]s8}M}ˢ ,S^Y`v:N&^;c݇{!I -8В8>9Z痓,l*-A|P |t0l E߾wEm:_D$9w~V:-#͐R]Ҍz,^̝A,!Dҽw=lPR=lJ5Bt4opwe!3W65WcnTrc~/ &if|ģ0dfWp$:QU_|L xF >k#R#${X$Թ(娙b8-}a|S!8 Q(/y[y\o*{W^ \8o9v_Xä_kNr]#%L,( ,o+DCp\"]5.fgf;`iV㤬7&k[9ZD-xRAbX'|ZV'B{1O+`IBIjI!1jˏ?凄/?w o,7Qeq)   e #7ͨErÐvˍh,7lHNl$5Ԛ24tSA [?YfV&l&ܖXfȼ80 |?%ij]W*ƒFIF6lA+%VuD <"µb V| FPRAZc\."Hq\'SsJ`"vAZ54D(%L^1Du )"n:h1bqJSC1R1%#jD աHa$;-*SBI*Oݕxm@ޘ:zQlƫ`ܮ`*{L$%i9ܑ*2ϰErOB|nC5aPc%U9 B9c  ł0t С_CSY~7q{B:Iy,e* U58Di #--x^Շx'/0j6a)qbhN(&@W`\yZmb}Ս N!F+xe@R[+$54 \+(;P5xgYQ~v6,j?3Ǒ.O1FzLCX5 4W[Hfv:!mBXO[ 3=qYCF<))塔R(="UEsL#;uoX7 '+ (}x^{7Fx{4NE<ࡅ91ڶNePSco=Zk=8T9фy+PP-!LT3)vD8q(z{lzjMz*KC>NӹB3iM{Zz& ȆWi]OZ2?'&Gpl5A0> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 132 /Filter /FlateDecode >> stream x3T0BCKscc=K \.hQeUgbl*5$0]F`BM L-LB- MMvY*(DkD䥦jj&ij&hƆxqp* endstream endobj 12 0 obj << /Length 795 /Filter /FlateDecode >> stream x}Umo0_i 6@|Hw&I7vETs~OJRRIuw _'<))ߐ">v1_:flTSx2k3&\UJN6UM~3JIu|Rg3:጖PKf;(WaT-}ULKq+0]-SZe-r`b{"F")'^>Fp+;2%Rݠs1B#{q ý{|xcۘgerQYn?Ìl8&|B BIr+uLtZ\6DɈoAOQrp̩@ VOj4$Vp7K` Gؾ}ϐ#>+r(2@() /T:k <RyvSt9 $ } *?^Ok^T50g7 Ch:U$/nj+vGU IT_x79 H7Qjvlw'A2H2r'D pZr & endstream endobj 28 0 obj << /Length 912 /Filter /FlateDecode >> stream xO0W1y &MڠH"R4eϮm`FDqeF28@Gz̛R1uv~>SA$(E էͮ$OϣE@EsOr %ZRv$ŜƧ20 z؍XKH!I j>ϫc3  WjH*˵Geya[8-Q$"捘a<(^tQ3"A<~ҿiZ3$ȐxWL9]ܘfcƩ#BFLHO#:elkflyh ` $$)ю`DGRPSDDn5(=Y:eut&[&rڪ247š*BYnʢ0kP$]ꐆd<}yi&$0dy9 MgZ}^Tf-/' %{]?WӪ`Lo_ۼu- Hx jj^2ms0KRf2>ш|B$TO7o?lyC:AR:'>肚 :'*B.'CtiNE_rծDg'#y<5i VHō > stream xڕْ۸_1o,}YgRqVvRq*II )kq4}7]"I*-v훈VF  oew* Rw%?G}l$ mfSjwl(@m7ydqJ cQ^JRHmY F p0I](,U.I포oGTX.3n^F7Lv~N7ȣx̮w[T95zYv5j;>N4d7ھSWh*{L JLu k CcL.yAEЏ<[&ixg$O4!]W)$ST 3t'ۍ}tdI>]9(M vP\rp\4, jb)Em+x%Yh0U1Tkڸ޽FeFbD c׷Bd@wFX3ߌ/G+)JxH05 3HPhb `Uja*# 0 $x<Y7z^^XW*^wf E^9M':fFEt824ȯhuӜy6<@!ogjMx+-DH|qdp%KK_rD.?BY`mJ-E'`|v1bL fX@x29KQ\tu׃$zHQ~%y(ײeƱLZmƭ|-%BCLGsyF(9F6->'o"!*WWG՜JN`{"d -J 'yHF,^, ĈeƒwWg([+YEyU˔q+F$/N`lGGM Fտ,*qw>N莙opA0,7Z9)`w* Ei׿:dI6S% uAnIࠄ1 #hir/2]ZA$z8~jx[$s^|vP봱E^emXx%ZF4dNQgibXr3#fY^w碸 <_uE(.yL`nHŦH/Xk|Ѫ}O%ж:ZtcGjѭ`.&_ $֜md Th% U]K[`Hp,_{nݙNL&g3ğQ$!`{rOi{ۀXqyӁՋPg ؘ1tvd` sxftiDXF> stream xڍSMo0H]1QSdžĈx56Mf*TBBf޼NXx89IYԪ"|`[o<0Sy>>%ᬨYIӿmt}r)%wYTIyprQW)OB8S!ȱR i݇Rpq9GSЗ ^3QQƽqd%sű 5*`Z K5F B&ˤm(  A[;,t8CWʹ,xY?2F6T1l`ѸfǍPh\Įϙ0D%D66,67ǂ'ٛa|DW=LW{l֮ΤcY!ęQLb0{=GGI۠eGDþEZ'"4> stream xڽXK6p/ DIaM4.R遱= I]p&NRd r4bbY-2M^쪛 ZF0_ǗIhڈv_؛v*2$xeoM e&Mmm;HyvH ")Kq$TLeS(K@3RP5mU e]T"[o HƶX){(u~aEH H5f*TTyJV&%`u>x&n<uJ}$ڬ![DSkg]$CkEo؏"z[<8T"Z'_ސ֛`ߴ6~y 7B[ =0%#eǢtQwD{s~E靥wښ]9Sy 1N O Eͱ2! CѪIVyBI/ϨɉzFJsz^<ùy|=h>F's f}ͩ췅-\Mm:j{=lz*=ƺė% m҄ߢqG(0]$52c QhjW*"v|Ο *ā(̮ C9a0qʹ!bp8U"SJt8mRh菾u?ݠ6Um$N8Vx&`s!ŵ5t{Fp?N$DCEzJfYڊ/J 37`Blo3OojD`}:@u )0nͱrc׎Bs9VB|pAKqnӹUsk"ƹU*'s|4Jn>"4pߟsK{N?u䠩40&ڝ{ٴ\P/n01_5 m#W_4S^L\Yer|!rO~[\[gj(ԋFy78/XMl6X2;h(74FsՕQ}cgty/{)tQߣŀRl2<)ً& /XS~ endstream endobj 61 0 obj << /Length 945 /Filter /FlateDecode >> stream xڝVKo6W{_z]=mÐ:бmQș7<G,lQ(+].! q÷"ڥ`^YzXbBd*Xm]nLRTk>yl5I* +?V>|Z5RGth^_ Ijrɞ|o`* ݜ(N{B aC_K=t k*+Q\) |([t#Kɗ̑{f7bt]4'$h{ ȓ4:$`%ѕf` Bh22v-U\A} H}Yt(K\s= ::tK׬_Aޫ̹lK@""vw@xHwt>|ٝ|N*ȭb ęLR2RwߋR Sޥ [j]|a5HчAUlrPf"%}ےxBd(A(IQT?Y(vbG㰶D3~#]G ;űH2\v:8:jm0R{vieWⲲ ZYފ P 6^S?XUq;{2MTuFElL ܏q[ ?&BNG'바ڸSfÌBXc I=Uۺcay D܈ [D@O}bLɂ# lL^.ThNЉ<aٞ>rCp̈́h |~f@r#2%&GG=~M-Ӹlz $,ՍI/B!PUh6?Gx$zK"(La+ou1=Y endstream endobj 64 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./xngener.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 65 0 R /BBox [0 0 561 570] /Resources << /ProcSet [ /PDF ] /ExtGState << /R7 66 0 R >>>> /Length 35323 /Filter /FlateDecode >> stream xԽ9$%ȿU\ۆXAK_ID]E UJOdIVJ7nàt|??2+}FZ_e]ןv{|?w^$ڿk@{7/__*h{G6N,Kn)cJ߭R-9=Ѿ^g|RGrO.K~g@j]߭J#}2w%Y߽ g]|){q?3 c?B۴.U͊Lv5KO寒wLJjèvj!j߭~o<ߵ>Ӿn5W母Kkw\{,c?<}tPЮqڅهf[ 3|BV%|U d=^ZdJ4T.OJui;a _8t_~-Gֿ/k#Imx7@ƀ|ށ1_!>Ѥk4+z.0ԧ!bd|OrONLv{WS%j믺i)~_<cY]XEܔ)֎z_@ QÈR6J"e{H]jCxN7"쎯9@J mTZa7mHkd3ϵ= g[ 2ѢecVX_P9zk e-7{؈{PH`zmO;Y~!شꓟ$.cU1ѳ3` 4zФ`r4Z |̿O ibCk%,PF>9vg[,.1[@0'+@-m&6pcl#EG}nrmlVpz+B|c3@_g[w=y}^^׽XW˛%y^][PLTi7R{{3\SMayS-xqOl4$n`Faeޒur >7 ϛG< s*|B>J4vM[Le0ԆͶr M{3hLyƇ|$=4zk“yKC[>Шڂkͥf[}&=E 1i \@m;K[rp`oIۃ́4esjHsFҬ?S񠒈f$#1!5C[ւXXQi G6ԇomlA=lַOl><5גncvL@lރ/㬒Gi A N>tT6AkPAYod%Cc>)DAjO% yM$0Tj.yJ/_-pj}~VypVx`VNS-Pɛ⭍H:Km qW, ƕLV `MTܲk&TC6,Z15DrzqD0T{M+ XC>TءFE[ȁl=y`f|ޤ>iwU mHCP~`/0P$ (t,;hQf E%i{@8 {yTZZUyD)d/ٴq疳p}˓&'0AYs_n;j+_ i`'7ze/f. `cB0VhLJ 6$:7ӆ c̤׀xK pC2A:#5%3wx\:O 5C|h~-5~~ tjJ"ܖPY? [![?Ah390bG\oZByY 8lke6C/4{b2 ~lсljt1{CymgRͫ$X\'f@i>mdC mN<3i hvN/8B4NaRHN˟;o7@ '%[PGAtésS#=wt OtXp XEB<?IG)܃۔qZBjh 0f$;-yXbZ%lg# 3P>,g1&OlD13`OINăb zGB&!sa<` )^/Pt9iIiXu6{9H{B'` ϴ=!j{G!d B͡S#! 6fjGi¼谇4znM۰@* ln[NlLMPpH}= f'Pb м2da҇|g1͏r=Fsp$w4Suxp-s9ưJvL, /4~=KЋ4Q^ }y1=-10:σIR bFaF)8sP!ieE?JqmC3i=Nٝ5t6n*Ye iIa5!O#oPqH֠#oNʽ;Qٍ&i G##l60cl%5@!{`sD3n/,E ݚ$呟D{8zZ@GK97.M ;Zв:> Ó\N$?!B_WIfb^5kp.ړ8C0j-\4؏RIZ7=Q':d8{NLS{`tLp'W;7 =`Fb&ptQ(T< ԟ𕀁VQ;7|a"[0ȼ~Q9L8cXZ=LZ)YF$7\<f=lI+Q|f7`xھ;`uzxhO-` F  iXރF—Z| Pf3QL3h8,SKXt ” [=֩iD?@*A|!1FS;bLCU̾)DR:|*T\AꉖנQ?\:W@E MK|.la^3]mtӭnGA΃ z!!gNkZ+/^@-y ;g"+g*@]$ }6[BݏʹސEE?[ukf`̯Vw06@5lDUL!601x+t.76^HCD"`T2VX *&zA[p!C]j?'a7ȵS WE|BNǒiރDh4͈=i\Hn8LEvavl3z*}s /묦HP-Rv2ֿޑ\Z<\ƥGm &YDknA]*B +9,̒Tmj4'XeSDKʝKXfD䢗a @۝T3|t108F+Y2ld&>3;ߨ>js!4NZ~:TVPu3o%kIC7(4O05Mw})>~yn vRD?vcw~MRʎoՂ[| c;r3YyӮoΣ4KYI7 bkj;4HF^.q @O@HҩSZKA$#6)jMTཛྷ4 !}4BNiI' d%FRy# [`m/MƟSHۏ}Z'Yz-xhfc߯Pi K> @pW=4ޗ I4v|yQ!df+rU:yu{# Lz 'GXjD  73=i#v}&.433EKAyQ8r]."XRysd%E";y)9!;D87k$ d~6D aB*:pjڿtY<ӘY&yk40Ϋ˫ L"FZ2^N wI夈= [_W^p>X, @CDL!P<$]])#A@s 1:qR8D=%67ǨÞS1SX[H)O½:dۤo~JY zۃA͈"ԅKQPL`> f./*tqu\`fZYL&nMZ>ث'IHS;Vk7]hTw›{q hUcGI}Pв,R ݻ"X.)6$n(c6Bo;3E^{7McJ d xp-06?"ߌ1p]pai^0ξ '+ц dͷ7L{S,9wFl mnQ=s<\-:hO2I qzL[Mfx4𾽓b_ԅw; ~Pلx_-:#Ʊ>ejxj?:KORJM^J9:g2ȼyvy5@WV֬%ft6ŠlŴ (xt(Z6X_M$Dylr32RzUG| *,[\.=- 34Bi,]5-Kfj,/t (bkP Ր:_hA6"&8434|Õ9bFk|}C,şCn"nAZ6} vZ4|)h] 2@MDwx:B9B cD V30an3u<4J No\)@d4v{#4-+$f M"RvN"*^C>ۺ/f&fEL{co:&>_,/ pH'}ClX% ̃yɄsgY\[Ӿ`,o)+Xކ$)py화Nyi֥bԤ-@^zՂ0^~ь@7Ɨ4jpb. x5mg|0Ƈw 3`Tk;~y.T.:+Dnޗ+n޷Zx_{4퍼o`@M̨v}OxTn%h77KIx">kld$5W/2Yڂ>X"/q8`c1?LXXIuG#EQ^%߆ynDo(6dJs 45}ßأ?d|?0K #[BDO 1'z!UKς\=~oQgB5@ђi3`@_L& H@^x ]͈A}|潳 R;~ah||)bMywdc4pL>w@!zA) sly_7mItŖ ^/-BƌV5_5*u4k(AWHЛ>#kUf1_zRyvqu2y1zlc}_7ԍjC9&?A Y@sxjsQTΈE $ yP%}"ؓwɕ10~ aٙf踗rT~3bOa'(/$Lה!aYLmƴAo gR7!6#HC]!*,hI$f髎H'X_8Ah7;g40 w]A^?A33S;0O뭟 4c3BO،Hw@OCP., o}B @12<8r~?D[R_XAc,df9fLԠ )0X/l֡=&'xNHFA01%G;$i7ddj|a*x!Sr!e(_DOf -Sl-:?`&t Ac* ;}lLX:R̜֕ăƢ$qɹE{"ڔtỸcz 9=T1IW@^yiatUyDqL'w,D xM*yBU(BzrH'ףcgoKNyϤ>7eBVFn?y'^'GMu]B>?UGI |5X@ݓoHQ e`=ޘ,*li3p఑:0o,+c)gyTbTQlzgI{:( NOY Nƒ*24͉[}V1 6//Zy쵵&mb.,t%"1/D$U-jx\9PHd-Z*zdU};BB#fM@PJ/Xp׮y=CVʻ W9Xp1;e:A: vldϐZ3Q'E~@o/(hM[. W n^0;f27]Ϻ3bybc~*IᅬO(9[t$Ra˰ٚdDb0{p: V`D*c+`D_,7dG*׬-.Ct 9wۼ/]"sgٳl˧Taxg V1 ѹ ^yq%[A&eR`Bm>ZЁ2>IB)Q# TX5K$])-^T7"_="9A |>r*)5N*QZO Ջ\ZG~[I$dhh#, "Ѣbcb }&.P@8bZFҋį?I#FG'B)S mC -Qd,~8HR?jE XCңM4C_@5 "c$XA(DHʶu~ߧ`zJM.:C(w?x脽"۲z!@LtD;@=1B*3 7$<ڸ`tOd16sA:2͎¨Aɲr^r:vT/&6m'|XF, WZC|<^;@Wܑq JȌ韄kt {,# To0C7hئt!9t.sYlLuEc`/r9D;-~1nZVy6HʕHlbKCImn֣/bG{2QH,pZj|wX4QֺC( U貹hpsJ'|dsG͐QJC1m.<7)4a,ҫ@GB"h:CDP4YS`Q#\8)9w[."(سˈWyomôzV`3jo"枕 ZlBXg9D#UeєJEW5 -M3V92#/f8sHLa2vtC n?uL<iW'ĶCz?뵿#82(4Ja ]GƦc"o-\Ҿξxnj_oN,KƁML`x~\ Ӏ32Ρd[_ 6k ӫ3#֫$UK ^QwKh>ި9\^iq~NwOUU{u2gհ+Q&6KfɎon TelgRzi{VoiC+gOlqȫ:"m#XPRAr)Wl.sU' 1-Ξ2K}Fʆc qVa-`. HJKx 1l ͈oE|KA|!-$ÊpE'% [#kA|c^?ǤyS_@N:ԇ>ULPYa.$TsA"[Ku [9S;m_4E~xC~h䇜r9!|v>rC&jS_`N9Bo5"A]+Ll0Ha%]O\ىI+2ЪD[v|4M%zGӕ/ӿ>"7ZaH^~  9ev_]Lib*#+#{imPt؁caJ$WuѮV@x !3Q|lHr s5ZDg/BRЊR :˘p! YG)~Cq*3!A1p4xFrazFv&W%`2LJxN(yvseZ h.C(;>mߙ eKF!yF .tI]Vf<AFl vroXԟhU-3 2(:e-^b"Im){, XνJ Aprb9~6]tEj etԠӇh BW%`2D7X\r?AL8|BfQ:Bf([V`WYvצDN#XSxZZݘ yK%O!#R0aI 0}E ̲8sܹtCp1 ;qlƆ2R#|n=x qOp&y/~yXo=UW=?u.DD"o ˫k2 .zx,]/x DpamD$F1+ә&Q~?<|~ '-T=g;@ Va8% oV2]8| ׃\V {1|˺#BJ(0Ih΍U5E* a!.z?Lr#@sDMՂEc]p5{3LOT@O6NcKropH8foy(̺A}qbu )$jƈ%E N|'E\ǛTvPFe(ﳉq.BC} !u>$Qĩ*'ާC}EU^ti zM}i?j:Q_)&b'=;^bW+M}587q]EvQ4glԇ D}og{Y_ȏ Vr Ty9aișfFymey JfAL6I@t%`7QTi$s{oFH -CQ0+:UT2|'#߰◄{d?BUunf[(\-F!gC] *vw?1) ?rB8[L'N=Ӷ .7[jCp0~s$]H*VhpRT͊crc1Lo"F"(7$hZ DU !A  3V8tn<61CڢCvJP !I$(~'Q(&cuP FMT3D 9_OJ@̞ZmE(Moe, ;ht'@K:@Y=H3ҁ𺩚")՛ؤ117, -7 $υa!AK+*s pӞ=Ᵽa1=i!B|ЃN4kte91(0t WMw(zV"+ifGF>m>z!O8> H1ܖ?j]y)hň_dhG^T,ㆦdFKBY4^nU M -"XsUW !c@:|u%`G#9q^U!ayQ|/S<+=/)q=(A$*ẃf]`00F)LWPć%D-S8AcPt܋ O Ş\K\Od\+/ gR̞B;Y΀Ĥ$O%d5)1*RZ'QkR=7#n=  J7BKRKiKujN XƯA|d2< 2 rN,8 adےʂ[,ciq.Ǣ]wHtEӘT w8 p[:=!}[Kp8M25 Cg@::$f#l/ ȐɋwMo9YxJDԤ CIpHG[Bfy{JQ텍vM@PDtK/7&̏>Fa>#|񄯃+uaKic""p7X<'ȡ?HP$"ES"E8J(!"KF/R+3eq1zDY/z\ z\[=F;< FуѣG91ʾWPSSbDʛ1 뙇 BV)-ΕxNuJCB|.ZDfhs/Ƞc6h>azt :/|=U5C>xzoh!5XdmHE4E"\A,^s):5޺#(/ r[-(Yg'ڣKPg<n|RTRUN,s*YWA]|_LnĂ 0BYU$Gy1bҍSp_)DpQA% b1Q' FRuәۭ`IS_"FluO~u$[W2VO!ɊCUK1)5j5Z˹dZ; YH ,2dF0=V i0GTCƁarOpi 19+49g>tXxMmTԊKD$GzJ%>![ 2z2 L[KDP;9U0e,D. g{gmSU" 2-V´ӀȟC(BE^ :đUv{hO KN&ujKc֎YĜô +Lsưt}1u+~g+6/GL"xxs 5Lb0]ZV=xC*Q.0Y1I־b.[}G"_:v% ?7 ?E5AG6̞-ʧJ;ÉAЁ:`e +v֑ L.[O(Kr++_WD%Ǵ1{7`zUf>AT-%ľ۸&A;B>r?a__vܵ>niu˥&>$nd6k{f"rcy o*'XT#o48M , In䪫?^(܉ѿЍB &s~>![4/= r0[P)uX\#*B=H?4Y4#6k*AmR²7zQAz t g]c*Po< _|W C|ى{zufă+)UGRR8dG=!{*\Ĥ}roYl[J.]mVJDŋpu3!X6i =)*\RVKPv!X>@pyD?A[*O%f^SY1Cj/|h; 3f@#Sg#1n@:'H8ծ둷iqV &(V8ՀĀPd!#YU@yVP&߬}]QSbZ(ʹjt'@C _l1:~&!'mȇpd!:ow L-,ȵ'qjơU[0>\kX^ok s>i̚j,of5_ oAb44WGY_*\=C]mk˥R%*]Ʊf> >KYyCsRVlaepji&f\*wh^*,:˯{ke!%CAͬ]Ͻv;-ΦA.T`6g%O҇ôJū" TM'Qo,J d3P>+lzE?Ih!+)QI73R=G>KۗD|'YvJN` ozZbfۓ?nMjH{aH/֫qij4Y2M _6B/Umz?6-M6!N[@=TKnGޏ+/M VK1h0Xb%D}a#,e=lņ3kYkö3eJx„ÜF!y[Z)3!m͛)-}6m SnE\! ! PHcᄐAp =0d#p[0 !P#얁SDaO`[Y׼e{ðo8h z BD-oϷ0`#" TBBNƒ"s!#k1UieTlґS! ah'mp7d:3I͆| Eaz, u폡2IV):nx+isZr r}hؚĕ{O:đAyC- {Kq) fk'"HnwA! "+tX"Ծ\1^BIpٶ83FQ9/џ{MyBESqUycn%Bld3IQa3X(SyrWiw I}!|7ìw,쏐^f\&C :}t&*kR9)sCY JZ(/@j*d3@h?vanU.335 )KUWJ.*%Iy2X2v0&H:˃ $rVDo!Tѧ \nc5+)!`BRժt邼b; `pk\l `{sQvAr}@R2I]dxh. Hik)fU,VND_0D\:/ՊwDE46 Ar{I9YZ6KvW=&NXnL?\L0mv oՒ=2Ͱ&VAw&6XC*sC.>;pk-CxpllfkeI0I%Z/ZOYeZ3Lyʵ26ru^iFRyNU6Cu0sYUrʳLA>x5$8k5wΟ+ DmZ@D}8ȉٰOje xLuELnJ̔?j^UͼI?@%^I6{I\ji'===$hx(tF%s4 Tg{4Y a#E[u!ۢ?@kPu˴cܪ.J0&UWBEE9c>-4݂꠴[PLW.jXASF;4݀\3P?!~[k=BMn>ӚBb<[;T𔫹vZ.j~\r0BXlwC Hh/-NW;ZnZ[DzH](nC5;(98Ok([ͭ{j.RH;h5@<427jnmv75 Ws &q\޳o5 [qkrQJQsYuMIt.Stq xGETCE˨^n"ء=O4&sʕ]$ΣV]p.oE됣V]).ĨLvRu}]]GbV0{w`xS1+[%F3]p'ˤZЦ jARhZomE?n /ӨQxqV[uIf( ZRx"ד2M᭺Rx[Cݚ~#{*C][Uf삜ڼ]\?K.U^ w'_ ݭKZwd0 b6UH%XBcK?ںk]'D.f@Z2ԧ32Z7+J A7vq?Rd_zjumRg`n$:w~+KvVSݯ(وT3aՖ2O[84IoW]{=-Myc,Ma4J %ǝ7jeG#E7uMն4 O,Ӌ,ݸ<]Jލ^kM[ koXy$<92I7ҚeBbXo n(]{Z5lL\h.=+FSYW{t6 4r9gp7֢*z qFT Nkڿr=kY.) =!{x d+O #E~4/ :2PB;2u]FzfNÚd{yFKd9h lؖbp0wEN8EGS^0jSK\}e77rrXɇ7cU!SBn$tޕ6[̫\xp4bmE(CJ3."=mJTW7I! d֡crʼq!ămȥLDDWFSN)UTev=E,GKJ,BbV^ߕ` 3ZlNPE4 ,0yc f6K,V= GR+ҳ~?!:'JWNqXnd$-喙eFuzH`Zc'ZD%` nsK%y!:˓LQ2U`B/~}!5UDU! X@(8N}K 8vDx? , @!I+yLܡq[$C&`gs¤vJxKR!ηHvD,)XE #G$OJU,L#GnGwL`r:M+)<ӔtQ0-H5_^D0>! t3> E]8HYN<8L q@k;+7O[<07[f7^v5Շ>!ɀ5T#.Ȳ2Kv߸({39J -OzQr_TSO rű8> K^ )@mq|Gp}Dn¡NWV}×3APHVE}bբnp,r$)}f#Z +&sXP^{";ˈI ݬ+-yohU4=fHt^?AjU4!ߊg/ۿHeUņD4 #v' +uEpV8Zg24$ۘ.}X!e¤߳5)- 7*F)M1Ҋz% ݼ`CL(LifMw`21$ԣ$FJm]z+#(m3ۆ /]@аٖu3[GP5*W3u9Qy&{Hg2Uea$9,yq/lv%yŊku`jD_kDŁ…XUFC4yK*$~Q1g]d$4rz,`=tᄆ#~yccTxioͼ <eV{,Qg9C\X ffյJjiһmh:OpCY$TɥݞZ .W:v>?:miLV@2Ŵ'tMf("$.P4[;Yul@ ]$O Xf5|4%'Ե+s%6}eW>"IxK]ʎhHCD|C6>΀JN+^ Yɮ_j v)pL߱)B-̓iPPjזp))[ݩFp#yf^&hs{XHXO 1~{D+>n E1Q ]od( /*)b ~np ?zB"yJWVYi=,@Fdh8`.-Ub ӴbD' A`7f ]Jj#ST=!D报&Fgwj8C;!QI `6cL05fǭAn=9Ӷ;Nц 3^ c1p,R| V}ۊnڃՉM GX;@lƇo=Fݼy# n/ےC~f%2q<{}GҤz ,<[юy9@GIMp.UridܻIy"iICZ7Xa p|ގY8c:b%mү{AUIkKfF@lE"IBU+TcIq/QX/V0&!qv(ͺIZE5*/d>ikMFS?Ao NE%*#=de0הXb;xOcC虽`w.wY//\b=*MLYNoBz` _ۚRa(Am#m#X(*3:ÏuD#˶-,]Γ WETta"0UU;[sH6O2f"8 *et,ev,2`pJ.@g*GeDD@#KA{ a,UT-௜zNYAlgI>Bo`xx}O)_5i4u$Z6x :U>e191G bLa}d ,Typ@ q"D񌜏KΥk8qi)Ssx.ivE-A<#&|Gj5[ͪhuxFQzfN+q7P<'ԾI|CXO(3O'I<%~I<#\>gKޫ};8kBl?+8Ԭja:mgv'Da(xFѳ8w'8vȩr>;U-bc[Yqb }HD`$2%?OKe0nTޚ!q9$Ў*| ª˃BV][unJd8igf;e$d<0s`;pI_ICpICtܭGƘfkZ >!2S[L`WE^b5oH9U+3hʞАt[, 6,rHo7t|xMBp-ծv[ҁteIFCUG(Vbiڴj uY /{^ILV27xl u1&:!{*e7z@I[5l$vn0MXLP3DcP2cWfc%so(@eASb,SŬ9$ƃ=7K8;YΟh/遌)Ia.^TѨOӑ KԌJj+,u^ϐ'uhdl,Echp^X|"J:w4s Yb$L, vwL"ְ S!!dĽwBdJW %w4-9;4#Hk]]8K=ߖ\MեPVOH"3Ry2zhHFfodsd"z^E1?gJWbf-VVrEs=#rQaIlѰ0.H(Q9h/ SJ'/echZ#u_\/rSAbJ~t79)`Σ|tY@ oI0ᑵZu"!Wւyڿe}cV ZTƵ6(J+TsJveQ `s>:0ȍ_{ܕ$I"}"OPb``gmޠ Y-R9ꀁ2鬙nT1tn)/9o[lƭ(^j bQkS!>+ERzF1%wYc"3&+T 4BUHS()m=u=1f/M$dVt]L,a(P{ܰ/Ex^oIXOHq?!~>!bJjZ ̆Ekk l1V2h{VC;hrn'f{QCeȆ(K R 'Fv#`N#iN4i ǜ1*ZM dB^-d]^2~oN&2qE`زbE(dߓaIb3rC qkSOqgLRzL[`Ƹʱ< R3F{a/ *z ,uY۰5SJb|_ T-G`uhA3!O]S4&KޘJ)+9P, lOY^ۧ*CR1ح@) J2@`y(j ѧ)DUJ]0 \)>\9 @4}LZDn@bn>>gTx殠eݏ]QѢ|6MNHtdHrc m.xTJghYܖ[k(Tlf+G)C\P8,|3"n^X <,|RZ,2gZv˱mr[FYfX<R+j;Y@%Ann7z0lDЉ%jL; ݎ"{W"8BOua~8xe=ϳr r1R󯈮vRAC(3T(3ee2YK.H/z<ҙyA? NQ;"c@/֕@PNEZ@)$*}@CHGEFz:_Z7yU ΩB=WȰh].s1S3U̚bs{ݙ ytYE3o 3R&TmVoz񞘙Z`f1S{;3@:xZ;/U~⽏ /UikR#y xU^jAKU`ǐPfԗ,^YsNcFlK=x<|-ZLRJ4$f^> b*;3ŕ3'UyEcF8׹v+3-=wf -fBAq.fJ9$vfmV<{={Aw*PWd^n-JBk*jg͋kl6LoǴH.Y P.'/s[فDk1b{=m{Q#\e*΅Lq \4" i*ȍn`0aOW{ܙL:]p986g0 144,$ av 0>``05 H-tIsK87咒瑀mq+c"1 fβ86q'm w,u$[Re=P}D 7+1J2˫2^SzY]-YĽ TW{={货&T\CcQ^3N3\L+ d[L`ߺ79/˹0 Đd[V\JLcCqi7F0F(AêѐM|6lBTc3o*(i2=}䂴 +$BC7۞ﻌ:Vm=$4Y5O¤}HXu63#FtEe%͂>WUBrF Lðf3<&ѮpAsEjľΪ\\ lXl3u ta_DQfFLj5DL IKpX{r=E)5%cH,7gTi D=Ydnl8.9=~R-L7~\Z̀E DF_MEK>2(EOIqX Z\ڳP`T1Őɂ=u[ r^i^. e(p ;Dέ2#$s>v4R(+I2_-`*>3X768|OXC׵o5RL\S)8ͷSЎRݞ uJM!ljmiY$>g: @qߢ8*J$ܢI.![ @o;V/ wjG+Fu 8x3ezM!tQ\M A_Z -n/W\9Du_?J)leŧ6Iߛ c>[Vs 24zE #WtέWW}cHJGfHrBSn%2c2OH2^.rPBJB -S2l~qҡ_gWgkԒ_CBDP }o4|=ޗ 0Vޟ1[] zg'PkN#1 {>Q h~(BrOr9\ =Hy0N:uHTY=EOjgC e?lz*2&GN;RF>gui<[Còky\3c,"UGXY#|P\60;Q8 9Y;(hYmHCV3&[ˢs|␡ZEDSY$yFlsvhg %ӈ3Isb098/D̒&*dշak!*:p*S\, VoYZS,;5. ,Z[DRkgi|*Ӱt*g'DA<( icb_ K-"F): ,s 113kGFm`KNLL *;M};Gw(xd>-8İwB@ДOv:۪wa6Ր]ް5r+밖C8WwoԄ(xEޘ⨱1v5SƬcSDƳÂrC6?Mf!Az׀wGZAt[}o>!J-! cXapzh41z :lVuiP9~ bXHH,jE/fNMU}XHqG RI%]e͛- Y9oݶhZ};\rG&au_X}EG4y{DcUvUD@Xlߕ0`P=lEijk٘Yn>!B ~ZDs)n\(a: ?8Tǔb~֪[>k8Xs,K/03*hz׾ѭ>! IZ,Ij}+)b h+7s7$aUHhFjĝtu!)=h_6*RېQ2.v>л))ѳ!A*p#h O#Ksȷ Ib W>A7))߯t{A5| TMGmPOUҽՎxhj M :ScULxyP%JjzD}4J4+h*"KQW *E/ ACaz.C7"m2gyTSVX.]q(]vpr =oA7t8@ïS=pm!t+ĮVsuq}Ύ$M-,(;ry3T{}fӱ`&L4 ѶOV &1ݞpْU0`R !448άe8Lxx&!e4)apTaiZ͓j!ֈpw[5.7: ԰}A9b7c^kiZo8u ^eplpZ0cjq(_WC{)뾊3 m>!Qt~(A>! B.OMlC=R/,} NQ ">w 34ا!Ƶ(՟`|0oETAedK^zaiir8i]XWm]-i1 xoUW[ braVAZPgڢq^LǔWjQ9+*K8Q+ F(TC;G^P8'?TaS60r5jS+֑fS0]GlCVޘ@,6.*~=@ͧ_*N}*4 ,vJ zhmMĢntjDUFUp  6gz/uЊ(?TqGvg~I}r鉕c1Nxu]~v;B{ O&ֽ[:}zr8FP n%FEdPJ+@Y׀!FP1iT6%V Z,?Z \ЗI!e0LP&LL"MLb}_cԂ^, h˶Z58kp^,ePdX@|cbOV'f*z+{0=H- . 17fN2+ X>`<J|IKTGTяRrq,y5ie8 ^0˛HM@+t`*bLk^< ǍALzHj""Mtbmk;^df)rg?S[cؙrmiAm0#UʷD|U?!*ݩmlX` endstream endobj 69 0 obj << /Length 1168 /Filter /FlateDecode >> stream xڭVY6~#Dxcb[HRXVmHn;ád{YX˙!_ǗU,L*U."~çb|Zɲ%O*r9WZ/d?}K)|Je&*-(#(PˢV,ޭf'2!~[[$g**R2\pA)A'/RrT%W N[QNSá5M}Nt{wkb8{hChg[g5%ֺv5C:&G4i"솓MospS8N KJx`-y@xpMbG}8YY=)կPVC8#ƴ+R{* aQTmM^frS@Nl̽g&m6<Ӕݒpauf5 ƻ:df&c`ZNAA(>E3?`ߓnM4aSq(?NQ2 DM 4kDmu{ښ۟^!8rj"~=$2\ȀW=xGjMmPS}_F=յ:AlAdThiut0@=x0@֌o,#\ 8 &m+M=PBp3FGbOr/&T!t/x2nG5(3T;0+,A:4ݥm-~ڟA>&v|g4VP> yPؓ? YX endstream endobj 72 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./xnrec.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 73 0 R /BBox [0 0 561 653] /Resources << /ProcSet [ /PDF ] /ExtGState << /R7 74 0 R >>>> /Length 35026 /Filter /FlateDecode >> stream x̽;$%(B1V@}%l8;e0cB5<x |e|wi}w_٭5g@~~zimk @w1|?!hٟ{w?lXܾS[ݏZs {}׵ViCԫO~j΀t^^`4 r1o3YibC cث?G˜t ySm36~g{H# ZQu8s4 MmBtR6 }}!r;7/rR=}9Vpz!{Ƙ!}íFژik7=1~rZ捽`eck|/s΢qyoe{צP;Y=%76i:nZD-Ϩ(W ΃It1 dŞ5Vmgif?c3}8JS~8tuO7_wAkv {KkAxu93#յX"pAx;Ȫu21kסGrkB4Fڡ6VtП:.;; I6)l{n)c`ڻ1+o(UoQJЄF.orn}r󆽼}oLd(:xc`} ?2Q{=>!'otgQ.FAh{jnv/~[ګQ`з+ -eǝW*S>=ԗFT8ʍU#3pI7]x 19]2'< D^vR!¹lUld3;) ˇ#)OǏE>ޑV'޶g}gSp֪65Ai'/44}0N|](![XcOk‱_Yʲ;譹,Fqx+[Ĺ-S܋8c~8atj'_q^$Ɇ|G;r!ޒO)]  rKfo(!l!ь)9`[> XgppM\Olv`j6vi$foEo" |}o܂S@ߝFxG@ /AGݚeN8+mޟ;}v{u+祱g'}wg#:m6 ?7T@4Ķ…]+F+#Z*/󸵧|@EON|/A }}iZ؆-ĺ@R3(n^+^‚A$f;߸M>ŏƲ鑫-q>EM{7kP(Jv4AL )wH!0<6ᣔݔfDUyBA,c!i6ԩC(zCQ4[B>b탋C!̦hE |!-ъђrc+(5bD"2I@׆)9nnOy$O: TJ&r>ql+{F}(ro.~dw`s&Gaid|{z ̋%p }:/r!,xssn׭g*JH6N#y >ÕPn*ae^^]MS_ܜ{/&W<{ƺZ;k} @˵}2bi0}DFem~oi9PƂxf8cP1h1{P>H >`1MOg,ޏXg;v؈I ؃3gvT|4x 729S:4cGg+ PeoG䄛cK>Αi˾5qccҸx ӁH+XF:@/ 96=GTk 8^4 3=aEKmVN53= K>@BLzp:{$0wތI{36qӀi$؀јVuh10HP/a'"%}0Rg*ik@W/yb49Ol^O#h\-9W@ʐW2BDh8B O)C}o~?/g>!P6=彂\/u8O}B~ ͚2m>o(D^,7H&^Ŷ}K+47%W'&8HQui#px[L*^8R[8Ƈ'Y:`)в(mRۀ-䡡Ҡ`A-zw*|'*.ۥI`/䡻ZuKK?]۬i#)|SI}QK @@poO,n8BpsҏM\̊|/I4m|֚RkZ͜p4m(}B 0<{mRq2{CO8‹7)U"AF A ;YbpObOb~ g6%/l#k–\̩$8&cb8 nWO4[; . 9ی(=ϟ#\% /6Iٖ2Dgv8 `w wv6F0߰`S.|#[>@^'!ԞXLU}6X9F!ph32xتpBA[Fnwu#)x@D_ŏA)&_w EWn}5;|!]'YQaM(ՅeU1r).ѹOEF(H9~tkD F#|#3z" nK\W[O}ZA8&f4SX ֋+3OcK#,VU W .P0 s%֣Nhc-مlQ!&NxهuGaHdz'(RA$X}b6jgֆ=|dY(Qp-%Bt},6ZXZJO٤!pf."Eu{z0Q Qyhs Ae_ -Qh; Q\ZyLG!*i 6t]HG0\%] IGXnғ x@|>M"KC0-"hZFL"4hh&1i3xFΘrCPT)@0ᣴr>u1H'He/Rc0/hjva # S.̉C;وBf y =rKK|@:n[%QBhA(_*ՋZ!>/#~{K|| )<6|:|r̀Ş/f3y1U:k}X5gU; Fժ\Щ3 R2cߞhg1HF2M6H#AUر€:T5(QCT jLoK@bѧx,Þ`fa v D = > iZ-Nƕb=@u/B^(LN8"!bYspvͯw 2VOHbQsb \&Y;7cᡸ~WEǞlg+cICS:ïOTD,"q@ JcwI䣻ݿ%|D1]uhw: 6eP?x,B2TpGV "Ɏ7el$6 6`ެjDٳQw]$< n' [=SqQA"tA͢zED'y15$E(>JTAVO: KbI (m)=@(fS$.Vq si<1|TKMtGCFJ܌&CL6)R+z 1mBS WuBQ BLq\!B$i%$HψDЕ$LE &83~,YmRdvuH]E--ؒNmx"E J,D(JVYسxA 멇&)BT~H1H ](w%!2B;BLmM8u&pSn*Dɢ) A) *|5'hI6Sj F1eЩɈƿmH7H 'AxK>m/%z Ebc>_[˒3ƐbԂ8G)0]>@P~=U7 EwZb:X]!+ٔ,)#chTJS*}2s3&+ɹ"8^M,=`= )OlCj:.A:O|֠ts\.@f Wx<EP@TIRe{Z/3C5a['BoEڍL׫E807g:e8l1к5NC?:3D)W /eD(hI_ QP*eC )LTv[ayY18SV8St4wta»Ǖbv =EaKyT^L"VHR&y*zo #oznŒ6G==bSp/h{hM^*kR&6mtP*/FA_/_bX3`X6NM`b]g3գ0杸 ,ZH! ;5Y iƾr5#SP@ qSv;(F6E9b%q7+YȧUK|+z{I\UpǎvyA6o3ˎO84560s"3aLQ;A"qBS4=ӝ iufBfbL|3$kfbqЎH)7C^rNa/0`_Ȏ8W1&@Rs`U=kg&HTB|uZ*Cgr5aރLfrm9%:CЉN9&U{}t?|xjp>G4s 3Fމ%W1[L@۠]Li{%lJAeS'"-!EGIߗ$FӊECJEjLl&Bn8sNi٪hD9dβ1"մa ()t~WĖD{2N$l\ r,"9 r["6rA#js29Vy*7堞Ö9螂m܌}Cc#7̊'+(CE(n+h8]HW{tը2ӥH?ȴV 5E*7Zn77:?t9 F䮯pI u G1|h6FPnM*9`P(O{5mCvb$y9uK*Y&Cg7OYi3{ Rȸ|n5dsܨZX5(h~n4<7nx8!X\O `9/u~R,m[^o o)*^ñϚ%86w x sF5t 0o#xz(%B73C2lvV:c{c{iK){3~3>l:y9:l#|I[Mnb{\tsؒXڃmא:̴| g4-r> # %1η//tFQ9 ]=ӈ\;tD<|mvpz9=N>XI~c} V7fw>@As׬~ &~l^."5VYkx~(ri^i%K011]ʸ<׉ 0d}D2Db感'z 8818cfS{ԙ2Qt9dZbee C^e8h;zd&R_W_2$3Wo175ڃjV$A2GRVP( !SAfA7>!ԿdSƾkL;dc =5FހEThIcp$nir`Y])*I$),9AsIL)=A6X]! x]N\ rg ӱ2M{Du*  r(mlBT˩/B0pKY2TwkV=`5iNʵ+Ъx%#Th,rNhjnztXx,SxS]`aތڜwݫ(Ԝg E:(w!{QrZ#hSz#1w'1Ep{BFI7$B%SLyTx *Sh#so'+b|tl:b hԊݑ ɉEĵ4f)H=àƷ3EQ^$Iʴwd dm;ia{^FHnTôصձTIjp!bHaْ6K1zEVks/xAcrR.nn]h3!FUwrd~Ta Kk&IJG.~V#B5fȽMZ-eW־dsm ru e6E%Z"=R˕UbmX0QtgDȏ^/)k!ZRm/̏{GÀ Qrfk%-378"rBِiOUӌNuvu +Y)x1P c,;+|_r*!SVw ̞C7HaoJ0;Fi:$,mG)G=ÃH<C0R60aPakszJ$*,9 P1ِiBmS@P9 FpKgjy,F0)FPaƷVe'U1]83%,1ldNϫ>VR!й t\yHХ87IX28[cOYl 02',,y[Va(^JT4([˩ְ]23u9*i6!j@`]v\J Zi$ƈdN ͙Ȍ耠uy>D 2&H#I(Uhmpqm-{ lO:j.zUg&5, !PY>!/p ¡MKddf+X`z!{0#>㘃R A3Bqb;e4SNSX'4_ [>Y<<0RAxnˬ<(H<@@-F/,ސC zCLUJ@aС3[Ly)e53K&/4AWJ~ x<)~)S,sCZRJ-iD(#T  hCfQ70b3*WS "PX/ Z'x̫ .Jbee Pxr,OGu$(<8=HXeېl^ /3]="C*ren?r[,sY65oh>| PC(|"P; U!TW :6iF[_kEr+[GU'vT½(  u7$TqZvP80?lܜA@B0 ^ŗuz 3呂b咰b=I/r=W{Nh`U{ƙ){RU錪\MLK{fiܱǾj=`D깛.kJ,P:Oh;d9pY~ U!V+70K10ޢW!O-#z|O4-@A~rjXI$-B+6J˄( :X5iATA+R>!FmڛhzU;6n"|B& > 279Q0[(Y怛LqvHT֓QpuGAn?y(mOYY6rAd :0BGF;le=Sw%r9dΥ%om,&k6BBNO{Li_vf"͍#K3 keUxpD5zjQ`W,⣳g,dWCJUY0_ĘlGWLZ83ެ*9m.G$)LYy2(Ĭw<ީ_́mP h+ur#a<ڶ3 *hc\Cm9Q 5U;c^Lިdn@T,d8Y8']2U%Cw^v2:ҿAe`'gE<_5sIXhny>"~BX? $YGfp[V9R ժs.62 6ۍ&p?YB˨ƜG*5.p> r(#cy@4z{ΪKy5_أ^)wc: #VQbK!Lv|ͣ|ݦcj .l}-i1-qCt~TmZngO ,Q=,MwKΏDJ}?+1?DE罹h^XU+,"e00 Н G-/J7jAQtBr9 v˽[c&uԩZKdC/`&ba[j.}mrSG[j(4m3P/;-mJ<Ҙ򢾀J7J5fćbHA|DE\kV.ՠlԇDDp f P_M,. @P_>->|xC:W䴅yqA}ٮxjjQ_)&b'=Æ^bW,,ʩ2<.rG?6E~HK-7 lamf}!?@$C]BaoyȏwE /̊9N~ m[Wu{ȯɯ%E|{U8%KN̼j-2Hzrscvhk\eERe]*\`1s~CZ|*5,{{n-Sc7@Ut .w c'Lj2棔RpI%P˽۪vȽyW*M4~9!1bHE. |V1EEh~)9UQnt!Ԧ6ANpDhIA1`E"SbUQa\\cKC~M4$ϐxN"M~ j0Tq\M~(t>M~j۝;E;!N~5ȯ(|QC}-x@oP@2<5=8Ջ$0#;#7<-McOqQ=+0BB: XnM5kӝN}x(eR$| Y7U䐌yeH,+Qx9JCEl.HgY bֽX8!ώaLbb޻@)&auC݀adiM"֥ 5y_FL^ȅ5ѽ51@X3zO)iUL:2rskGBs,]phQO,=/ ×ጔKʹ7.hE 3!zW{0 +($ UaSH+QUstY4uu0$zR HD%&5 !ti tN\$u*;JW(Ub7 3\Eseaч jRwxR5'ﴸe }J":z{x:Osڶ uH-1~Q_"cgp8߉$$QyhFxM $+' /VM0~mOjRlV!X'0iIZI'~V܋+B!c`P9Lʺ  w3KE稽%t{Q(Cid2=^Ƞ-Dn>A@dTBgqd3z: l/h!c>םPXӥi&.$HM"_b\4u$jn>/4RM"G#_$j(tʅC.?MKA>A@="}6= FHġHS$?3õ}ѣѡG_EG_eǷŐ# zt#F*BXd6K3/jD9B(m\ԈF̡P#52cRU:P_80b1:,5<|UiȢp^M4^흥 txrrd5\/< a/U߫)} ԈJQ2:뒸E}>/yׅ4xt˴Q*gU}й"Y䚢0ӛ2B/ 1d] b1O#*󺵔|JÚg;6rjףf-CL5Hm=gx /-Wf\Jݓ[,|)\̧*g/:{#@IdjzzE{pktd@ј5W,zpkR\^.-HxrIz!fqeLC]bCV/Qu@(9m͝Ot31&}S?{G=x `\~N5g>!!j 2 HSKqHv?sU99)zHP%#P=ge.:ɫSGQ찐;/82yQM tˁꕟPr}K&u }jKj4Ld4 XiI*C~݌?=Ɋ)gȔ4 Swޥ19d]8k^I>TZc.Eq4Fvo:k^OX:nU],1h3OK1J98jWӂa49VOH1/#i6D-f;Yv)$7c˸oMx$ 1c4(t\K 9m șhu@k>nڐ(Y+0bi6XqAlYBAd6Yh1҄zoƊ)4SWR+uۯ;.>!\c"|ҴuIɒ oLvƁ4{g eϼ8eJuj_dPjWB2ɮ;P]f[|R.2\\׫=:0f]5U+Aqk˩еPS:d-|TdA~MYhGđTD[Sh8)H,ênd)uy=cuQEͨyl R%yp17PӺo3;f:K]@#QG.rqd7zh]3_Ey;AJ] 5Yq?#?`oG>kʴ\o-MzKO@+S]YHp9<$#A![3DRC nNo-h<2:GfCϫҙ.6qdh d%i)@GSJ RR ?EEXPCy̓D'ˤQnWR! h: oit \k( Zv`yt;C:Bz&nxF #ȷeNQbķ$HH8. 8IơQ]H &,֡%񡿷I=i#K5gxۆ]b? V.iaBYRvv+xJ~t%h1$RYQ7̽p/Q>,{& dzxe(NY)<㱮V~zAS{D${כr޼XqѭbnGٜsq!p3T1<.s ^'x_bVU?h9=E :7B"ۚY+^%;b0}ą56 o M4zB|7|1}>ݸk^(y3 0 ^{.$ I\?h!C5?'f1'%%zOB搭TY ^ t9RKձ$!5_OmZ\P:tra7i\p~mXz -$p2gad L 2&XY>eUm^SWXhCzzMVuzT7: BܺTEirC<;^o=!+df&Pgd ;(iRbmÂ^L( !DZWWbVeeke+"چ =P67v$A-XGaZmr&zEmxٳVS!,Y qA pJ<҂Í̫.1x},hp61Kݽ4ޕ_ 3!5WIYmF(&MTA4_ !?O\d*p@AVk&@} b\e|qCPmCCXhzvIj`HfĬ vPvzO/#,`ujC%ry1`!fOڭ5yz#TikC)ԁL|?m]G|L݌v6g:uM 'QFZ#>P#>PHyEoSWaSE!,->Pź=&Kq-=&Xg9ñ̥Mz9G~`{(OLlX<ADwtL 5{0~]o&$3-g?:$cw3~e ;3LFp_1E@Ge桄 i* \}_SR*kaC~3(n_Bf^.pʗ*z.2f:hUL{ 8K6 r*\ _<#m#N]PiYqadY3iUQ$G%"s#5˥bN<2uZQGasDr[j2+-I+mT' uX:˹Ω#s7BX|J>@I~cʼ4w:[ϣbЭtA!++3ځnuz(69Zޮ|% F ٬j`aX I\~X)L.a"KB$^eߨ*H/N\2 8 !GLS)AesK{> er9f[r fkՅY>֖yGQ f-\a2E{|PU I\m|-"G}D ̾ ۧ4\@$Gx5ƈގI8.`jz4.#4³̯Ƕ,SpҰ8r>lOW SVĘ^NpUvȎj<5`6#^?2'>ycH!1Fo2MRE2rg_A+wuzr‘B\()ĺ_ 0`ݦ;6Ȫ]x֮s׈ym+Јy1G!7M#vhyr16'$4b^"C!J!.H 1gK3b^cDl@, Iޣ3c#4bTkEhĨVhĎ !mщrtbumtCh&%CN"].H\϶1!C œ xs:n>gQaismjv[cH^d|hCd:tV mxbV C۬lүd7DjK *dܰh{(TƖ*O#-Rp=-ҋVz hUlZe!INFv8吣!uU-3H_4Pb+dT XעmR:ҩWkLʦ90Wz\?*"ӛF5&78]vܰ~Q5T7w^sJPXr8NjFqAvXK)7balbaQe8 njq* 8"Kp0B~K1#SȅT].6n-;b!D9Ro|.@WzšrW$p+>m YV^RL, ь9!_arLo xCG.- t;!#6'8/{\X*vDdӼa&qb|w~h[4`ktD&]Jf0 ЩuE ˈWv9OOu F'MĈbl][6M`֥CWܸWg­5 Bp@jöaZvp•#ŴvI]&ҫ=e>a`JC 8C$: \BME 5ĒiԘ*B$J%qh_Krdq%RĄ*|BR# +m&"K9Y ] ],A * (}1%1 j[^PO6#20 t0 }j2"pRUu|lmLN}FeVGu3BwTֵN4u%yBFmkKj`+~ 8G@6{hs'Le(H1}$YW$Ж2ѕEp[l%&Pa*‰Ikss&V`> ȉ\=՟-%]l" pDY3jƋIP\H0hyb' mXU2QƄAx 7 }{jR~9iA#IЃ]r%d`;#Qʔ*MzQ2%d1΀ E12k| PԻM%@Č>; aHtȣAryL"Bb" r ;Gymoc [*W5Q2N5Yvgs5NSx YFB]&caO/߁$^ija A\A$QnvXN4f$]TA lsՎIdO>xAe.6/+lwJ_<HURP 1nݐh~jI9axxV (1 ӧOgzp!`% }O MB1m,|U6֐"pr?iO|g+0Ev/j@Aܮv HrrK"ƣ[D=-!KJi|B"^xJZ^ o\S?회4QeѦW剗mW1~oL0SS9kj}`d2(ޝbÈysaY4U?tM"DYv@DVybκLTE )'7.P͛eCTF@FK;Bw'=l || }K_w#zdФ^-(TEUE~YGS ʢ,(t 3xڥ™yOM}Bj4 3BGgsQs~3s89sh{KFգꯟ:J&<D }=~>|ٱ 1o@6`ObKn QyPPxSj~:J;tv-ZE:C:!u_pZ@~<0j´(fJ_~8Nᱥ{d|/UsR G)%KDPRb9ПBQ`xI(6gnJ3t}W pˮ:"XKź:jbj4!7 & .G2(\4(yg=l%\6Zltm9(q ǀܩhb= ,iHjZ8^.Z ug(<L#|.|N>C>a+o:߈մQj(CA&ObUO!FH'HJ'=!Nwupڴ tv|diĐRM6VgY;THO̡$|JmckݟYgoC؜ " f| NU>F:šKftU:OJ bmo{~9VO'.o,U-+'>"g6z5nb8iѭ(TI (>>`/w5&N67^H>g%gZF[} }-`s^_ .βYүY (';aO[YS=rǚȘŌU3ciR CE,8qa6}~jy͡ pZ^^N%hjC b> 0~lm?n] C7m9X32Sۮ Tc1mG=Hj" <Y"fufA6 זiE {1tQ%cz(!dv{aB2%dNۅ1򾜌Eۅ-@57̲2fH2p&L,s»aXfӣFBQMȨ2ە"'!#dbBou/!CԨGȠdB9R悘9jSu3rɟbFW3#f֚&$E__ Vw]:!D.3~3KWaet˙a݃vR4K4XM :in{AytCxKJ.hʓ.i6؇$MЃy$Y{q81i*Ӊ+,2ԥc{wC[$odj7 A9tǁ06[oY\}RS>!-n¿w%  0vU { (BTBǦ]*C׼]}.A[K0$d'}pҕTIq 7oT!P |w\6^̌jy)'|6‰=Ts 03ӏpy E’? ifU]غaϷaz %PN*Okvw#b OOz1msC*<#:o\BGo&>u03":*0F܆JBYN8ڕFsQm >BnE@:6L&Ф:xwDސFse(X+%֭,,vYPe黽]8ρqu~bHeTpv(5ꎍȉ9{gX.HWt,6{wudmSκ".>U!u;/H!\,CnW(Eѱƹ `]9xCյx ֵ\6:t MڟgJS=EudI3ӹI0Jq#>[i?]/mu%(Ltwtٚ^6qiyajp 4HrX:TCd>:Hbr#bCIiIiv!GiLF` %6ׁPhJ;ir^X'Mfڎ nEigfKmNsom?_(ij8`D.3vvcBKTJ)t%Buϑ[T9\9h&\ 0&΅^У\Qa =Z'}Ò2Ocw3k%UtAԡEObGt8E@%̶f(y`6Mq ^$:ljFɣbWd0~ Yl%3 SGJlў6T^OgK$;$BRB јBL"FL{2VXRt҆;xA]d^28XuX3@;6o*3rQ zHl')YMGN/F$fndnGz,&sգȦ! eݪ+K~N򛲢)EE7:=ʭ_VTwq}U_!bt0.r"}dd\o+s}Ri.s)4 -g&yM-1&o+yxxgikLCg8z&j_FHaLE 9v=,yzpR:Nj_bJy2aHҥ&5=#8e`H͐H1jF 4OϫNDžZY衬{I 9H,Go8MQ|!8V`<-pN)t,Ԏc-)2C%tAU&sdf4hFea;z*[Br2&^2'\Bj:2k6]1(]Sm^0 $̃ƼT;J*m[RmJ%eHװH]G%47xSc:>{}k[7^E ӱ r-5Z*&9rtOLAÓ}6/ycnH6$;L!y(5gl̷ EY[ 'T MNeenJ V RWS7l\,+$#o#9̴|M|! )H ègXf%)XHN̛?i-]zR{Xk_`"i;DnM2Y;u-dV+ɖ ye 葘l0PD/9띗Q1,l{H1,~){1KCYa`Ha~ [=%I^vty`X~Z*3ѥdB8X+Z'Nz򷙙5mi)3L$",3@e*Md$jE@ E%ɬ7~ܭK|dO+x|FR߱\ȗrof{2- ws^0`}I1BPQb 5~:U+.*3 #8-0.ƦwM3:L B44(m*)ԆmfpϤU-oqFs;8\B8e hDV`X|#$d/EǾ6}(#7EP۰|YLs1TZ~eIWl\H [0˨;=)&\6f\jW_ HEɔLcdȤyŒ AG̵K =p}F[qURsW*hn0q*wbovzp>D8S2!(. 8 gR4X1VW|6:Ck &hS JVjĭNR(qc^,@+ Cn cwkV??v9O. 9#DƜ﷊D׍φbkQf- EB7}Քmt ky}}j}cM Ⱥ ?GC9Dz҆Ŀ!k˽;-R%TګZ&WY3'jlU9YbI A(U>J.Y R'=0=RoefIoQ X՝ufC͉7ޤNlw[&sשׂYсNm.SՏ|:]v7%:_^?6êM'ݜڜż);Ęo0l%";b 8qaJ8 @4[4p'2G_/TbMxG;wۛe Bs')Int/r!ʮK]P,9/)F9d9bVr_K^B HH۲UeK3,(B4LъlY>{4{n+t'Fs|uƢ.]Re9 ,p 88:Yl&F(u|hH41kqL".3i4?>-׹NLeoݪG]mj)*/֤B zXt0{}R,>į~ިhF@EB}È)Ʉu9!K}z^>AS  K4Vz"Su%'D;9U'(B$ِN8[jod<HA7`C ݒ so\r.㍿۫r1ͱL`{l8QPE׶Bl{A}g{Yzy67ԑTXGQ]0sWe~p7<% P־O_o5`+4\~w9 [(3Qs5XJ6D^!k"v Ys$:^H,i5oY3.k: ̥M`;$d͗r"FOOˮ+˖q@B5X[2\Ҩ.LpXTPHM}Ft/ʈe)TbdGy֩'LmipV [3u1 ,?:TrqL>Gw5>,"΃<ͯ{ 2sR3ytmYx%k^ [@pc3/OQڰs6 'TgpvqxvF/5ML m=tm\b4?J;S/HM"g)F ҴU8hAzHAȑ;^bQЧmo #ݐG Yi /YaS/DRRY#\ ^} .zusuoN.:Ų,KNqpۃS-WWI[H}C"qM^sIC I>K(7A߽>}È@wl2m r)[MrzWJvd$u)pտ zީ=yFӐ8|e`Zߵ,G?>}F}#o) cX `f|&AU3?Aݚ[1K)ݧLȡo ,k坁Xk297_07i!ԁ)̱ SВd$ugp:h+rmb#Fq|!" m+G a/壌&aM3QOxt:e% Z(fP67Me\y4Sk+@˜AZW,'!m3={{U7 hDI fo`'$1uތb֦m\3N i4,چzh.^%-s= 9r(;c-:3;er M0bE)G봄V)ˇ0$GA~&Adz>і>|1h7KX%GUSi-LnC&]< dC z/őYXУ[|bжPw<՘vpG Fn8x%&nP Ds!BF!6$_V[ot 00acTA]2.Ha4q3Jp!a[Q4GuPaʤ{pjdK{C%oAt..(69SFt(5L.bu*LVǥdoz{h6++)ƠLpa.j  u,EDKEl7RF@]&cqgt1+˕%U,,AfL~h(R(*whfrf@STڕ-t sFạCcyt[>),s ԙ| X(\2iѩx4i4xdg4$LW6_Me$em~2Lh}QKs3Qwi')Bꆘ.mA)!G\ƚ-hHV?,Z7Oȓz/C H((Gv)3sOX0 ,+hQ/E%2CE^~(гYonEvC yI3Eo TBCE.ȲN?٪M("tPd;Vd紜'Rd:h"SdRdQ4]nHL7L6(!d(z53MvZ&sKE5io[ HhuhID!Tli^|ʡbZ w)ҡN՝ ]C6wZkFҏvboZ]tYd6ˢBV[ܳN{0]zM"Z=tY?tY%n. an.eظ.k,^=Y<5n>Y̺C*\:( աξp [3 QY#1j/÷E3?YpLcCp¸o`جc y L1hՑCױhh4T (ƒq@0r: ^E!_u>>> /Length 38324 /Filter /FlateDecode >> stream xĽ9$=%2MDC=U=Dj)I"03,A7?_wz?I_?~W-}^s矹g~)Oߩm@A|sソKyO_Z_6y|ߚjρ쁍oMc~!ߵԫO~j H^w[w/DHsKϘ`/I}|?|mJ{)}ϊ,){-k GWI;ͪ*g?Wcmn+J4lZ%a?%}1VOCHu, }l{#0HAտ'!{ Nf~' dʬoqZʫZsQ'y_4y݊km|w˺9 m{i+6/ƥ7\ѣ*@&o٫?+'Y7HynV9Wl{ۉ#[SØ07lR .d M?9nTK-Ryl) ꦘ)|WŌZKM[l|&xg{H{6~VdsxOyFW{N+ѿաlnAM~4חM䋌a[widIӮ|:)c5FMV@WJ ɀs{ߣ烓51uc1n5}g^E^޹Iom oh1rC iOf~R@nCw)Ϩ"J.aR@u/~b/hU؟˶9y '(cFo-k21p綹ĉn![ؕւr%{gj}kdA\m?'qkסǾrkN4JVSxKA}oͭp;>N11ʒx %6 fc~݂?ړ lkOxF١An썦쑥zBOiƔl˟[&@յ_rBن)稽 EGynU7f8"mm7@>E0we@{\Ӝ<@'|%)_h𐉅A0 'lk086GoR[zI:n~z~h ;8S}Kp, [G' =@iisS~àb %󍴀9a/Pg`ssjnNe;issmhϻroD`Spht!DqY:67pz0a-_^Ǹ4h 3dI14`U/2h3KDtJ(o4Ium<(&'m|?X_!OchS\ߧ_ ]|hS4OfOO~yk^VOH_d4bEGH)1^,X'ğO/+fijO4N82@$V#ʽ })|7;ܪTI'B60eώoI-{ИSgbƹvT-gQl*ӘH `C7Pw]r~w=zuڐ8d?x$goP| 0py"+)֫iUNzoLt!DpQ`2R'Jۼ#-_X0E/qTk[|c86kvω8 G Q!c#Vs!r{尕qR0vuFaM ~Ebősmjcs3pȞt&T/x T1*_^E`-'a>Dny1?ŀ{K!n#[ h g> vL* >B!sY FFul0 2 )8\u|uCV1ܺuuoǓ>H֠+$ 5Wg8-Vfv_svusIv LeJiր@PYUL߼.oW#-p5 M4hy,:{95#k ֖g~eG)BrHvs'0nn81!9, f bDWI# 9='`j.K$.XU: W Qp s=`"wnոmU]GB\: S@C;49ţ nulS/h@>x$7#9時avIz_m>˄[HzA^o<~mNO{ ht@vaѶveT8`l@hL"4: eL7lqLP|$*63 mg`<`?@T a""(b[*~MBmLۧi=b PXJ #|Pcsuh"[u_L@Š?4HDd j&OۥH /c0U"hF"ԓi'1S/<@ǔ7J+:ԓRA:L:S@\!3}\\|1.$RDlRE=rKLK|@bcKΰߩP-3Lؗp1in|5@6Uee.gZ2PC#y .) MkY7~G[m-Ƃ6lVu;OXRtPuUpB(4\g g馯w &c.WMlܥTm>`;՞ASR$_"l-'`z4[M`0޴[(dLws#i쪦'0-Dot6qlf8`كcFm.KFIo y?4V7]AK,|'؋0P<~{Bòptx=dmClg;koh3m-hsS$=*ͭ$\ (]1h)2UJW0 /B F 0sflTǠ H3_]~T 67DŽ+n$aev /x8ZWx#ʷ=mfT*#ڊFHw"V',f&u1צXa)6ydjz  s%"T;f.Sݬf9SWN, agIcp"TU"ܾO&pR^uHоL  ªj 0#Hh9Wc06%1DPla`*R&Uh% Y1ZFUE!%mSt3"i'rQK|N m: 闓(]JRVs96^47QȩHRNkCvG)bM#ýVY̫5 mH"k$.HW*"ؘnKC2 7~|; CEq<dn/H/U}x>@RMFby1~=6#0>T9G0>ryy/I6G>,E$ fF9O}Bه>D]ovfNy3Sws afT alDטtLPfZB.EjJ6S Px3T̡OxHpɗ@ϖݺ##!%^})ps ,կq.1X׭co9t: ;-L1A(Cf(@ތY9%v<^*F0 s8?{xή|C6hq8䣈Q:nհ!;re>of`jحzhagY#=.!mBߏG+t{+϶Y#1R_l m HnړV^L1Cp3V|w7h!& 3e -NDz_!Ryj~BbpzT}0N_C~ɟ\O9q/ozYxOKɜGi鈃Ãg YʠVҁ8+v}*SgI~/eÔ9/l/Ink0  b*tU',-xBbe LrHJWd鴗U23_m.Lixia͕ԚG˭|El SQb^l9 2#33E,27E[@Њ6;=706K7 y__ǙM#_)~뷉ZbdCA}AK6kWy\%<.&k So,n!4u.GbOLE񤦘/EaY>"\E L3g|r618+494>rKR bd.?>-SYA&ac.Chb>e2BEx֣BMN`Lx8R+ b-}􁂩Tx QQ\rA&gpIRs*qAOi #Bd9kx8 Đ~0}@:AQkYH;77l %mx8Vi*HD~YuF)6)&M6Dpv52ȵK XO=$P8}1pM!TSUDzpRe~''n֦Gs\Qѣˉ!sgd#ǰ EŌLH\M|ᆬ yv%#Ȧ3*vh BkLzYeGm2e˫2|fW^sN<Ѭ%thVt_L(thz\ӫݬ ^4,ApV "( Oe22I.O A%\kת;NuvPiP>egZb Z^P&h*{-ʏŒ#st(V o{9FRN,H=I.W3a`6FDq Os3 s2w>&S?'U. [D*zij>K!T;MZ_c:Qc3L$v/[ޢ@&jޞ}(S3NLN-d-|𙾠Fj B3G\ȑ <+끆2D!(Rf~h-`Yst~(\C,'1l'#4 CzhƐGvLTi8'Ƹ$%WF(Ƕ.a+W4lXTJcfέ4vfhCҁH:ou:Y”tE1PtJjR UIj 8?W=F)) Q^O!R o 0;i:$'T_\(BZ)¨6RPSg!ŀdYo7@PX)O@C9oTHFRJs9ђOAUi*W? B͊C:(W8UwF$^3Jżg t2P  ;CQ"3&lEY_tV/KHm3{m.#e&ɭv o }W-QW,.XV.IN Kg'ŧ 7R+'>h1dc__uІA#l(=g-f{h R'|-}6ȷhN,@'d.NsI5)FyyE9˂婨AmhD64BYX/*EE/0DPL\c>fo&'r= xbSޕepax t\*9#XG#TPb2\[Xh| ~ c'O%/`Y b3#c˫,=G!8>K+7eyiqJACՒRf C)!U !U0)}B8 DD#OeZٸE|0xpf_5^nZ h!=@VtƇzf`m=l ,H=52S,sQgccLlAH#6SMS)!D~ )q@8wuT:ϪhִUUoPmeM8y($X*<]==uxDzrIM' sS /m!綃k12:aΎEgčPNZ(3COt%`නK_V)Ysuf2@4[ .LM^owP=YfVz5k', :3 j^=^7̸؂ ¢o@&OeRK@YC24L,s|WuIcZ^ NO.^ Et@K9 ͋fyL +[3!8U啪 $5$Һb/35_dƌx'-Kww[V"pNY!IO8!Ig==NxL/z1Ioޔ<>᝜QJM4(a*0lzQ1M{؞xSJ]KҌFVuҋv^@|ˇ\oCn ,ۋADz :X=C{fF{xhۙ[T+kC1,9{/hI7-/F= +L;ZC} 昃IPdPFFtϧ\B b(Ytm[uyd+(q#a1!ʯF+9䇬6?G6(9Gf9l GE71elf6\(i"@u^pq}#Ȭ#dEk6ag\rce?\GvvJ{"}tQGVKnEl|qSu6b=Nnʍe#1+ |%fJ}_p2ǭ.k-%)X[Ve'5 avaO*$KHH %m W|jI&JRT ")Y'5m^!WvAN/9?9Q,9v %<7KUܘBA5d-xڰ^Cb/eODдd>64BU9W$45ۅ#p?Yl<ʁ%2 {2#%pHIx1o晔3/zL~B~IWS {4+1o| |uϛeA8"GvҲ7Pqfj$ >*&V|yM<<&6,c&.88W8[,aIh9+ۃ#pX*7.Z$ aLKf{J% CZn eGJU⏟Q 'SVi߫:5{Da.w$*@ܿT2CQd^wau@Ǣ>2 7BTl1r=Iߘp:$-IdQ+/cb<$áqz o)jq Ÿ /F2,%(iD;1.5]f qgEǸԠV q +dVgܤ@^֐;8}U(4QM2 ,XrpY,Nv Q`0':4"r1yIQFH)-7R RQ``QVD-"A^S "Da՛~ v0-_ ?== i+D}H"bf]O_rzxnuD}QJn/]jQIhL[BC? )nR*RQ}!" z*s5+/>/gVHěpL t%c=RdƤ֊ZvjE`lOxU=*Oy$2g(Uĭ`r JaEe 4wm=n/U&D cX0M,4ygB{Yn|)is9; EQ؉vͪ^Mj$_uATx;xh^DMonTrQZTxoQ1 ȶ{1)*9pss^'T܌n=eH&D2(F%SW@P^I3|G+Q!8-F9EEjDl!Rwqy!jzTsP9y'}#f\Ax/[W{ZI;4BDn *3, clU4xC"K\ _Su4 w<ݬdH+H!3 0%' nا1̪!tG*JI DcY} ܵ1RQX!gQ/"Æk 4W!Jv*MLǩqQa=AuC`O&A #NjC][A)(Vt(wGH@Fx%Q(@FoC4Ҭ=M728V*}Q`v F Q`uQfXy45N"@o`]Sz:tCXlҜѠ#~q78$X.:Hq+DKƎ bʸz!$ZkSQ}'tE^D:1`,"UN$ha!EAY6h( p*_tG8#&A!hmQ\4b/B|h#; ꩈ W!!2f-c(v@H?)0UWwbEr0`kGTs_r\͊NLQup,d3.|&ηܟ%V'\h$w݆b?ATY*\ŗky?gմ>K'Ƚ^ 8)yiKX:SyH¥BH3PqJ7bkKqe>}fP5FXZD#Y\DuH.CDU]eN_jI14c6S@ O4Xv.+mP%ͻR|XmA1sj~9eycdے"atRHf"Уi1Fr+=B! xxf!Ei[W[O8DxC["* Q՛Q:<kF[~܇K ORBmAY2{f aσ@.BMϢs`n>{V G U97jFAz;' xCQ٘FPFtQ8g=l% V71_kn(LWj\CIA!S@4'j\Xu:iIHUEy(_hsK%"L 7a.+䄉jT^0#L Ct9F['K_CNNo[!GdEȁ-/D"Jf_D(hF֣yЋmGi}C NC0> ')4zJ|7>XgN$QKj,%KɷXRu GP`@B>!S鬔rYȭO?G L ҁ" B):_JWq- E>1fWuabA^r1tq>,Qc7YX%Gaj]ھU@*w4b , ͳRp["t,4Nb=?;7sҏ^NrNV z*ă/?0G'tOC~A]#G-]BF>1q~ah|#Y7?_;ĎqzYcꡟJ9\~#ہǵy%YqGBlyV%鞯8U$]7*p[Ow3/rUax=>:Xq̷S;m,a$o-U^ [<]E &ԭ:Sq: 33FhSCTgtd!cJgq\,WGDQYj5 KUXYo%򼭹nX֤BbOvc1a9ôr]!/2_:5O/n 1Vu/G,vǘ]Id-{FŚOQji9+_tª.ct8B{{gݟ /8Td9D2'AJjί;A.ަ.AH jnv/ vc[[$` imv"n \}>lŤ0HPYJ$msms1Ӫ"Oqcӛꗇpd@ a*np5-n;"5]_=p,܆١naۼ[9sHxRX&zWTpJFy9/>LOY5)YQઑM=vUyUe~Y~v &ƖOKaxu?.V-cuiҚJWӫ`#5;uB8?G-)(o=d -=~v]q`]bo̼8:`a̐I+M̀WXZ7󓊮( ,\R+qp7jA/mIFD[uH⨖C,^e5ʞ:@&nO)ҳ[ԢKx5>UǞoҵqC ڎpEtscI̬Jk/:KNˮ,]Q zN2>vO a|SP M\o9'7` l6[GbDxf=l% rVY*Aeb]MW޺&g HoK9 FCkN ,V?a^.C: {3"*Z(XozȢԇ@[B(b,Z.oTgR <91 1LA,/{3.b,=תT71-8Ӏ=߼kHy>=:m}]sZƉ PA R_zڸF ff r= đjCw2Q-衈y0"̖PSaX}<>G(CQ=>"Y=PX._qC>s? R0,z⽸_k(K |u+m2%#J{7@X#63HaxJsnHEa5Y!; b{ ׏&Ye#ihyɘXBx؊ 4I^zs3Rg[*,,KF×YTU?r{{t/6aFcNvWcg%A_1Onc?U1@Y`q$C;n2nvU'vuINрq_۞,e%9mHs1"#0\g%#/V*Q I)$'N$NJ$ ,|ͯ&ލJrHbYhTmi)dHFMCJ7 .CHXR= 7;H)XN*{M~3~QRVa!R!M_l^R]{M [hA.)gڑ"ȀYHȮ#E )2uȈ⌷AeCHs2]LU !#DBoH-&"RtaL"SՐO[,]%B̅"zѼ !g"S_Bӎ %281Mƭ^,&;'~JcCS|+m.Y%UK"E(Kd8̉7m Q po rÌO퓣A,Ӵ'QWedݳTf3%itly1&n.~YaDO}Z(!RC<@x6 d/Kv)ļv*ӈ "` 6iļͧ 9nQX@URa{TbKniݯMӉ:C>`r16'$tBx tb^sN\d&׽hшFkkhĎ bF쐣#z7_J1J3:1bs::1R.c>E GFkZg5bDcK%**JL:T^:1:1s=:1N{$P9F7z/YBV\ {hq@hŸPkgHŨxDR\.…i ^lzbdrbS5w^G81ӋJ,ż~yz1G/ưqbگa_G/ҋ=cg4yMG1)X|>.QBB3UB3,p:10{Tc.<ƈ_~qaj\U(TcWm`-WZj.ոi5xa|;cUR;qUK3S4͘Lkѽge KpKFRƿsGp 3y&XrQv^:2fPw`kUٍ Cb)bAE`qЕBa>Uy _(kU~ T\Գn06%Mbki~O-Ώ*㨎,zyg +Qp$M`b+}f"jrM]$yc7F2yb%}5z1剗]W>3O׷C]^XQk-4ㆼ~]6eC@$錥H*B6 5M6t6%h]G6|@cE)(G6,&/ٰzL6% >maOKY!rd5.6lX u>aQ}96g8BE,4a%]4l! 4#}DAB4dәh&]a2BȆU- 2cڰڥK|hHݽ.$\8m'XבK7tHsQ#`mC#~B}(en3{}LgϰKoe|CĵnWQJwkD_?u0M) ШC5@65az ނ@}~ؗn/B!*A 3 p)Mt&qn%HK# 7dOH~_#7O[iM 켔 H¥z 5sIZ 1fXҁ6{DӶu/ѣ hɕ ]Ze40z=bwʠ7cGcՒM-)3 ?,NOd;o,uC2Rq7@[ݴ9jcĘXPL ǻU,t'U' $^GW"\y O7DIP`U(>p'eh"XlU_p@Y>%z cI4&eFƆȀWaZis!X'@~wI$xV״yO0 ̡JgKLhw r *p7tThvXbhQI#;ѣ)r$~YIQ\5Ž & hm( ;:ߔvѣ>+7G%a~U7{!ΫGB@&U8M)֍u49Svl zeJ?y`gAtOȡmHj8]qڧFlAcX˗ kxo-En 8=MDp~CDkzȨ- Lr L&(Q:<LtJ_+uQb5Gb XxNsTRpb܌Gt_M}.wMf|GBK:4.oZUh7M\`ykX>HoD7G@ N` A:)4D-DV*+C!> FL!Lgq=l0}aR:]J;]2UA1ǰ hK btY!i+cd%݄ZW]h|^Pl D UB֎ !}"Tp1:$Y4/ ʿ+iC!rl3l8BfpHc2)@W! bv,ԡ` x̄ffa]w~'xA!sYFeeUj[p'uM Dۭ6ux 7ÅԾ*0eZ#/aYaU~ .p}DPNau^TfhY f>*@fVɭnn8 Ĭur9 /-n!V,l^ 6{Iv$?=Y*`:vXtń.C]r/Jv|?XL@ bGP`%ڸz):aa <ĸatFa P oAV[vZ N(?!Z/R/iڑX5c{B3gMƛfFiB~;?N>C j$d,Au'ՇX7AI 'ଲ? fcB*ˊ˖0.dTuȖ0] /ڄ j_tip d:HtA .\AȤ I;`)&OXue5xAM&^ABg%.^RRͰ% LOH % `/H`%^09*D!^GXEG5e<|a5| G7hx :L`|!b#_PXI2/p._K@L`ۥk_c\,ȗ,-T/Ȉ 54,M4 #^*xyix4[-^sxAbO!ˌ@G >`%)xM &/Z@}/oġ;oCL9Iqp p;A7-Чq3~zە\0/^4ui)J%NjHWTZ"U&jn)D]PMiRkЭ]5aTk8" jK#R: /),1GM||A"pґɨ0~$grȣ u=1o}&c !+Jzpǫ~IË. F>_Eb>{"[:96 &n^EwI2qUұeSNE H~Iۊ ~ri[s6JۊOi șgOH!,i[c mE<.iۅsY[{{/zꁌ'i8?섴EBZ+G.} *%l/{r=dY{Cɤ{GQ;**FMBx:M* :DE59=-tx\d{? k2Z捛/bQ>O Y:Wn*GYz`bl jWŎ!lAS @bBXDKM=tP)@bńg AnruU˩[>1Rk=lX5 c̦x\~+n+UbS"+;L<`oM ҋ)dr/P([8\] XEw4F;z_I,F8%+"yQeN@'blqmZQHiLMCKN[N]!v=:L ^h;) Z9K 9?KMU2+fJ]߼ū1ijPޣYN$e2eiٺ(-o(ȫQħ)6hF'VoJrdqN'Hh}z뷽HJ蟨Jr!$84t%KzL֙v9 s6$ce3Tr]P…r/fVm_ǞW;wuwK^]CI"3{S\3u7Ȇ )_q *Rf.v sMH6{QuׅWa`C#†}Zg ~{6I&]fKK /,r i)e37!9E>U1UC3iQ>WD·/.4}r;ZmHB!Z Θ&˔ v6RO3KUbmhKlz7uHӚq:`r ZCd3[G?oǶl籶\pZ2Y4 lh8A@j- !h 6H];/L7YEo sm*Y1O Q>Gjn\(ߒ CY8\J?!o~` ,: &k_Pʧ>%NCl".7R?mFR&F&mMٱbCXCw#.M6E7t}!.wDoa܆4W74̪ۈ˃\uw<^[|_[!vsH@`2B~ym?"uX# ͇] ^G|wFRD8)gG?Fo@G A&]6[mbgHftSҍBBCߐ@ m .꿬 1[NyևvYC°$+vy] ͔DVdeCDVC] ;NVdMVjl{$)qH3Hז,Ksr/)\0i~OT>S:%֮/O8x`wBҿP Y7!Jan/-P;zkz Aã7.$V!#·!t%a\qs3||<@-l% Hgx)YdA!*{(:H XV:fK B_(+_fri*Gd&6'$J:j #9O&T _ F຿5^xa A4 ʏD/#lբPe@|o*3gArC*~愀_vo`A'l`0 6(dd'cJǤtgI! 2N`=&f`uXl4#! #8u-;DG7yNP8") 4B7Lg*]#Qnm?)'yw*!0{7OKRJ%ʜ6Eww4HKtXJ{&0Cұ ]*I-N㆜:44sQF rȪ᮶O(Jp!2A)9)xKY"I?ě8;wE!uq|"# MÔLڇVR$\*I|gk_'{WAϵI`Q$aԮ=e70HyA>thH اg5  %phLeʹ39 +&J$1B`MW=yiӎhvtFE\}>9*_v|5lv{FbA"b^1='>ǵ̺εy&<8U&_sac˛ARʫ{IFe} rN.l2-;`Ιe0!2-mgJ@ˢ/ՍiCqF(Q./-$_"O:q4îbx:M/7Z¹X" HG]Y5ui#L\s_R&j$hI 7Pg Z\e1%)-Y/)^7}=0q('0ʔv5qЌ\#rbs9!qd& /b\=,W9*Lж4Rh\߃d,F#mr=3 !Kȇ(%c@H2Gy)c(SQjRI '1:9#uTP\,F+Le?"MwǢT>Oo-ؽb-7xb:DG\LGN^u2f*FgWzۑs)m1 n5i@`'G@JWj>xxSaLlX!^fn`)5o"ӖhOjW7! ˓E<92xGIG~V@BbL &`!n kdAyOLt;ӌB7,(YAD* $`1@ H{L:2$&` %R qg.a1!?1VC‚ q:k k$LB)LB"f.IXQ + &arHX#f ̚x}~a|0 |t5wHWxr"'`Ul0IW/;V2=1.!zHWAxqxxɇxi5 #q|M +i:&NF̔w{ܙ\ى lrGX `*ABn*60[}gUl:/ G4 +))Fp1 |}{LaUMɪle_ \gfvl*3y!؝ ޼eg:kdj*a4I9Hh:Q4|^ޫ!(L‹QIyYz DŽ0d >RG6xU!%']07XV$ !G==M AUe*J;K&MD'ՕtYC82^*vDxt1]S€0#|f%^V*"0^W]u|0q><)\(3E㘆ԀiQDvD~jT)لJ*_W:ھ.24@lV?i!_]~ όKXBU:k(p@J9e.&v׾CN=˱2]I1b|"sPjFQiӰ2ǚh0DDJ!XI)BD`1ȡS[CVI>uq[$ZQEa܂cA f:wUa\sʭ`W[ p r߅낄O娱1V,2fe:pvQnSq HENjHoD^ DPc6jT@.YS#um IĒCNĎc,n!x+H:Ç P('W 8$]EJ,E{<|P5K@nGv$ NƄyzʤȉĠ""v*FG6@TAN(61>\A\DAV d) #}YaVx@5":$P K躻vC,ɆG I|Uث ;  0 xavV͌elKCZi^@_hzzb /O )ثXQnq`ԗ|J'rL#Z@'ctiIw$+KEȿކ,6+.*^פRs@Cd_DܔR& 1f/!ɑktCXDdf- k; 1{p˿2m>HB|iz G\&4<;sL6#Mv7eH }F CਊO.m kjX{>?!{;yo <^pEY:\HdM{ é!*gx*Z̍;raPTg㨡HE,82k]f\(Д{\ y4NC6#|t0cr.bnӈN8Vw rv0@ .V&3@es3"!衤g.Lm̵.) %Į袞i͡Ê/ ,/+B  H=W}GKm'9^1N\ɣv zJZFsS:c2 fJZ@ysi-"K2ăI8T:>H"~ac^H*ʚ7fA:s jLfIAaz?5PH_Rf e|3qeQF ~5HfMxBb!.`$M)͎Ch8S>@ ĸBKlLhO: Yڃib#S؈E$hGxj\FODA%tYQcge )|tɥ7Ȝ7E 7ww>ǭ cqPVArHӉybeZ̽f4Fof8\JM=h,^1%R.d7g?ޮvbOco'54 / B~!u]t] +b'yB >0-Vqc.G[y7eC~;"o^b#:Yx#&2hI&j0 B!̅ƅ~G2 =U'{l{wfJd"Ș{D MSBp*j|Q=gvTP^JHxᛲgb .םAD$/(\C6\GHpGe@ģh?8L ,&b}z1XMVDj,&b§+,f FPRĂho,~+9#&3z;6vތݐ!6UGJ6anS݇QUCz H7.%^d6^C䃦&AV8` Ymz'bj5><٫8L!g5@ 50K{ 6ܼ$WptQUv *'J<)K,XtY1=VN^_k;=O3]h2|ن\&ܗ]޴+m|-5Vy Ӎ$fKw'9"ĵvt1a1fxs~'ijԯ !ɸ RV}!VM͓V!X?TU֝0G~lndjg Cks\3;qΓ 6 A-E9xS\>˨X MGq{fj?+Ԇ\S0kIu45}Lz|*5㨳LC{Yd(gRV4iޗ*rŤ}ʮ TmHfqiK"%E+HNK RdR=0\ KPE_1Jh}aeYZY |8@b4B&#P߬j;̾.3jlB=yl):|,.Z<MSU^;֣ymYD^z]!il̨LOkJgҷ#$]̮= +sښf04XFFQ.Ned~uR;'[^r;k٭}G< ""Vo];%09 -).8͋.B LRKWYkeQ7};>Ge1~a^Qӄ>V)ӓC*\EclIf d.[`[V 6FO=diAMY4Z!$ᔅlf]"D:_HWQ SėyV׾8Oo]$f`wHȐx_ΆFN@qt5_zqu}48. ` WI낂%{ E*0:/M/{ 9=]?Az79rIW\AOHU, tAS*+V$Р5v)=( :kR7`g\%' ^Tޏ+g,^ۼy?j *告NZFW8 5 + Y`qtx|r/F% ڔ=-.n#8.j:Q(%I@hn@Q0DA z$GF 5L1-߱hT @7xwh>U{bg6rfA+Iuio{!" c˭ov I}u:D\H(gi+ɴHQv] ɴVs&Q^L ״|ȴL7izȴC!BE>C0ACK]efCrȴ1٘LZeoZ͔-Io26AUזiiG@O&Ӻן˴ ߶Lin20piCŰ2h¤8rnqZ-C&?$10v] IcIc,SD;/+$a)2\,){-vmx)ˇ@+amC # Me~| Xtxm,TzĥΑ^c)W.%d!(D(__u/_J:eUڦf]JpYa.Ss?fsPQ-swCWgS\[G'b,iOVpi@~ڿuO+l8x8 F`.K*E?I|ɘ26s endstream endobj 80 0 obj << /Length 685 /Filter /FlateDecode >> stream xڍSn0+t7IK@4=E;;I€5o߈$HyR*׺J*^JP^YژD|Eٞڴ7vW&L)4ڰ84S熺1\*+vCI#uɊfaO!*^[T ⒋43d_L08O"D 0, ;bP78=7Opcc;dk7'<-D# O.ݸnc0tRqaN%gh̓8!8"tJ\ =O {;ͷ=\Ot9qjh Eѵa.w\O8X{ʐ;osw[#~k$Ip;5KL+ e1P44!y]`aq -"$x–j endstream endobj 84 0 obj << /Length 928 /Filter /FlateDecode >> stream xڍUM6WH#~+6Iva)2m%Dy3ұ-0!Jd%D֕YtM!#獈q7?n7o>TU&JޕȶۣoќB)ۼкbVu콛F3fS.[v?;_} YIݰ&g ;bUխBi¼=]ƒ#xq͌4xi#たJs O]Þvٞ3xы;7*;GxCW~wRm,ȕ"M#@fƧc f$2&%/0kd趗࿊}S<4g ̣g$HefAcn9V>&Gn}} T4qxJ.T͕eS ވ. :ߦEDž<P oВ:a&;<0.5豿k^Bec $&p40LofOW_bfXm /ә,C IiUoZ&h6Vmwr> stream xڕXo6 ޿"ؗ9,5 [oa^;`$^h~H9I:p("XO,pJ*[UhnAOW|$X]y yj{jY`/K_{̔76PpOy2ʼ;tw_Q˖~^MFQJkQ "I!ټ1UɖolQ K_(˽뉙,( Iq޵]HuPQ*wcgRz;~\zljQ]? !5뉮!5T ]j0PfƮ4)h8򑻗6e00T&I=ܐ7LQne#6;LO雱'Ixh!oiQM :֊Gڰ68ڠϤZ@b3-bѷ蛁W2'ֻyK%$O#>&h*> emm\~gE!J2s YalHN\ҤѦ(#7׫?n~Sby08f 7*ںl %hE`H'!J` p(I=b=CRLA5xJcHP e8a`[=,fK]8t΅B0tH6(?LAJ,ˎv`m? ŤzF0\Hۖ#~hn'cϒ-ɀ"_A7x@@^ υt|6Ǚ`Ie28ҭ+G`pLOҽ(FM֭lKlUI>@3"O !usk-S4K,ﮦNȲ5k&+OD r*:^Sq9Fڛм1q ZS*?#^6U T vfAiC(-7i\wq+dcSmzjC4ŸaWuzU.:]AmՑ,P1]l)nWۮO|V>rzz~> stream xڽY۸"bRԫߚ! cZMȖ+yl%b<~3Ԫޮ,KkSvW[+n+%60q3՛|i0e_|sl.֛,˒O1yݺ2t8f~#ckkS&yC";qK7K [T&UaqJz:aQЯ7ݍ f'*YUE1u6Z,7lB"ENggxӍӬ6!m\8-O/?wc>.qUZ_;[˶ې>7g;]sZ[Dg[PN:fw4l^e¤۲5i])YјTebV٢/OVF p GyM&Ϛ/ShC,LVu}o;sCW_2mABt[>MB#2E]Z^5y 2YvQi*-xk!ħkA_DT<t~؇){dv,y }cʡ:B'9taVl+~f-ΤtZE*܅%صvdD9GsyKmdԎ!mIW4%bQY3slΞ]eß}O50-z;ͺ@.pgncR{%pjǧg7 ]m ا?#]{7d=ޱѳyS1NC~RE?Yp]&k:8HȹufE!BV*u*SXgƇ5y"DW~/==彚Eg4 $$: ͜ΠW=r<6r#c~t -jtktAc+ؗax$O=O85,,ҍބ}G35(b ϳ(> mhgQr];<#*^JVf1ٍ+{+b6@H&Ƥ[`^dZQ 6SP:)Ūwzij:8E!ͽ=,-T#@bK3D5 12z_4c|R陉)tX 9U&$/K-%6"b[X-B[`;`ĥк9y{W.۶7; &ŃJ|NPfp ͩ2NKPDTbw 3F`{`bt*gzܺe ?qZEǞ 謐q!h-v=I`2>mAǦ1t͈O;omGHU9'+V9NJq9^^5Yt{jt:}=͛@ J^]ЊA{ipAHd}d%b"2';9 E2NɣPVU~vx` V!UBEރ G=2/+BQjPsi@ a)Zp[Ύ׋=փu,ǡõaf;1hm'gP3 s;! b*Яlb8MN%/^H]> stream xXK62+zPI$@WWJ!(ˏ,MNkj80\."cED<&0fo67'" u\Ԧ\n4rDZ\)x]1ֶ ).L6*Rʼ0Xf"49/`7͕Ɗ^?[4>vG.KVo;cxtNJG8ϻӸA4K08fUfko : G QF5&DԲd/x2%S}_wa9qE.GpkRu& 4²h]wl:'(nQ;TԭGDKa%(E%Oܡ՞a \!0z…v/d4JˮlrpNr(*é%Ž6nK)֛%ۖCg>j*<]3zpC8q8Yz6^P[E7}csqM3 P*xNac@hJН`M?YuPZ0׎cJ47slAV5: =-Pcnԣ=[2ʦB)iNupp@iR :%[GD9L&lH &H2̱у*UssȒ Xʮm0(s5ƣq;ٞS^3a%ɈxV=mf9^ԣIͻO0~zji.lb+;] v$ī(Ӌ@^_ d>O@ 180t^NȷTS3K}oM8y m}~&"NP45-TGvK n*,,f58:-%H=xn ">{$$õ` C0HAZΚR˫$J,  ٻa)5Kn/7CL)s4IɂTV +.9>,#8:5Q*w7Άq< p>#^TtTNϒ8 8"Qvt6$NEQtaPؿYI ruS< wUp!*-70:37p}v"aAc'b|4@7;F.Sǿ87z# $5TgČIv%@1߻FNgYc~u B[O:uWy_V3G X7;ϮGmVl= 0e:[:gRM1z.}\e={m ƞxjpT@)9 c~;5`?@9f'?S\nX97Zy3*uyΎ) JC`Ga[y[38Z Sդk&2%ʮ8zt#/WulzĖ^ޘxS0XF$4v+\hi386>eC\f|[J+jnVt$xS(6;G?Lrbx a}AFKC40%{iݏ=%}rw̍1꯮aS 5Vg`}!)ٵ-} ukD(IbsjEoyOw㘃 endstream endobj 101 0 obj << /Length 951 /Filter /FlateDecode >> stream xڭV[F~_A [V47GT)"%}`a°ɯ9s^CBv+Kx8s.߹#V*VqT&bwjY a\`t8eO_Jxm~z '{s";Y }!,W bPZ\Q"$ᒎF '1(Je(3rnηҩZR6_v7'T T*&Gk/:'<# ,YS.1ʻ dT3zAU3g+J5{5˯M~zҦ㗅~E@[|)Pt7=I+^[] 'w; ;?lwweh_+|2[xO돿/3zT"x3e6קyf\8 endstream endobj 106 0 obj << /Length 669 /Filter /FlateDecode >> stream xڍTM0Wp4 6&@VKUTbG|v}BHd  $Ӕq8o~|\"neYZ&% vͲԮ 1sseWRp淤1к^sCp""ETwSU6?KUW9YzPO*a-VF7~Ĩ򱫣ʨk ŭ-nÜ,s7)qG]XkKSwk.pz혋![7f=h@" endstream endobj 110 0 obj << /Length 1369 /Filter /FlateDecode >> stream xXKoF WT@jz-=&9hzr,D =ߗrlEhHÏCYB,\%JNWUh7_ AПH~(Z0LvSSw_ޯ{sf+絯u]ñ۵/3HOw\] ;ER%)@HOq4(Zx @:P: V ޠj-6 4$Sޥ&$ޡ,؏yVnȩ3`q$nOȰ@+qDF wo+ m*vMebtHk1)bgDDʴ[Q4 !G 93nZQgxePCy)6q3ҎxB9љlӜ4G(2KޚI[1hǾuQV 9v+qۙs>.졨LIk_3<gWq#[ {,5v9Ꙓ=\wW$2nXI_VW_ߌvV5 Q/%m- Yw4s}@cjg RB䚼ͻ3]=mA> stream xXn6+i!+%u[, 4]m %W;!eѽy4^xpr(>gy4K`yV ?_q7/`槻~r#G9ݭٟ[u0B@~?D7Ojt7g+mU&;?$״_{XΑ}VtL(dڮѐ>.μ#,h_FߐЬ-]1O{?)pQgC-J=jѣȵJ(ĆE.#r-B.Jk!UequtP:,%eRP4#Kt4K~?c?SG|u測%_ZWtVK t."=DЄ8 <@g=1X<+=EV!EuiI|D;[Tc7ek427"m,^]v~0+_6*ld_ )x \XësxF𸸀7t\ CЂI -?-pOD/"!^D")o>@f3ک+ƧK :!DˈWh@{SEK)<@ƨ@}i@to<%/=?,*ezlCp6)> stream xX_6Oyb =]>lWV>8#|?ذ{۫tOU`o"ZEuNp_%|!0#n1*Z-cQwş햡:Ⱦ[iX~&$O-pR$T 9?SXM"NYߜ{c-*V}ZEʢЫcq S~+ڃ(pf>0=*1[WMy`:ZS]Ok,@T++8aրLAwanD8'q08CM9lXlUlCJ&B Cᠣd%0+$2(rUBp1yvYjp1E(dT]Tq83hZ|^n{ A!`U, oќ#%-8ACqS >`ܜjڎ)!lt̏ 5jFyQt~3 =]>{!u&n菝5)ןF++<̪8$-_i0m5ƴHB]0 ɈiHAcLC &N!֊bMcwlHcdZ\Ù\-q-FC[IT S`-h=u8rI`ϼrAD#XLSp=0c@-rd(t.H;Y`Ub6Jk,() pB8,Ut8EHǮ| +]z[N@4q~_ϳ2I{ڰ>E~*DTD,e{EҠՌswn!4P2j3)t"{=(M)EqK)*V)a4VՐOw|z|aNWMvWmDfhI.^!G_a]d[+εD*/.}|HٌGr݇}y)Iٳ:PAymgGGB2Z쪃2U (R$cp0\:9"pfaxK3=KJ逸#>۩EqO\88VN~ i|,h*=[M/DS.mkrs>׽(AWklkaVg# ,fq†"0C<1=o߷'$aWHK\]w83?UB endstream endobj 122 0 obj << /Length 1523 /Filter /FlateDecode >> stream xXK6 БgjV$r=4I_3IkkMe#Y/Hef=t| $/b:^RuR,ItIo@w?lb ڔߣ7{u4[QzJ4zwVcJE."-zn3 LMYh+Y0.4Ko֦ѫ+|l~atovU9k९+.YGx7~R|+" ~'22{lƾ5&QjKU$#I sSӢjZbu( Iz:S58;8z`<l,{Vxn&r)GGBFP/,!D[gx2Ձu<"{ ~c!2vp:G.+vsVsY&31Y Y~ f+]~m|ʚV,GՀ%JaX5:c(i!0^ҎUo]9`d``dѧeQ vBk`MkxěTuoy EwQyID Z.A zl"J FtDVյ. UZml{}|"`iU?M$9yO|ǫ"ewǍOV &Tm-%; 2Z}UW=:+ML2a,9[-OY;tX4j 5jLB!CKl{Ith]CbH ]ӓ=Q)jKaȼ+<զ:zT#ebpƣE' _`wSJr f?-rAT>83:. /:GAnM6o)(ECپw^^[L(" ͡jTBMh+%i*6HƼKj˟s:Cu+J.@*6%̗Omv/h5K 99 8k6z \0:}U} [x٨ NfbcGsQJ!hA]Q6>;`uTsi+nN۳Oh\ey)koU!EbEnړ'eJ.\αM=C$MR>JP“ qH(ӱɻ:~OgJ2cyLM;P$qu2㚩W"l'D:ݡJ^73 09]nP@ qO9=vJDHnG "c}gRDDoo8v1/1&9)7bʍT˂gIMtZ= vh].m^ 9n1vςh%&1QH ۸!N;QJ? x45k;JV9 mOzaZɸ['Om]:tf&3 A0`G >/~_%gWK%.1+x<نn3[Ev0 endstream endobj 127 0 obj << /Length 1815 /Filter /FlateDecode >> stream xXK6-2Pz?z(ЦIǢA[4=p-b#(}g8C=%^ (|09g|$2XqIo++jMzPL4|:MWaAm{YS/&c/bI{$F&*<|Wa4jS6) XeEqBnD%IjO=zs&B#_9nawYGԩQIٟO֝QB:멣[wrSx:4BOЮآ8pjϰybO9%٢|Mɝn+FO- tH&0 )N'들v#{XPGq }ͣo0i$t1qQu*emAVy9m'"6zG]c8yXPN޻aO#m6Q,S?aafG bҚ66UQ0ʰT4Tv,(PiQ\ $4NqX S Pt2^K ]v lɹ0 tkHv) :G:iiDsqEj4Lj;eT35Vkzwł$AzY(&,8&Θ ,A@ 1Uݻ}Bj@ci/h'oŰĹ4֩N X2틞NSW{&Z e-hP@_,@L!hJ#+ZqL e(f13!x ηyEQqf;0䫻t/7,`IK җtZXk/ 8:fCQ0$dۛMJǨ6pW_/cqq>_~K(SGeOtA nelsؔD 6vj;&:DV4m2iܘLt+VZ(d_0jGm3C1ňiSZ򬉭d`K Mn5bG2 {͈Vgi?/qYԪ.c$%&F=U+o@ŨG`8p%Nk)~&%}*5w U68~t ] 0>,DDoE\ 'tir4NGOt4IӄN+jO`$$&')$ IJ>wP '͐8YCR%%/]Rb_%$TɕYI:+1 \V`JNG軬eD}C%)ǒœ<﹗=pNP/0[ĭ~` ~_;ðG9? DA~9}:5j|ܢiZ5utf]f!Hlw9iw/juO̎= I2t?纕g7_-_g$rCR #L/ʐP1ܷ@ֽod W!azvP[{8X)(_'K^k#}@J_^.s9ؠO$Y 7bY44{qro<# _^A穓QE{>%G0^cqQ]#ߍ endstream endobj 131 0 obj << /Length 1653 /Filter /FlateDecode >> stream xXo6_@U`]ۺaۃb3Y4(91(K1f@!y$}NĢy,EdW킈wo.q5v}U.DQ)뛩v{2UA׏nߪ~(Q,\pz=ޔ3UB2$ֵZ$ 4,ꦻAӸմOfA@Clqq@i;ܺnjhtױQS/<ࡪAmiڠpiUW=Z,I(Rz__0-JZi^t7i殭RmnX=Owm`=Vw/#E(,E%zM>DMeL[M?l'>ȉNUY{ uĠ<ֺ'qQm%IЫ@KX&$uCO3zBOQS%jZ]Hm"e*3#Hj@ giX" uX5V~7Sk]^uC/YX%"|~կ, * JO5l?K{0tȠ0Nz4 1\I|? &ZNb͝ egapz+gGed~(jx.3Vf^ 9(#(\}.mH6qp'&n;,suv9ie9.=Grq/m{ c%T;=+b3F}ph1 cX&T 'njs rFT ,խ=ѐ@ y0BY Şw`]닢\2]@YeOY>Mn֡S700!6Р͑Vm y LEhp\Oit\n+xM) ޠ=. a-8yP@0(:1ҷ\DnIo+^,Q8nxһ5J?/"K?ѕe]"(`a.b-;{K< < +Kۦ\iZ' %K(4HAXԐrcH%jb ct? \Serbu۸beJ 68^p+8 [} t8Ю!$nYV'h;˹݉YfPƬYfa ށ c }-GKkФoNH揄>ba>\K&cGӗH44^i7X!b<6`95&BM縨զ ^^S׏~iv4?!Y{Hj|٣ գI_+P>'BӜ HaT $Ki0 tPD0I@o'_r0O,y`/$uxx'pNFCwѶiAsH[qFQƿ{\a!F-?aStBBr|a> stream xڵXY6~_@շ6Hz-tShP[2Dy;u8iZA[q{k?IR>ƮSo^;QtI(M&XeE8a5LWmw^zFA9nړ50 l|*ߴ_"Kͩoߚ=J^p_A#2 n'l$^]ϓ;߱:*<݁ ]Dߞz-sMMٔa vEמXz O@iT3dva jPBSۮ=\H;P%ROٝyGwV=*qKK8">XKV~9$%qz+)Bj IGT@wny:V|{}j<oE|w{A"\ iWk^QKA|@箶KP0 g@ڐ9zgWo66VDc[%\vJb'm/an-=ֶy;ә` %#ޢ +b%aF.n]ɍC y6#gW~}%s dxT|ho@ʗv as(†揠FEATX^.4N oN&CkenK1 x $jTw`A8g4Cbn}g ųp$D-όIHdL6'@MVQ"SZn;SiOxB@= s[BL캱{˄۴L]U70ke7 ADZn KD!h9f Y@,f ϾuQbHm6dBS2i\ $1SX7Wt?N?=1UE>faxuzO%a.`V#H) f°NxiLHX0^,,PEpjq2vZq{bTAx` +Β%\?K`H`3"YG_W"/:J+ct4X6c5g*9C`@J@鹥\ lKa _)UxrZ nI(%%i63 ( e>`0xTr" 6QN0xvg͚n أ'~抋tGr`Dxo9q4_| C]TݒQVE/3)!M#3<.{&GfB oX%儙pf*@̔fjd]UJ^Ewx{|Rt9=-껶4Ka6R`򂬅O䰀C!0l[𺰤 ]P ,Èu{'{i;̓|r$Gecr,o{=!KMO) }r?S,\Ja![UnV\IPW-Pϧ{it^Jěpvp<#72S^?[ C \1+RyәR:r'4z߸KD0y?O^i̙4 te0? Qi=?7JW$ endstream endobj 139 0 obj << /Length 1447 /Filter /FlateDecode >> stream xXmo6_&oMJ-؇[(Z"ѵVY2D9/~w[kHϽ.Hxb=۳(Z()v765ҏȋuz8. Rz\߾<{w !L :B0Eb#րdx٢MU5=cuEI+[nPv"\;xK^Yc-YeRKduFгYc O]mVuX#StFG,\A̹ )r12Д ੼1!,i /4 aߋ V-/~,2лYơ'K\̥C<7VNY|;faaynQj8Y^eב]ګI=gv_'$6muT +O%zXt-hC@3Y.7hWr3f*i{o߯j?:`v".J ƅcW((p*N{խW0|..lXH4"3m Iةl c0Q"4=!4sjmz`jV^]B)tk(:2 B:VUjC+/IP9bߢ$:f66z`\H)VFr UWkFEQtXӒP"0z2"(͓9 ..﷋+E}f.nQ$TܫGj36}8ց~Cnk~*Fǹ==B=*LeT]w& ?lJq?&AqH>; #rz^Y8[H'9^48B1WSB "'{(_d8e~"i7cʪ/g^S@* a~;b:p.yU(pu^S@m!@G $k#.E , EBwKa[Xc(8 ,95%wwн=J~wO9`ƅL'Te-;p37e90q{'&wma@A讐 Vlش=Lȸ1tWlC3sq5HD$# ;C5%|pa >': c_k(#yr`sar'rimU֤Gѯ}3-l"CRioY4 cn endstream endobj 143 0 obj << /Length 456 /Filter /FlateDecode >> stream xڍS0+H&@JzYqV7qh F}mƐ+-yox ΓsZ*ٝVT5 VqfkQ$:!iT>MrpʤLliM3Vj,Jc) _δ U.p^A>zN=IA0̀S(ބ+c{hߥ\!3i6ÈB0y:px2J̝4AtQؿoiÚB\y bGptsKt-œ>\qhKGm~ NKVVvQ;Gt> endstream endobj 148 0 obj << /Length 1748 /Filter /FlateDecode >> stream xڕXQ6~_oe@yj%״RTE)UeQ#l̘e7{Ua<όl6lxSiTeŨ  0\Y~{.7IUqlkWIVM0M`jfY|"n&ٛm(vŮۇe\ Y~]HەYEۆNaPLE~ "NeW<'g=XCz}=MޠnI&5lEXyܽfjAQt.,JQY8(˂tkdH%AT& ?޽̝zz4I%7b ʀ@b=U];Zbi\BXkcQI;Oe(ƜFIP{iZ޸U²s['m U7yZw$@c6TrRJsв FO/ݷ"h\XE@X4P=?@0D8}ɜw~нLxĂm!8a?j,|B(x28I#x F?ʴP%4ydE:#grb_f*$sWdI3j% pYvW6qKL )-0^\? \HӃWTGNY2dh8-=vh{, Mq`qqe0F0y! e{{KZ-+ jX0BcGnha@}I3Y^F6ݔv >mK`>`5[)ѹQE,$B'/*ڃQ O'iI(mDyh:Z5QOdBI:nme YZ^,Lg{Js㣎P[-R2YX8e'Tȓv~>_<"4`8 @Q T~ 9z?r5yz@ݬ8wH \ !Wp^v<_hp2]۷G;&F`.l.RW3jȌ>QOqM= _]?hnH"K {SFZ '3am#IТVEԴ6” oTYwyf&8,tVk֒%JܽEwK3ё\WF lH߰?"ݺL'KQ,+\s__$DʅL`Ȑ `׮$cP &:ѵĄgָU4x)Kةܳթ]@^ 1G |O3i0\d0N4IpT'Βo.P\j gJ&sbnQxF+[0瑞LrĊ =NkBR G74qᎰwIˑY@<'=w5pcpAZ6Wс2j.VvFĖ'5ȸ"ޛ1D%Ot&}/uvx;nn.>S7'Kq\~iyy?HD9CD/O~~r@?\~\-I}!a\ǖ ŢK\ӵS$K d endstream endobj 8 0 obj << /Type /ObjStm /N 100 /First 822 /Length 1534 /Filter /FlateDecode >> stream xYOG~bBTngvW&H"8-9"3I|׾ofGb"fbbCb-I IWH#v'L Ǒ1(pB?lp/ѓ($`"&YG;1H91&$(1 6`Zg(@vAx%Ǽ<Z#YTܲ&QP@ECH#SHd6K1/YCH$' FHs@@A%"Lj\ 2 :iJ#O60b`4f,,NRHh̜s |.Y\AH fU9Ψ o  @؇znuM1ٖPȩbU|A2$W! &80X/Rlo竚Y]TNM=nqzWTƳ^xS^^NnP(>#k<_=a@nXEv %JS",UלʽWFgQnSfj3 [l\k:O-J?j?i)hv^I3y{:ۍdqI›|\o>~|,w|<cmo>y>'7ޭv(売>It{>G{Zs+oiĚvK#K""c+=e3yv;?ܜ=.?b^j% endstream endobj 153 0 obj << /Length 1740 /Filter /FlateDecode >> stream xڭXݏ6 "ؓԞe_}\Se a%JֱizHRCq(CO"?(E.eTb>v-`/ߤBQbڎZmq2ReTM32)2mhj7H`j5Y"H_W^4I7r(yTY"!)/4Ky JaU*̑@Cc2@=ugbX'74hA$-C:$!Sc X.BE:)#([';47Xg|S~]Kf:I0l&q$p?y~:Vv5MLQDQȽY2z}[ "TVڀ{Ӓc"p' hi e$b≲ xA1\|k=в蓩z-Cno6(hwǧzCog=YTx=H  TЩ^yk͠ m2 DSeeE6ÛѲzuckȘ+>jW '\N`o gO.89fR+E89&%2q6oz] Cmg_e@ʓ-H8@Wstl`G f Y[ iZ\1gcݥ\89C3g,xerE"|)$P6%T, Q0%XF1 Γ`,Cΰ`J{w?TadPlL,M ^k &g!`yj%Z/YEpמNfiE nu1 !Ă1QkбpշŅJ"Nþ O$2N׽P& L?;bCI3\o75jb1i2Cl%`^z0Y$ 'U-^m0c=PRK'+b z"MCTb)BtRZ@\4)`i'}FLw`WjNڼ UZR^ jIga(Tfh8fykUYf7/ԇc4ӎzHftn߯k2JqSl&Tfk.dd(=\qWͰuaeN3m@MiZZV!\!!2㴈G8-c1HCkF W@8Vi)Fp m5On.ј2}E̗\Kח6e~dRBvic96 nvo%c_|"zI/XA i )jo5Dq:XF^CkGŸ N [ /[n).EP'wk3ˆi1ZLZme=}>FtLPgFT <Ĩw| xɒ _뫳skm} ,{vg%+R?b{lwMMx[k(^_ISٿq endstream endobj 158 0 obj << /Length 1252 /Filter /FlateDecode >> stream xڥWK6 L.ҴbE<:3{jzZ\[-y$y)K&H|i76dVt~7+[1v; IT *i,fDY Ww1C.R,P`C)ۻ9O,*` b8F?5c󀨀r+^^J!ߚi)l\?"Za1x3wC@H5'$dI-]YV2](C>OQ{Y!99/=pL,oq qX\X=T}hGQ%Ց:eifQ^ANQ8Aq8w&JVkNJUw:hӲH !h60np J y-&o+ =&ٷ]jcW0k,hL!/29vX8ŠON z?aLu/֜2̔*JL+w%ؠ(2D lai"a1.zuǻj8u.H @VZ~BA\x $,yp5= DteD&L)b> stream xW[4~?."%"!R$}H'l.]٥I{*d.|3ctݨx#)C?<Р9hWBlhSiPlސof1ƈzq.ȫ(dOm~t)Sk̺wL)J}wG$? <e)7sHٺoIJg{_L@"NITW| NpyIIХhؿm cd~Ѩ}b<Ľ\/1CΪ3E@ OHpkp>SU(M>PG3:$Cf:E;w_˦N )l\ }ەS59)6+EE 7fJHG8yC"!SZ;瞾az8{ȖJ8@ e^x ;AUl=/Ҽɟ?2Y%e}J 1o)o&4 VCӚ1 ݕv-$=o~6m$]n``_0[r'_g^H endstream endobj 166 0 obj << /Length 1281 /Filter /FlateDecode >> stream xڵWKo6WH"J=v[l@ۃbӶZIt%zpH "@py*YYW\mĮ ~;@򇇛RxWIWPv;{wF (2V|C*Z1du5Zoq N]m`/*|7&82MčoKLAh=@ cnIQ5gCm$<ؐ-7z:IM{X; Fis^dT?6I&u$s<2Y$u`Kp0i8#.Q;8#X&FmѦvyfDB!kI >'K{Jv!rf CPA8D`z6̟=jt4K"|+<3⠁څ#dz>Vdll yINK= ֱ8,@ .z! lY\X{9CVՈCʄDmO*9 i>i(2?ʝk\t듡-,0O9 j<Li. "F[uN<7B}qi,l:08P܀6&Q>;g薦4y*,t= ѫ922/w+*Ͽ9zm·flPPBΒ,] xϗp|/ėK\Ǘ?$ Z"lyX?u.AdTG5nB1)ʌc%yxɋ$g8> stream xWMo6WH*~R)vbm$Bmɥ!)Y-Xp8y ?i8O Mj!pջbP'oJ4)҂uL,6a9'0BV;Ia 9YT855^0ztG2vߨyxvxr7e[^NRRiwaLO;/MMu`)<l %V*"&,ч'? >{DL2Ejdi-'OJ)8ĜKMa,3FVoː3rP)JUUmeP Tݗa%pdNwƟB)I4}z=cm]- ~7- HncnA\~ǏFw (䏺9BĤ+C+_YK[]vz..y>7j nݡ]:5@~cNZl]A+Ƀtq!BJ)v vyx8Nx8+ıxA+{yYgze8&L=kAK*S0z楸.id 6.{l87s-,B\n= bϱƯEHӚgJac}2g#z?B#D)2Q,4yZT$2wCt^(;7Lx'?qL]t(tv"2y1R`3|`"80N Dٌ`nKO&`3<"x|B!SY. g1FiPf EBo}U%1V%g2]A-!qaM\do `~&砲/ E/`A݀\9{7pY_T"wBOT8">m=bd"BT[Bu9?>+C endstream endobj 174 0 obj << /Length 1144 /Filter /FlateDecode >> stream xWMo6WH*)%ŦhAև6-Cwe;NZi7C $"62V۫Y뇀w?^qc4^^}{eOb,李wcomFB #)3vSn,Y0Y#x؆lnz[0',??_}XdiʼU.c.$%qCSSTJ(뼾.PYӼ/*g[UT]4ݢ-62WfRnhiG%ͦ._(\jGOڵe85D[, ".bCc*:)-8P3Dy3D~>-s{&Jգ^Ч:q…H8Јۜss.`n6 "8r6xNLϞqa,2{*S{D(S˻^hBٳcfM4lӢ sΰ: 1^bڲYY : \DiOiEsʝ YL'  =GoS V}4.ڂF_>fuWUU~Y?ڔv82uqyJE 4jv. 07{TI;ׇRf.YL HB\ScKDǸ:vX#I$Qۺܖm9*s9z_۶p9#t_#Ѷ"qf7x?̶:4K|}NjoJG*h$I>t\*nD%G6L_N,}# $R# =Y3tlP1.×?DCD~3lE/a.d}]nqĭ&"a+6K*/`›RBhZTo=[4eѶͬ_ 9s]jJ]4-r!e>ĞTD\.T{4A|0'AL|D>zې̲ > stream xWn6}W*EEJ*Їm)4h"@[,kK%guq6^gQ(@jx9g4D `GiI(!4;Y)t7Px.mnJ۴w ¼Ne~kHbhTn=vr&?<=;m?N2ȽrhZ[V+CUU[Sx%T@ %Xg_hqA: l+WNSֺ5Tpv\6K#01g 'd빬@&PCGǎT֮@܈p{-DiEupy:E^fHgŧ Tsb ay %f*kg2Uʺ 6=)<6ov[C2*0CB*v MQ1Ms>*i]{7 s+cN(2iv{ď)bqZu՝#͠jdKI"x?=ή_zw*H LIJ h.^2H{zc 2\p=ŷjw3˝δEP&zE質%ou59.xX,X}N'?EmZT?qI}4 [R b;vtሢb W77kg[.( GjwA$ ">ź'T/h>o삤HR7%O6ӯhL3q)b ^W"_;;W6*E7-@+wd1FlJ[:N+#pGCdGSI"K8@}$]d^8"ɪ[v,F~X endstream endobj 183 0 obj << /Length 467 /Filter /FlateDecode >> stream xT;o0+8U>Ecݦ@!(.m$PJܑ$Cၧ8H?I*AEe<V"ucKrJ8 zZ"EQJz]5"Zk>2nW;S#t[, LpJR-دz>ӱJ7NMdⷱgZ;lti tL6`;8q] ܝytr‰~lb}é`uߌ@( m RfDmf2ؘ1$I%Jr秐@H~Te!e ?1>7pT :Ptg~x!{zd8ZkN X;lZU^\uI.6pJAm' Ι9r[HbkC00ڧnZ{ ~9wfp,Jc endstream endobj 189 0 obj << /Length 1684 /Filter /FlateDecode >> stream xXK60zYQ^96Iil8H٦-!JtrG]$Mkypȇ?>Q,hhë+Nr$^=9FgtW5]Ff< K'BD޻ZJy^:$H8Ozlmg"4'G Ʃ`<1O8ލ'C`IdA  cJE (Ƣjp%Z/G_yrB Yȶ\ZoUΌ g`_[o;|!'STr-1QhI1{:lփt2--t8{Ih?͜arbaXG#/TCT|a҅o'uZHona$#` %Ď޼|O=%sF_tK'/Z= d&$$#izءOcȸk0yhcRjvj]m+RHŀ,HtcC=lgB(zy"NqXa4a܈( ?TĒ qM*\݁ jbg4 ?9c!Ϝ5TaQ6 K0rNsrmh0(WX*(ѐy^;W!ʕ!m]&.RǮc1mZCr 8줭(;~\R'"=Н0{8)qR$"}tADN%",IDoIDF레r֪1WP~U ӖZ5 Q%6zXwA;οMpW} M+<`Æ3ku, pܽ~~ PCJ^7J:еjger"'ӈ@šW^{߯ ?خA,+\Wisz-aƧB˶ =Z7+ endstream endobj 195 0 obj << /Length 1437 /Filter /FlateDecode >> stream xYO6ا*yHQzz}0Ynzxd㿿gMB(BD{bof<ןyroG٬XxW.g8?=IA'8{?\~Wlri;aZّDQl]՜cχ2 jV5Za`qepPIQ1CI$\?Pv$~vX;/V೹ ;up9O$ qur6G;;H-\mEݒBvd5bMk!5g-vjs۴jWFմWeb~{ ,$u:q"I [Y˱U%,Nlph.j~J|O n=J]Lƕx'A.@9ٙ_ԵDE.%n6Y/N?zVji=CGƬ%xU5عmƃ$ #>Vpy9EQ!9kQ&yCrpݪ,Z+'⍚<~ɻ Ym ZGb-"7H,FS)xʸ|sb?bϭjGp&AIJ>OF~aO1_;x &}x%4Unww M^sFv zycw\N|:ek[y⩢csK )9<8hD]O^hZjo7,1{ru$bAe9(UC֥6J9=}.؇́,AwްU`բvbpGHg$+E$c`NKtQ_~:m5W[N3 $JI:J~L4|7E,] D`ߙ17C=tlM$ae*;cjz >bKVoϿ ,|Y{oFo2vwtd]^n7Ϥm᝷9rC=^VQuc#gT7t~mH ,'h3!V korSqAD+ !~Ve:,GI](9tZ)7E9T%IlRvSϥ@y8 N|mQƀjI54rx ai{q ME;V[~ B.-XS A`l[\oFq\I[S@f~P]UCm|Svޢ3ЁHMkV$O$UE)#I.(Z(km Q Di}T*N 0SF |(v+ۤp*ځ|ARcp H4 Dq^6 endstream endobj 199 0 obj << /Length 2296 /Filter /FlateDecode >> stream xڭYݏF_Yշ侵wmz8\!x,3r6ߗ#^%EpH?]BһMrWy)M"Xx࿿InMo,$$~?gu_9֭yGuQZ`7_:M(WOeRB|!bM"qB2USi^@&Nb.,g{uYgUE#YΌ~pZХC {z};U5Y3*!;>vv;`Pv<(eP z ׶3kd^>̨Рt7I)"2?E8^@V[#Pa[z<[,9nZoWYзތ,:ʉ\!<ɋ47EY,H'`9#~ш?cD^3,Ofv֏Yߩg'O8]֑W*@}X҂"+tor\{ hOnx M}~cy?" wy]d.tqY7zщT6Iً &vU1ΔW& M"L*+[GnG`ٮE4FRtktVq& egY!OeLDKmO&zدׇ39D.8.4I$™ҍ).C!v~8Ż,N:]e\gM]k:xEI⼾ 7p.,ʱxC4묌,nZ3~Z=A%NJ$:R/bYq\;hGo=dJq1SU)t=ރD}6@ƙ0xVZ_׍dBRZ 013Ƨ' ļboR!Ĩ4_dפ^&5/)K–.3E)仃 a")p-v'<-A&03R,Fo~o5y<=|*;(η-\+_Lōjr(Ӥa*J?GZ~tBF'ݎ{0NbtM1̂ʟ[Ŕ4L,K\GxZr H$  1"_ݩЙ~ @Y{np6(q O4X " {7AΌ(@;"PtS(kHYs.< Xe)`j FΌ@vlSlщbK{KJ;y4Rl5(7q;vK i-ϕq8[`Z2^a <$',0eW~y&mԠ=6T_ieaޣ9ߴ|*NXt{x8k'`_C_Ky\/Pr.I>d^f+(EB^l7 ,#\ETWnnKJAKCxE4spd),68d%-5v*Jf?[ņ,̯%C4TISbVO#U'Ontt~/2!5*KF"}G&nq>J98,⿂ydcx|rM5=wD endstream endobj 203 0 obj << /Length 957 /Filter /FlateDecode >> stream xڍVK6ϯHK14c<&Rr`k]>>jBu^EtDNv &;_N~/f5N>ԩ>Ŀ|Hq!"~?)U1Lr$+9/c>z%.+)yt|젠\KݬCc|ʢLnf3ѓ=.V<#+J/܌ Dq{"MPXtw E .R^`#"Trl ;"e+  k4x ZR۠%g}]N(@4t!F=ѧ_F<c,<{ʫ\ hS~&Qڬy§eK"rBI2|ӽuZ[XzU:e7Su-owI3Q޲7%iu}\|u4WZpǏfp8%Q7c"g-_Gl;UY&}6BS0MD\/kp콦33^{+[w endstream endobj 208 0 obj << /Length 564 /Filter /FlateDecode >> stream xڝTM0WHiHXTUp6uJ,~-P$@9d:,aLdxvuFg$ XLUXPޝS3廙] ! #)2Zcfuڄ<'#.D$ͬ(RMe*3Y"4 *U%)'0be2]IIa')w|`P4O<eȷtqv;"1`ē_g` ѩqɬ]]ך/H=BY`=ŰCg'o/AL> stream xڵX[6~ϯ> TxDK &,ڢ&f*6mk#K.9kSgk&+܎\,T[bjb-"řLBk ZhLfh,p +ma67&~[SD( vhBo]yC?WCY5DnqFX$#gC KCNcK-* ģ+]{AnKڲ6Dݗ{may \ʆ:o8 ^  vG3+%HG6Jb]V"ڽ+W)E?[]W,!uTa][Rn d kfN=2yڔOg6[X";Ig%Z$@4A[7T`ʭ06*>\ؤPySp-?8Ӧt. Σ]MZ̃0d 50:#q wW<rhnFQj:T4kv}sMOaNޗbՆPlH*o w|i5Txuy^>m=Ln8}xyzN-q-50*u`cSѹ6g1PM&X @6t5<(l4#}2 hH1  `hUy8f<rko$\1 7wHgtQ+ HdIhpjJīYZI]8c<  WwrI/ٴнo]b:?Ɋvf&2@=+XRC:q&}C0 l@ x@G8LEp!P=3dz7*mi;pK6'{:]:݁;;8}ɿ0NyL3K).Pw6z5>Ywsh}%r*nE%?}K *c_-Or endstream endobj 222 0 obj << /Length 1413 /Filter /FlateDecode >> stream xXo6_adIe:$udH&Qr$mm0`wߔą,E0$剫fBfl`{_ߞ]ᄹ]/6bgqx=}߷tjAh]Lc7~-w?z۽ą Sg᧌ U$=c!UFV7=":N qŵـC5OWNA=A-FfBںП4m1{xM\_Mm<SfSUF+#ύSofWp&O6|UvG]s)RMsl)oPMĥ$im{%V0wR+$vv87J{TC+e gug؃,"O]z{%"<(ca.gltqe'լCbj-9|Qoa vyXƽmSeS:MK~k6͡)"kY\tP$v~<: i3'ACQqL t %mb- :̌!6*^X7o^+).0i9s ¹ytÀ!"kcՅX{J7",n<n:@|IVȘIdYAgͭF @jd%c~!cqӐ(J~-dzR^EeסAʲ $ܣv.ֲ& A MBkl̼\;2>Y%LY C2pṡLal1 ws^wWs]HI$D<j&EpnE +"W U?P$lE,o%#P!.lZ[ YGn/u(Gk.!9o[yN|B+p\Z"Eo'wi>`erQ>c8 c=O `e.(,LuCJ/к _n\\Sma H#%=# nrgs7q-;[^̣s#\坩tW`"G/2څwkFjd,~t|ZDy!UU^yW0/F^W\\^ڪ:>:tU xJa}Z}\kd"e3mi!}v8}7+qc mP OWhwNB`V|l~ͫ7ux/y-> stream xڭko6{~ D(Q|H E%^b6EmdPrl;ꎲ(mS b{GQBcFij1Og|>=wX|4wIMџ֋e۞YܹB֫1z6v#7rb!,/5jڲ]+/ t1 "'PPVU )35 c]o.'nǶLTdI]3H ??ulYW /fADwED AFkMO)*jx (^3EZ|1IZ'p-b }oA ߼E SINZk.cB*PBM)3]iwAzXE+V]B< xh@CnHAn5Q_75$<F:/I`48esL8y|cͷQ@~a)tEh#2ºJN6DayEo`8[V)}KGƗlRz[~B:^[{2-F*4e`(" <ا**YWmK5n20N|57Ҩ.oB󋈕L,۰IA  #xGfҴS*CBM(lۯ?aNxScCdG?JetO_Q!U>o6S$|_nR0ҽC;)L!/}` qf|FQYJč:{#BcomWSZ̺A%VV72CZnKqVg[Vp%7p݆=v)E `i,ZvKIHfst2chv>ߛ=̦`mTڍlPap]l6ZM螾>~YRBfkpӟ ?D#NR~hciBȪFŴQƠѻ7ͮ!(p"Hʺ$ 7 Bs*w*wr懃6y?(4:0=8ΛK endstream endobj 232 0 obj << /Length 1252 /Filter /FlateDecode >> stream xڝWo6 ~_f ]n^[6̗(wmXJ#Eڱ{.V j('R7YB.tḡ$4}$",f{7xU[=AǞ їRz~{RX(ŅǻqI/o\ +r/< ҹR,,: y'֜Mc[m"Sxt=P^mHvvg4) -^*ݒdлn7"XeBf;Q4,6LhɾL}l,Og^xbݙȭQejqGmm8 XAn&HB(c }shQ AԶZ1`־#+ZgVeo4"|%8(EH~L2pSJ j@>ʦ `tovStg1"ENQI?IxmE B%rdݶBG妑K vҀEp<1 Ҭ4i %Q[^Q;ֱ!fN#qB [+72O|m7yu/R(S!e> Իg(|?]iCڡkUK(R%">$ 灰'?t푂CՎ~wπ8{ -c"sT"1-'@$WESG̑v=(D,#+nbpϼ*1g0YBp8vemz{:|Ѝ.3"[?W1]B)ݠ/#!%\ ?Q̽3-e< qujRt|*֝/Pz[Tтl&-$ki٘ 0Lx쫧R}I[xSQ*wCy,k :i7v-E⏡TXl9M^֊`b* "JԨE6sV {Ǖ4w%f5kRXh[4Keyb (_IL R 8Ng9U֐s` <`U7RquoAS "%a-ϥys+*L=ȤpX6 z嵍"s~,sxѝ^y_ Ya: +b endstream endobj 236 0 obj << /Length 2736 /Filter /FlateDecode >> stream xڍY[۸~ϯ0RkEiS$bA#c6겓=7JE1yxDw Ze*"?Uq|}^omq3|{]TgAV|]w{:73ui7Qy_V^myKC^ǑOn&Sj;S?TUgbGj;&NXjXx]+%F(8 .H'!ڋR?H+#l(+uy1D)MklaaP:4YmTP6Li7Z^ c`0S8Tz⍵*#'@&z.&h} T|)?1(@`{f uIׅLb?ݦpW*V{eE=&wv؛*ڴ7Lxtxgp$I T*_ |?dWij[xkMɴ-,e]ڧ'PqК 3WF#$`W  WØ@!%#+ՍjĀpR,v,TFn?8adW@NlqײNx7r7##vq~̿xqL_ps&^o~Nei`Zc?%>\B-`~PI:|:x4mac_mY7̄ @V d2Oʔ m0#NNLڒ=fUC "k\)Oğqd=.:Kg P= ؖiMKB`+L" sP@gKR*FOs9,Lޣ i똗fB2*=t8b?-:0$v+$ûH<0lGpm8) Nf5vGˤJK= cg{&#,]~% ĉng޽^~WM)_1 9d/̪*ϵL8]Ax1@EO'*.M@)BB9D GIJNa(k=`h UZ.:E-U4$hE@ˡq4q<PH 'CE I %h~wwH{~w5čKGs tғEs g7 F>zhWdPJV9ʐ;Y5H/D P OU^}@Ή%qP\{h*ʢkέP aNUyx:<I+p$v@[qrFFㅁp,#r 4[H[Ȝ7+J\ɯU5M `{,` Cz @.i'x@g.sjFyOx攕9!NTkBE5p.@dwQ/a `k_IxDe-*5K gcgF 깭Ϯ^O4K5R081ġ1 2r45/ph 8,!SQ}\0EAWad:HH{]x26Yܜ[)H̃yuv.Kת`W±pa"`Ր;|1穁^,h˗E4w ,Q4W4-hoBM\BϫI`?rMޗd,I;a**D*&EU˕IS F\;Dz)y,oO6D! f؅ 48[WI,(x-e{^?-{k_hS ,rN$rbs308؃띑jO=}azj÷3C>5?j Do\(*BBYNrL8 GṣLzz Ě)߂8ױl> stream xڍZY6~r"7'+e'xjf8"%,ZQNr4FoNxп 8ˤZ W2ͳPVap4  v3'u[_{y<^k|^q^~״`-w3,}Z,M՞6axIx۟ṳQ77Ϯ"8ow 8?:M7(˟hvx.Ӫ=ݹ`Lл2u͸oKSu3m[MJZ *0D,רQҰ>'}NchѬ tP[p[ODfTCS]);Mm(!$:=J{4*Y*2; (t (0fJDɣchK5fbecF1ҵÓiGb9&c529T=i IuH7"}8 ]Xe?J-ڟCUqź̓>tr"g&'nvjvv-閽\E>Iwq(okp 3E M/du(c5 w jߑHM* $qpOrlAou=~Sj_VWmIx |PCz<m[M`ey?xu#ǐ.ެUQYڰ&K'T"{+Aw&%!7r,Z*a! B&V/w PtubР؍Luc֍LGaloj1coǁH ΞXBx!zkX_k.+$53úz2͏')AL>sGXU<ޑU)6b 3@J xII湨5J:J9K7lwbH.5G40q9NA݈K w3~LM"Ѫ+zpz,-DbnI:#Ӊp t7c vFvċY8/R$2#7&6}E0&IIg|20i7r\/X)yAy|Tba|A1sJ̢ W(&>~8$tR'dΤ8AH禗Uq~ۛE^"?91agDEfB cVQ:$Н I~]aqg~QvǛ׋7K줕RjFBxkCJ;uTpLk0= ,(dZjqZi7OOv>,wA'+oTAџx~3YMƱ5YkΗp]!ߙK f%T ~lueSe<VJɳ >;q,?6Di 8Et"]1gX!4vtF 0 tMGDd2ݤLITb_'Fj0o/N~Yc[ ?|fL74ͅLl&5ȎC5CU1.3̤.dYzd21ؒHza{nq8}S?+sHŲ,^Bn}пX_< endstream endobj 247 0 obj << /Length 2914 /Filter /FlateDecode >> stream xڍYK۸W-T5K"7o&7l\0$$1H-ϿOw q)4FߊnBE7&K]W@ UxkB\{o_fsp}RͿ7jmj$I|ߵkUZ{|xsUئ77݄M;~6ՠvg8荧4;>{-Tac'߆Ge.R'V?Ĩ9Hy\8J2jjY^3ryv^t\;|4@hs7 )d>O p"o>KYlNHGtVA<-܄e0T(Sp}D O0žΌ'=]t03_2ƳLNZi6Ea;g,?D)ю>Vݲz]ySJ Iɕ`YsS&& +b %\G5/B"4z}< h'Bm;poCO6ɂLӨ~ow! ϮH3wayr,gG) !5\37ahD90ic>cͫx݉_ S"Jw-]H4ʔMj8CWD UtaC̜;&ݏpP롏Huguppk$ DP&MyߩjfF\pFܓT%#ssdv<Ќɒx%%FA!'vGyn \FAN NՀ6IiwPp:MmD ԅD!O[vG>G :7-EhTJJl/$9i5XQ;(A_}"}r<3RbxkkW bւh( CIyJ<Oo䒴.DaM[-]⮷[?k</;::vbԜ7 M(JT:DoԷ!"hFSҡ'[@J1ڙ$P-23SH9ؗ_:ϨhE&:G)b|_kx y oF^0kZJH0DI'(z,-&FP\+*4六9Q/N~OUЙAv9*|DCqR!:743؋t$09ϵ2h|ZOB &J9yb2؃ml'04鷪{G7pX}KnMݚFIMin] ^Ƣ,IrX!Dsc$Z [r{E)gMZ&k x{0 移}߭"\Sd%~h3iZjnG/OD_8+ţI[@HSjSDv^xeIW(>dItB̈-RW9 \=FHQoW_nL)a 2d\힝Wē*W^6$@ jIYD1H٫w8vh0KprKgSSE1Y6u$$"X ))?iV/gCT< H"tW;D{ -U(]}l;=ł!&0ڨQvA"7Ⱦ$Ekp!`cAҹ{D9KރQ 4Мlt+eS8_~jpLYK )jIu5b RgKmIӏw޽aq?_fͽf;/| -> stream xڍYY۸~RU#-#o^x;Z6bZ=>}5JJ t믡&_tS7E쪴9Bjoϯ"[oOW?˲(UaR_y@w&I  <`2>.IAl~:Lq8vM^(I|n8P'n0x5UV0vmZd?7e* ϺX}UF36(&{%(cI+<详XVW\_ _Fy4^;<Nzj?V >n XnbWe%|]T|ޟ@!y@87 x vQ-We (r7VЃ@ dp bR[pڤ:L@xA}O+CZh{P;A6DݡGEnCHFfr"h[eOYIqcM^ 0W>|lߺQ$$50T{@"jG&ZncT*űB*#ir 5رK2ݕ O\ٛ ,y՛b`Mt2rtXqCVBhLc-0IZ uAtט>1񱼊jn ۞:a<=邾vI$^R3gA(l|`jL+eۋ᮱&#}ҷvAI'caD&R4/ :)CzQU<({W,cG9T)Ni/_j^9I6AQ. o񨒼*ʖWAwtv 2(3\I7cJ ]SrKk)wOe ⩹#P`w0V *,ȑqNh>/7Bj\<wNM %\jN˞u;2G5_Z<:p6iu#j=i$cNYJ2^:dǮc7s 0bͬaZ< RL@.1d)<۠U:Mismg4/e@`|ʅq(`6.z1dWZD:7aH_0˙p'(u^&/ƊZqM3]򾫁2Ogô%KvcgC ʠW \OkIoN=?;";Ga1i*;=&X!ɳ4xDhYU"wx+QP99tcQfb:/|!.5E'7`xPV{=4ʴp%> stream xڍY[sۺ~ϯ􌥒}Jgxq4}EHBC*/X.v? ~E_aΣb{|_pϿ d &s_:az(/}8.WSu/Wazt #/#!㡻ơ`qľE|̓&lOqo:HhKR(Oy} zn5;%^ƉWO=Mm{K3^w i R%zj;XUu'ꦇr>(N]:gGQ#;%F[ڵ͑FxarDgm%H~s4*JbXCe) tJ8b熶&2;.SGţ+36|]ٺᩅF#w OjrfhGK]ѱ`# Gbfp*^FxxR닞eIEe9744ҪZ=q!:]3܏YHxlIe:NAx)<6' ܴ)ؖ4v,дݒ J e읠,m zX NEס;{É݇>#ܠ-;a ~FZ5'*.Yr?bH+҂PMz`-̗?-c)c҉L~dR@&#ݡ7؋@1swM6k׊rqmE]0.WÈ#4pԤ - FD (^\@#D sĜpI.j[Nb:xdx1>~ thB-}H֍a-XO?pK16f.4d֪JK ui+`K\jI;fA|c$Ŕ BGBğP#9N8"HЋ0EqY"3RV*Kj 0F_?;=W:ypL5+_g`tp9|ef"H o0Ũ#Xltxz rN!c8eԙ]c,Iyenqa튤1U!L0x4"o(L`OV>[1LOث7QΫ @ bV ):ROH5̘/ j s6uJq8qБ$\rOGB衒[<rCr0Jf1в :f$B3jiE&]}=o&//kDaғ%p3l3B ‘;&^`/z9 Vf: j0+R1#KO/mRFj.-lU;Zvy]U H"z,U"GeGJw]s+>忆_;61u$eV$,E͝-6WJr8qs^W^+IZ8Yt,NY&ĜQMġ\_];2Ѡ&KO,_uÔj%YT/:'?Q?;_'a\k/L'V hU1p;1{Aw 0͉3Z[S8B#0NHC_ٗ٩ endstream endobj 260 0 obj << /Length 2905 /Filter /FlateDecode >> stream xڍ]s۸=Bg""yon$ns΍4! sTHHsϘbo@,hV(zT­tp(YDj( {-3 ' K߉cz_Aw}kVL[xd+sܻEk]MA$ -5̆l uluw{0Xa42۴J#_vY1P(`rQuqB.cO_ 6c9\?Tio:O-ژD0JAo;p ŋ{'޾14>)*b@0X m$gM'IX怑W?A!JэA>X ?k 8}k\E0b6^ EHK1+w-FA+zGϔVhm$] 8=fk-[ A;<-;(` 9zIқ H38] +&# ]t:;0mdNŽe 0x |C9CH HJj%t];̭p%aUC )aC)1ٹ˒#xt cbci$pr"OQ)FٹpDRM{!Wee|?JE6d=a=*]/},Z kXN &C)@I2`IβicA>?6bvfu}yleu'mV5+WiRn@j£I {EetM1R,-Sp9 #?d(M7Ke!&Gei!Y$! 2_Tamwz˜:\kCY'tm"D kױxnGp*cyxިP%`; 3h 2YW kX@Ńۆ]Bi{sKXRAUe-c9,i%K)=M_ -ɋ_*\6x-N*Űޏ#{SVUI iL)LQ'-)jci+~NUOx7< tZ`C"|s\ƬsPJ Kyqvlkx dRq4t=~|'OEh<rڲ9ْa֊W3D KsBGOka5!2dT/wܐ#uU9K ^:^/*vF]$A`3%Cמ YVs7X9K0eQQNm^_S ^yjO^aÝ&OOOSxYؑ ]#)cߡh,z9@k ȍB{J'F|SዐjrUoM랮DI~є'l;xl KD^3v,vA|x!A%"^w~ ]Ӭ6 ! 8 (PޣH8An2>3uw&a(Gi,t+듵`wʖW0LOo*EtyKdzw_/ڳsD{>6FYa)"@x7KgMH]~}t:-q[Oo/h QȗqD:%%z\ 5xY\􍱼Ʈɓ)E7\Wb+W*`.A&c=[ZSnG WojB]1H1 1(GWbJuV%f2녶O>MT pzXBЋk-ڃKBiK.ħ$s?c "_ DmMIkS: tI38M-Fb;-P p@;\q'YSYCg^/JTNj kVxX<]?<1D13%]/)]ut||":%,јHqÏ%M-\^">")Fk!G)>}d?PWQV ]%tqn endstream endobj 337 0 obj << /Length 3765 /Filter /FlateDecode >> stream x]Y۸~GMU!.yIݍxS[A3)1KIk 6%4@S.{VGCAzYJgWgYms{fx.T J3*(ٿ'gӻmݜ_p'I!&oV'gK6^dlAE Ja-KA("J/dά J@.r/P ee`ڰTy.l ՞Ҵ^jYVצy TEj[+ЂXM/CUFrHN[T?RE ]~]2pЎdvscZ5Srˢ|q/_??vm<`6vq~]!(I!o«}w))Ÿ/CwK:`4cOVß1FauN'֍}nj5^Wbzh9tG'>W`A[ӬKRdb^.+۫gyveI25=[@mBSQQ%e l𾞫7̙"dž5z'L[ѬAWtnmL5b??ZrB M `%e44WEr~Qka`jز/J%}y<ƈ8I2͊BAL)ӳv֖: SUOf}Ah<Ϟk):C[Ӭ,)əǯk3/w^dݗf=M0TG %*eՂUX/m3mm_ܪ8UT[Uխ-n\QerW! y1 u kx:8 !4GQ A!Yv$Mm1;XZEYjx0;8Я0-Ch`Eok|QnЇv&IɾcRaht<C!F4k yEXeSkt%ahN,;oйdh MB=UJR0[LV=/?MTWWnfz?I6B^ "e1@Jצ:M@bE^rR\_.p;٥WO&N@Fѣ"=X22{pWyJ.bz {^ \}6JX+퓫Un}q~U6/&U1%8d ed0\"즞nwM(s2=_8:!D)ChQiÔ.[]9]2MV34돁oJ8{dh`5t62{>(%d]ogvlޕ\2Yt(+ E Ƶ1pm)hSIx2nkl~4Y7Cx?VfyyftFa |Oae vh~Dm2~EET0#VT89-9C'@mz›$!ިdقU惎66͇Rt "•CW2t̴/bژ -i%ɋac"wO.=՝F@:AhB)>:gvߒC{(IVS501޶~Ħg gm`0eO&<&?&ɷfXic/=hdGLnvףÝmH_!QmB%rnsnYo'[JHQJ/%8h_ wG|b=)xbJ6`&?ڄ:C2ༀ(!vx?yfdE[?a?a?}D?)FL{(o\dMڑMLc,]괜o6z*ZXڪE/6Ww:N ts@-di/CKj*Ϥ5+̻Yd,+ /$fHQISUH>zLb@XU< E:z<}:8} AϞp!M&ou1ݹn.>lR>tjSCP;MW0i,lD@f@(>>[vIS^C{;ӁN@p:HPUAXev 4tM %MpH&ѓI^GI?#?0XgJ'g IԖ)S"=SdE1eY7Kg[Х"snǃ A. Ў{p7odۮޘGg v |{2n?vTDQ*`,T%G_s4AVZ tFW ӏX7-2Sq܌Wa#JB \;7Ќb TtQɁ-Oށsm}5u3tl3:rtmG3ͮO;@8zn ڑ6vs{]7?S d* uq*n>BH)̏xM!#=!Erwu`*7Q-7bکǎ,v0TQ@`I HQpQ.9 l/2RǙW`$ONN 5)D4z0eqìVċB`=_htw=N&t-&#fDSin.yBlux;8;sgTnN<]CcǗỹ)D:*#W?g޶{vKXSYRO/rU9/@ z".#nL|>6\x3RL(tL*+RRO!dBu][xID > stream xZ[o[7~ׯc9˰Y, Ih7ȃA) 5V]emN9+b&7ײ9RA"qaЂ KxKp%Y,ٕ}ny%9 ,͉5VB@X_a ͢SWW D D!IJqAŨ7z -9"EoQ QV)ZbGU%m q$809:s".`U A 6. .,F9U\6`iiFQ`)& )ȥMCo av]supeHLPsxLBdvarcV@śR/ l*4Bz1\HS<ݽr&/lSQ4%m#էFIۍrIǍ B~|nHQҗ<&'&_(k)=);zjYyzu3QE ̾`N1Z%$8j5ԯ'&Nj݅?_S$mX0K"PՐ.QbqrmP{kf_ BD4hnbxh w 6)SەRgB .qK}~5\'s^_o.)KS5 xS-^j)}m5 Xm;V<u?iX5ȈH||o TI^6|Ji1> Pɂಗ64bo(ce_6g$(cݭ"ϒYGKaKSkb5XA~ VU,sR5> stream x[FWҖ sbTmD[7Ն-;'` ̘%gwic0=^ ggQ0czLx ¥u/Wo(DAgV٧Jc<Œ:6\@ sU"42!ye/#4 Cb 9Oq(W> ?H>_\^Vpn@<dPN.qC3!n" N<*K^ջAT01$7^d&H&!SPtP1 +Ez_rX.^ >Ч68U}a0*0sEZ5;b2F-R+(JH23 %}$H41jNIۀ['62:rOdPJ@P(ŘNWLۀ[16s2Hֱحp]r}O d/ew87|l0YVÇ}Yuowfeu_eF~z1_r\mJjp:77nVy"6B1LYޛr'Tr}< ngs:7>}?G8GEdzU۔֌f"֓=bo4}ۀMu<αD<]6QmlVG)>O[m@~ռ6{_!$~C:ѣmzn g5WOĚfwcB.l0yy fDafVY?#R#oRz.̷7ox!!jQuMZfnGl私5lkSZ$/G.MÖǻ)`c%hN4P*KPrrpDU>q؇J CmoήnzYHJuf1cvt3ʔԺDlTc{g&KF;x~ w ؉e cv' endstream endobj 404 0 obj << /Length 2444 /Filter /FlateDecode >> stream xݏ۸W~XVxwIzm8$@ﮒsK,~ljX ]83<iI-v:^ݽ?zW兔3ZLRIj^ywWu$Dݝg:թ Rt:UB]/j1_7+|qYp:omԋ :Q'(%L_c?VR :kj(ݿo~t7yN-.ޏF$#U"/jV7(Jnb7Wً0 i!9P Ωg/mRaN ɍ0r!Fir!9rQ\& 5\3_v-PlܺΗ{{üKMa,NY 3r̢ 3s  U0T!{?5H]#az:UXCwt9a<0)o"/jCn{oR,:ҏ|wq1@B$А D__amMM/&W]*15~*0 0L10DU uwo$a&,On߅1R[{S4>wa9Q'$% '0$'`:ք~ܮ׮C2\O tnY0c,Cr,*KBq~mWRfC*6v8:`8B6$ʀ#hq 'w&I v$:`$B,$Cr$*Chu5T2ӱD_q*0 0L10DUX)bX0zk}mf7~c;}@]J 9(C?0$#Gko"SzS\mq uzCd|~lJYۏ#,f@8,4$20bGF|o6 s_^?~nw L)Mj9.Q ]`HTeEi5SSv-ެ6˱1Rj;r< 4ʀGz~;5ZttkYѣb2"jyԸ),# J ptiCMp|.n 08pCrp*LwG:f7,w`=|p0fHͿU:&nF>nUPIpUь1TإÂ?cI*=88DDVA#l3c01) T`PfOBIykec9.G' ؁X1$mi,ARX>Ev#@/fqkP endstream endobj 342 0 obj << /Type /ObjStm /N 100 /First 901 /Length 2182 /Filter /FlateDecode >> stream xڵZQ ~_E+)FF쇦gQ H}?v/xG(HM5I%UkTٯ-o=V#5ܫ$zFe8..:$VK$)O#U%QgA vҼv?x,uVuD;٪>&M\9l W'C.!'nƛJ0. wwG%!(11q)$I9`] ic!$!T<1ϭ(Ԓa\)5 CGM|ucMq[.䎎-6C ڒR5눫% O tFRv`RSAjiqŚc=9"RX67d͵E4%!KO6\2`<:u :0rZMݯqx:^kx 4ZX^`Fށ6!k, pKcF:&Zbz`nnBf*ҠL`DSQ=ՂKQ{VP$an{^8?tp|o?pCzWcz p7(rM/^tt|dN|s m!K*my W! G3X]fI\3Lܭ]Ť kpUȶ$6f݆B>YU3Hy]ԝ0kq&vIp@܈NFK-$W1NP-j %S C6r-z)d48cg<pOjS\ Z)K? ^6V<`L 5-xs1Xep#'W%X[H2m(l jSuOKyRݴFmR\Z񜬖*3@XNu8ieO?<m.6ˇ-՝g o6ίo+^H4h.Z'tDXv^v- 9["n.$;Ƚ^Ms2z{m-o$buɲw fkLE5ug\t.^ugf6bcXMϻ4ٕƓn)C] .rۭa/U6F166 o$d ̸9u#YtL/7ǺQEWA0,Noavr$%=] 汀m!~2cV>?(jIwyɮ- g~w,Ko_?|s,Wcz[e?nvݧӧ駟?|w#?l2-T? IZ=u~ m/!_B| -䷐B~ y-UۋWY޸?)wD {~2wDRF%TYV@N! O/ Qrne+foD"O;\ϐO'̮ نx;TnNU i vO1턉<[3L/ m䢴O<7\9VMo.=TWeb'.Nh >^p0S5ğ endstream endobj 454 0 obj << /Length 2778 /Filter /FlateDecode >> stream xKs)tO{L2I*5ljFmʢ2Hђ {ϚFCu3h4ŬԢ->lz\w/<W?I9gᵳw>o?g̙pe)5jV ^NN'(۫vwr9.ᅘګƼM_f!~RTRG4QUE+.yH.k2fxH]ev@OndV4$pe§GJ0fg? m&Ȍ**o/b3 0r \I'-LU\YX lC`ԜpZ{{h4phDpp< *$i[R%NP&lzصf"P ?H E,slz"![pR)2{^ϟL / /G>#+̐)G󾻚^m5nBP_AM񪍾\].42EIY2 ШO'4 *9_צu + :X1O_6DŽ7"DG}:)i;A>KYΆW,y&+F>g\^BHRUyȊɝ4-6XuW1lD 6).A9P808>TCG ҕ LӇF!UG'4ଘ0 pD88E}ڶ0&GNSUߚZຟjH 4ŎIp>;1$ӱ#t%`ؙj/'kC/W`V|ȼ 2(x2I 2ԧ)R3!wlJ}ea Wbx{1\LNq0\t\@$)\PIYrಘ؜jjvivz;| m4&x4P4 4OMQF@sKlå}i%ZnRUv@L+ k `ZEB}څY%Zz}3]`IVO!«5W`*BH>"JA8WrN,ט[ԍ]z!-J*1L0@$)P(%e5cm7˯5xr>73ٵڬ› %Qe;\6%j{0A$)QNmQv`bus' Mmʘӷ/<+qDVFJU̡ =r^UQ5]'WFPXL `AA#HR >DL R'Dn3R06IxExxA}:^ QEExA0^p><2$kI-=Km_ow]p-^7z`>' O7Bp"n#FmwIbPC `P@"PHRP>-. U]ɸCŰ.7n ;Z'A?"F"ABHB>eI EBȰ ȗbϋ7"I S &ג}g!t>'Z aNߩUL>oc(y( p(F(̡#JW+=RTD1z m+ΈN`1 &G{P O7!2At;v^ŲBJGKbL0&!&A$)&QnH36m;`u8[T?OC;%oC A DB iQu5>\ȡ(m:@Tɉ|m"|$f |hE0O;Jp=)InovaA2SV|CHR>8URRIϡ@!ߓi=/_U]'sE"1oc a Db ) c-6vX-&$ADykLY_YŤ4o*Dh_kYu%|iiY.6v._4S`MnUGD5a$$G߅+>og(a':bbJFop~ixXb-0n endstream endobj 493 0 obj << /Length 2353 /Filter /FlateDecode >> stream xKs7-y 2x&7'Mjc)W%{ci6|(CkīIֲRH-j4z0ģJQSjJQjGɫoa{T8g~u싗p7#)"x{oߗ?<[ѥ>s'zjuɑLqUU㋛vL)Un76j[/=s!U${_*6~}#Am4q:~)"GS` ",:FgO(DT B`¸j0)_-7!81'CF")G|~ D9vc 1$`$Hg!f98W X&ؘC<̛ vo~[̶>yy^RT dRɁ n@$Cd}zn8F׎b>: dNmo0 R?u`R,'%ȑUK""%ӓB%"'ZRnI3K3yyuO !@p0Err9P9 !r>1nr$G?;jo'SEº8& UHYR4!/)M"IAܸm[w;x^!ڍ96[͓7~9bUa~zuquT\2@ BcH?x Nl}"Q˞ɔ+udl'+t-优~ %8UTu@NVYnBvz^Ns3[6K;88#| 9 @$Ce}tȩ݄Wo} un6zJT $$>Tp0E` G!$"A!d¬OO!SמBzBo!Î!T+~hC/5^(9! A$C(f}z@ aEvۙvDtyH$;{JVNc0D2Dc֧0EuM=[/APu!ˆթ` ā( !>=U[4j͙JVNc0D2Dc֧I`M4t3xaA<~yiW%0Rǰ `鱬,]xߥc*> _gYtC0bS` (` !>=`-`??3C+2q !MKYK&Qca]{ÒKD[4g,Fr8slNh09`RZx2+}2I2-EN\(}&6A/g)M"ɦVqNɎWzWEj۬YitW0~7 ̶("gmLeⰈ.Օ.oۤ3LEc+Sq~ Ϥ'B?}Yn@X6>߯7~IǛ=1~ GCg /+D9_@0w0bY1AQEc Z3?SJmא5eԈpv^ ܹPw JL]Y.f=]43 o (`\'1xZK0jD2K֧ T{4/´nAOXZw!?rJ<7/ol63{WQۧTCSz0S*@Wa$Cg}z E\]b&!g})wTriXHIrMgr񂁜xp Hc kmk+zqΨ']DU)쀕 X$X X $,wNߛ̮L8bśP-Nbƀ cz 0 a sߡ09H'jBzM11>/3srKPK !|4 bӜ4_{t8I!>MHtuwuLW@ʣHt?^T&u3sJ@Q3TS=1> stream xڽZMϯ1pX_, KI y`1v p}^M RSV̰cb՛Z*rߐ*h)Z+^;Z/2FsdLYd):THxÅT#L#-;اrƈ(s'3f֋6+,FsQVxrC >RE|lx'}1:I vf>oLaipżcp)w9a V,bհ[ F|7cblZL ؋qL |<  BŜ )6-i[DS^:{<wLlcL &uNJ'U.}İbbxS+11ƪzq(ޱZV| OM'ŪcI92*C4O=mf3(2l ?]]TV3{E'\5W[b#pBjlу6~R&v_lulS DZ]Mt,\7wwxOw<Po8c;S Xl`7ٳr~U}_'L:`S>R6J#鄫mq]uR:O+NR!h;< +K8W*R:EWth)BEЙa|nD'/NUDtH7:) J2wOUl>j*䦶9uA[$:u,3;7N7R:unGgKh${|nљ*rt..wJpѴ|p-C&+ߏ`{Z#,}7yqxya!Hqش奦/LM`ewv`cDKemm kU['NNMzsݬ9cZЕtUMC|zY/%ݒSkmnw;RS򅸤GubR6$&n|3QV})BpTC}_i>U6-KKR.{j=B{j=ОZhOx=zyyyyyyyyyy7o$Hx#F7jOj|R~qvbAR_jm;WSyew\s>#rM'Z>J:_ّMމGoÚ?0bia|OF?T{T{T{wM=5RmKJ_Rd -T(;ƿ)H}R|[֨P=}}oWJYZ>2EƇ> stream xVnF}WcB흻 4hQM@KkD ұ>gTWd:1 Xhwf\ biOäTxZƳ`Z<3Zϴp9}/>2%zA;9 !x` (` k MfNx6PU P%@5.\fTЗ5Y":+ZO'0/( 0wHh:3a4"u"Ԛ:tsO1COxzj"tP HJg< + X(#ea5¢b*ys!8TQJI ETg-%2@%lb"PZJE+D)ef)%A&Q6IMeAyj%)(an9=@+[Dgo2:+;dAҡԒ QtQ6 J-8bmfA-őY0xìEJPGIFq+U%tvr.f꺉l]uU_gM -{1C6;ksNr:`6 glh=Q'i©іΚs;goHOٜVR6l8rTz$*qK^gE=r(?Z3HxC~,8޽z gl?𶨻A笩crsFWg/kQV >RG޶b'==cp~`n)}GZ!U(c׆ݤrqj^ 1VbưmFΏlVW:݆7WkcwciOo}XBV6M ~7L=g%}E0_-n`:YW/(r oB{SOÉ#AoX@?9O85-j겣h}j,@7d[ԓN ^Ϟ9$PI0p[h/]۔u? CշnUЩX};9v,&/ŽF.Z៘h-g;/ endstream endobj 632 0 obj << /Type /ObjStm /N 100 /First 862 /Length 1181 /Filter /FlateDecode >> stream xڭVn6+̢H$0ͤ-i]tXF =&\=;~fa'VKS4#a !%:!SI1J!ϵP SdM Pbr7cF M<7B{[j;{aJaRV 5kSaˆoRbck28I %Fp?Y^X"{9\-ZYȄ,2 ɶT d(,W8lB=@jS'f?S hSx J`HZHc ل@`"fsI(GNpBI(Q 8!y`[aF FR0)=fI&+p$HRD5 B( &@P%lAOA MB@]w=H2RTgtJaJГQ%t2{K,ZetW`(Y>+ɴܸLpN@fGLD0љR-Dh$ :1~ჸ7?ߣ|/>~\jڬ,_I屉] ,=> stream xڍPҀ ݃Kp`%%Kppr{kfާW^k^JR%UFS1Pd ee3!PRY:#Pj,Av2s9čAvY+;C#/@ (@@cB `bs9@hibd7rھhbdPX= =/3\flP:]?(ʌ fa\df l,MvN+\L2rE{_r0 ^#K?l<,f6@3C#'z#W#K#w?#7H(;='GK{g'&'K?Rd{%L@@;g'?t݃y fvf$abϬng] `aad@w ?ܫyT)~d0{Oci|Ar2r]>^V/!L-M@sK;f;ZtY{Oe eVБU+DEA/FN6# }{u'?JF/2vf _9?y4 -wP2@Op?? HO5͟>FYdcu2F!bgn"Z:IZM,M,sK;tfb~8ԟ*4v& ?Ǝ`h~b}OS `f9/'09"qf?D7Y0KX̒;Y0C\fݧ݋?`V}CjлFлzGMMf=]i/dy_^+{VA ߣFQ 7?۾K2Yſ u[ u#sG'Oۙ8:^ =݁&K  7ƽ Y=TZF%G$o"I=h;47$/^ǭ ۞?ǩL!,N L2 ~qlupFQǼwr/_ Ss czeqO\2gF"8:s79o$q>'QE^:l?=*؜(tp o0ƦDe?,xGn,ds -G櫄T('׉Iѕfha2& ,2K&.EhᅜH5^ ܔLARdJ -iNGͯ[h?;q e o jڙ7SQʐd nՐǽxz90S;$3wSVvj"=ȭ`=g_u7/}BZy 4ZΒY9ժkl0umՇBG~\[NVXbod92~DFzT\)u۸S VmvlJ 3-¨ `%Q#6}Rzɬ 7Mߴ}Hɶz+Qgae9.M#{}HS:Nfi I3P'zL>jPڬ6|uºdD]?uaOFx%:86:X:>|MK^ݻ;#:d')'w3 0)j(+[޼B\tPo!/#nh;!RPdlƪ5/2#l5('mŗB\CqPKлqM~ĚLtC.-[vZU, .?D&+q\H25d9Tz%WKAȪ9p^pm9' %kYj 6KxL C}Mz2{eД!6 EfӛO_6ئB "p0-y1\xoM]-4bLJ1f@ȧJ-zC 5Zg4eƟʜd![RaxV mi*nEVߜvC-l_Z?Fs| &rl؈Ug1׳p' Fټ઴=L1vc8fK~G]S-,o hr!8hN1hvn']5_VkdBs8z,c)kH2x&*w36yoNm'$/Vt\f5STN}""l @gac4xV}>ݼϏ!!4+f"\vz1{ :{ RH_vŮxshhm^;>էX ]on''}Sdom{ a_UpBd䴢nuv5!o@$1F_C)h0r~i;hAÇ kuò\٥{  i@*z[&#wC{ eF0?fqAkg #EV-}wl)S:ɝ1-pz)5փc:$?ȵr?Y@f+ !>Z) n~[=Kax P71WPME?F#.yR\p|^7w);5g)r*vM.0Ƚf< ABdRa F/άWkN߹6$.Bl<ב1 줘o]ȱC3sWݺ9겡(Q5;@]:i|%G8?sY1[}Wsk1YK3@=grФj+~J1{ExԢډZڄxF/S K8:^ݜ'R1y&"`0ˢr>D]7 ح̊7VI.Rz})vD\cx~tUh<({)vF3N*{܊P]nUŽSHP-@sɝU@I RѰ 2ABjlL$ }>%_2ʰmd‰b3-oR {5}A exwϜ⹖Tvw ihأ~Ib$w ȼ1>j·_JY C!W O jq~/#B@8~ U0z-ƙD: b;EB0'n)}nf%I>/{*YN"ܩ㗔|qHWB0 kktdT؟p-fˣ=RoV1 F=F-oOg - ޙ& 2-V;Z|i"-P.I^uKjԆ\W%blQD0 3SJpPa<h}ve0Q 9ѽУPE[zKr.2<c"j^EK$U3JDPB=8L;]7 ;AVm5LAM6vl5C!d+8}O-ofL"Ζ:(; [si,'W-̸UniMDog@ (ƈ&1alIF62)P Ѻ$7_i_CHa&8S"C̒O1 G+0.\'޺UE)(h˰y  9J*F8ʼe1*Qc~ Z;y߭GLw)=J[pY4}-Yqi!oðqP0gT[1ޝC67DŽAĽ2˘ ^\=j9V)9]א״ݷJ6Χ .ܥ~p6$\yrU KZFCf9GF^ L=W U=lE~R)K҄v"`Z;HK!-XΰTlAD?\2UM%s#H V#{ŭ~nIl*XX> 'l^RX >{cp̄(\l51|#(ՍH;ҙ,$jD$}0pǾ"V3? |F[PE{Օ0]UKUb%G3ϒFDN;}y ~o4)K-<@m;źv08h@Y^fE$\hgC2_7g__p~|ێ%Dq )>8Z.?a,H}˘:י`|#Q9BU:İ&x*s^ 5UfkDꃕW7ɝ2Jq3|-C%<^RlyDqZ5>ӻR(LJCf[8^R}DP1eB (#Zp0u0T 4d.;h^YSbM>+vlH%`/.sL)jL{5a- ](Jǟܨ4xH9-=Of81,6^ڹWS}KWԳƓ fn&d^P]:|&UY H>gs~ `6h3|{xj'(pzg|,`Y:e ܍؁˜[ndP>X@3ߢKZ-1@(ΫU9^JH;ቃfLP>xpi[W f Tc H,>:K-ż4Qa}0ej5;kj !jɛ'xq#_.!ҸSfeo2T$խʲ;\R@?ٵgJrq$mr5Ũi jT GѨXR/ޅUVoQk:πnT@؇<t |GJ[ͻ 2TjhbQq"= ;UR!_>`RS7 FᒫΒd ),{-2umVpvy0Xvvpo)?ԞgM S5Z%kMo ^m }-/s7cZ7zDi`i}k[W($ RP<-_Mع1TajD#h^ivx;sĚ+%juΧ6V_e{nu3`̂漢zbnG1&h$m !۸B>2ÆUndǁ耺5S%0w8٘3>$.Rzkv YCbثq9xh,af ;AӰy g$&7_gwY@|Vcsqw.%u R[gedX36bex4-v}؏b)CiĜ ZHsð+-"|Z.3yw*&ZDa˧#Xr0$!j :*N㞻hgfJH o,~P|@ؤYe jQ7~4: bfH`h ӖIjw*uE2/eCiń=nl4S$ tCis[}X-fW8%z@>sլrLn =QbB#jA?`5vX]A@ӚlZ AHB HځPwqSa&S;A,DMtS@bnjbje 6}wzúV9PwuY-89CR|y"iBh;] JQk5RQZt1dtŸLAOX3^D #L|ֹL o[LxM%+ kL衟%CnL|DB)gٺ>"w|Xb~xj9k>wBVnfDaPBIiy@2o'`zR-fti R2`25BsA:1@o74,U&mBCk Pq㣑D5O&ntIӃ's4Jb_~/dTQ%L1彧Jԉ.d^Eډ \AG`\0GnU},iVcyW֎LDf>S(Ul#0$?3GdƷS+YVe"e=nOhjIT[PgVٹU͵"w&J+  ~YȬ#FnkQрF ӝ6ˣi5A3xSo7塿×1ͩނ*^R\tt='9$G %7*"v>[7]9S܍9u4TT|tEhjqwgtV^P;~[¬qၯ\0<E--lyzS]8~%EO5jí60#kQNjElAT:xTE,+Jv`3Zyh z1YJmg0g B[ zVO%j?1_ #Ɔ44oy͑ASެ;~>=.U@wlMkT}{᫄jZ\"^z#"qW?sa!3{cnX=E4tָ*Pwj9g"-x@=ŞTM>%zD-(߻-\ [=bsxCDfKkm.r(j7ZԟQYX;)8-K]E_/R隩KfvTe:TPAR:O988h[7MB@9vKKnޒҔ&$ꫤߤ{j S0#gv1>T5#bc6 7<[> g}8RC>|W;"/}"΀VW6WfX7|.OvwyMƢjxD1D Jy$W~49 53%7,+UL$&%c׽laji4b[MQC B)}z&v!hLhf[]IL25͋zsnQE^~7VnO.oM6]^q+:-* 6ùHy\#`9;TւKȪZԢ}M3+m ੈm˽KPH3/? ЪED7`<^{13b ֍;'mhxO" 1s.rIb DYm3W>ZN NKU\p{Ο)A/?PsR+5ʵT9nv3˄dz"tCۧ#HB3&@%nV^onz05"3Hu0b\DrcCbׯ݈f?xbl$/|r;'9/щ͛lSn.}6/؍6Yb0B\Ҡ=o1g*CKhv+x3W]{Hō[G8 ,g4a.jtМlbM{e*yL'w]'g^d/|^|"Η{w0Fc<2/au`ا/76!S.{I9~O ݉/et?vQ[cbGJ)̅NNy0&9Hy Rp)/?\/3å k}ߍSU(<uyd?hpeI􍙎퉯B@.wDx+>N`bGkHg( y[6>+F$jо!&2o0#a;t`^SKUQd\̂dLri]0lit(W]=RݎX.[ j'૝Tl8~C?KƘA:E)wnmRʎZX,WƘNH c@c?Kbe޼L /!bYY ,Eg{*j ~T\ Ƙ-89]8"u!0ēq!&No4 z}ә y~UռvuklM`|9!i]Kk"3qG=Kf|].GېJHBuaHk5b-tJ_>K*ىe V& f"׷=S)=׵FzP޲ֈNI˂MNhu9t9l9[)+ON蹢~QTrJ ](, ԰iH9 P4 ^]nBɛwTv`~Hb]aGk:ͮ0ܺ>d뙛ERrq7-}*~`͜E9h,VYB@j)A(ť& fT`P(nzm4b.(gOvZQtm(-R[ffM:N2evUH_<)O8t4*Yuwv0s&ʐbL ^ր8{Vc)5J·ϢvPco (wQ,#d`%t ^tUC@-`O􎖬8C@qØMcHK1!P~MPd-&թ GpIJk!=>Mhv{%i"PI}2LUr6^/d.DGC6()uWaO̐8Mt1o.rF]b`pgediQ}vѲeY_?񾚺u:G.\:EyB-}^{iP_>뛏cqxνPO C0q80!!Cm|.#. @T(aD$ѸC^ 1[Ζ&&/F ء|+af hq#hĿ5YDڼ>.vL~*/M:I,Y%|t!rm#@0$d|0qx;ѐ UIM[WfǷ(!qpFBy^i1fLy!]Vlnfl.Z|:tM`{-(ظb/* ]@+]tJ_Z+!p|%p& /)LǗ)I}-L+1Qn"/%6#`ڊ0M7A(qfR +W: 5J*$jƀ%'¾;LvjQ`R~׶$1gaзS1,Dpa z-h?Ϊ8YHr*kFB5P*_{a'OߟWKې2[/k0(r"wsZI7#5 X9䓡n-g(e>4\wh(-1p:֛QR"XkŇ QuJw<թ5&l@ǽ#ۄlJSF*"F (`}Z_$Ph^v"=3~ (ƩCOl^T|=p.t*\*?9_J$Ő=1CJ k("k1{$8ǐam4꧅deA F/%\Z5B9m/&ά&4DD>v+V4R{b->*n®0C߳NĂͩ"FI&HTL"$/34;nِT&>nhGPqb vOoK7 БRR͓yGfwDF楌:3.=|KVgw(0C+Ra13-e-D^ADO<;OX悞Qȸݲ4'_YFbZfg z,/3/-$w[H͋^ LIyڞ>$H092tի Ye4Kj{We7~*İ:y$_Lbpfu'}Ⱦl4xj+V 7s|oC TXUl ~::SNB?{+_VOVL_Vmm%]cHX ,3)} e葱 `a$ATG1qSDVj@ć5^6"I5YĐV;d/Nt*F n뺚j͗ft*|O9˺0yO_{uW"lԯu҅!rw*8}&QUـXDYd]>زr M1VV|ֿ{Ts57ᾚ(*ʒ+KFN$ĜOU}u)!yYP;Ɠϊ L0ϡXέ*ճ s^Ȏ]ńb d~ d{;0i/7K|5{ü_mycIX4qPq{3gq'.uj=QʭW8~r`_ K(•1\c۷O]^2!+ Rw;O6 {p3Ne`6 mAg'=!bG^tk#Hgd7uusD(TERѷTu#ˉ;ˀ5T|D,3 k5@k$&31JZw7h `hǑUAEC7 f @ɯcA{ܒ1BUp:&!5= zpNJW0YSE2#[gQA>)|\6<:W ?QG\ˇ1`F"6AK{&_*@1BYXW =_~ ܈C2!D!g> W!=xHO*~!dOЂ"*\ukG)@aI)0rڡ5 DP|T]Cp]pؿkz\!A; Ic vwԘ|h=K;E 'aUZ_:GTUXcy-\l0!Z򲸐?y:71!SS*l@bg׉cN]A6 X\zCO:Gm+j08\4nQQЅ@3^Ȇ6ݜσ?PW8aaƾjw{'#3(E=_9y96%Qv &?GD endstream endobj 875 0 obj << /Length1 2318 /Length2 17405 /Length3 0 /Length 18751 /Filter /FlateDecode >> stream xڌTm gMd&Nɺmk'۶m6&v~߷֪c{9PҞ ,- `ddgdd#'W47GG 3-PC&ka(me p00ع8̌\1:V@;8ra+k[#c<@O` h5׵H->2M.ޚɉ^Žֈdbo m(dt-FGP46BI->\, q)wk忌e@ wsLL oXoeakbbi041J;t- 25u510t]@ۚXۙő0mji lea>[G]fVNnA&0pfP4qCGf122rs61_ ]+pp~z?:@*11 Lz@#K??@5q3~1aV.~bq)Q9QSRHFcfc01p8&ODqKC+׿H|t?D=^*fg k01bHo= &.gݐkB Y_džZ&v&@Y{} ^#%P䯃cbd?78*vo R򫥾_еuc0f66ǒm eg0%b0A? qq0D & `|].}d>q~>A| +AȮ}dW>AU>tЇN_/`Q)5L >7? Rqg :#_z+01o_A~ThA?uAOdWˏ՟b>GAkaf~|l ?noG>8#LT:lvG?>-MidMr(/d]pu+lq@}y+}jևJA<'/3{*TtnKmOHTwC(;_)o^ݎjcZ_Z''rk`_mܕ}@;$3m8dzŜkWF+%_•4| fɳpH`.gof2&މ$i &H`/GJh7!ڰVw,Lli#LFm +depL2iɵbٟͦ2%ĘRC&,/fqyNSƼ{ D/2e٫w:#q<\zLLY¤(8S"f2&9MW/G{7+ 4ڐpEzI?_@\Qs_4(VNE$rKtYBH>2+dW JZWsT&̦dtSp/K=^;U4 dP!d>%^R]EBWyҬʲdu]Yvc}}&RG|Oݔ~aG}д_iFEYX*Gp8O!O[0-a6t|d:g;/ ԓ2 'M1L_wuFl˥"spvkr6<73u` 7ri-+\ODOރam%t)HB>⚡"~,*UDE[Nˠ el8b[_trǧVr6?1ƹ-jqEjJ. foƋ{wbS[%*P!SO#bZU,$q h.e7@{\Xy]6"1 ~%Dm1$)r, kr~E7 {eϠ2ыSs]('Fe $@EՀZR': lԻ^{5$ {d8ȆR~Zǻ)9ԢwfrMlRT]-+#A%Lb :ה/]cdzC\ y.kQk]P,փ:7d0~2Ҙ͈2&gR׆ 9 qV(ںcęB5o]}5ڰS KlYs @RDρlW^jcփ QCRtx}pš,byYZ|`әt)ޫN*D$Gkܠa}n˕qe6#ɅîVh2>][IZ&6Q4 h,aB)T㠐?o!H*g_ں7ϔ5%7(c:kqc*R^lo0%Ye`yKf*2bEw Oi/!T/`.xm܉!/U8E9l# ʋ{Ƹmita" y(rc/1Z~k+$,sdǽucy?dO$@/hsfY a#hENx_ n'dZy_ ߃ILU![T_m?-ZQ{6'BrH|BmCB $3zb sǙ#ᒝ]:K +PCv^v#CXG*)Fٝv1(O\)VBJ(83يvpwI5y\$8; Q Km$ԘZ+Z׾'7+8 L;L$u oxh>hRF/q]27OdȩTsg>s.5O+Hf獊4Ej]cAy(#oY!,ԛ9P;VrnSL!N^-$<Ÿ]{ v|׃LeMiG=Z? I+QF(O'놬bZf1n=cܫp0Iuot@EO#>sU/Cv4h^!Ouv) i.&USoMW,/F(yy롟=W Y2Du52l 6.yM~bYjO%ʤ̆>Yd?9.`Q1'ǯ$쒑"?Nülk:*wx;C΢{ bh W 7QM[֫̉~gFIr)˜=Vi;-Z&2!QLv+|.>H!2gUKIPմ<9ǻ LB?SݰRQcS~VD019t6o|XC.њ-7 [ٛRDL=o竖 xXʛ 6)y7c9KN;ۚ# p֖׌ۖ0CS- D3vm7ű!SɿGMjKjf۵:ZDLM#MӖ%톩WCq By1 %H2؅9i(!xB}2! wfnݿwk},[!v008CVe~'3#}>h}.pw}yg,#2V(+f/WrNuً`hdo?Q&:I3#+|ҭox:?)Elmט.gWΡlɱRk]vLZ`8`xf{fWrP I`.9pO .b9~;߫[T'_QCKīqR*OZRV?7" S2< 1ɯ ֱ{3w¨ؠLHH//_"t* _lN:6c`7IQV;*v>c;üSm.u? ?GFR'ph-;a:@C޾ۍv ~pwR&~- J\+ILhDUbxq;7{a>e,ʛ >xL2>2ʾ2oSkDec =ndb_A R OD,#:y‘4bʽ!"İ>+7zؕx%?NeB*3ɯp`@?)~6 fZ~p92\*Vq0ɜ/y}u1lVx'Y{7ҹ$.v:x,O2hzUqѤ*4 `֢}an.W ebU#[e6E mm[k]Jig/-ײ0l/GxBU yps)E&fy3.F Rũ|]WÎm˷c/j{o]ټTCo櫁,+>AH} s- SAVቧMvsͩL#xsg"BPH>J0Óy Dn{d"xCHK 6qew!FG[y`es*a6+@c/;6&+Ԁr,ײkj]9 P'vm\mדsӃ{'=|.{\S“B;ަBY >;f[@gRQNX-z0P)h M]yCPAj#9߮Pt: 65 B̘UaИnkW SjFxp o; g{ٙt{d!M4vOgnSNDb| b.p7m;뽑VؗLB~HT[m?gf|YƓL<~QV # s>0zQ b!1싇?'HjG1Z9IR?]/vO+W0PLJo>{qN)'A%j%`}&Xo \ =GehmsK"Gl#a;ܠ.t$Q[ã<,XTw5vCͦjL#"{{6fF\`4S~A~<'>jliF t&~y>y}fHc:cYx3AZI' TX&4P.JC;BPDNABwqS#d qA; qa)}|x^sd\L,5c$vgIՅ"BS0ѿ.Q2=Et[[$yvMn:7㊞1 3ONIozT3vjZ',9s % cx:,_*)iE3V)Dk$ܦ ֨=:Q_[0boYP PJ b_S+3h'~'gkL;4$,U(1jDsCy B -Pz}Tw.Yo-"-2 )|/ i(0%ӕWEky6Da/y4? M!a{ּ~(*xan 1L5"錏wrL{&Q4M'RNS=1]FA߶ܠ6)9l+ߴqE7(q}OzrD%Aq)W~ZMݻױrS( FwUGbeo qɕ =IO,&4\݌n i'CJ^}'}v/uƌ멎juu4IW2fTU9|an0we:'e#u @oGK'YK_k]U{P_ƯՔ7] ˻0^[$?(yjJMoܽ0e޲Y Hts:QDPދh#K}Rk=|"a~I!S-MaH=OjO1l+JϒdJ V'=gnr-u!06fћ+u~,|w%E)0zg?R[}aW: sA H+.,%eg_%9F:I1r% [[>AV(8&fn )S\Z!J%ݚYu ],Gp'.A;R?ZR; i_ Hg5/FzѸSms69Y)jg63Sp:ovS oS'YrDݔԭP*GȌq)W-#g| I7ܳlv@?w3w/eAG䆞u!nzCz^q϶);5ݟwU `9 }967 nE]Xs2Ntש#ygY{}B+V{q8,>ѰǤҵhC4cɪ2nfݨExjK`1e[M3b+=(±o5JV_{go ʙ*S¼qr 4ɭ\! [4V/Lq7W]F| 92 L|e8e򏂴hCI17V1o …W9ЪUTo2 4+mK!YR'u.(50| I*ZGOB֎O${cżCǰ/LuŚ/!_3^LĦL;ԡ%iaS}D*33ݻ}>u8}֯:d'"FErxKӌmcB* z؈Wb C}=KS!(Ja @g!:;@/=-b+^04e}VzG6g=a(YOMfw1-n!ׁQeU԰|q~WZM12 v 3;{H:P/;|YW`ϷO /ROq<;ocDbrӱʓTuSRSY%zRxݺ^#RRUä,}#f\M{pEC6Bud)7KK+DDMvLULEj m(V6poU L!_v+;AGs!&ܡI^{0\C„E~D!Ҕ@!X):%]p$o>ܿ8b>BI[,I1@xtM-;/R2PԚftsU`D0cY.r s}e b ӣ+Fˈ$6D\-A@ ĠmH` [#LQuDA#U4&4C{b[4"b0\Iwܔ;{('g G#p$ܕoR(, NFJqӃ ljhX4pß}KD^!ʲvj*c+Of._Zpm3剞K̅lҢZxMh,t=A"E eRA0~ǥIF/hz]]*)yXنk3^˪ x [/QQ1ۨ( IG]zz:t xUK$t :Ѝt`[d6">JXQ{Yq=fA݅zUbXw>z } l' ^YٖG:EСg2ݹMuNj(ؑ^ C^Ƚi?H|[naa7ByT#-qD>C{?Nv"b=gewhBcob I[ 8V($4OP {ě-b=mJWCق7Sʻa]P|I?u=g\TwE4Q!zel[ J.61|Zk{4.Ihzp.q7rcX&k2@ ʗN5QϹ$Z]:@ciEOiC8wĄOW@ k/~CY0Mf애3>WA&2UtRww۴(~#q3iޏ Љ# :d2K{6݀O!aJsz' 0JkDzzB6x =k^//E˻& ooZ:s:.kE`\'j;0Ĕ^_7ϜXt5H10IW~7;djBF/M? n#" v5.!(8R4F菏VfL[ qH.o6AF>ÏE4k&$Ј$ch'ZO~_.@~$x[$'ɵ*`[E{/]1cCخUv\.ZʚX|zGO>A Q)Ok2hDd"тƩl3LgD ]Iұ#rC}L_&bU\g+rgsW  OZg iQ([QI׈S2g:EA~MEMYlՋ#|\JXo\T $:PP5U^#vo6I5R ^WNMiըR廨A-!HE6e# tsR1 XY&|d&&W!/l/cns5>."U%Y䠊ED+'$/BE2yJDb ;(NEn.C Fi8ApktP$*R.#zV|y0J`a=/` 4ܯzX12e` 1̈́8k%ߔ;le "EBʕԌYYZD9IM=,~2w NI T B|[@j}Tm97!TcUT)dX.K,²͗J,c? ȪȢǮz'LXXJF]pcvjؿ,?YM1T'T^NbP|&EѠqZe=9d-Ӡ9/ ckk%c3},{[ޝ1RU6kTG>R? `8`{UХIGb6y1M~&AP} !/y V˧N6'Lt~>< yƲL*3{e&%bfO‚#~u eQ})(# A]ZXL{ I"g\89l÷G_̯&>w " ?:yҗ)4ΰrH*O+pGKcT.XK)I"6ފ!% ?y&|u3?D=PvǷB#5 `tUzRTebe1VmwGmRg EKYd lDje!RW^plO1?5ueiaבGG| &MJي>YOS!+=&X)+7Gy̐oL_73GC-d}aG^s:a{HOmg[@y //څN*wZfABQ]|AbTqE0⒤&]yVO0aOx)$EƆ~/1IcI~ί$zø; iEptYL v3@BAri3 `ZjxTjgԅ,0BTyrXArɑT>7*{?V58̲61Sv 9B xSܘӎ' . .A2aV6BsWv]T2~;vrcȮ1_/Οryix{"|:,_ٌgh._"^v]CwJ~ YG'Oi`::,~YxkΤ\2ڄΐQ|EK–28] aI43̥? س e?fo977͞UzTQO#V.0F#%Od / ADQdPqlq |i杽ww=;2j۸xU3;z+\R ߙpfWS> rt}CΒ;Fi^ '|Vi`mg?._i;.k1jPb/Rn\;ySXfZ/[鮨h%d0f֏˝8pU_}y`p{~;R~h/s=D츹OxSlă>ϭ9v]FǤCHo~>.m#K/Ul<-ӱ T.gλ!l'a/"^vo29/ eaK,Р"Spm^P?X'^LϒY=z4Iobx eI~;, m i0K8 =*sT@oJO~׍n21ıyBx^ɩ.OZ[&Eo\wB(idUk8A4'O? %@` _@l+i|{K-0pBI<:~C ͞ief.v{*9SnaQ‧RӑX *†Ad<`4 gH)>sZ;g`<5{;Ro+/kFP8Y" k)k]8Ol["Q%61@~)*r0cB$g%k؊J> ˄kpA䍍`Ԇn dۃRW( z[ϧzWTlǶ?_u\4B`F5-agNl/Y&,*駕 ~[ ?R w?ҧa9h߶ ߞlClZܟ;i=6?bEWgF4&F8XVJ2ֻ$g5|,94%Dd0#OW '0f6?3|zyr8o:Y~\9;dPһa$;rl2l;Iwb.z?)KU}e 䬒R X]5UC& S1x$+7G~\{n'Gn//ߗԙt>E6[9ű/{_ؾH{>7)`q: 2QX;1wT!'FDK V+JnC4N?g Ϯ05a{2Y혧i*V*Zؠ`mҟO5GH yҩXz+??i¬hƓ8k>ŒM^S%}TMrO $wu Ʉ'Ι?E|=sۅ{:]\%XNo3|@Ne`=,ҋFB]Ö2yIBWED*s2 ǁ׈\Ia۬s^-WclDĚfKP?m  C1j x_(19./jNW8). * Bu΋♳;:FQҕ)ζ\\zCҟQ=Q/ HaM S?&Q?' Gf7ڏU^$'6aKvL6>]̔ 'Gg25r(gCЯTN >M(oX`˃! bOn+֙5Ӡ|e1L-?@KL_כ}?Kv6Σ8oWkzw0ױEaz=V9o}mr&\kSiIvSg;pF$;? ߳ҙ'I*FWڵ8ǕI° |=#j_`dk(sJ+MJ<,T[n&F #P2(B9cSr]!/tfY9DVsX "mҿjB/@9oJڌG}'ÜTuI@x!X$uQqQ {1wRnǥb}H 蜿v@݋2}#2oy.rUQNj)6GV7PJ񛓿l0,&xH~>5`ٓwr g5A`cYzͤ2[LU/3b/L(. ϳ v ~-4QזtRr rB\d{WZ,ܸ7W.49 n, %z{96A^(K<*Y{,iygԿ ϼ?P}}v%EjG@!|0bS/ktc2.\DRŧ)ENKi ~gcQg{i!pRxT`Rj4ri!Ӝ0rҹA?GD G'{]ISH=]oMF!Ia(>,ՊfxΉ-`fu'=_J6%\%mJ e)#pK<7L%LEs-qM c]$ԖA w ltŮ0ҜD>lF蛴_=o17>Ut$을:sѼi ?>>F/voq#` Z!\9:̝t݅Fĵœᄿ&ck j} ftij9bZOa^MuJCnI5H]u  E*?w!b۪s)US n#rWQز,ttl6"~\[z9dW%ͽcx'D9u*mߨ W+r endstream endobj 877 0 obj << /Length1 1461 /Length2 6774 /Length3 0 /Length 7751 /Filter /FlateDecode >> stream xڍt4ӶE'` [h{=ŲvEtQG$.ѻ(EKM?w={f\`}/A@UP(@a ;@auq!QtPAj! 78@>@HLR$%"]$J 4 h PWE 9W $!w:@ -9 `\(Ub'pzPW  " 9A&@0GڢA.PWLu`kt?N $ w?!~'`3 Clap(@GES_@A08;" a(IsF H *2tr"P$S@{ u;o"qs4DAՕa\$((PP} za ưvF:l1D0[(P.nP_ "@``jCSacV0b6Pd$- i*拓-$`^|] 1gwQPa: bs97Gh#1; p# (y;T?{ , #-$F&Css: <,a*0(1 c Ly8 }tav|\\1G!e %IaQ1I%Yv!P @ Q/B%A\XAߖP ˜vsq{q0eD@P0'$X*ء:RѝmH7D( [yj9N?#}QLVm' S_jXj=EYT6Xl^~>ž>-VqdK7cH6bY]>ϽxwN7*4B[*ߤkߑ0^C1X=y/k)&h5"P.ѢQϹE,w򫝼bJ_-^,hL+ԋFmG2Ə 3 T4Y3w7kKd ^&"\} 3xzݜ[ڸRj@{jdV΍rSiqCNbw;=}0Rg#zKkMe+ʄuE/2\tYF^s}g 'w@D#EGQm`ڊm ] (lf`oI~@tT!D>%ŞJ*҉: ԋ675v c^Y-߃bBxPiָUtC(Uw[,wQ#W{GTRuKe PX&>iUG}F;Swl....TKLt߃]t|!;14Eܟ[_Ṫ%o8O5쩕-#ͭ2+?>Ԣ狭iU5];}6U%\?(|ѱwԴ!,gц" ֋oa"w80F]mhqXzW_&/6EE eCrm"mӡ a&„<umV`s+TN.P"Vfq>Jȼe@P%A3ĊwˣM޼p׬q+^{Y؜#G2Y:xsjq u]&q9:Z-T3}=O]0vQ7_^D}s#)@:]֔D_a D(hYY$7cS[%~>MP#q9)]Hƭyי !_ iTLĢG04(x]yGͼQaF388hQ6%Ґ#Gul*P qw:z/hexR=I\~#ϕ M:ɞ,G^ M{ڶ}UPġooča`;Ii{FQrmnr5ᑃ3mMgO N̻w;G>L{?Geǒݸy`Euu v_i% Ba"DN'qi>sdScx^,j6!Uê>%v[l]΁zɛl(yOĪHYq;-VǼSHqdҧ&#ևyL G4 IrK+tjZwH"+k:tEչ#qrKeh0y?4,FZRq:9riOhۡgK;t2.B~ߠv[2ػv@ny+H]'L5nzLmݯ{x\)S s2#Ly‘OAz $I. %7; `7ԁr "xKZl/kѮhRޗ"&c = EҎ\ âúffI1?$H,N=LϘx">Oy|t0wCc %.7 .N7*旔)7KpH[٭(T}{N|-;Flņz1JT-@ ˗C2[eޓۃ>YZ@LA2=XܯN޼b k} oiԺLJzdĢ٬-m%[Ӷm} zlh?+=ج<$qx\mI+3J\\R'4G&ط\*b-|L0H%$bD#GdǑxջ 6YWgӬiglOxT9PEϓHFTjVW_僸Y[t6֨Eҟޟ21X"j}縩n&&(SU˙bMVoC:+D(]x+["ט*ROF?&ؠKU%*sDؘ8/,;\_nSD}Z"(obTuEYx֩|{sy#&mT)$ϼ2&ǧq qY'hŠa,gCl4XOXgRnLW )"Tkw]Neحpk1˷,/H =NR /;t'VԪe&0֑Yk LBq:2Pv^nf,/& !/J`/#K}=r"Cغw{\/}Xy7-r!sn-պw#Enl?mװʤh=bJ؃;f$Jirsw-~ ̆hsHvjE佤Qa-Ee7ȑie+6'9KKVEHE2֬(P&~UvRHΐ]0q. l"(gd%RD~QaG e-uu [jTQ)4xC۵ArOT&,Rv VkO>žɽt [,^}^=0'y(>^U8=ITwngAVuicS?MEUN''AjUvDB{ϻ^uv^{ea<8t.'lo]SţNֹ޴0µK߼M ؎G;C)H2Xљ޾"x-,}C"^2d8*&zg3d6 [\]ӎ6LS'd tRmi5AkkIKK̄qp; bv bb8eF20lAjd _ӾXWW'b)FI'a#޳P^R7*|kOGf/NW,~ W[*L|UЩPi#Q"r\gQ-#xިY<%F$g&SPT0Ԥp7yp ی;4:>dja Ѿ4ܑG΁Î4y.?SIG Ygs,tX1? cdVϥ,Z ~Q'EZ'@O= mW(I~?PajRY@CR Xӓ .Ko7|N 󩃢~i҃@1IH- „#{+%tA,-onW|snLvCY > <+(.V`O ֳLĽuzoqE9mTC\I?1-ҵ) c: bb ov;줂hݒ\V(dl{'}tɻÅ~ǁ)РuaU2CتL$w6q,GUI~K}*OU_ C=~Ⱦ + /gPsAan?n.I5d6l2 =z`FN'Iwv_׀ho-yuQknoM}YA"p .gF!/OcܱشܦP_+ V9.iMMz-%.,Cij{&?Ap4nNAPβ=rza秣z>JrQ~b9f/δh]qZؓn Ѿ˵ޥ'CAf>QI킝Wb#w'99 O)I /a3m[Z/:n _;$>g7OO|ħK:J|6@CM |`:s^Q]k'.]m>35{đL:/lOn+j α>)OEW RRg?^ǦE_/_+NEᘤ!cNLdېmeͪx=29?EqDؼO'z\Bޮ` "~HqW$Y) ˝'Lx27{T㠝"ǎޢv7ǎT3 tVfnĮFr.JWw؏.I@Cd򦽅xװ"w?RIS~pg*pcQwwVeD9 `" T_]]pXbF,^t K9?IrAx^'d)Ψ}pAm>5-&qsI ٍTBV3Noc*s#8c'];mc#4}[%%~ '|( q[Kr|4%:'B1/~ bKT:N櫤!eW׈,w rH&Vęדj.i }d{f4Sx¸=.76"i(H&@g6xHQ:~I2X.m$.tP%_G8;H(n|T7XqHu/oܨ4J?lc61qI2.*RS}|CkFӗ`ij,J7 (gFYVm}&0\hněRjV8;/$[\(L辴V >ykOЕN/V p*6n( E"]uzbfٕ{jɡiJ]w!_csog0 ZRH_|6]IYׄSu_3X ($T #/\nJR &c5v?[)3J@3d7NV~s̾ e^ oTNUTX He dZW'd3UKB r+t$1w'1 J\d{$lkS0@;?(J'P ~`nNOm"7¾sW%o)sS1GW53W=՛Apc s[i5ϧTsffѥU #H ӄπ3ƺlbQּ% 7W-I{%wnU$kL{ 0quGD UUwNۺPFb-*&'1=,7 U)\rtp*|_.)1 MHVۍ_2fVo+'E5W]?٘&F(*>ٜPMqF븒HjtHtb ;u\q)7FWmj̴w3?ytp*1Ebux-V?Y~v=$"ti} neU)u:h K+%(,* HW 1!x{rRY0EvZ٤&}eӵٕ4I ,sº"?> stream xڍwT6 "UJDPHWB $$"HoJM{ RR(|{=~<7׌La(; d`f o;"PH@b($Pd7e@ to #Tx `@} xUQho GoݺyW8PA@!H>w%TB\((G ~9G-#*)qŊ0 7#c<0O@+5/0EA ,g],aqs'?ϡ`?gRLR ` $;I00/EE(!HGa?-) E_{ T6ة&JSxeHl+P}J\biV3.}v;>˵\u\k\v|8'hX&\)tqFuP)Myi}TqS'ՠ$S&f>]r>>Zbέ+v[|pO(^]CMb&ҏbt;MFMXw@a5Ď#Nz J*&756EثpLCh+=59]7EmO0 x~/bmBy- C+o hbk| ȭ27wv2/qYp۝l.S(?y8@Ѱmx!+d{uWk'Xn6x^>r:+Nҥ/u`A%vm͙: m1v^z ڂZ&}`Lud5m #{ǀ>ٰL]$;kHvNRe 179.!xkPQoZJyǏso܏OhPHب/m01̜ G/~G2N2K#Hڼk[qYtJ7:^^fͺH/oģkvs2Y5$ i'%en,{0]>¿Lq;O R`<:٭q뱓Zh7(ߍɇo77}shǹefוǚ.֒pWPgTF`wlL܈GS>vf/[C?~- κ_p|~^A1qj,C꫉g jy MѲK%0ncDPiRSIW2ubNI[Zx;.>6j YQ-|ꊚ_ =AO_}qdPdVM n EA _PjWD_Drt7+sON]$.ׅ ?^0C r068.f$I3dIajd9> +(@ޏأ"! Q݊ {CJ˹wK%9%Gكg JɽGJ?PV ݱlAsM@͵zm OzS3a.fZ}ȑ3.yOl2Lf$*Dkך Xiʎo5KbK7+Շ"־VS`AT彽B.'7ӯh ]sB;(w N_SkL_@^QlɶX{z\kŌO`Hyo-8ke*O,>*i]۳C~{wE^h p`c9%* I:3|f973<,#:Ly6zFqW T+VM[4S I{\\..egچZvFȦ3)Yq6OCKr>,̮&nk:V,t$n$J~b>R?|azLX1zgBy{ۅޅ淸\$[ _?Qu*2Ě1݊Vo&.4tJxM[^e"My_pNtdjO8b<dVdw:"mYJ;Հ(pRXW'ŧ:&t[WjmO=rHLE} g"R׫kY rR8pK׬sH"MaNi;c6p:K8Bs7JQQݒt^zjoڕS#vq3E}ɴZSO~8̭ȜF<{;4K9X3GYEruG0IiKkA%+1d #<*ϨE#c?40'hg ݥ@X@@nozK5D|17Saz=΅'uVF*(nh 8똚IyLG [ŷj3 ʧҮɽO6Y46|~&VU͢K ruu)Ju(.9ɈR_![8̼WXއń8h4Sy@GϺg'.DQ2(y6c ¼{vNKS_+V4Q y?޵t1LI%{SW">)Ъ0CУpbB_p4qLm:CAixԟkhŸ _+'+͛ 2\x@^NUdn~7K+M6+3TvqJW4EB)i7Y BF}u\`2i}Gsf2]uO/p5 FU > \' xfuCm/6v~FX*)ŽW_<1l=[0+ho**3U.W?h$G8 )rOZ/cڟX>qJ)Zruiًlם`I9soT;~ˋ U95 푊-={,<Rq{}ڽkAT\2ٵK#"%03zQx0 Qib`Seib9COo{3X17ׯg" ue}̚%҅vz\l5F@漹[z.T^howѴ|~x%Cl:MaiFUU `<~ln@Kx#`/}zh,E7:~nxţN`t(ZZ [<,ylN8#kCLh+ $ʆ9ռ3'!i-n1>Tat$UҮ5ywJM59ZI#1,g^rCfHh؏٥㪏.FU1bbm2]Ŭg YkZϊ#hpw1ۗ.sΞ+gd DcQX@m~c-^6|zL]`.ۍDc/rѨ8)!veM⢑boC+'>_]katTm1:; .ٟ=̬eN,[(:񶀉\z,IȔcu5-֍IP1e3NťЦB7R>Goٺ3 Y;9B~wn6S3bO*6Z{N]x]t?SUEM#IgsvLs}uw3H0WTH޲.8-[|ǹuw/Ȉxִҥ%D9}ۯJh"쎒2s/rX…djN?xiAD8-QZ/JJt{kWjE^p5(?FUyw+tI8d|y–n)E6 tB)#VBYܣ^O{C&e9O )ÜTC?=!z뭖8NjYds=. r)@m@[މ@|!=":Yfhn>e%Uo_?>%'!HF? Q{Q' 2 lzksh,4]vL'k=9[oy^]'ɯNW<4ml<^zC g!yjv>V'Ŧ|M1wT 쎖b=/^92ե9],1arg6lfizTr({Be,&>xI+\գ# ޭ3#'}CRo0f# =.I.7pthr9i,zˑsn",fI1t\`,Z;]iq%gz00b] {_M d3@^4Oi8')F{`9#2SڦIݴpwe6Hu=l۵rA$_PpjsdcVK[cߟ68HdI_4II))hDCf3l|a~jIrF&4}dx7Qթt4t*/~rs0{~GyKƉK!ɰ шs c5 YWt<")ɔE S0AX2NzmR9^e&@[b7?H+[9DH=$9vr{jCA[ _ 5*)EPFVҒ&? pj"tǣV6:Oyx IYܯV8MZuup?l}Wvkp%K|,}^=;<)~N%;n|k$?~uY RQ~&̃gwJ*z)[8U(A1r_-c'MP9D,1c/*`X̣ 3O{,xȷDS*⦑ pp,2]cSYIZz} {|ػ|{k(HY;Bsi&S6CM endstream endobj 881 0 obj << /Length1 1420 /Length2 5888 /Length3 0 /Length 6852 /Filter /FlateDecode >> stream xڍuTk-("DAJД7iRwA$$AH 7{"M84A(H^Dz|?߽kݻV̞g? '!"mSEp !i}mmu0PHHD@HHi80X$%100S@m4 lA i!!@4F vAB@ 4 pG;cpG Tta0 !`= Ap*%]]]X4.tE@qA?)u?@#;`Ź10 aPX|3 ݁Z@]G7X7r Y @`;"a@]U-FAX4>Fڃm_GU`8 œ07Bg#wGد Ӏy#ma'00oP$(?no? h.('K h?_#TS12C?A%%Г_Ł Ws:*l:Yo&.gon GBbB{ ~S}"Ug{_q߀#v@ڻA/6"~o6 tv:_E/t~o?tA8ⷘ=Cc?_<,!wrg;k?m~} b@0v%Ā Ban4@q 7$P?4g (-? G@ }W Y:T1LO,VRkQr13P]? 7ϱGl#7M 1zLPx! UcwnJh54Vifz1g6Z;90",Q'MSZN1=EmG0REQYjéB*O5 Y hsi-دڥ!b7rRhcl!gPiUѐA+= Zp{!J|~P4 Kz10ɂPgq];W%ʺet%5I#ce8ZhgXY46Uo돁<>[TW_t%Ƌ NϤJ$`mEy ZF!H3Ү `B/I8(+/YX6Y']u-ʣ7|{dѡbmu}F^ ]mޤf=QR;k;ל(szH2=te+asbhGKU>Xz|ߴs Ur0ot,XّHT3Jp)+3Yu-̖!^bJO"R0^'(dX"6zLhf,A6Kբ1s˒i7}g+< 8(dMǬM0:&j92%b<.` s Ff/cW2OLr.% %t7wd :6J>זI.EK6Oa(iGeKwJ-cThvk0z 3a(.zYbyIuE#K-ç+=U'e0LI5M?}h2 qvzjK Xp+N?kEsr Ҥ>nZ=I >amҏtk&* `cD+Y׆r$qO'OHt/8&K. ^m1vT5/Yky_IZޖdŤB1O$$Fypq|GoW̑ XZf}Xs`g\Ʃ~㙄󦦚s=O*jinXl;Da<&srRףD!uyNtdAZۆt - J-Ğ)FDEҩ8<}ɛUD>OR7nlx*:]Lj&ɇq_Upq ԭKGO-k,pBt_PrdQ[d؎j'|TBzPmH.j6r8 P>[OʥNn|C- ʃ K=NsWI{Z>yBHAXO5$Ci!{wyg1ߦ-?V3vv'MkH Tй;бMj={'s`{k#RlsWs7`1mBpX'z{4DtB^Yz㧘c*ZZHc :Ah (fvOGnP%$V*xp$IM g{_A-كu; -McG}TOUzG=& w0e4C\J9.t vZشfPh7N:] h 1 07sג.芩/KYh놮[ Y(\^3)rɸB眂&C}rRЇg j8N6BhbV}&ߺ{ ܯ'\،#I̞PJ?׆aN_ .X.)Sh~!˴BbՌ= L_l.A`qΗkRP6t6T|%.y}D_1ڞ0Wz)hæk[} &yA2EJriQUvGcԟH :a:uF; gxqex DPNnZe˄ ޝǑ<9^ڡС[0۞#FӯpA*N҈o#"4xP+k%ikbT=ޏ,I8N 0f录:-BQb ņ!:$M,n :DSYgR~^` Es]\ —nn"1o-""ȟ( xs)1%=Ͽ( b/:=a[FCo#I#͹hڠWkn!Xʞ=vS7@fRi&Gbجg^TٰB9q#U=Ɍmb0zn%1Ɖ{V?0Ad7 ԖӒJ)nO?ӠDBIpW/{l)vpee;r]P|>8#4(v#x@ N7K{q>\O$5(#mH9Lt(Βsh2F$d®Vٕx}I cZabyMWpӳ![d`IJUΪo2aʩ^$ `͢kOmeLѶ-1ڙnbM@nK6+!n&!et%Ww] <=9~%VzNvbܼ+mydƆ˫wy&9o|VGrgmN&!Z&${均)oXMtxKcd-Tw<tM%vW,lb ARC8(NW CӺD,|Xa`k|@2p3Aʘogo›GZJ9eD׌K6SYi.V: t.^ ?bdgm'%6ZxyrX`I=s:.K;i| K1CQTY7SbBUBaz;ESM WIftU& OvMh/\/of/ᵁ)O } bt\zA/J`Īa81y[-,UL%:T^ʿ “JQ%LlCci;^b> &qW"RC@SzֶG.YUOZ*Bvy+"}֊_VLr+NfC6LZ'[4VS<-?f $Ω@.SW (-o$X],eP^lě**]s7&amQ"L| ~ ~is^׭Pޜi>ڑ7cNY~FIZY՘' f5iv,/zּ/˾W>+$hg0rmJA=\D'.gǀ R<?.RW|o떰5 KJ8$8\> )]d6' |} FU"AMַIT(&*K%f\Odm y@ GXD! Qc>IEWPLskc-Ҿ7Y[+n>uy6n ' Su,gI].#u/}e_.d@$Z?l8<,%Tw[+q endstream endobj 883 0 obj << /Length1 1412 /Length2 5891 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xڍTTTkS@eHA a!f`f(iV:D)n$$T:{{׺wZ{ϳٙuxd%8 kj@A^ P]rqBH(& S0yp@/ /"@qja$ <Ea sD*:BP0l!`@BPj)aB9񹹹p}e xAB+O-#72^v-ۯFC`HL `T5Nd w??AaA`0 lP@[I厺~&pL=uYb~P0CP' u g-+¬ᎎ I| Pvߛ` k('+'>'"gA"B3^ +ӍAwXc@@' .oEQK FOwb,u1~3 s'~ttU5U#;&'wxx~0@6__yu@?Qf s{q ?{Cf`̃_%vRrqpa#O.(.4u31䷖5!VP@}l0](R ҁ.030 Tl 1!1DZOQٿϡí~Q@@fy?dR26m %6pZm8[-V7 /QaRz#sxM [dϝ;Z38zi4E#iOLdxIySI^sTpHt|QՌG~z ΝWE 2T=(TkI˰kץ'05Mbr޴V*{22"@)NywwyfD xIK /NvelyFj%nj9EeMt1^PFF}D؊ >8a1w8wzVM/W)}n@Η/zuNm?q,c` ]ՖW/;HL4_5XxE )U7/y;{Se'[O,X36AyA򽼫#gJC&nB,\U$KN|iS -Zc0bl-]>E h=Q.T]ߏ"<.Yv?;Ψy7NSetšd e)j$tunx 0L[]'s Hʡ ke oj^=¹OF>7wi1Fin/2V#"1s-r4 lA ;F7Rx:;D|{qU/H/Evaְcg·Yo4r$Kbx.˽[~|\ WYx5ഉ{=(-]#ᒈ˄yF3߰˹X'nËDž޲"1F[ɧzG9(e1 -˟/'3cT- P~+E|%3fnҳf<ѳu鲻cc3;o?/""m^ ӢuY6VWԡ0 og"k"@"{tLR!ciO}1m#J'2B_̮I{J(4`BW>ݫTGgdꪗ22Z{[~arYP{gO %5des6I* 5L7{K[Zf-s=MS]RPbcH}RZ$gNֶ+w<M9p~9A%3s`Cs_PO>T=}=p\x!B>a5l[cnk\WP#\|{)RɶҁGה,ط/3hrfbn3!aIy#RFc{|lɴr<xtmhvf]w]B8u"DŽ*`ؕ %?Hd>s @+S(i4Ͼ>Hk9L?>Ɠbģ>'v@9l8].^{$m~+&P|.Yp9^Lac6-!O)PhnREz-9Ƿ,#5'ķbfƹT}oR!yKwGUoK\FQI%ϳi\oIǣ׮bZ/!5Q5.1Ndơ_9hpO|ᇅz6kld\&5st%I"f?T+8uĜyHɝGЭyVKv¿s8]cv8k4[Tqw]Ѽ &z8=+=_7wddd~gbC5kiHrƉӔS8GRwS+R몆]j-g=07'=9}>*"~=R-y0Z[%W~ۜڈ *ݝẗΓجli [YX$'sN5e?ߜqa,H9TEni`D&c } /:ì=OyLUTEFdQb2KE*̾{ݸjv~e/cog0:byPSwPС_FӤ,JԴ>Rb|l/v˜ 2!Hč6fƄB)G>fՂblK/8ǢU.JaD$oY'?8vkCl'&rlj#N}(,VCWj<>n@sFe g FXYNxt `nc[j=^Y"kA45vA݇{9*c*;DNi~81[M^Wt\FRCr$Jd^-x ҷrJ_`h"ZpݑN0k[g2jy!db}?M8foi ypg:ڎۻ;_%l1̵|%8ݯ}Oq\$uT?>OPt"C{h=#1Te.Pes+|:GP8?Ъ[iG󙟘yH8Suq+X*!:+ՙqKFUGDŽZj4|+hu5=ҏ_41j zFߎ|:Q.ˁ/:D;F W͚x,/LX[c h=c?툈}Id9tyt98}"m||)54pF -xlaB6$4Mǵd_swJ}wF~J|N/,ϧ'&A~T mb%2ۻAˉ$  o)T%ц'%|IdY+8•sl #sj(w,ƀbuV4`"~q/'f7QSv=j|E65DM9"iz,kF mu X%91ɠ~Ɲ15(*hP58!c;8y^{R8kFT;KA-6*w>WmG~4^$Q J_};̩) ӓH'Tz;vӘŸ9暑N(0>L`֑ll35EJ}&oyP g~e!z)sIkTȥ6pz<bgx:#e> m;![^%Of:tVר;()N숇:g?k2pl O&Jrcpc'1Q~;׊W$㪶Qaf/sirM2y] O%*81p Od`B[$cf:.Sic)n$= 8 ]E1 6g2LXtf[Yk^dNOK~@mu/<ȫၦlx>he0khWmziDo:(Bv56t{>H .{^s+}j2e˭VPf'wBRLGi-jOCa=wCTQrf@p:^OATɥ, ֊Gf%jkӝ)R.CW;5\2Kc\ S+}9 =*szfY=1=ҍ -rnݤ,<{{8`Y^,FEv=:.Fcsi;JiFO~2Űiŗ$׆q-UuX/'q,\Zs˺9I1CFx}Iti>bG!D$Q9w@On r!˱ϼo9XU$gdF%+qE .s.ݱZKqw`ָ3Ig5BgZX|ubHzǞ#;ŐTCU5pW;W}[3/F3Kyϊ' C輶 KP~wh֑$Af[{֙,SXBs"^4I\eUˍenKWt;UT@ԝ(KNzqKw]/71b{V}g7y$p]_4?6vʋ.-]i:hfrJHqC5Ի/q7<+^kQ׺a-~)33,!}*X뵑\q,TUԡrICVoVzג(azu}J(CֆX!ǖyԙvC/GW o\иZ6gF̻۫b!r>O Onٛ =p+GƵ+_W*5yHx(Ti;W69j/Q)BDw{"͒pޮm.By}@ӰQ+P{7DiZ*z-o):L=n1/Iiwgm!er?GILc^JWfu^sH4&PKo\q0eE<*}(kk2JJ)tȀE90L!҂m3@a-ny8 <9OYq7TaeD@+UP߽A*ͧ_ gesȚlsk;\3M޻760/&H endstream endobj 885 0 obj << /Length1 2756 /Length2 24067 /Length3 0 /Length 25614 /Filter /FlateDecode >> stream xڌt]k Fc6YQc۶mg61jl1f&M8gdd^73g(HTL L<Qyf&+ -1Qg+H&f wȸY<̜KWWGFFc;g j:%@tv~ P0]@o3Z]@nf@g(9@UZXo:?030_r665us4[r tc{_ƶ. cwc+[c_̍cPblbeD_a@]7uڻ 'f 4݋;x̭aȨno$B-ؙ8Y@'ԒWx5/G_J_bP>sP@_+s ;S_ 02u-~Gc<Lc0I^f^/:qг1Yؙ̿06%U2jpg-92ԀfPp2@{ؙLA?\(o IK6nc!:TQY_1x[F+ +O;)Z\~]6ztLm@ hVߔf ; 4zb0N02;\|&`%qE~#No`"N&o `XR+Q7b0F .o"(F .".E7qQ@\T#E7q@\4#E_ E ?c;GQuIObh?+ߎ S_ҙ:؂l$vvSZ,F? )@B̌],[}Ͳ5#2o1RZ &K;>/s7? , &fh $*auj.ZߑALnv&nF?jox1jo5(#%mo 4= 6+h{@/?L9Y91_]u=_ ׍F:Llٹ9מAq#3Y.{ rrYw&;( Uo Vӂ6?V`W?@1py o? (D@ύm _Tu?w 4EX^p0 鸫&ߟLYvt{@D]|#iڮ8յ Iklx[r'v)jBk@urBQǸ([ [W>E|*Q mQ*/*Jwؗ~ IK/VDyYs0|רTog/P&;?j  1;ڹ)/1qQ!2K% E1MR8 vwބLMĝĮ9USawɃLZhY~@_e%>!,uwT`Hoc)2V! ;G5~yo-ΌNV}foGA&#Y H䧊|1lPnX!͘nAv2a LJ K)37h1_wZ\60B7#ԏ8>xJ)GYUS,|&YFcéNG[OMmgz7O9\CCU<$meJEzNTfLƵ ]'L gKd8>u7';Iw^|K?[bZnMz;M1@/r+MُئԸz9Kwc'>èxt&t)艶dN(,L ixq9șT81k0F |8#aJs'? 2=屽͢Pַ 2|Eu;.ȌlW:qԽx+\+gϮzd:[2qjCRagO )n:omXnTخ_Ys>n̈́i9(?/i3/˶BI%HCZUD ;;Fhpm-oh7"YےL")\X*XʒC"ZO՞{yDCM„Nd=WZ[clb8!E<,0XvMQ$tu!*^ۼ'%amI{ePK"q"PkëVxtyUб[:%b ::堦<q u'4"p~*V#)^#%:;[&=$a6*. pKm*O{㩏cc3є ŠW8V*bih.uG̢ W)2(foYupq/Zo Jl=Jܩ<&tiRZTdTƬ'Ϗm?)3Ԍʹw4Z>] l]b3Qz`+  y岽c.ʜ#˂ĺ%9ɥ^% /YlrxI(6^(* ~uKߘwx@<2;)Pho<o+5-,U4 pٺ,VY(<ɠVbZZ]kI(6V8@FBWKWቇ#`.^5vNc֚,x}-Hɶc;Õe҇+ :i \OaT a'Vyڤ,;Q](,*n-rsK9iBAg-؟,tV{T'ƅ;hyEGcfb!`LX 6ܪqoZJ-g4F{CO2ry؈pTBuS o}d%7W/ l2L6zό V [|"w6ْ~2c8 ~w;xui I_z!D'kDT8A_ q1E)Ռ~Zzb.(T[ ~ \G #MC^%ۆu"U_s~u@_u\/ip!$Zx,"qKk ýHuYVONt)1i}{nD'[Th.cXͧUI7"?ٗHgua'LX8eE]!G6YP,RCqЭOth !V!|`UEmՈ>ͺF$J_E୊zE,:vPW1#a1b+Q K CH|7>~?{I0\J#uUxaYВ=Vsßkp]O rQ)І~؃q1FD5Sg%"5G_gÚ.cxaU( Zy\dj1=ũ$Na*;AĖ}Ql~ÛD`j+'ʜ`OApJXw) ܋fU&,Pb#@#$˯| dKc 8h. |Oݷa)\:[eg :`d4Y1=4ܜ~l,őixu)c>A* -j eLW9LβL~?O˘ -Y:?K CU: *9Mp <"&ef+s-အW`ej:o&jŶ]r5Jz%0|zO;èyY0WLHU]2+tGw(=F`DޮFmq0W.ϏYZlS Iی澬'Ch.ӰsZϾO7-1sC$R]QRp#ĆMQGu ;2-y(ukd˰ei|!oFkz~%UfW4c F}uoqkLj8ecjmQmV-~SRS0թGK'6FY3v*ܼȝ/ׯ>!:Ѳx|2٦E$ٝ2`Ȏr\uW}l3 ;IzAr[ASd]2s#+cVۇZJG1_G2 nK%BFK370C'P{N%AhVn{}3oቋY1#U)\$ !ЗaRYLr}v{S=M AW-5"IjR ݁"p .J~~.L۴%Q7ydoGv msad@&F[e`7۝{SbA^ӏFyȑofij z={O.Cp}=D{k6AæۇĦ2ӠT z_E}%ruFH/7n\H`PBk}ˈK`hDg% &桴]!1˟;,-ƍb$r0[* h: -n^X{J3/ zugW~HESԃWiRm%œ|TY\~޻?91Ӑ[=v|)2`l)uj@!+uBbg/ XSiZwD.揼m4dߧiNuT>B4}H-H I:!{3K6ی"qw|k07 @L?YmUyy*2Ku؄ד%XulU&Qk̷x50;9=Y]ot$x)+İ*ԫUP9E-s&$qsճTWAnf*!lʰTAm =MOjL"5% Q1F;ws1дzn#g >R+q( -\"%,֛5/%=dcU^b<ݣuf>t~ĪꞮzq肋%~:Ic#>>!)C9AwmOG*heUДbL}MD;.<,o?H[I*U 9 +2:i7SĹOۻ(s (cD/5[ou92S faQ?}XN9: >փHKmoc5Cd+C>fŎ!oฝ}G}9T wϰ?4:Tt?G*:>k*r1 nW . W"V6R-3BҶh `Ol&DLf$ycˈӠRf$:9[-y6K*#эXbCoyr>*b:blA${L{RhrB)c7+}0QjB-FJ\_G7B4"qr:ؕP5N] mn}j%{%j%3s~|4SE6XB6 0򽀏BYho.ez!3 O!c>L[Vro6DZTu~o=d':Oooay\؎R0g̩tis5u,ާT`/ G{y'-.بV*DSL("zOT/gvq^y[Fb dhJ[~)}Sa9ASBrCٌԸLegQ-m,|!):=&#zW:F*y218o[2ppr? eqIG(8J ! (GX!E}M$9g.̮Jo ?_+?7TY݇ ΩYϴ~Ej-V4+ø quQoH` ȂyЄ)[!cօS" 6^+Րx[fVO6*q7IܾӴ3M&p0ȝ#<|:׾fSnM6m wkɌyBV:c=ΫGub53,I@ϒN3Xs!^R!]8[+)W?:͇%A)Y[Y S+wYӛ ݘ7ȷx5;4~ʣ\? buiKOUIY료$ $4Ln]Z;.Z6yɾƕD$j )Lf~ PٽQLCLQ|&R|%1')?ÔσG !;[_94K;2}uvv@VDPiΟ,wE,ڌX>+j282Rota%nҠHPK ,1g3b Lسf@PJDwI*:7ZՅu_+` -}#:Vۊ@J7ҳ4L@x/z]vs71~2l|[k.$jJ'ڧEMXt4ġaKKInݝPs7R^u!Ţ&%FJNmy$1Ho A&Љ?<rQ4jф\e}O'3[FKOIwݓNYƔvjvح8[>2 [ڜ [Z #jE$]Ez6$'A WJ{['iP2p :%|^Z΅,39l1wg*=5_"};G,M2]8j2h [lHx\J޵ڬl{{o,&zxi̭}=G&־(ocYbوtmFæW}S$]w@ZP~f4OOoy) O-)^ TPvB ?"$PIm K"6? 4IF'BįV);K}\G2*ђV05E\r_i}~ KѪ?Hdu=o-B!ksŹ q9VN nUIdY5D#gOYE ?c^+S qWA<b CnYRDlWwKC | Ŋuo5=N[k@A~2iv`"J,[e8f"C+9%5<fsbl\ Jd  MpH_yzq=)-+*p6kUvՆ8#hU_{gh"پ튨]ۘr3'5һ]]~hbN~A%SvLCa 6_~]e{6b<?5c־{(1ޛ@\YJ_Su?7؍q&]_7 H0PŇiJ`ҵXy=̎h\ JV.dwyEں5JT䦅PJc'*i8 VaŸ$lRkE'찙.(P{c㖋Tv֤H֜e+}d\Z1='9Iv5줵3VU1}yiOfo)Zp%/vBZ sYOnåbZPTJ-ssa#$/Erw7*Jfi]vl6L z´/t? Q]; lAtUH9.;]p™yX3W^}\&<{=J62%01W,WNlGFq])aE.C7@]x~?69tMm=ݵ8 ZGw4(R][eŐ l9T&NođWX]hRV5:F 7[*d9IRE^> f@mTcgȖ5|2G7qǗ&#ߵt[҉ʘČef LT,+P2z![&Na~"_%Y—,Bڑec:QF܈zdW&tBPS>H}PV&%G2,1C%n%^^? -h{'4Yn. HS94Rq^2Cx8~\ECО-̔2C Y\ u:V2ag"/5: 7=a͐ BMKrKs:fA^\+G$rvȱˑZӇ1StP`)GI81j'J=_Al2,VQ8ˡ)P58)UGm:N:A] 8KyJ=B`MXK vLDUƚqx'ɩ1fy*S2F,fa(i0]sʀ.ȡ;xJk8!Mc`ԦS.B)NaP͘!S:/e=ysKA:EF{} 0?sKMp]:v?s;LqU:q$FWTe.ގ?ɹz~.`Lk`wQk+'h {{T$+KנX:_Э!\=|Vx>er(3w6_5 ,炚Ko]G#68 TA` vsYm&cԂޔ?m)h{3ZvhgWvhnp|UT< B7!h}y~h"!1sAA5gLřb{$u7!5|d,-x~F6;%9R.7F*eoz⧽YB#4"g J"cb)rzuNR:#LbăiCϤ&/y]^ YFh~ ^[7e`ʳLQȈɚۗ'|62eo˩bi`k\ fZYtrD8#{_;>Nnrj_6L6}{+TYLB(M'x,2sV^ӢYrY{2\ԖzJl7R3J6Uj56^fɲTibMh7z6?B.a+Pb,-Ԭdp=2&_¾ž@.u/oE5uM0H];z%kkG2\ܴM7&1]-4 o`c=Dy%ܐrֽtUdKƨX.!YdU!1)qMcf,!K.z" T5!uiNB޾#`<< މ&^^Enjb{0QL\'Jp6<9R9S3hV}2\2*b,*ohQ$O}αd ^ brM`j"bܷn DN:Ȝٵm@0dzC!b$TR~g(rggmuN3^vV/CA_kҙu*(B˯ߚ^ :> ֚yi`i7\ܸhT3m~l1. ]:Jy|̟<:ұ׻0M #n9U@M c)^Gw8l AEGKuzE r 7w#")D7oj$>ʜw9T[."d!?©cY>E[fzP3CYHrU`LIy{l$[1qEZ"V fuم"{ ̒.w%: -j% $1{/\dyp?+9u\3wfukS}̸c4}`X  6Y=IbeFp`AJh-J-ٻٸKD N";,VѹCj0)/tFם~Wi.Xt!Sh!w_MLwVю ȴ,`|L\os 7Ԇ&T("I;\/ȶoZz jAVp,'Jˤϼ_sqKlQk뇏%ia.RK VJG=&ӖG염Aɨ.P0#lv8\׮ʎj::#5QL4V0!"YSWG09XD1(K*p+4U1 ah: b!7v763Ue 5Η=0dяD_Ml#92#*wXU.\W~` t ^#Z̎ 0>'<>_{{̨*!b4ʝx4g(Ɋv=j'!o! ,ٰw|<Ad- |oM C,?d?NJwVQ;ԀqO6͖ˢ*+?12;.emQ`}yo1UXƐ8nW'W# *DmKRl(w׎W"aWBcyWw/) G]G˭E)DŽx{lL6ee{eZ_hⴘoO/B5'R` 179z9r-ufPࣚ9S gYMʜ?- \qlfvM'Dgѐܬ }+!/az!0V0H,,*0Ye+˅y6IM )BVۮwh>f9Z&ط5:; eӔz03Mc^1{ *I<ҝ''I͜6 Z~SR`tom#D:`u&^l(&uĆo ]ް}2>Dz+d-WF~xv -zm.].zVV;?yk<.7aϓd4{ER$:\tUpw[ o;o.BՄoxʱMs"Ǟѹ>Qϯw-BWV1[ܲķ0zhڵh4(lʋ18HF[2?ؙK3q\ |qkiMN#x[8xwteF/+沉}4D=K/_u+da7ӣ^|nh8}X}D};a\%zC)/tڟS?4SYP<]^\F%p(Z Qjw$yGCR}nܫ K ɽtj(χhNmzS=O w K*ZRU>3ӱ"p( ?  ~V|l銄q4=z.@b kDwl{ÞlDsSf/͖ǝ#pV O"1jXe;ӲU2g/Dl<"gJG-A띋;`WJ1@.!O_l V˄z|B9 xc` O5[WSO4nVw'LLv_q Kj$Kz d0 (b/#3xvcxje_ȫY%}P"qyO3ZDq))5>7L#3wNDa)R.ڣwo:Rt$J&'*}ɤ$h`͘1f:ID4hiYoyF3&&G;~0l.gbDG )(#\#O06?d^ fy4SsaDŽ\LK)$+"3%lK=(}jL+.: ٛxVRb'[&oc\6Zੋ~XDP͇ ްmZt7>q7`P=̂aŠ` j!>*w4'sJگ.w ] x([KCC2.I_M8\C]!|TZ"M#?yJ k-O t=a}=bTܸA^'2S㧜n6dž搌Mġ ,3ؕ6M|1O>Һetûz'.FA;j'S0cTPZvUYYTSKC4Y٨I=,w\#u#'"۠r }ϟ'ôOuH`Wy: 'M?gez_u=G.?"_u:0!CC4sPQOqۄ0HEH\<'[T[xɳka96}ıxOow9lsWמp0}߇s9\\4;( 9|<:HbFm[ȌT6GA ? jw6WELA!ڕOG!9. D'v./ͻB#V]Dlh5<}7O1 1lxy_hӜL/<9Q|?At o[v;vMU䐘:08:0b|^&2R*ܲ6?Z-אݍÊK}sb px8:G}.M+ڮd #Kpq!P;gHr//YS&~m^)f( `|'3b,9t,9#4)Gvzs 8/4v'ɪi0csEM':ɋr 53싷.4oϑy}KA掗fFF-R[eM$jrn֏z"6ڟ?$3D7 mVu2Q"NFeb49Ma2ȡMAiՖk33gNܹ ,|T6̖Z~T)k&Y-OXvhfj$5m?|DuQCRư]ThHRa}a1wEaIC̏8dI.b&N]to'u&lv⧛OzЂ,0 C7pQ .9l'-7B#CxQ){CǛ6,/r̝KfiR֩-}kgs?Р^KQr}0"~[;.Z\ed]o)?pt ⹱e6kXHb*Ngv:H&u~?bxuXXkm:.پB G5vW$ "<,]X+MptZ44E\:fG?}jP<\7p(aڳ֭hSoq$]qE^mSD#9q},^F3ԅMn_NmucWrxֱ!3t7+Db[}9i k]迠J<(^XE|ebcƂj3`[p~sG  m R(ji&C}1費ج<=kH{o#ZqaR^#*rL ~l4ldGhp Pc]^~ݮ`}|!܌M ;9 +.aD]NPmߨg%PW1Q5*yN(nC  Bs_ M9H9Ur|f-~:KU$kK|߾tcVY5yWc-)6K_g5ѠS0Z{1,{>#CHɗ4wdFrB >?v&5cN }i13_Vd뵘V˳?o1A1&m3"(r,J (W0l%rOɷ6rms5?ox+KiKeD|I.WWbEWf_Vb ^&8f;WuQ:P0P\Yt~^cvq^x+&8i] buӵ0P&xۮ6)%~Ác!:an(31CAKy^{=qB,(ݘ uct#Ț[۬t-Rttm$L␋)b @#1D3[=n=S%Њ.$AF;^~iR98!~NlʡmYA)i-zZH.G/(l^I"3Wy0.8<au=)~UA ?WдbQH@0=0Kިbxפ}`'S򋸈!fY 'pxzHx.#@Jܼ~j SǮ`:mSwX{8+'{-lBg=bLefH HKhnX jv/lBWv=fÜ/An/-+)1s^X!P`;GWVg~_! ݌ }8Qaܹ>*6Tqd< v\1D޹$gZMzH'5p=EzI`,b%:T޹,mSZ91BNjt˶ytj;~yC@A횝E`>=H vK^; X[1V3,uU̾fV5Cj"jplvi4QēHჳX5g,sPh&|QH`-Q?y^@BSG6 ;'z;G / #zF+&dwd)ٷc5j)Iknm,?呾`Z}ȆICW07$3y7En(fiɿDM\{Z Gqvz-gBsxm탼2&.U4 yzQya!=X}p9gwWŭ0? .čv?@|K{Xly;NyUJ1%rU|F(AêX0MSg윣Y@-f6iܰ/j]cv4 |aH3Z!ÿcm}Zu'qk~=JUAcڿ]eEO5)vV&g#s Š { 'eZP f"U>P˛H{oC(,?OfUؐ>g$٨5 įXúU˪-uLAwfpç..Ci50[E"MZ".ޗD)0#KYאA;,] >wl%t 鱌z^d t`=1l, Fp>jSl;(Cb>'AKp-hJWB\ ;h IJiL:(_\BYq~İi|#Hd)3Շdx6 [U88{C}펾xa6,攴CYB &u\Ԝ"bƧCJ%)lzC&Yg^PGs/oƾ):ZgƖui/ 鏕xb_IZm7y<)! ^fR$H+ߑʄqRVλVHrRy):M{w2x D߁ guN-WN [>M!]oĖD)#V=.+ܾ &j+O΁mSZ Fel=%@ǿ_ə#yFyUXz CDFBfT??7xQ-V3< bj kKIαl'\@[$(5jM-*{SIK1NRs(8\s1A'GﺔFULRm21dԩuYP7-h"b!MFX^3xC<a*Rl>7lXbКOOeLF& |&|+:;kC@#S,+N\P|CcXұW)@|F(͞ʸU [xT6rbbA $HH[}|0v4no.ի:MC4 ~)0"V=9)̛b?T>QN܀r@j7-Bf᧖R™oLWJ/ޙŴNK5hm.J^ g(o玥81Ӭ".3mvSJ{3`6?eƮy2'P4#xb\Ɩ\ߨ@ioMvd:DOبjv2 Ə`2~' jF5 ?ǰ+r+4fyjYIrE\~7FMb #Eg5sZu}g_nK>Sy}i8RŏeN^|VtgJvJ/l<{Ywy-R6c*˔{۞e$pvboqL4(waܪ! \wp?x |` ?52D-̧n.pA2=ԃ\Sx"S|Cҭ$IH`4.4.Y9xT *P"+ͺA  ]lB&= #zMJ\ /cǟR2sVV>Q-"2 "sqsuDkݍwǾb̒>WzHFIR'/7S$Z^~s_v"Ua)@8 0ؒ(M2/jt!GŐmz{lk$hNGmiG@ \֗4w#sE!XK;L09 vtBy w&/[ ?|w`T-SFԲ:=7]痜h^T]75H BVqP-'D{:oѥz:N&WN'qɺ;m+/t] dZI*+&EnJ9MFOa{ )XX~7m/&o?I{pG <ْ3M5&Jpbǡb Fow!WOpa;Wǥ,\|NS#Qȧxա K Zf;~o2 D/A#Z<_&uk),Wfut M|%_ML61ԖE2kI k8s ]zPejmS)o#-Z=)0$N0`5b[ #Y卢~g3q {_>"3W\ẀNP7P@f=1U^-.|HI9p#p8i@#,v)/iR, 0??jK_T/0i*QA*P:@HGdv=tGV'ۮ|g)IH\[P1eM| މRיӰk˔fDgDlXb zHcg| 7ӟMЍĐ[4 Ζ1 P6o;S5zF=]ziǛwi)EQm=%`jh@eln IClUe=+-M 4&F'!:]J%a~.jOj5 "6ͶSNvyv2\"D_ֹ{>hDB]/`CNeMKxP~td8èT>}bF?Vl;ygARtQ͟5ɚHL' 8zrNZd$^%|Tlb㞺8}Bk}ɓ(%Vܒ3dBўi_e}`gjVjCNA%_l @Zͅf>6b`zjMYߺBִXt*%ukalsxW#ί-{K屪{f BFkw@swa3wh% 3#&P|؊p/SG A/:vWȅ5~H9"f X"T0k]B41g!Ts^WU=7cbFOZSו7gq8 C.2f]o($Ma" :EGӤ*i%}FHE>SCxS*KFU^gX+gi׃؏d# @:kP)I偠5h2$ ;Rt&2Rv';D;ddMZ踧l SG&Gn:}}&J'38kuDZ1KDsD/HRoٗ⟾0#ܫiRWP5ױUD| 6vޤO+b&ku a \㤈8GZAm&gEy5hIшjEH|˧*m[eG58 endstream endobj 887 0 obj << /Length1 2050 /Length2 14371 /Length3 0 /Length 15608 /Filter /FlateDecode >> stream xڍt ilkb۶m;gbh6FӨ՘&m9{Z߷fn^TEQ (rcdeb+XXؙXX))5lSj]\mA|2w$LA9w{+;_CG>@ S;:yXY_9-OwP4u:g47;ݼ'3'+-tx- P2uU<%@/ .1\=A@{r@ X/z`eb;dmXR Ln^n S6f27HL Oy.6NnL6G.K, 7W?Iظd@ KEX;1kl݁1y#8YXXy9@gܚN?+urtXzn.@+,lf@+?@˿]l, `?p{c|$445o ps7?*6O@Y#{2<4ZfPr|_e 7`d1b[?m%$noO?~.Yhan! 6R6^@ 7sVSxoo80۽?O\g ~NRdhݱqrL]\LY׋~@?7rt{wttc\f?D!n?,7f0KX v?=߈Ob0ޣ8 ߈=?蝧.2[ g ߛ1x'a; Kyvtwûտ;Q |d} '{YKNo?wnNĜ߉6;1re7w}ޫ~n.u杼 /dlWYxswk/zl:jD <w'g)w?2.t?!æVgl܉mK܊6F{6NRm_r,Z?@GȨ!l %G΃R/U?P:W%\>k\2GY`3KH en=oD.$W[olxxzDcTbr8.c؝4>Jj.WFT|4x̐c7dJHa8r.6d[\mޔ9xw{}`it"լI@}DyTQEVCq8C?Gb6"HvmYey Y8ܦǼ1rwp3Oll  5pYY&Z]ϓN6!"rs[zjOb=rS.*&Zza#S }*^rlA<'oC+_|ߙ|H؛o_4`%2|Aa/sP-Qqz+Niaxt ?ވʭ[ v![Қ>1kV rk E@y6ӱp+Ȑs0PB^؀9Zvi\p >bg]ԬFJEML //>Yr?(ސF 4ǞyZ ʒ+?,uo^ӷ}mv &-%7RJv5J43*l ԋ%bŤAkKZa,9QyĞ(kª8 h3^G;Scrm.rRKdCL]d>MZ4;LǜAJ*1n:Z7m\npˋthF]ګhom\_mjh7z^ ˇܐ:E0%ƃ_4Mt`t;".+x3P|'Է-[/G;"Rf&ft y.-SEZ}KG[)Fbu:㯬:i77Q/"M5+5H\ u0 ~-S_A'¤_MYa(2aks>5yN BO26ڲ-fԝJw'M˯e>(/oU#s)\3֙\plSy$z<4o2;T(iZ.+r:La~ 3&*K Rߐ;!m+{4-37M2a `$wƚ6WǸD14v4 "ƂټD:VK%-MN $q~5JȥX.̘J3HmN+l~_bK9& NO;l5Z9 sJQ3Gڊ n; ]FE)Bq0Ho1$NȸJST~Bv5]ktEA1&(RjR΀9.)^.R_LEBgfwF8Z*? ST`&Z`˪] d8傝^qs։Ipũ!ֹHgm_ '*Fn҃J>Ƙ :x}ĎN0SmQFDTݕH'ZxV4Z>,ڠ4`>U~Ĵ(5{-IJ>U{<a'^Zc͸Kɉ^/߅ڍ aBmrٛ@339iM,/n&( ,JأCWi^.cpc*$w7d $?ƶIc' 6-gw.ϧv G1{l1H WwOIEڙf8f*jw컝hW֓rC3;Jy=f`eZf,3BRf LռHß-H;S2.avxqԫ$,0(j."ʍ99I2JQ.2 Ͱ\Կ6' I""pWȽLF5r?h2456}ـ,%5Y\Ydj *{B<dLHPh4vY=t )f&v/ A=VLfqԕ?'b~>fX\邼XF!(OHue.wl%Q ]>}I6tD9`4] cT9a.@۞bzJ1IN n2GE^xD_]h2LU]{DtWN;XťCoEOD фY,g89ܗ:!o l/%BA RL2Iԧ8[@}Dob̴/i: 듸9@ژfue'֫$m|V@Q N%k#x;G8()XGY[IlSNJSTk|+m%W2gō_)fA6^b4,5StWEf1Iip":t?xf@wҲ۰^vSlRb˭l*m,_-*U7r_%ბvYS8x `ڶKnKZCrP錤IȅU[al/R?Hyj H/Pa u oBb0∢y`;-]Q6T;@͌hUSfNB\ e5w` γЮt$BSʏj[Tl*wg[{L<ҵ <^c8CT~:N zsGMʣ(-hBa1FHھBk>;zѣՓRSj 4cqIg܍6Ez8P>`~T{^3f[{Ġ:@8Js/&C˦?vZ0%&8oŧHM-$nm#i2ǖE? m(?FX(x~Kѡ}Wc<t*Q Q{޲c(z͗^iJB qb^1WXkp|x G"4'Y{0a*!&NsQ&>YQ^X?py2{6ee QjƶƠpM-t)ns3Y p(9:ī'`:6Yo\֔PQ]ũBdVͰZxE!Iī(sOѧ*y얻 xE<΀v9V,0S9{<'f՟5{uST?̽;t ~P4w+9|`nhJ.L(Ѯ+n'oE %rb,whYjEo\p*[ۻ*(u n ۸v[B# yᛍ$M"QƓuoeژTA5 p(Fl?x@OǶ5@Ӆ>6V*vD,8^_;i1kw\-/Sį|_ng:t3naګBr=UB7ɡH@KT:"Mp ȋw^\oj<m `}srboFQ$W5b?מ@^UUн.\Ʊc f. $ʉgJsKB}PlӍJ=f; fa4B+"i7a*z! RGO3P*ΐD J`;ˊ{RRݴ|c?痶b`Mb 5'~]ck\A\hтTΒ]AfUupڹvBM&Iyqe*54*U-#B(i s"w/AL*ꉱv$@ |57PA$![G*|m<LA "ˠ'K "h\i -ڒ|*w/qQ7>S1 S#^_41TlVnS_`ڣAnlBKʶcڥ" 5y3-h}N`e+3+LLBzh&ac~a A4NYbBPq_HU}I^)lL N6Y `bVOI)Dhw+ȏB~_s#'֬=lD(=GH):tN.IKG-7"FgشԤ$F[5-E.8 4۸ * ~^[e) % [w p`T]Cu^ "=:`+@.Gzz*) = ہy|~*&S6epj1p>0)X=~G 3&ɠڰ;L{Pii˴%2>'}^R" @܅mwDJh,sk,GǗ8A\sY`;G*Fov0ORdxO\K8t㸳$DLA\) ձ_z[=tm߁Wb6jmr[ė,CJ ғ@b8M-dS&\1ހfJi )҈!7g/sN.QEcxcL`0Zm6e\W~/e<[>zM[B络_Fh…`?F =kSMYd3LD1:Or4k$k+MWegw1%(y:~U&vH%5>_c~. 69*(Zph>:bGue%ܨ;6RJ*NC0NV SmOrC _ 5AX_7K0phYpVNԯIrO*% (YPm]DrR6ܭ4dI) c#O =ѯ6!mM%1;|ěklU~Rpؚ%fSL \ uRקÚéY7nGÉٻ-X]CuS؈8B mC5t1Ւ`I7&7Y+9ntkoBzvdr%Q>xdF,GT L!pf@ɽT'?C+G~HvH;h )``=[~Vu-p/`lk?,D]x9Ho4&VÃͳT)uElhǛd͵zckQݏjrZ!h, ~-=#لDm ,SKP=:8W|zg̏sv]\e2G&ҧΫ^w-wG7胩mO;)n4:=v;_(7rtZtx&.أ ڵ򹷜$qMb#Ev9Sx6CE}PS[T(?U:51zD0 âyV򋋗çb@?м;0MRPVde^y 2oz:}1++4jaFyn %DGJc=v!kw ə?U[͏!ul.hNh"8B/o܆?_g`r]?Nnqs HNzm]XKtB3O, |bGҹֈ^t\ǰoB 4+!aӭ`Ee̅hws.x j.j:X#6LAo+{c"xQ*ЏܰE3QpiMJb]/m@ G;l%P.5/HP9_BB[!"1.>_o6ա-ӌFNgue%O";/EL!dKs~#t0l<ۦz4f5 =KW¶'jD Vqږq'3߷S5!JIrN>\2% U;ӑbB Eh itLL:Pu w]lUX&o>-%QSlA&7p _8!r e[ϿJ/ ޥh{ W HKp[Rn]0ȇ'[ү&b,zܧ{r!1*񭓜 e ;12j rG.OגCt;,Qz`5nHV,ŁVē_C0a7j7B>4 9ZȹAЙH}iIؿ7Ԁ2-C1=z׳liw#C"G^"H!ާi?>s&bS9T2*o/Mȹ#|=w&KX<+w|YyIwNTL2|9YHtj_h*?ʕ)=fSUH`f0ORH 2v:niV\uJ'Fq5{&kq'ѤKIȄvc$ŭS}[%vԉUQҮ/TuC%~y(5pΥLVnN v%D-ďFu-yKLH4eq<㤓;SsyX5F +Anq(`PHFe7t29wJ{FFp])vJe NlŃM9A["b?-@h1S'e "E]C`qZ!ql:~~Ħk%II P*8ˈ`= F5NmKd!ob~퀰60yI_O5ukSDA#E>D]PDCg$^8) f%;]5ýΐ>~k \YHa%()sT8_@^O@tOKuh=u}jNmV[x qt2&.w d1EmIs_&;ɓ\[i2 \R" ߶oe͏+YgyG( ϓf1z4m򅴏YkWȴNmm[n7:oxj+!7NJ,ѥ甽&vq-%/6^:4wu7ڕ&Uxy2Le R!Jr«GqVbfPP*_rL81r\SĞt`٬s:֡~ {̤f윙:c;Ҩv͵:E.4J|q>WE&@y[>>ߑ_e JO SP/1PxXR7CJV]n&8LfjQ&m%'(}.SJP6'@`^2 {ꃪ0tm$Mja4>d>MH?䊣!P)%xJC=[΃~V`H3\ s9$)Tw68M Bُ-;o_>478g?ӕ;ܷpB)4?qs[d' IM&\'^{>b8gC2f ߮2ڼy@O+}EfVÀ}`ۗVF9g٭!^:f ֯ wajcYo,EQ|ޑFt:5XGl0-n!/8H @m8~l0}AEs\bj:#gkY$ؔMW4z xүMGnv4Ш#dl r8qFt76:B(?['$2:\ezlFYy^ѭyd4V#³Xr{qoPORznK qڲÈ&1?Eb-ΜbZPj[oX:M'wM_5Iiinev^'"'q#-=oOJNM&YW"EO3A(SVdnT>C*+dZd8L6CeC:Q`tZpaPS 7sİ6bfB0vzi5 2m)!F)uxۊخ+8 =G/"377em~`_^Ii:>NOqxA2V0}3$؈hQ3iѶњ.м 2IƉ@ɀ&K&4NL]$бGͅdG X4p^z3s݅J+-5ԛx׀#. ~WŁJV)گChCZ\^{H[{qxq~Tw%!95ЍFP7FΦbOH"lʔa̋|1])DZo;R2L8wW5?N-R~5oBЩI d ̼˃g1&'fd* t'X|ʢ8d]?> DbTH^Z'gG$&ޣ1L IKr{&$wgA 7:=)>7q-q؂,5~^I煸0ZUDodN~9C7CjK@rQyumN_蠭 grѪ1мs-&_Ԝ7 yZD9x"t@D =&ɞ's\w )u-ŷ)C[o$6m#eF ApBq蘭ՕZV(G :gTy~qVA!Jw$PlDC-5 ME/G+]Iؠ{C+6C57Zu6 ڧ]i6ۗA ѐ٧#<ј߸4.N? pc$8x299V1-vb2jnp m,{>ih%jazʋlؼ.Rύ5jMبDKzU X`ecQc m#oHd ul җLaUGBQ% j" A8 Zy]e<2R9d_%\Ŭ:^֟u^g䗙'+8"P|x-w, kvL/\̒>9YQ-_2Xu?̌f LuM?@;e:Är$ӥz0jDAX5>4/ S>| rKa SWaӋ.ڟ$7t1iB&;8!|1O{>cJ׸_z.fh#2 Lm1Ǽu%3^V)Jֺ?j1[^T.TeH%FGJR^iWCKxk*J*rY,N*T(X=tu5KfP02}Mi:[5EDVV#`>̂}Ϛ!YjI)[*ѐWp&pigGO4Cco ϵeۉP8~jyD )j`%` /?݀73_߮ I妰|8/Xn Aޤ?8{E׮a,x5T+Ԫl_(x\jC~-+tgneBa:؅WdEPr!s2~~$}XsY wo+ë[H&|-MdIT`b'-16/}5vY)Sww6z_B `!Kw(4?gB~<->w( ٴ G+T wƬhp7jwfpZ4oIn(UzOci02Y1h BGGQ.=[x+@4*|"T.EٓCIXCRǚY\Jnk@]cU`Ϊ\=9E}m @zRƨڙ] RFG)2VrY 㿀P3 D !ћ>ZFR *῾xfB'kaK'WN/U7vX~z5k(i\8i 7j[Vp~s&+)λspbz@d\MIKpĭpVMۯi7AW% H`I#Dh̠ײ / gԏٶm.ߪ""&*ybCTIfbwEq0 l,:T lQ@ܦ!Ur:&r-V2q6aB)ٳ>cσ61ke\#iTJ^"vb6rt%v3'w;c3ԡv%R*ҋ,+1RNv뼸w[{aGsNxЃݢiƪNd\ג*BK% L slK9%/o/E Eiu7ȟ{t/܄{J8#u) 1TMD".UL_%޾1ipq)ɠBmV(avÇsWP&# .r{쭋I-LkѣetpVQFf絿ņaެ1M0 t\|) C[WXED}'Mke$"t-xtgm: 42fǶgP%-wG5+r%Aw yUF@#LIdӄA% 玏pИk_T;󡊞[*2##9!izl0$4D,}9KjDYH'? +cdՕ 3=gᩪ!uEVý1GY(Aa 2A2 p&yE0ʾ 8#󇔂2|๸0!t'P/`mw9;ȵQk@^IOB#lM`d|c]wʌ߸ (:f endstream endobj 889 0 obj << /Length1 2254 /Length2 18368 /Length3 0 /Length 19683 /Filter /FlateDecode >> stream xڌP[ wݥ[E{qwRC{~?sd&yuuJBA lfosa`adʫY)(@.6ShAv:]Č]266 '/ /33?N1c7@ cotwtYXG#ڔE9@25Xm#TMA@qAghlhd!@CpXT@'7/c[)j ڛ;6 S󻁫 *-PtKY_ _woccSS{[c;Od(J1xR4q7v3+1@BX`M@.Ό 2vf@;g9M߫w[l33(-o#?g@333+zZ2\} s < d0Zx? w e~<_>ϖˤ&,""E7DD= l<Vf 3'}d wnEx.aV ,3ɚ%qa @~2wk=gD&,[g5qkRչ#.4Q ΢wiG+_I}*kF H%Үm|e/7BE0XWւiDUfRf $:4YocnJ3"MCʎpXFd)q(<*-md"h&:6iQ]bsKoMTcoh)bLf(JPbbQ& 1LZĠ`3$~/P ; JzcgS70a eW}+U ~:CX|HIWE(pny (+w.G3PkZgC#l3_t`ˆ=^'2%OI,tMRe}uk[ zYtE en>- nG/5X$~ dOMjC{sFgVY%Ɉ v9WzAFPEM*a+dՔZe&Y;aejwfII\h0΋pDDwC:9$w|ht P߁Wp{niKѨINnnPyt;C'1_K ݳsC}%ȩL`~f`[v@>25*ky?](_~7;n\({Y|, &Ĭ'nw|WNu0-SQei_ё?Ů4[5cYbw 9~ĽvO!ZblΤGj^3zuǍj#C\ ,۟)ևNWOFa;n$E(L {2eT;A}&՟_lBu h}ً}i,FJ<Ĝrz( pV}(f &iYȤ&,7S `̋.G\wo˅LGuHsh RPm({{k%?c,.'N?lO?kֈ}Z/u) fVD<䱈x\fh֤I  4 &_i ~\.^a :_T\iʼn'2h(%mxqS ohQo7 qAQaO$a>&bgSyAC;)(Pt(3 rfVi% |8'm82 &Q7{rЎFmnc_gfK:|~ܛ0Et:CX3_ >J92A$?\/hJzubIz_\DM!o5 fWzpXԍ{>RN)8J0/1{n]q7E@ y+I!4m4|l6Y =fz;heC0끆A>A-ѕxy# `X0ikELЏ} rYHG*V֬Gx*^h)4VTa&"Jf|5E31(}ynK2u|uLýl 1Ֆ)Z}K1vd=\X-&֏#FCG#Nǧc83ps|(Ƈ[>| 8_PʅX8W "%I!@5 :?TvƷ/M'yО2 IG=J7phX qE(Y[kyyww[wekJ Xr~iSqf~dy^dX7Л%Tn'_A5ATH#ItnE`kTAQi>ܼƑ'Oi[!Og$.ۚаrZHsS9(t<3MӃxj- ;$!') ia03 uXQ׈[p:K~F][HGWV^p L6i3v$Uɟix:jHΐOښ(DX VO8} Mjr[LASiȂ Z0T|4|33xvvkxLTbgIϋ2c:)?ì1(~lb0QCYKɗ98%4iTW+643x֓A",}Op6"aTa#CeS'/>?*dbO k#-hѾV4ZT#V/`c[O>־񄉫HXyf¸7 63FfoVK*؋*Lv.o|'^lk;nCx߬`ΞvfSD5zM6fjDV*(PTQ8~riF) &HNXJZOs᦭Fy U*5;K̇+xoțDZe|C[)u W5MpPTwv{r7VJ>^8APسa[3OM(3_cibmP/K%z*#&У@w~`UHAZB9nYl4+'q  y+bݴ˘&%W|,pA bsU?bE|L;>18oLVp2a62쇐 ȑj.1 m{mn,l}6Lpo:4U n>{ǵ%{ؗ{ jtx?@ ;49b=h_Ok^?5N8N'{Idh`h]CGc+:Dr)N/B BtZ.wS| 3z\YPD([IW1i )̂ jGiO2).8E)20 DE|Ҥ% z[s&It*BK8F+Ĩ西 t7/~8jVNj`ݴl_G h1i;Jn"JKEfKt! C#m!”^ߤY&/{|ݙ`z "u/w76~,a _ͳ"sTz_SiU8egڰG_7H-;6g\cO"Í،ˈFDV6~Kp4kT~|)C9푍ȞJ[tNŷz8H4̚bx %3u_QS'M{<$LD`d%wGs<29_|(dX,SsZC0D;ƎCCy逇()U~86Z'4PV_Ey M.v'$^Օ&Ij3Ssv]^Bo=7k(A6N=fD˜\>07;w6op;ܗG$ͬR`)E}Y5cjfJJz-J-/{yoTSf  QWj8 i+ʩI{M&;e2C[,~́F̋a}<Փq PӲ N#r> NJ[~1ZT.m!Ze+ 5R`>XeR5&U83d<&=_cpmWaJ`46ɖHjno>oؙSq2\O湿o/La٩H7\ -{=!DkΧӶD: |RCKkjPT) H ]T!L4Ϊh" %)5G^DxvT?3|+w+P>$S8= [;\[ E2VD4P<_xxGs՚mu^,iĖit5%ҹBmUiP0ٲķS.4'^Y%JJQ^%3-JNjxefӣ?3$asC56T2\a PmsY8gwN3+A Q/w!86ؙ g TQ, Rci>AiB:\04C*wSF_3ECWBKZMI? ͫsKBt>I 0030jE~w<#\reXwF<8R;`e:2O(U8饍%AF1V_GMW4)̒\|7{,;4,Y^Ώzʼn8z=>ZĠ"r>/cte@ôVGw~.}7TPYXt?m|<Ґ3VPOJоobc 0'z=eq/?y]+EN#M1E0ИkU;J5"cz˵=7!و秜1~༓,Ekv}**ʬJ/_Ɍ2Z[%p-ɇ_!u\¸O1/X>SLW1~q'w2KVҠd6||>˰^(e4etܸ"kU0. +% ޽ྫv[E#MAΤ.:0 ^MdeRHDۿ~`"^T:}-6#!gtl 4pSdXµu+0W+%㊍63&cIc2Tq B N"[QE-$x ;竾 QiHQWozqeW{e7<0= 8;-Dv =A1\6l.E5KQ|ݭPiF@,W8!OkS6fs\n%t kL eQ|uOM͠$q>u+ G5W}V1ۮ+ɥ*ppEKJ9d#ũkOyY&xNq-K{L66כ+c]OpRDRZ<0kMǿ ˪&XX~?Z-Iv?ʽbHl#?P5X2̻o2CO Hs/z|ֹλ2i`CsN:_j%Wg͙Z08M. :q޽zʝhl1[֙C37X0~vm}ބ͟1-NtY  XZ7qߑ:Q5=ؔ U Fݽkn?} tBC>!rs[^.k.D?J-!|bŮ)wOzڥc8*j\XHJ0FMC·H9nTUycc";5߯d}g@ŏ8&e-*/t.d7{jPLr_rƜVPG 3#XR}GO !8UR[Xh&ڿF ^@"fv|ѭ5;debm'BU_!ĻB1X099+LS:SpoXj (ZPkpS)/)6/;C<'~Uw.ʚxSk>6*qq\ގ6k~Ar'lar}my`*Ĩyru,1dMm iҚ >b-O˝p91dz4 ˈO_ȦW4^Q軑*a\~̹ y^X_%-9)"FЇv1>>[m/ w \_x61@C?rʰnW ;DY ՟>ݖJg("Hk$ ̼2nF䃳J+k+q{ J`_oZ;;yp\_k8A$g#T,nKRvmյ||u Ҩ= ]JoCw.vuO\ 7#c/ad3|еIVCU-aGpF]كho˄f'sq(ҧk {ӭutshi %WU;}Oa$"%ΨNBFW$e{bm/%MkeJ|YQx/Kan-r g9s({N?7Q~aX383eopu~@_Qa 4qWJԅEO֠(_#R:–E"܊ELx 5+jg7ZJ0x!1zOj8 N,S (9Rý }xp6,X9I{M}Eo4sPt<#B1̚Ya2#P3!{uI\.Uw[Y>N=T;w|S6N, Qm| Z1a?VOUqLU'oȅfŖf;Oq>~S5EA?W[nQt[ˢ<[7WUNٕ^2_jƓr,z@ TU 8CrkY#,jCEiKmm](fL+Lܬb}PuvX58,Aj ؎xz X=q[a*j0Qʿ1 E<\A'@؟lOTKԈymIӋZhq]+LKTf"} -Iqjjhh;ȳƼ>~~Q6>xæ2w'@z=B=۬rj3Zg/XZ+xꯅL@<5GDNm=B#kXQ{Ȭdq)%f> 7`q?Q_3fkY`Tx49ҁCr^гTXgz?[Gn#.b; h*P*Lvov9"7ՀNӾVZd+r%ἀ5Vv&RM}<-&AAoQjwCwl@tx1]&̮}m3HlX"A jfwa]*e;Y1;$$k8`;Jw) |$^ >l iyA.\myYF}c*m60|I>61ZP挷}b(V9ـ)K : kd8ͦ+E1S>sMjq'[q8sn '-҈*]f"6LC|N˜xp .}ub$%^ḏэvj+Y2=̕8yY@(^QUs8d9L*#&.X3Ջ 1Ѧ_@'6(. pLkR8W4c,唊ᬥ*%Q])ZЫ\@ FxiLQPhji!$!e.`Q8_x!@c88"B.+@RLp=qa 1dngy+0fz f׮5`g*g!Ds]/ Qioj%!(P仢Z)Tm/LiBaJ7]DAVQR l4B&@`khi4κY. 2/6Ont$4%ȗAc =殭tS_aa0.ŀ|\eXuZe#wt)֭~@9`@}Ĺ[d % jPsE!e%W_wI ;y5 /EϼV{C'8xQoۘ=!+Kޑg*t7=WҌRB),V`7:CR񴣺借\ݛDMڛ?c*L,n%7\5ጌ~ -\ F•$޺(\L"WK sH5؝2Ai?%zTBY`*73N6\Uc~u',:.$Fy\iXVNKQzf 0sA '<(+I%-93st}. k+wJ?I ʲutDLBiw\XbټzwV}n#`jh5|Z3 ,!DԪ8j@vr6 qaP.yly ԵSpqzҘ6T,O$e/(п;%5d2e)PKbJsS-o\|Z%QtcQ-f'f~TT₼C1ثGV#ڭap.:"NM%.sKv Yֽ_l=i00<\ [F4byb!cHiTp%N`S !囬;ذ5ir/*\-.>H㤛 ;\J,Љ((s})'Rh6 8K4QG5RFעdEm\ $|$P5A1DrKbZvtd~Aհlnr[YZɿ (vĽL}:!hv̎]lf|viۄI~[H>lp2B!p*I*J33qMa&`T‘d(YP5=OuR4|"Q `I?كz|+\B'@|إ3gE{$U:_ K.0xc*pyk.QoLO=m@AHFKcXL꿇}Ŋu|c eruG4>_j$cͣ!ŰJpyбտ3L}ca"1$„!2s[v[4(ج#4I 8VGZ"oz@2+eLWv_'3 טz:)\~R?ɐ30X!dssS/OڂŁ+UlnՏ$l?( V|yV FW^"Ml ֒GH\.Ct<LZʘZ[a!&wuXT*m')oH TW> HLb2pX1hy@2S; j&vO̩*q; j:|Zhܛ2#鵡բ٤- 2l`e3ܼa!PF]-gwN{<_QFGZ.+t8I4.xLV[[q\1y[R=^8|xU*%Ź(f/Dnxl@ _5 $x Ƅ^;Ke=)[)fN'1]T;z|mF S6}Jp#z҇3"(pn;M։iSb3aocDCύvNukQ+W[]Is Ԋ~@`?0v\dVGYG#0EcS,A6J5fy>uϸ|.iLe}]+%[߆;W\> PvKCEQ bPh|4&z8G xjxAڝ AX={~h͌gҶk+M= endstream endobj 891 0 obj << /Length1 1428 /Length2 6328 /Length3 0 /Length 7288 /Filter /FlateDecode >> stream xڍwPҶґ^ "JIhһ4 $@H HPzH.E4Ҥ.7䋾MfgLYu x`D H 4|B0 򷟘BÐ@( ΧZH@I K $"QR% #41" pXs%%y~h0\Gk`A0n(!c8J󻺺|H'C  E rG0  W 90kKqF!(;@MA s8A> ;dmtp!`tT40X h$.AV8ףּ*@=?5 Aa_2tp 0h_S ָsws+o Ch#`N5?> * .)8 Xk[_ !8^HGGBp?h A9C<3OXPYcVqn/w(D'?AϿV8ۿ`_THˈXWHT (($ -Y_'7^]HEwzq ?c gm$NǿT@T%)?w s gg n6 A7@kA0ga@"lp: C. cm \ 8 Eapgm{ZиmH P(1N8K!U0[~>K(zH{)Cm QtvFps[-m~ ,Ěxbi-oW_wx˕wOH2˪pV8ix%tjSe ŜgbDE W~*hMgF3Ka؆nZH~iy$eE*HB $$I) {hfĶn!|[dG)r kbL!feߣ:+tC6TՃT ˁSM я&:4MKZmZi;TEj-G?6 [:ĘW]L[_cBݾ>V;XkQ~kd/sSLe>=ݬAt #$3_~ҡ$&U2e&Kծ ƻg~T}e22VYnH;Ɔ24 ,UkϪP1H'8;Vfje3ƻcRϛla';Ӝݹ_m! BsJ UMI >p`+oZG2Qql=z0[JeTc> Ͽ&_d_DGܑp}6*\oϏGz275V5᠑YUCAKGjCP!K pG[ݐJSogH^3'3<%$Cka y3WV/;1a!;[L,[:Dž-T ػ%yΕ V_ Wo`ZI[ֿtxΐBJ"b"Y4pr.O)8PȻJV\ĂM*M[]0B ]"'.0187z?B0͏bMxa}Hy];b˗$Kوk(,uRNN*!t+UU"凇3fC0DԈa8x$#Q%uG͠w*S;4sO =BYџw74W5~ɆLN!?JZ$IciY}d֏kpPi>)y_ӟ ։y$35ab⫋Ã~[' /K{mCD3򕽻B rW:[v$lt:~9TS~2ڒ=T->ǜwZnz@-q`骟D[IxMisf&.n}/\+˽6GސOw:ݵƇ UM~<8~o`Os+'C>h Uޛ+@ϴTiׂ'%7٨٫KՇ6c57AQ/w#7>*޷.t^gz@QJp ZCOur!Qf_7r$oհ{Q4\#Р%33=G!@,^`X>Z_ThU2Z1:1OGkŷ v4!] e"IgOM3 HXԯ߼WD(nS\uwOm>߻f=]qH/Lq7~VĜF׾jZR:;RP׮Lwky7' JX?qUF y B!Jwo4vrgQlj_e}pu!$[U k9O-xmR黫6uՅ 2r?؊Ngd6 oQ \Sx}em\%!!S0c0#Euj|wGpָLN㗈ǡd#I枮8N% H{ ;n*E84GMz)0> vKy۾ 'F*gvx rfBťFWZL"Ech:uS@H΂ 2.9Gyۡ>qK}U8$i{ G}fprPMv$+{<#%S?,OQo̡,$n~mY Vƴ(X&>*ۂj A6%$1Yk>RlxX [w ?IKlOm֫\jçC(jOe8j=%cgQMu-.%D(M2cMi+{'%C#55\Jە趷ӶtŸYǔ.zOn{/ 8zr/K;0z49$T1ۂ8lt}u=rnjW !\Ư(郔. 9с5eqn^jBaGkm E/o,\0 F 8 |%jCT/sb!ҹrW(n i$m2b]u-e8muQ,vb\]uEs ѐF{Wd\Qᯂ$EGw&yII+hXJgDTǩYswnsP{CȌ nE)(C,dލkNc'St3[Sh{GLwpZ [Tl \}5pGS֯ѝZQL=qlh,W*XՔ7|G¢:|܄$H(fꃥs~{]eܟ$uYv|t^Hɴ-i}O2"LE`΋eY}٣WTEXMۅu&|i"KsH}5&E??)Bh 4qqxDU{+P!1Ly&i=niYo[-j)鞟X7?;)?FgirUD|Vc_Ǘ< =-|X6p)N"rʘ$G[.Qc] "hj _S0fҙ7Ἧ+^qG1¾,oxT,d~Jko̍+#T5AF4OcK([.).G;XGS+ٕroX2HO9J{{VG4<ծr8ɏTDèFw8ILCn6<;iY.hV(&݀<%%g|o>(m|!_xpyZd)Od;ߗJ?Jz'U7qIQ+WMH>ٙh mo? p'rw{^E,30LyX&ysX.hQdv0<5]oT(c2qF^TaNb6:MO1'I)8xh'f6N>klo@Fȓ9F0!秲v}ď,)V+N-Z$9PkI%9SF[:-ly8:NZ},eYDr)L{l/MĒ94UJC/FHr=JR !gx9цoN˼̛ nݟET 6ʴ8:$#Վs ZTZi=p\ sy^ iqDۇOv2~! '_1Q?Ǐů0\6o7G\RUɋG2c/#:`3oϤ,z ]) rO4xV#BLǿľVٿCu*j p"B-WeR"[Q/O2$90OM:ZEFnThP,<~R17z/|IOD< ~pM0f&<)>.|x:p w &lW{T8RY$!ءRVG,ߨ=}} dݽm |%7)EO:?HLv΋^K6x/2MY9NUO?Nf=J0SoOZ^K9i*%|2ry}ش=&sRf,DJfH'ks6R֋Pۃ>؟hR;RLSՙY7AoJ-n  8/պHTvٗ{ `M? (zz63WtߢFAj}{d lhAK8S|FH/lhq0Pr+h2fIF(Z0V\Z~E$AS?nypvg~dʈb|f^[zmI/aK endstream endobj 893 0 obj << /Length1 1428 /Length2 6162 /Length3 0 /Length 7136 /Filter /FlateDecode >> stream xڍxT6Ez^H{o"`!:H" H/һ&U); _sZ߷Vgf癝+!l!8_H(P1@ PABܑP\?J mS@Ĥĥ@0(7.PyB:M$`WBCQ:?!IIq; t@(G "!P)8PR^^^ AE9 !H'2@;0Bأ@!p$:nq4z +_ѿAῃA`0P-F@p_@ @ǃTӇ1ۛ-^=HPбSk`8z 8}0gN|m~>y`c N0~ؤ!z̔GE U5ύ4oT~(/9?o*BoL6g{B*\!hyb fT  vIk|DZNu?Ʒ|DSu?ڸpUb*@|v9OI EGy~ĝn4+E=EtMۼaxǐfb3u[ vHMj5V/ڪOmbn?iwo* Q/񓠹;DWޓM+37z(+%d3#*6-wZ~B4S[]mK3]fF,̖i̓)0fGdBTsmx#aDJV=\a 3P^9:ۻu090r^uar В0r8;_ؼ{jH5m&5r1!u3RB1}EAHj) +Xp nPS&]DzhI6\'a1( m'Ob'FXxd_5Ǔ~k[orJ>k56_[$ktn_niE]w֓Y!?kH*[G<]>X rwil#D[[G#+2 XjF#,[0am͚; 1jD*upkt+k hѣL1EUeV~QyiOķ1WO3~De!r-s!+M7B@eYV'_f1wlQ GR(\o#u Fk,] -bEuӾvox3I:Q7'J)έhwr& ì*m}ՔXC!KE^,_kFŞ e"u{#N";]-1q ]i]ë^ѽ-&s <|0\V/zߪ1;-w'o(/Hc~:< )5=IxYʨtNn֜ +"4Yś]_Ҿ9}[1Zg'b*\]︄aĎ|"ݧ5JU?9~ѓ|IBap XI:sUgۨp+uHVĂR7OݽMV5=\|7)5\-3+1j0-{z3Je<]j~#u\]w{Sk#i}?5.Ni> oV*Pe׵1ejd%~TݻUfvL:89SS)//r^t.-_e}6ѻd\_k*"'=ޔ*q1z`2%}֭dAi68qMk-I_QJˁoQOZ2"pJ<钱3ON&ZgNpG/xmjf_jdÔ b7'G&,:Vp!;Bıy<*" qi~VJl?To:LDDbL8ż;Z4Z82pXz#dMA"0|gP4ɻ "JhȊrGqB[+&(C ݆뛳8!</EY&+d U>$յZv9s]on .SH6e/SMc.uڹ);О%3h9W2$G=[ųlՃw"m̄c+ĚG߬זR?6 R.D^gc.jm?ip~5/s=#ߋ%yX9U![ߩBXLi0Dhk\ eHJS)NpMmVbݪn{[<^o %Zf;{u94\s^ʚsIɏnXLԿ^u.@\`|G+{\Xv'Pm۽SI*}@I&FeH9ufsvf]M}oο&mS6K?>!,ݕfP"Kf4j) n6?gȒn \8|t[BGƩs^rP_߂: ˕ r۟T瑩\Z~̾WNOZn#@xo*VVθ?WYٷDM.:i1<3xvZS\ܖJ.xkaG'@.[Q Aw!J:`hm1EKGM}‘)dz 2L[H@b$Yּczfl! %cj)ۛL^z|"4~86.Ib 5]ag1CS\y VVI3ege:GVߥh)<I3pפqnGS jHF4!wL6^&Ls$Z&&=H%#SlĚG^l+N:|>oA;s;4_?C"rICk#)fgҊr.ZSIB!c\k?6 TnC9"'98#lIۦ-"7PWpP8&ybޢ/;w8)%׃JO52; +X} v6t.*(6 }XLCB mi,a=zôIy$x.~]_QKsH;msqTEvtO-0#p-~2{!\)Ned.*;IDr5!Y1yX߂^܉A^Y.;"u6,~⭛<=\ 3ެ< 2|[Y+7=05Uptq* -iؤ;((Zez:!߈P 󞸡3Zm'{tLU7c$eʚoODP7NŽ%_Nf -c0,ȩT+?'=?AV#wsjoD:iy(6q7Åoyш!y<1֘]Φ!ҍ^ׁ`Rlz+a^6*eaVϓ~JkU]Ye~كՐ3J1n?&/qMk^)QJӺVyBWq=+LJ'lj^?u36/gp=a PIo~MGyrmF;919h|ҥ̏ ۼZ?V[ O ()5 L'e%tջ>LϣU|NZ8??N%-Nbq7(|HcE5&U0Gj$&s !IO^V:lK0-=1uYegy'gfΗ2d^Cb%kN߹@jq?xwlԮrd<)ۓ!~wXZ/A=T1>!Xդ5w@afK"'krUGOɢ̹ _iģ%)ZGWij%j Cni,h}$Ƙ)#݈@旔 d1ݶb%6XwC<ëBƒ G3-VOKr5L"%2x~´t;L8CgE CaWsiS1^^Rt,D Gb Oykj:,4ť\ ~;|浙3R$W/z録 ilܫ:f6$,,y`Q Zq%E/*M75ҪSX ̒A> stream xڌP- ]Kp! <w ÝNyޚ*fVwݽZTEQ(egWTWge3!RR#Rj@v|X;2 cg-@`ccaΑ a 2(2lNv KgpИXyy::LmΖ@pDSck)_.h,ܘm-hn gK* 4 P2C n r[fgf SPU(m6VۀOqL/G ۿzl- k @YJݙ`lk|dml6+uc[1?LANLN _YLh+? #\wkekfd53EŞY,B-:8YXXx@ԒWu{_J_b0/{;{9d!z9Ύ.@?YYf Sg d;X 4r豀Ǐ/}Z{6bo5DRL`dcgpsx>_TOn5M\pg.hYZGPO3@{߱p?_G&oFR.i6m@Xv_S-4V!$rM-d Tso,,Nq7/QQqr=Y b039|vZ `%q~#no`x̒"no `2;Y70F\#p. 8oE_E7GW~#pt]7Gѵ~#pt]_ 4-m*x@NV NI|_)+/0?GcS51?⿷_e8)Y'_b$66 k3gWϜw3Sr;^2lar/˟a&?Mt~W\DK{K`N< V@p~fփ#;'ؗ-F]ph[_w)9v++o58=fe .$IIB.@3%sSlGKXGtl~ l4`IΖ?F\g7?}p̿ޜL,,@0?67w`O@ǿ3翞'_/]@;qqΔ?}MpQ7ƝqiO^m.(pIU?EV$iEHš޶ګci]w2.(pIhi ܔCq՘x[L u /Ii,39>s~ts#NV(iH4D %5!;+nT\Dn٬RdErL1l˰4 ܂Hq_(fFs-kN-ݚHɱq(7?#aQ,Õ*2(q/-TSKj? M~|A)/.%IXBiTwKwc}*&z @JB/n" ~y%DΧ=ngz=xT҈ Inm[дb4Y]Qd&X{s/No.U&nTEaֆ@dX4XZ:Eܘ{d#fs]Jl{,Nh:⃲ Jjl0=(T:ߧ&6k}KIk@rlk5cI6۶(SHԙY3cd7̝lzSCKyu–W_M2?-AQ#EPTBB?fFxkLEޕaJ;ߢ͘te gp]4xEyyIDŇ Qgp2!uP}Ě,-pq5Wy2'F@U8sB`8 ҇H(:V =쬯"ep{.{N~hdH= (CO xϹb#:3H9?:nCgnH˗8URq*'^+ѓbG{+"5|E4ZԻ ab}ҥH9I8: `1{Th~ed.-:%FBFu4I԰6DQ73$7T"إTQDem3hGQ/_I09X~yuCu`h\Z6Ta?VdTQq[ m%g1eF40>Q! m8ħ@qkI0z/6ڰ4FRW-nEo6X9*>|FLigهlbcWꈔFTDŽ^4x}|LǠ1yw>FLMwCNLj^"MkNjUdL/<}lot{/^97T)&B_uY<̘1CC1ٝ%c|onGbߎ#C8I>}3ᤸEd$ @GʬGƸ(6Z*yXbpR~\}K sd)xOs "^t -*^Q%Su`$)LYٟ3Г'D˓'lD2nwx_YeKWaLW9f:Y!n9:s^B{?`7j?sw# e}z'B hA3D`diOƌ}v] uKڔ{c$!\מ."&A@uFT{(LJ11KMBȬjjf vt(~wW\OёVCBJR,IL< biY!ST eCG_;ÒAc&]ech}uZLӷy@2f>Fp;Gd/AΆr jmuG{g3\tqH%Oӆ@Ni1@!G2B Ȉ-}'OAoZuBxOP.r 2ؐ<:qlbN|zf @mt~Qy|Ca4#rWa,č+Ӄq ٜ m[n}r6x~NsuO/#iS+xD1O- `dUK)  7$?tզ<*"ids,,2dl t֛ :QWqt} :=W<4v'DBStB $Gm\>s=(K26Ghφ#P= !ɯ?<\b*EՁ䭥Ks|8!0$6mܓ;18j7 ΕLQ`{^%w>sFYή2KV 6bPz,$}#9JOŠ ƿ4XO#7WI&{Kf?>;aRxUA7K.N@4Xq$f)ed^ /8{YA̩-9_&O5؄/,` ("Gё ght2JbRIȏE82 wWWOEE1NR6R+{gDj䥵;Dc%! VY;Ҕ=*NZ N v*} ũlY;9mf2dEa~wZBF`\GQ]ޗΖ~R=-ME ]0GW);?'%juOYeߠ̱g, [fϴ YshEP֋oOLdǕ{н)IQW1#ٳV:]1|?VbWGȲ^`a#ͼj3ZA &eSx}y*-pQt }fC($фcfK D8+nK;J 952 i޺Z*wX͵|ܮ {ۯX)Ki>M#v{ԛ!@ok,[^9@ D%"3:>Q|o` til[ T׻ $1(bxzf hwZp j2ße`Qfu+ cg7 HVp ejxVrJԆ~g/wVܡ3F46%RJ=݁3ě>^D'$ +M235ɷ6bfHsHYHkiQE# aaZWki/_ E[C1 A]éu wEo Vc(%jP4ȴ>w,nf G6hG Einr`*##f=(5 iRWa#u}Aȁl#.~2e1)}\MrJ{cAoa@ B":,3l03 9T1!Հo} t-b+RZf>Tu\RMT+\L -8uzV j̳C}qOfв?mYX CI`6 CZ02Wb6-B<`cA; 0lyC;rmj_#k}ej:F{FrbUĖE3Fi-T#JŒ^S ོbE:[:GA:U+-ŵrKm}fnT2[K @5U']RDl&예Dckx^L^PHv.@?jԭ\nt3ͯ&%!ObetCCD)Ab 6p5rqׄME_!3ڀ >nբmriDyd#3&zwTitaLyC:ƪvd!(V?ͯNʰꮼYț%q/&NZ.j t{^;r%]qthLӫFy meP}b?s3'rGyg@Sds, R)lzE"jxC \ɼj\z*U]\aHcG\MdiypW5&'+r=F|\y >eHVeS؄bRq]1pj&Pa;ԉܠu-Dayz, KvmQў/?1|ӠW->%% uL&a TF3>O<@OE2BFt8Tg Gbx*lُ4R_`[{h$:+-7H Ia!JEtVqw RGh#S"pm$(} C,v˅:OF0UeZ/~f0@7|{ƍ4Sxi{&&{siXqJ0>LEg/^K%)q>_f@7;]~s H<"`pڽի&Y! g S )#jWkB )Vwr@BB ;b>_Ow-u愜kׯA:N;i˿A{hZ1zdr:PFv ]/:s5"|_37ݠj}g|IPؙ*Yn~4v!Đi "YgLr[]bZ :ْ ޤK `6'Rsq4= kab ԉ`)hP^5Lߤe}}{y7i+оMv!v` iB',Ns|ҫ7 /v)N5eF; ݽqH7(E{ξy#]mૄdN[{CWFQ!UZG/qzцs:Dy&J(vma4QΒO o&8 rg{sڜf@ZȗL*M%bӷ+?R7y͓μ+ T KLXwB-.\!)O}ܜ",?Qm=&$DK.I6Q+;bF(Ċ]? 0["3|cȐ#/mKѸհD͜%@Pφc0f(hKTv.!F8FFr=쁢[o=Uz2eq?-m& gdaG&IqG`c$Rɝ{I2.}?bߺyuyI* C7] |1Gov#ەO&!5p8GAYKe}u@=6kt{ Ěu?SsU9ƞ, ,!L"ob,d2Qx E.dPHMTsޚf-TӎU:ԩC[>'aؾp~%kUdOsO$J0^]Te>zfbJ<lQ,*";F 9f7z[^U8q3᳕DXLQ" shz"˝m(7C[gnN*{{FK'ƯYǪ#\ =t6SxύtMX+@R}y@[d/\ O;O,TtIe(9қ5q5+>L 4]k5(= TbauɜoY>YĒXg΂5aȂ[`_0'u8 }3SzI׶s%%I %c$jqɭ8t{}B4a5Bv=CbgjcX7Ye$j+ &7"'Um23: W'HdvXZ%k/n'_& 7dƥ0e,4،7qt=.)QG[oB F[}Šg)c8[8 (|h8<#4*?4¤[U=7=T{52eIo"{줫Cbwv˄j>$NFۡI>|6 |̏ۤLG ņpZPrG=Yی*gv(Ьu0l gHFGƾ=[ r=BY8Op"W+iLyIc JD2 S&]efME&u[G}+`MB<|'. TӷQF[{{]{J\.oP˶$EQ_cZ- ̫3z{0Q~F|!A)3ཾZKyX;{ijլ2R S?5+f896NGTz$?PӞnFipOLɯ%$,nYF%Ps^ϭaIg.<n}3^bh>tYm4#M7k;Y̽lb4StGfX~&ZW!d& V;KcSRaIՅɌ^"!w譤&N9ʎCh(K. dlHJDsхA젥S ^RƭZ4] K`[/U$yU" r6[2=)`E .TÕiL}alW(e7uB8k*.[&t1yhj(՝\!B'_meۨڐ&yъ:g[cCSTU~*]M|[ք}cۻԙ%~IJ4jbM*U/Rit @W똏N:{+ -27Ld0_\נ?; OA&pie~SEar~X. ~8e@TySSm0/"tXkL@ ^' >ۮzUmNHnЮ?bsV6n1# R%m;XUzH8G ve]W6]s^Q$84Vj >x%fkIhiT$,YF ifbLBTInSJP502'%lG!-%*;Mc7NzzxTr?,#I ؑYW0vmkl>4j>/(RzRc#%5WSn%_rqc7'gu $iOjL`lɓ*C,3 qg~[ G킽ݎ\7[(I}0}>ӸI k顆-Ia ψ%>Ӻ9IoP bmfro2Փ!;dEU+kadjSStWZ,i\ <);GhQq&?WI( Ox#tP?ݙͻ@_L@wZ)nt_ܦ6חZAds31Di4S)L.Ϣ ǗOc?N 8[/$69h=p`:;,.~!Q /md"0,8ق9n#qub>~׵Iݱ7؊Ov1}Ҧq%@lRG.TL+Ɓ] u^,Gܝ2!ftzGp.]^΁U5@viWNov}>w] ikz+ Vpԥ)!W I PnN 9=uR`~\&Ԥ, @\-wB[jgZx002<3$R.R\St>(#gǩ=?/~^)R3=<6i/O,wh O8qWߛ+ܡpVbMKsIhwάmrKy̿ hҲv܃$=|{275I&[WŲr^)|Ӧ?)2H*(= tDΜCX/:W&"RsCdk̟1?=tcZ?/9{0>Xaxu~B`h֏_|ձ: a}e?_ Cزz:ZDZW+e |I*sR!ed43^]4QE\(p&FtYמ7ЇQ 1֦Mq;_{K͔~vsRN/AFѻ֭BksYL1XJUU2]The\%ܗ5l-J UgXj"JO ouM.IyGɢ~lam~K9g>K^>=ީL?밒Nr`\)vJ)hSYҏA,XGѣ9yH_L7]XkWq ju,\@5j>\ .kdֽw}͍҅p:aflC鷅J&3l}8|kArO_ 6bo' :E8v<ƴPHUIgW@x3U&VyBy_{Y7Uh"}CGZ8Zj( ~Yy>m$4ǣˆwo$]S N =7A .Mx4U{eԵoT1tނ dto^Pq8)X*^  m80oz!-I`^<#Í MLz[Z/7.AHfx,n KqJ]/flُU.{ܰy;AW&,sϊC S6S}?n Wy]5P;8q*o/fJٓ򠝃Vm ڙ=[h8eݝ3M-+W4b'6Nsp~ՠŕL>ca^+Ufߕb_Q"P% >an&) 1BW7j ZyB7qE`&Y#Ӫ$ VKF{Hy~u|n3$I-3%W/X~TrG1~c3qub-pG4dqk_ϽGzll@b42[Ə[2uPW=u=(5E.y /1c``>m2|V! (`" J&ӝنm~$EB&[Aͦ8,z[G:aGm7U {;tK4O,@O?(eHm^juʴpS$B-'=w8^{ (m7;\ɛt]MZ%9p !!ᶣ&7^duI`OQ6_{XRuu⢄z${;J0OWh#тE>W-XE 7~qٲC pٓ^6ً/R!8ȌP)X`-"mD%?ߏ@]cZʔadeЦs~X?_ANpLݵ0n"[PFB_9NH5ВX>2ha%ZQayNl;Ԃui<QL}K1̯ĊYֳz𱍖)<=WPu;?(8Eve<>[RsFJtȩ>!UJnyݚ!-1BnFSG6a]Soovvح";[b=ϷyعC\S<G&G3{ -y{J(h'Ut.gB/c8HҾNtU <[o,NV#1kP?]+#PpK:b 0^؉Rc/EB_ THc ^0T໒KT~_ hyT/Ј^TȶkP ^iH"G$/j#xU^ii=]tj_ ͗0àP}ؚΨDO\Xmf=ppI-YZR^וeM@"@ J}xv䣴WO:E`9צ:2 ld伌ڽ:!=.(G)i YxxjwiX>Wj`n_fĞHz3 ڽ*^j;,V毰XKC#;&ץ@߸}Mg!F@hڨ\@QaVNfp&u k@ߢ#hi+7-_ޖdM~S(sk:eKϙ&1]&'A@6  3\s4w%_{IxaUqDkDݬ$y?+Uk(A ߝ=ٛ +Y/jܶ=Q/tn9y >>R+9N19")$:A%73EKa_*B5ldAN;/P¤7HliX!ГV1,[dF"Xw`ϴ~a6JF(0V7L#)S*&F~Sd, ;S3M7:y1Ү=s= ~:LJIǒa0)=So$#jƠ_Jڥ"HԁCC~jtȅ#05:xu6v>Mwu1=P+k;տ %a]A(K A?1V M<2=F#RRA]USh uh,sk],gSII0aaBG W|D+k 1{‘'b^3X;czآ`jr}PSc(y @'d"U915&2(cSr<"Т<͹[a 3r#o]QK|{Gzi).)~~5h ] *9 0JLl=|Sd2DPshp‘6~ iﰓZ<ublqg)Б}Ox V~~`B8z|k=MdD᫃Pd{#_rDj>t gI9[ݩt;v?NT2'gkgO;'iO,q;Ezlҵöݾ+tVW .8`u"GZv^q&dՑG._xZNq:7@`1EYuK&[R)H$QqߚQC"Z_7b[!WChV<>@S`qb.nf"[m&)3w}p(ђ6i~\Qs?P0!{A϶b@?DYgQ { L&$*#z7i{Z{F9UGn)f)+=,X>o` X/Ѹe(UkRq9\(ɵ Feo`&sr=8m*A$vGus~ۚ#-;?Ȁ+J5ȿu2OypciM0^StmBy9Jc6U빋&|.htcp:X~flo0P2h/,,!lzKoSNjk/UѳO_e"]n?S{,7o-fB𝖬SYJ-x}ďae{lCp˹60 i?}W\"[Ʊ՘Պ%Tn[]Z^[8Qk ;P4 ތ՘#Yט2JGLX>] 0J130Nn UYJQ4 )<_ڙ{B` yۭs$gRwO^`S\@W]5i]ҠPe<5L=.81vW i."(0= / ?F`c,=i|g<=mn y'OXLiPWPݏM>y6 1Ps!FOgI5RBl[`P^'6$^:[W\Q}=-%nWz"!x? a֎:I9EZ`UUY2n{ź\.OVH\fn/lbڜ~tPqfScZ_en43dӟ7BG!Ee{2\>hp-9Kbzb/vz'w[}\F*~۲8gF|7~sKgj43R `ACf"%6-f6;-/:Fj ]+%c^GSt" endstream endobj 783 0 obj << /Type /ObjStm /N 100 /First 855 /Length 3211 /Filter /FlateDecode >> stream xZ[sG~ׯǤpO߻RM &6`XZ$HﹴH}*ԗK QB6ya#tS%I Z( %PQBBm, ^ mqn8B{΃0Γ0&0!2$;aQXoO,J8[Νp+ۋ: a{AhDk`\8a{#3A$-N[-R~U(d5<"أ(;8' ZJ/2%UA݀|X.X 0Fv0 ajG ~VE0xY?&|(s!bp!tA"` iX?ECPfpx HL3ՀE e{ fĢL& E b0٢`Upȉ05  )'䧔GڄO? y*A?~8W?!VCɨx/`R/U2a=Uvj:7L6̡?NQ Qjܰ#_V'j23RzN^aT۸3ǃf 9YWh5>Bi;:j `euacjN;"Lk`|}}EJUMrOlyqUK5urEh{p̥#zz2`_g=kv٘-3ҴDMM7y[}Abulee]˙5#s{6ϐ[#Mrv3Hs@;TfbA-cj!y`l-5WgQ4_;?PdG+|D{)-6ZvzS5罙YffN|ݟ i0;jA{NӜrWbOve* {(MwOx[-]Q`H;csxuQeL%mQ8,Fwk=mҌ,0 l+_NOwW5-B!5UFH)KEa"8DE_aurW(F"DLO_|-?aо-[zXk^zm%Q=> TOz4U`'/~UayW@ቦT Ϟo5qgtOϫ LIkO.Oᠿ?V؟N{"דyd )'T SM+ko+F`L䤜O4> .7 ўp^VBN~}~}ދ ŮB)R}6}bŖ>8Y8:!]ݥw^ ׻ \ L LqйPvY KI^:ڤb*bA5ZbE!wPUh̚>"w޽&tŮYC uՠEsk#;@5u%U㇎H|sO!'LEW7qOY|M&" )fHɲ=~ H(s>..2!)ۓ.2b[..X319Qa ;m W^60O` κܧ{}m`N)3MYLV{vf9G  endstream endobj 901 0 obj << /Type /ObjStm /N 100 /First 883 /Length 1872 /Filter /FlateDecode >> stream x}Y˪G WKR5Cd^܅8ZBS ߩ)IuOSN/Jmxm|SFԸⵧ^;^K6gkcmiT+W=07TrG"2wu,<#6'S*c Ւd۰ Ұ JI6h"sO"jA#q{ v+5ѐFix)OAP˙ZZ!G6IlhkQ@S{S#FRNv@TQjBDvz-1EpMA.Xh,r93уq:$4GyyaT9Qn2{R3T'jTL%QH&3wbf5Ø7 0ƨ601٧ 0<Q\=9~ Dq= QL J| 1@M<@oy&}4@ M DZ§2ke&%&ωYu%zݟ//~+ǻ_?ۻxzdmlՇ/y$M&2o=  JٷU^Lʨ>mgգhGﹻDUbȆ#I])؂KlX2 n#jUVXu3Xa]:u,`WZb;QRmԺ28tX:e[a1X1hc4918GsxXUCYaޜr)wOjV .8eUCh!rY`Ms Xb5@ b뮆J.R-:145\{%߇*llY|$uĴ;$*Xەm%`,m^|~CZfKU+Y׻X"U,Offysu6ew)?f~^%4IY%9`=,h|"L%bYPl$l~W<=y5`8:<+DvOݳ1FG=go9L߮zDqJr0BqFqBQWvJX} o+au_E٩ܩ˻]dgErT% vіȑAd5nT&1hEQ1vJ1r]=&QXo6,ٍQ#;x%S:FvPW"cd}1#jYAeץwaȑMdl2 +c<9 Y ;7hȸA $=zCrcFHjș> GXפXM:CH!$54hRuA> endobj 902 0 obj << /Type /ObjStm /N 38 /First 326 /Length 1161 /Filter /FlateDecode >> stream x}WKo7 >H@ ph{jrSw}K<=8#EjvJ+xzX *gHn䷨,LW^;z Ѫ A!? ZNx W` iCWNk坲QՐIq07^&JѴ,0"*4TiXE҄4#JrTHR P2\ -_YsS_M} 6Cse#RF{JkJJ (F1*t.#6/5@6Ŧ16e߂r>NR>%! I2Ӓű1U' #H$ >}V?5DZv<"!]cܬ[oځ;TҼ?nnۮٽ{/}ߵjAv?t4?"cC6mY[qzD D=s(>n$@snZ:o!~;~Kot vy> Cw3OSKU endstream endobj 920 0 obj << /Type /XRef /Index [0 921] /Size 921 /W [1 3 1] /Root 918 0 R /Info 919 0 R /ID [ ] /Length 2069 /Filter /FlateDecode >> stream x%[h]YONs4m4͵IsknͥmNso^4ik""A>/! DyaqPDDF\ 3ߗo}N$I>$Kҷ(J$)oWBvҹIL@jIR!P J08QP  ƒ'86$^p,* ̆ ` TgmwC)K9&4[sM3͒?j΁NK4q=KUvnz,q&8nגRy -|r2MM `/?f}WcK`yM90c%Ͳ`쟯4q"X0w4q %~]c+:X4:P;7,-7mP5'-V$_X;`5vȵ]K1Ngg=-ƞ}$a  #.`b0c鷥w|V0o?,& eKDcX.,YƂVXxF[eͮ3q*;h G(8 U~{_@ ~8 H rHۨiU0z^I@ (Capԁ8N4h͠6: ΂s t @?8 0` \`̃ @}ҿIdk-okXK@ :6 n`n-pl{`#<O3s Z####################{x#Mmy`Li//////////;xN[ GGGGGg#ǃȂ"DQRMS_rk&moRH)o rT(jArt|F(+ |L:P>_"5Ik&yP>_ ϯ:WHˤsyR7@| P>%gHK i0@|4 P>$](OI )tz)?FZNKRkj"R^U I;#uoF)=j}@ʫk!m)o)ER^qH= y?Czv ޫ#&3 [H 1,+)DR^M)7v)@ʀ׏eJ:DsHIy..9_Jy] Hy.闰ׂ:g9 n 幭Hyj? R^}< ˆWGE S۳K3lwv`v`eCl/*]»PZŸ_WZ§(-[MVRZҪռk5`Fi݊-SnWJVW*6U٪nUNf*zGٞ^LE_6W/Q[׊?;Y=/O'km endstream endobj startxref 377622 %%EOF xnee-3.19/doc/xnee_req.texi0000664000000000000000000000074410230721125012542 00000000000000@chapter Xnee Requirements @cindex requirements @section Runtime requirements @cindex runtime requirements Xnee requirements: @itemize @bullet @item RECORD extension @item XTest extension @end itemize You can use Xnee in replaying mode without RECORD extension if synchronisation is turned off. @section Development requirements @cindex development requirements For development requirements, please look at the DEVELOPMENT file that is distributed with all packages and with CVS. xnee-3.19/doc/xnee_prot.texi0000664000000000000000000003355711536776261012774 00000000000000@chapter File types and format The files used by Xnee are @itemize @bullet @item Xnee Project File @item Xnee Session File @end itemize These files must follow the Xnee File Format. @section Project file @cindex Project file Xnee can be set either using command line options (when using xnee) or by clicking the correct buttons etc in the GUI (using gnee). Instead of setting the same settings over and over again, you can use the Xnee Project File. @subsection Create a project file @cindex Create a project file You can create a project by yourself. This can be done using the @code{write-settings} option in cnee or the ``save settings to file'' when using gnee or you can use the Xnee GUI (gnee) to write one. You can also write one by yourself in your favorite editor. Just make sure you follow the Xnee format. For information and specification on this format read the Xnee format chapter. @ The authors of Xnee suggests you start off with a generated project file. To get one such file, type the following @code{cnee --mouse --keyboard --write-settings new_proj.xnp}. You will now have a file @code{new_proj.xnp} with some useful values, which you can edit as you wish. @ To use this file to record, simply type @code{cnee --record --project new_proj.xnp} @section Xnee Session file @cindex Session file The Xnee session files are the printouts from a recorded session following the Xnee File Format. For information and specification on this format read the Xnee File Format chapter. @section Xnee file format The Xnee Format is divided into different directives. The format is line based, meaning that @itemize @bullet @item there is one directive per line @item one line contains one (and only one) directive @end itemize These directives are definied as follows. @section Xnee directives The following directives are used in Xnee: @multitable @columnfractions .0 .30 .70 @item @tab @b{Directives} @tab @b{Description} @item @tab Comment @tab This is used to comment the various files @item @tab Project @tab These contains information about the session- or project file @item @tab Settings @tab Data used when recording and replaying @item @tab Replay data @tab Recorded replayable data (used when replaying) @item @tab Script replay data @tab Scriptable primitives @item @tab Mark @tab Lines inserted in the seesion file when a modifier+key was pressed @item @tab Execution @tab Lines that trigger the execution of an external program @item @tab Project information @tab Project @end multitable @subsection Comment @cindex Comment directives @multitable @columnfractions .0 .20 .50 .30 @item @tab @b{First token} @tab @b{Interpretation} @item @tab # @tab The whole line is ignored. @end multitable As long as the first token is @code{#} the whole line is intrepreted as a comment, just as in bash. @subsection Settings @cindex Settings @multitable @columnfractions .45 .15 .6 @item @b{Settings directive} @tab @b{Argument} @tab @b{Interpretation} @item data-to-record @tab integer @tab Limits the number of data to record to to the integer value @item events-to-record @tab integer @tab Limits the number of events to record to to the integer value @item time-to-record @tab integer @tab Limits the number of seconds to record to to the integer value @item display @tab string @tab Sets the display to record or replay to the string @item distribute @tab string @tab Distribute all recorded or replayed replayable events to the display given by the string @item file @tab string @tab Read replay data from the file given by the string @item out-file @tab string @tab Print recorded data to the file given by the string @item plugin @tab string @tab Use the plugin given by the string @item first-last @tab boolean @tab Print only first and last of successive MotionNotify events @item verbose @tab boolean @tab Use verbose debugging printout @item buffer-verbose @tab boolean @tab Use verbose buffer verbose printouts (not built by default) @item time @tab integer @tab Delay the start of the Xnee action @item all-clients @tab boolean @tab Record all curret and future clients (default) @item future-clients @tab boolean @tab Record only future clients @item human-printout @tab boolean @tab Prints the recorded data in a (quite) more ser friendly format @item sync-mode @tab boolean @tab Sets recording mode @item speed-percent @tab integer @tab Sets the replaying speed percentage to the integer value @item stop-key @tab @acronym{string} @tab Sets the stop key combination to the string @item pause-key @tab @acronym{string} @tab Sets the pause key combination to the string @item resume-key @tab @acronym{string} @tab Sets the resume key combination to the string @item mark-key @tab @acronym{string} @tab Sets the mark key combination to the string @item exec-key @tab @acronym{string} @tab Sets the execute key combination to string @item replay-resolution @tab string @tab Sets the replay resolution to the string @item replay-resolution @tab string @tab Sets the replay resolution to the string @item recall-window-position @tab @tab Use window position recall during replay @item resolution-adjustment @tab boolean @tab Use resolution adjustment, even if the recored resolution differs from the one to replay to @item event-range @tab range @tab Sets the events to record @item error-range @tab range @tab Sets the errors to record to range* @item request-range @tab range @tab Sets the request to record to range* @item reply-range @tab range @tab Sets the replies to record to range* @item extension-request-major-range @tab range @tab Sets the extension requests (major) to record to range* @item extension-request-minor-range @tab range @tab Sets the extension requests (minor) to record to range* @item extension-reply-major-range @tab range @tab Sets the extension replies (major) to record to range* @item extension-reply-minor-range @tab range @tab Sets the extension replies (minor) to record to range* @item force-replay @tab boolean @tab Continue to replay even if Xnee is out of sync @item max-threshold @tab integer @tab Sets the maximum synchronisation threshold @item min-threshold @tab integer @tab Sets the minimum synchronisation threshold @item total-threshold @tab integer @tab Sets the total maximum synchronisation threshold @item events-to-record @tab integer @tab Sets the number of events to record @item data-to-record @tab integer @tab Sets the number of data to record @item time-to-record @tab integer @tab Sets the number of seconds to record @item store-mouse-position @tab @tab If set, Xnee records the initial mouse position and makes sure that replaying starts from there @item retype-press-delay @tab integer @tab Xnee delays processing after a faked key press (during retype) with integer milli seconds @item retype-release-delay @tab integer @tab Xnee delays processing after a faked key press (during retype) with integer milli seconds @end multitable @cindex Xnee Settings Arguments @multitable @columnfractions .30 .40 .30 @item @b{Settings argument} @tab @b{Description} @tab @b{Example} @item @code{integer} @tab is an integer value. @tab 1 @item @code{string} @tab is a string. @tab localhost @item @code{boolean} @tab is a boolean value given by true/1 or false/0 @tab true, false, 0, 1 @item @code{subrange} @tab Subrange is gives a range of data by specifying a start and stop data. In the case of one data the stop data can be omitted. @tab 2-5 or MapNotify @item @code{range} @tab Ranges are a comma separated list of subranges. @tab 2-3,MotionNotify-MapNotify,GravityNotify,PropertyNotify,30 @end multitable @subsection Replay @cindex Replay directive @multitable @columnfractions .40 .60 @item @b{Replay directive} @tab @b{Interpretation} @item 0,0 @tab not valid @item 0,1 @tab not valid @item 0,2,void,void,void,keycode,screen,time @tab KeyPress on key with keycode, used to replay @item 0,3,void,void,void,keycode,screen,time @tab KeyRelease on key with keycode, used to replay @item 0,4,void,void,button nr,void,screen,time @tab ButtonPress on button nr, used to replay @item 0,5,void,void,button nr,void,screen,time @tab ButtonRelease on button nr, used to replay @item 0,6,x,y,void,void,screen,time @tab MotionNotify on poistion (x,y), used to replay @item 1,request number, request type, length, request id, time @tab Recorded request, used during synchronisation @item 2,reply number,time @tab Recorded reply, used during synchronisation @item 3,error number,time @tab Recorded error, used during synchronisation @item 6,EB+2,void,void,void,keycode,screen,time @tab X Input (master) KeyPress on key with keycode, used to replay @item 6,EB+3,void,void,void,keycode,screen,time @tab X Input (master) KeyRelease on key with keycode, used to replay @item 6,EB+4,void,void,button nr,void,screen,time @tab X Input (master) ButtonPress on button nr, used to replay @item 6,EB+5,void,void,button nr,void,screen,time @tab X Input (master) ButtonRelease on button nr, used to replay @item 6,EB+6,x,y,void,void,screen,time @tab X Input (master) MotionNotify on poistion (x,y), used to replay @item 6,EB+2,void,void,void,keycode,screen,time @tab X Input (slave) KeyPress on key with keycode, used to replay @item 6,EB+3,void,void,void,keycode,screen,time @tab X Input (slave) KeyRelease on key with keycode, used to replay @item 6,EB+4,void,void,button nr,void,screen,time @tab X Input (slave) ButtonPress on button nr, used to replay @item 6,EB+5,void,void,button nr,void,screen,time @tab X Input (slave) ButtonRelease on button nr, used to replay @item 6,EB+6,x,y,void,void,screen,time @tab X Input (slave) MotionNotify on poistion (x,y), used to replay @end multitable time is the time on the server the data was to the recording Xnee client. This time is used to keep the speed intact during replay. @subsection Script replay data @cindex Script replay data @multitable @columnfractions .40 .60 @item @b{Primitive} @tab @b{Interpretation} @item fake-motion @tab Fakes a mouse motion @item fake-button-press @tab Fakes a button press @item fake-button-release @tab Fakes a button release @item fake-button @tab Fakes a button press and release @item fake-key-press @tab Fakes a key press @item fake-key-release @tab Fakes a key release @item fake-key @tab Fakes a key press and release @end multitable @multitable @columnfractions .20 .20 .60 @item @b{Primitive variable} @tab @b{Primitive values} @tab @b{Interpretation} @item x=value @tab integer @tab Sets the x position used in fake-motion to value @item x=value @tab +integer @tab Set the relative motion (x direction) used in fake-motion to value @item x=value @tab -integer @tab Set the relative motion (x direction) used in fake-motion to value @item y=value @tab integer @tab Sets the y position used in fake-motion to value @item y=value @tab +integer @tab Set the relative motion (y direction) used in fake-motion to value @item y=value @tab -integer @tab Set the relative motion (y direction) used in fake-motion to value @item button=value @tab integer @tab set the button to fake with fake-button-press, fake-button-release and fake-button to value @item key=value @tab integer @tab set the key to fake with fake-key-press, fake-key-release and fake-key to value @end multitable @subsection Mark @cindex Mark directive @multitable @columnfractions .20 .20 .60 @item @b{First tokens} @tab @b{Arguments} @tab @b{Interpretation} @item Mark @tab time string @tab Ignored. This feature is intended to let the user do whatever he/she wants to. This will obviously lead to modifying the source code etc. @end multitable @subsection Exec @cindex Exec directive @multitable @columnfractions .20 .20 .60 @item @b{First tokens} @tab @b{Arguments} @tab @b{Interpretation} @item Exec @tab command string @tab This is used during to replay to execute a given command. If no command string is found Xnee will try to read the command from the environment variable @code{XNEE_EXEC_COMMAND} @end multitable @subsection Project information @cindex Project information directive @multitable @columnfractions .45 .55 @item @b{Project information directives} @tab @b{Arguments} @item ProjectName @tab string s is the project name @item ProjectDescription @tab string s is the project description @item ProjectCreationDate @tab string s is the project creation date @item ProjectCreationProgram @tab string s is the name of the program that create the project file @item ProjectCreationProgVersion @tab string s is the version of the program that create the project file @item ProjectLastChangeDate @tab string s is the date of the last change of the project file @item ProjectLastChangeProgram @tab string s is the name of the program that last changed of the project file @item ProjectLastChangeVersion @tab string s is the version of the program that last changed of the project file @item ProjectCurrentChangeDate @tab string s is the date of the current change of the project file @item ProjectCurrentChangeProgram @tab string s is the name of the program that current changed of the project file @item ProjectCurrentChangeVersion @tab string s is the version of the program that current changed of the project file @end multitable xnee-3.19/doc/xnee_intro.texi0000664000000000000000000000532411537117060013115 00000000000000@chapter Summary @section Summary Xnee is a suite of programs that can record, replay and distribute user actions under the X11 environment. Think of it as a robot that can imitate the job you just did. Xnee consists of one library and two applications @b{cnee} - command line program @b{gnee} - graphical user interface program @b{pnee} - a Gnome Panel Applet @b{libxnee} - library used by xnee and gnee @section Xnee features @cindex features Xnee can be used for multiple purposes, although it was initially designed as a test tool. The most used features are the foloowing: @b{Test tool} - Instead of performing test cases for a GUI (or CLI program) over and over again, the test cases can be automated. Simply record a user session and replay it later. @b{Performance test tool} - If you want to simulate lots of simultaneous users in a network (or a local machine) you can use Xnee. Simply record a user session and start multiple instances of Xnee. @b{Demonstration tool} - You can use Xnee to demonstrate the features of your program. Simply record a user session and replay it later. @b{Distribution tool} - If you want to send over your mouse/keyboard actions to another display you can use the built-in distribution mechanism in Xnee. @b{Macro recorder/replayer} - By binding a key and modifier combination (e.g using xrebind) to replay a recorded session you will have a Window Manager and application independent macro. @b{File retyper} - Xnee can retype the contents of a file. This can be useful during tests or if you want xnee to answer some command session without having to record the session. @b{X11 protocol sniffer} - Xnee can be used as a sniffer for the X11 protocol. @section Background @cindex background In order to verify that a program does the job it's supposed to do, certain tests have to be made. These tests are, IMHO, perhaps the most boring things a programmer can do. Xnee is designed to reduce the programmer from this burden. @* Xnee started out as a commad line program. During the development phase the main functionality was broken out to a library, called libxnee. The command line program was renamed cnee. The thought behind making the library was to enable the writing of other clients than just the command line. Today there is a GUI program, gnee, and a Gnome panel applet, pnee, that uses the library. @* By using xnee your testcase(s) can be recorded and later on replayed. Xnee comes with other features For more information about these, read the Introduction. This manual mainly focuses on the command line program, cnee. There are however a seperate chapters for the other programs. xnee-3.19/doc/xnrep.png0000664000000000000000000004037412332167163011721 00000000000000PNG  IHDRgAMA asRGB cHRMz&u0`:pQ<bKGD̿ pHYs<<)?IDATxt[yy%$d҉vlV'N3ZsFr=Z'IdcB1ƛ7"lblMH4H YvFDhEM&Qk)V-%㾸E|>x{ |>s\nm !2ZJm- 6!2m*JjTk4Fĵ@K*5*QTծP="F!2*Rf/XXd$F2'`P6 XQ)16DH,SDNnDר0a]uP")gD 0^0SQbjĴ1U01)T%l#Tȴ( "u$A*>C,B*?dSrTR"Hm)m9F94SzN s:BH!H2_ g "T@ϩ!zN i=*HPT0&LZ-KR4FdQS6iSKhH k4nIȴC;q0cZJ1K>hG5G ky9h̢Ii2&E4Yn)hNi?)43He#EYӆ,U6`,ܗD5FnA6O7@N&+sjbR M"j7{Y~[Z7Zdq,! RE(v4܏ߟU-Bj$YFas'K̸)=G04̒" Q BVOYiS{UPAI@tƩI&iF =@O$ *L=:Z+TMIʌ*TSTJa9`({xlW#2L9)\0*PYAp&Pқ6$4ҋos601F<'rz Ldou.%骏(~1s{6n/!iSjگ'1` p㺣jHPJ$QV0:'j$$ˆ"Iq5BH%hğo3F6~ݟr=xs=xs.}i=8^9K.ҫ1hƄRH\d0M`G}Lg0'%B%L(h7 !`, @W0!oh$#)@Yr!YN&L.!@bY"gj%x.kJF-S/Pi;n,)Aiw012،ƵG4j~>ž4B̘"ZlT tյCIG(NHQf~!3U!%eR:"y$2SLSJXyLz䂌 XTGd*#2]&TJETmՎt:fᄫɚTDEtOCAIT TT!Y!)8&t$_I%@ZU!"#MRϙL $괰dc{L piB{Q"8w6SC$_ 2$TD_PY$p?0G,Wj*DyT.ayFA~Jxr3EA'=3"Ȝf.4*&z26r̶mGpڝP?˶PMQ4Fs3g7lr3̒4yNr&{goiR2k43qR1z6i$KV(ӹt J"wX JTi "@~@a(eN$hrDD"dBdLrwgKg2DqոeT(3Ĉ'?D6{ *Nhʞʹd7E+ !5)׼ћ^vϣOcCMfEύPқ6 =+VAW!] sk{sy%_k!2m"xT7Yҍh+0%=bmS L>Z?<+Mr6 Ai_|M?&I藇9.*D* h}5[Ԧ_.iJWmЊLu =4D`Gkm1D<.ZgUSk>BLF;3wE~#2]6H26?,z`"UήFߖ#S[Lm[͐~oZ޴Q?_}|y5n{]6[ռjrz!2max?{kzumt+46z*._ZĈjC|óKQU/d\ 6eUߍBydlڢD(F{kx܍s0Ͽ'.36qz[H 3\ԧgnVM>/+i R,oTsw~gVtAUx3RiQ,RO`|ޥQcn)]>^ U_בF-Fyӣ0e'>~WGQ?Ft^.,"mқDP_ZvMO]KjNX"m!)|OBig!\fzb*\{B2,&Rui̫w{W.Z\L[jD j/3L iKPH1BمZZDP噠r¤gg5 2E ͈ !^YHl@dj5K)PW"SG B]9L^u 2FD+4J B] L-"j#2FDLoDd+UWʄCzSXH CzԖC[z;TvU.U(ߡC~P= qNnSWGd*#2 LzD`="SA XTGd*#2 LzD`="SA XTGd*#2둔e-u~ʚje!2m!~ M|A^AM[K~ WGd*#2 LzD`="SA XTGd*#2 LzD`=riETo V(s: oZ95MbJmB!N X8 }~ۀEd roVoZqzzD`="SA XOo:6v8Ge'q06LdXx҇i%׮[]=z>g^=TWkaGS6.5N hR~EswՃNo eSN IvSuu;6}岠:kmOa+y~ O3M8ϙ#?N4AFv9pK8,{,iwQ,0q NoQ $N^^] 8K~etq^v:#>f4}dYN;o8n8n&#ieMc>(ޛjmgZoo:\pf̻r9υ2%mEIFLI`}vw/YңdRnUiosD<7-G{Te\.(9* EV68Ƹ6τAAhFlq{^Lrl )<ն \H*A } uw9BWVZףۛ.'a-vNM˟{{T Ʀ9VUj;Fz˔vr_%3}F8QB 1 \ty_M֡P ݦӽ=aNuk-g!Ř-swfg'L 3d IdB*0|J.ٜIc#adk 1̭6hL[18o;I6o"$|E~Cy # B sN^9Yg>&fqXY=| d΂' pͼnW?4;\4[B1<nqCO3%xR5qE7"VTWy,۔JB1f-3qIg}nȯ $yc wO<[RUA&盽3YOғ=ජ#sI [&Hō;H'z!4u}ęA)4WMgsz !ט37{\Ooq`/0c/>*D5{r/nAzVs%J'?NiI'=m)qz/:`;##2lbIgx_RX,H[sY`=w?7 r&&xa,#ӍEM.KV.#Ri Pߊ]F?{Ϣ$+0%R -Thr"U],y^_rv>ֳN_'e27T8ρ[:6Nٰ@*E*2]dg{ʛ QsWȚ G}\bܰ4wvF=O+zd%N8_r'!aq̷xL8_b5*K[ǀ21B-jtP.xrYXbMet9rs2<6n(8LC0'y rnSs;'U<`H'cLxhZ^S@ZY6(3J-e y7q2zϭ ~0Ypv~8L4N@A @Y6K sKr=§M{w< ۠Mc&J6s@MNP-y+>t;l*N#3 ns z"QKD79.\c}!tI'tgF{PG~cϙ=-N#&&>; ?]1 3X[~} (ٮ8ߓp#_rP0(e3$8A7*op}EV567=&cJ^~lUh}iA<4Ϲ-Cc#hP7%B/yxMrg_"tMX 9iī>ƝͰ4zE>Jq7@;$0Y:_L{+{o*$ 9B ԃ="+@:Nqǹìgp8Su> 2۬:ì' )= UO| L8;8klv<km&-q7c[, `wED ?g&ywh4g.FgsnGdz4݀%CwS+zRhL eWG_"4@qAhiD# ~9Ⱦ#2|Fo6Zi0yAhBͥK)ty(;6ܭ?ŹG ~Dey08גXnfPVYp$z&,{noTQ1'[>Ef$0l*<\fuƫk.eoQ$[|> F Ǩ}fi^X<ŋfo2=fU6|PƫBG=azmeN.1k^_ml=BIt]Glɒ& ^ݍ- fa~ ?̒d2wam 76AXdɜɊ/$ !kpq3 6%CwHIhQ_Wmq64ė \ަInBBa2©2uccQV%odti n{.^裋^mRO%Czb nfl. ,]di(n(ln,;%d-}9a`\v.1f^0jĞ!i'Kp:xN"oힲ0QsQ&9o5!/Ո8-ɕk@ғ,:)iM]_ȴe߽^0HWFD-a9B/|i׃0MG/\g+Z*c,sɱj3 G8M\1V,7"&9b[}Ƴ6?f;SeBVPE-D /}`oc|D@oi qgh߮ 9`yD_[d;Y6}ās="U\޴fڸϗEC|BdZ3ėlD^A XTGd*#2 Lz*"\l.2Q ǾdG(' rY>"R| !Ȏ!VE>٠`Z[dۄU 7L3֙(L(EM YBl$C&<>Qf pno?'#jĴ&{b)ۀ'̧\L;8d]w6UYWRE\d qQ.|'x-\+>izɣ0~#lx !N,W4GL!0x^^T|'xM^ld/> /OMF*e3CMmh ǀ]Ee$Q6q”.a+]ǀ VTVi%c%z/ߺnt7z%i%,N^p:8 ts++cnR]t4N7>#|4AhHL*QOGuWQ f],&f)#Α |2a^a,;v!L^ȅEܮ(~ʦ&6AhR.yϳ NY03D2%%}nmTM=!8axn&3|wDW"XbIAed3kPtzC!^F9pDctY~:8Zѥn#l˚ d\4N2#@|UͷX_5[d7ʃOyna'Yy׀Ivc0<;yMXAKDd roVT%"N XTGd*#2 LzD`="SA XTGd*#2 LzD`="S˘876Jeb|Fdj-=Dֲm }1fō; ⌙e76L>w{EвTX ktZ;tVƨ]Zk{WANǵZӛ4fܽd[o޴{ќcGQ&MMDD`hd3M.ǁntx2neKL8vi3yJi A7nI7Q5ǃL({LU+E;{L,0A1LrM(,pmu+t1G}2޴h(8| (q^ /8a U#Oe0qaIx lq/,'2ĚV.DKEƦ`="SA XTGd*#2 LzD`="SA XTGd*#2 LzD`= iAHnroZ\w҂+#ie6`ۀC2 +#2 LW9.6!UVu~!*)W=-BLW-HAj9"UJN>@j12=o7.H'>+cT;Ry7wm P*D6"N画XĨS\_+޴I+U\eHAzTtUQI =͈LW D"2]5,&RڊtPHAj'"UA"LWD!2]*RW*BuT%lPakuP g)"UTLW1;Jj ZPt8LW4K)*T EiĈ|YS5ͦD?LW0jjuޯ U%-v+1R[ےN~ G y59Z/|~5nw6Gs=h%| 4S+a*̺ )SrZ!Eq4Y a41fѤ4DE!dZЌ3@0gFCȔm'`Z6y6{Z!iclqj45n c%gIKTYnW2;UNhOKUZBiB%f#̸_DBI0Ka̓B"Lj\1"&E%~=2M1KaS%Jsᶝ11 02/qDq?v!L8SOj]كRRF]QޓYf]?6ȴq"A K$4]Q$ȉ3'(o>bhmݟ-c)+ 0봝k9߶ܷ/ߛhfQUc aa`.In 3 Dy#*@DQSirᜬȭS@hm fTBE̙ JP9d9eA6~+#Q!5RJ3c'T*f.ֹmB; B,S:[\Mr b[G e*Hi$L4SB i=g֖_-R67=U 9USD!DYsr3墭9!z-UbjJ "D*n(:h`$EF4#0JY[G^f,APCSQFI)`0s@#jsT*(0G- ĘSS@\_HU_ֳh]VQIZn@uL0bXwTlN*@Es> z(#ېXp0=zp}r.v!u<|;!)Po  ** |\+&H2!HPAPQ"Pڴ sV~s.~`B~&Ka7[?,Pu;.ʲ)Y QiL2G~&clY 6AS|#TT.܇:*Fp}I*dwA"_@r qN) Z.b47X 8O RȒ~]$x2~!CN)w,9yVE3?3hf٠N,n!bܹJ5[lmZåN,-16-%?Z*@lkt*T(R~["Y 3hpOTh -*S{Pϰ)fTdڴ*< p!5GBk#2F UD*Cd%TPiChPEB%D ^HʈLF=B !2m KTXiCYPEbLLB #2m8UD*Tȴ T+TP"ӦPPEBLbB #2m UD*B+&Yi :BHooDMJUzRV7m2=o"m^]6B @>?JO*,鲐* "jFƦBnTX"eUD*,qz$#"jGd*#N XTGd*#2 LzD`=rLr6TGzP +k\ۄEdsoVqmB"N XTGd*#2 LzD`="SA XTGd*#2 LBI`&``JCǒodSp.L38\1M7,ߴUS1 ", qzʙi1 \?VSZf)z?澻3el,z`khY.ht]kFhôѣA-ucnIuR+Ik9ݦ9ޣ>oIw],XԦ2urVw[nQ` ;~n ZjI+tSImzH'uFYLzH6}NkK;٤12ۣqS?WNFk4GIHf[ң0L(KSLnr{26uۛU/|6{L*X]S$0g,p"(+>.;u[{t`*46 lXQy7w7[+gw1^$'`ż^FWrcuħ;uA*ݮ;rGܺ6:y6ieCm2{4e\hv"@ٺRZzF-k~NXʁ8Sͼ!@[bF&!tu~:vw]s7Nv="]|;;x_a+w_>~K;w-NǷCr~֯s:uYn|j>Õ@}szRdNґ XTGd*#2 LzD`="SA XTGd*#2 LzD`=le- haD piM@zJ߄P" IG^A XTGBHPE-,һ$7tAڹoV׸ -tAb~ `M!, qzzD`="SA XTGd*#2 LzD`="SA XTGd*#2}tznb V!2\ߓ,;6H %F;O|3+*$Τ߇.,BGF5t1KZafJzLfʶkqS{}Nmigqߟkk.қZ9dJ7($2 .GxA&ׁ~>w6U%#vI3J/g:QffO6O7AβpYR0ZA$"Ƿ2˧%~42cn61>>V<hL Ǜ V\q&7#j2*z!p(w6{ws-E\t^.#\ǚ{w?/TI I?!I82%I*>18I8dB?#3ZTk-ucfro _Fwn?@8'2t('ȕc#usbvestj 冷{ݸ]r=oLS޻XH9:17L}h (n,1N_r i'mǍ yQō􂻟/M=UҴH ̳0oثS.ze-F$sRj_G IPFj"Ν#dYKh15n_31.Ж2-cd1s5qfH"& `4̀I=$=i3|HhEX8#FXI"dy3<)q8Il1:w"2 AuBĀ5Y,p4%Z'eM8UfIYcF15&븟!B[zkaIɔ9F\`]$Y5NKoV1ESiR*f1m.ac2eRLrYc`f7sJ+qE0h1F5侂XH`33eeZ.>ہ"YF-0q`*iT2k2eHE(c$,3 kQ;~icT[ɒ/tyHVdۈd`}?Y5az)M9F2Aʘf0}bCK#;*0aN]̭v+nL|ҐA X 2Ae~u)hB5r&9K zد#cb2uDЙ[}-Ĭ͂&*ȅSޖj\9Ռ|B~k}w8\pZG@?*ZW1I6ɐ$F}Й`}m@/Wj7fw\c'Ls/c˛L[XvbΛ7U#Um.k$gonċc1vK?1ڈHA*YlMJ"+kQ4]Ҵ"|$op┦uN^GeZdgx5aj8GVTi5ÆVz~۶LbLXŏFbN(L;$RXKՖVTJSz4+f4[\)Ti_1?}92H q#*ӎD%Yh-M x 1yK(l5*Sx[Ti142跩6U \~.V4UУҖ(8qȡ2UC} axuWCT ~QߦzTzTzT KzmЗ"TJccOWT+zTzTzTz &ۃA_fLk1S_7]&A'#Pv$]>uo>˝bL;W IQBTQBVz *a@eZE{~kx]Ex a%Kk~콻SvNQ'2ef`s=kVo& 뽼H&oݼݪPֈ,~R 3i>^u˒8'0]1q 2OT5cPo"/zzk/J_Dɺ_y2UwL)ʴf/ZW<]}~ɋ{Vb^Y|u`;h4?s :i,)u񾻊>7wl;ooL7oy>n^_J2eQ<)zCɨLkFʗf7.jڛk'vA+]gT5+ͥ!;AL$Zo&Te ?l* kfYSJL%ivݿne [Gq=Xg=VJ5SU|Ce0; ptn跻;( ?55ijOy=P0J_TXlT `W͗AJ ?V*^pi̊~nwHR+*;(Ȣ_p1'|zߩLd! O :NpeG^A'TN${]~#脴Z* c !3?v:톖J|rްwhBzS|:hTJCX= [;k͎:'o x;~eCHzH)PW7iD3ߓ4=,jnfc&\ <#/BK:11@F㰒{KJTs7HiG77~uLe?k(WN_Ez kF37 q@#HwHgL()oB%g|Ki?~ H ެiCy1LqbBsBWn2CȎdțkyCʴ!<s :QNмPxFc&IaIrcTeL%BBdbԌ}2|@P*5QMCpw㹦Wn/AߕBeV"*`ѱ`JJ:%+kEgTقZE ~ {5Ma7w|8RzD PfZ4Y l*S `?Q;k1tRFDpio>RRE *TQ*eiNBRE *TP*%#RPT)? TJT~2U\h2ď#A_i Be0ڄT?nIBJL+?#E[e), tTi C󂳣"UjFeZ"UAe~ UE4tKTii !T8*ӚhV*RT5ҌPUJsLkQHfQA#BU*ͣ2z"U@eZ'UEʴnjT i"T*ӆJ*ROT RM*R_RG̏0\ʹ*? :w0jd)S,#NiC&Ȋh)(R%x$ު *җA'J䪾^vHQ\T6\TiZHV2UУ^E =*SE =*SE =:"f"t(Y : 6!UDoMXGrg^E =ZJcA'8tUDt2: Zm*JQ*JQ*JQ*JVE9ŷ49bW8c >` j ZI1tj>"$JVd4so'V#,3LؿYk L^B қ2Ͼ |fddpLN&cRH ۼ}9{ /A+|.4{覛i2躬0H7RkH7î[79LuE1dx(Avٳ:oz\ver_66nu;ge3zܖh0}p1!YI{@xSW42U@FH:S=œwWbu"N*?(wqOz/C,M^^gʝesWV؊}>.!CY Qsa^UnIni{<.K?]ɷ2W+#\-=*7[px%n3El(%ۃJ%j࣐:YӼB4C<^v9i-n)y`C˞\+h1rUi ߶K }+ږ0E/L;Y3%+W\1)6x}VCg1G}4 lz\}, W8?a}CF~=#좏]\m]nX٥p7} AgD[QN!i (;I_e^ƀDms?MyU>.rE fS. D]ru*r7Yf'SVm!^^7N`!7 .Q,1`{R:ȃE68ԁ [K9!SHgJ0.C})>aL(JSUQD -;{U䪣y@{=v&ӷx eFK{p.FfAXtɽw2`#sX0i+m:.pqd+8&)i چtE?v 4>[_kٮJg퀣% keqf ~ d$pU%x=kGca&Ҍ12x-:źIs"bGHs}/(rue ))Ӽ_յsʻy8TFiN"]oLhl!)R s/KC4q^ NY q~|6e vy zR|Wq~~89XfyYƁ/&L1K„gp* U>z=*BۮNs劋nd9ldfc4>C!f1.">;r!Vpf1N[26caWÅв,ee:8 צaUi"Xg bU,RCoӇX89Is[i1>gHt+G(C ƉGh|˧O$(m~o\0E?q͆q&uCܮ:p-#9XE ˘Ek!ne\.Ĕ1R1]F(\ȸ QV4Q yAS^P#+"9c:k$?[T"E#+۝卬D$Rb$h\ Q1 ]W(#;'lȼft!*ݕ+e%5L)>eqncqPfZ1 fs(Gͅr>΅ KNeGà[_Ken*;su$xI6mnphMgYn0]|u*o3Ɩh*ސ+ǓS3h0Ŀ`r;0K/y+Ӭ# @avVJ9A,C7^-`0xͧt'8Ľd9vd $VWܳ}Vނg} CZ%–MpoMp19-ry a:4--:PZ.r}je$voYF(Ӽ8 1l\N*> q\c8v% Ui9'u$G82ˀ `7Oo]7w bqqCYಌ{z ferVlLz W$ƺ;VһQ+޺4ӻʋSY`eʎ(r09?{#4C gH[yUOe[~&RtsLǑUE쇭G[7JӵL}7 "e7!\ٷؙ[_Y| }[Ӻ[ ~Zۺ[Bc[lH]} FО9*~B{f_Hs&Y^؊`E }I"Fr:g.eاUa꣬Lv+j3"x u[Hr< &o.|ZX>*Fy=V0 5Cm 8!^L"ONJ>LxWP -8i|̝ U=(Pû0ȹEE,1Wȷ ?i vG+`.>Њ`|YE ںG)2t80s[1 tqdKtђ'/g>ڛHP[ԱMלPӫRmARPaDǯn{GHENnWN'%)*s,|uצ \^nzwU=9gIMBROvr_r,<] R*3%=IH!ʨD!߀t k[ mVM_KcY9noKoTu+nut7Avҫ(GKӺb,\ЗʴnvTLLXҫ(Ge(Ge(Ge(Ge(Ge(Ge(Ltd*r]A_4@/KE>>1KL}̱t8B(4|ŧ"_yL2 &P@}c=t}]ofOcV:,e+J\{,bee|(0\ tEin(;nq d1C\Ee'/eMkWQ~al oW/=P ʴ1A? Ӟ99jYͿa1 9Pc!i*7NVREED$*Ff7.pd@xGviQ16xc]Z?urtgm1 =ݳbl&$׏ϑIHB"bln^Dy=bH @]l7Qm8As&9_ ۙL^ffBp'f?S)`a`g00-">/tq/`8<95 rm\ 9S @/cA݊v.M3=zJȀ]T3 igک4\s[ٲJM|t~y)}[vJ7YSxe#tCE˂iߚ3Op/Ϲ<Nb9K,K>,6O+q79\6^:-G!<0W96y`aq:'Lx=Q0(P%o09@/69 PV}4+*l8c$"?p#ʮACe3_} ޽eD(J%ҫ('jCQs<$TAKSE =NBYG(5 #00ivp%_ift3) U$*OB(;.$$"ȸ)9$ȀD S\pD$!=$6dynmN~?"|xi#$ 2U5]v?_U,{J]%i[ gW}`к=HHV ”P94ϳ{(U-{G_uݢe)52m zpu Xіc 'n۴-X/gU`0q p÷ \@e>_8K/_dvȔr(C}tQs7}G(fT#n#sweXq8NH/&怇xȆM \U9N3N.qUa%l :ň.7vtJ -M%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%ЪcNhi(GKʨYVt ,(G+zTzTzTz&|iXtq:TQBUpOI(ntiU +~`WdSD+zTzTzTzTzTzTzTzTzTzTzTzTzT-btҬ-f:$(eP1=qNs1T qs:Q8:|5UgM!ڎԉʴŜ Y ]+e^iOu|`|VZVv# Y1%," Aw\A\!642 ""Q12c\=7rƀHDˆ<qFݔ`}NOX]6 |6ldйn[ VLEF߸`r2EdV[YSȸLI\q,F 2vx]uޥn \S\orM,s7}% WnS$pwseC+~}bӖؿ@^ϑIB?cl[iۿ(e20")&X-룗\ERTqQ6I` `Ȑ}rfII}, .тd(j2^z]d \}QcrXuknbJ/%K9W xi`K<&{~40QHNdžzb7pΔ}d9 M +gazyDaZ!%HD )%c;Fm]6{rBHsNZs9橨ۄti^_" ~ms3ęXMӊXb Y2 gmO4/y=y2C,G=ۤ9 {J_IQ^#A 8+%tq _SluߦzTzTzTzTzTzTzTzTzTzTzTzTzTzTztZxUx̗(s%)*Ӫ;Ә%Pҫ(GT: ˢBe(G+zTzTzTzTzTzTzt`EUdYA'TQB[ហA6Ee{uD1A'MJihc+vn] NqQr)b2)Ae`40:O0Tt|4i Ҥx9MvKq%n6K"2%F%G؄Eˀm.rCFmY!r钨 6]0tζߦi?(9ǧ7m.ûm7!Ȕo9ĩFELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC       C "  _   !"18X7WYv#2AUuw3Qa$469BVqt%5RCITbcdrs ?0u ]ӵhխliy,u#ՔRKm4| ulJ{DIN$C"ጢb+QEs5T`m.?!M2졔?G>g^/H>4-kZ%o=Q-רyrA. bTOP1J62'K rJ'ժL΁1)PZe(K YIB˥L֢ :Ҿwط-D\/vK^͂lY4rm.,3_VP/* O81%Wk %>-5ABl_sfJZ.ӳF]l~ 856JAŸIJɳA\"?ɯj }qeP]XMGCvC 51v]+cD4X'j7S[d|0W+_-Wj_1<$!EW&"٫`k.KmI2pU{܌!Ď*ZJ m% 9QZԔ8FGkkHWGJrN.Ėe$Ԓmh9ƤitꔂlkI+І&Ϲ)ܔֻ~,ˈ6tz} 2/RSK0T]V:vWPxgV+UDzJTʚ1.;jyN$/_]@iÿ- fSK6>sP ϗuR7[I\iR?=*vPbzlvܔ|/\޳-9Ϗ8Tor(Ҏ1X3Qu1 ZD͹T& Rͤ֔3JKh]Q\K&F&Ur Q<.QH9ti>zdl4ip{=BV'VN]PPL' β!3ܒ+C!j*y o$c^]Hb"(2kEN \i}fUii8VԴ2NMoL#qoUdmsD,eLcUݑX1JnɩMO!tSZ!a yIlɤ 0Ҭ]6y74:>Nr-Nը .T%/݃'Kӊ2I$yY#\X^ت9lRoM:%MRҩmjԔ$d3q%ƞqiNҶs (i`J;TLƘ9qKlI4Nxߑ+w_6Jne QOUI]}u$RJ=DfG +Ae4s\ggp. mv׫e26R9=$f[TEQh/~uKE2MM"#.*Q,a e:Q VT%n.}n" b&JuA\t_Xj4Z7bhi/༡ E Yb5Q_U""I}Jyg&JZ'Pzns'&{y=??9"ڸf2UzJS.\~\.\3Q)&[6҇s*(R3Q+h.,bPfUq*ZЮrȒ Jdn5G~*wTdSKʒY(H.3}(ݲOۖu7eՔSVm[6RUkKoLK|q' X:sy2(WQU4O4%\gZ6MFDZ]IHe)1>YVV=ofT~7^/Rm9![b>}33E)e (gO707H\ vDWb7M{g-ǡ"qZ5%-9&@umi0J䊅VsfEaE $)0/*:SpZOU'7THqh׿\k;$\zGEabcM4f\xhBc*[fj"yoTi2(GOZ7)]6?^u4uP =RdY6̥:e*m-F $FEr_/,_~ws=kqW3\\.me73}M:9VߩXxi3tڨ:uZ74W(5RV UP ߮TRSfKTQ4xVD{d0Fy \:ѻNwb3U9ީ.JDDf%m66Bu BP5F:j댵j䮫(x +=]a=&pP8'nRTgޑij}tVmթިBTgʒ-n۪q>{k._VޖS-w\v4E[Ui$qDhI93QyM>ceO~=PU·JC}](D5ˋTw[SaCq탒MP5oT$&[Ptg0JRRId$-Ru՛m%mH9dŹߍ"–h&}+CqeKZ"(ZS{6Km%^ZۅF{{N6Hjٵ\[ $Rn&iCzkvW1(7$!itvBk^*4&iZ8pp Qn]IvXV /e&zft^= \nDiosR{/+m*ɺnVơJo[oapuRkq"ƴniBx>(LA-e;6uzN&:RVhZRT2:JP4a}*]*Jr2:UpS)[Uc۱Q-)>"Q'bMXTak@TkS}G+soN[jݷV'DdEEbZ8ҿ1Tn{':]xDN'q$)\;lSm?p{oOQX\|peI͘U;snDO8Wy2e_;qx$al Я?ӼdF]ٿ9qCÐHmmpF d}hޣ' w%[ ^wn]9u IBCyh.%FԥJFøҩci52|b1!F}9NCz# 擤jS+֥WOٷݗSٟ.RqRxI]Nc}a:Yc?WPHQ[O1.&jѭ /2'0Ech$Ҝ7EꢡmNNZ6%ߟmvJB3*4ڌw"L.ǬĖIƜmP+BfI-uPJ^lY=LFMPi8[8 icYu%.8RfwO胺}@|Dwc{(Uere DڥWcO_SmYl%rZMG]u/hiօӴ0FAfEmxVktj6 Omo'0!bc$xJtFO}@|DCz 3S*nHnVߨY1u}{fO&WjSI Ԕ2KK/"T9>5qt$IGr"ڌ$0eFAF]-=c {βXJvrDo{i0~*WӀpZӎD94iyBS5J eR7RnHRPaԺ4.JhdM#:u2Ս+V=ܭU%KR]~џ dhDVTAZVEU..˲7Km*3RQB פ\Fo)2@V^_;rϾ"' Kg}[^AsY?d@3hW3!~ի}Yjv|X: ЯfBV0,t( eݝ鍚;?l1F* M}(C7cm߻r7hVT:ӏ? n>'YJ{ wW2WҏJ左JqKJM"WeIK`-Goڋ͹jѢRq=fr"Ehi82֮an(LUtpWgU dʹ*Kjx""-DBe}TBVRԪՈ>U R ߨgYjR{YzI|L"!6;ө_RT "5|f4\Z_,,korT [f7?TyHm;6ϾQoŹ<5cPgd*.߇rW#[2okͮtM6}\RHɥI.#،3WϨ/y˳?k>.ϛiﯽAy?ҼkP^O=Z rϨ/y˳?C{f`[3.ۇӑOmnmj.cm;FSru D4ԄsASۉ'"' OjT[EZE{[U Ue7s i4tK"?jBI1ϋ!@ETyJ&TW٨STپHmjmbCۛ%]N;am嗂1ŝs5GTbs%m6|h5!\+Jt܌˴z2ƲnOHɫU)Jn3Ku-JMAK=ԣ".ğk(tfpDU{CV{wz3vKɶڜ2%H }̻L;SBwݭZe-Th-Hy( I>1i~)Jd1a1r} \0gQ/ j+*JT딳Kh3RKؒf}V޲"l;iK6Luk"}[U1? _U1?K'NߵjQ6wӷZT@_@6ktjU\K7-ƔԖڝmF7c˹m,H}R)ɾ(5QsT⥵0f&Dd#Y`X!YTĄj%f[|CRId$-R}:crhS ̇4W+]*ըu\Է5э('7&{.!i4Zi”|U[ǪRaU2RÑ& %s~Agh:crhSVײhq2ۥh> Z"Bx(.(Ls_ٸP1?bSt+v:r7ukqN=8I(#YR$PtΘN⣔2gҠ,DU J#6l̹/[JTB֐Vkk9dZڕ&aHq1x[s>$%fHJp*I[TpǙkL kmJY"tnOa|/L*I3%$=H8[Yk67{,z2ªNrTƕ>Z"#%OsvAu5vh31O~}bnéȧסZ;rjř%YNb>YVGBv@]~s@NkKeXTuy Rt#4,JDzE{e6ҀWfZl(٥UC⼗j"2Ԙ,2Sޚχ2Pmoڵ?ZՍiQqnKRҩHC 2$im!cZ{jGKk d$ ^2}Bh́D O8BLu[_tΘN⣔2gҠ,DU J#6l̹/[JTB֐gL4*9C(Vz*2DKP3n,f˘UnI$KZ-iO LU:9K5ƣa D|k܈ҍ(74))"$2&y?S'NiR-jcq}Q"5J Ǎ$ JH JǏ;Qb,2m bJH%nNi:G,ipC4C-m<&\w/vYo6fӄi2EVmTRU FAs[.Q) &*2\>3`ײTnmfdmZ*n[.=c3[ )P-$i2Qp$,!Fӄi22 <֡_6fʺ`-OK歾|WSnƃJąI}E|VmTRU FAs[.Q) &*2\>3`ײTnmfdmC},Wsޛhvn52J뵇T伳}$ҚBKD[/-8[&Bb?RXrmJ'n2e.On!hy)#VR6Q `e,rӫ]jk^fEhh]J3hRT#؂R^5Rsc͗uq4T\-?!Tr~ic,]bUm2]]B޸[Q5c Zʹ>Jx;o>|kX n<cQmKZP(F"_6>jל\E*9T-ڍFb$#FJ4jB5d۫UP34MnB[LR*PChԓJt8o)SIƐS>NVh-j9vN2j93P#;[diYƒ3B=eֹwPBvn:{YZvAMn3TJWdm"3q[( DD3f`O[RsjK(0$Ty:>j'I9f4,jKM5J9x"O=lr=z|woڛH(͹[LW>Z2(56RRϴAiv KjŽs~6[z|rێ% {poH*uB~ٚ??c-P GПf@O3X TQ'};>} fkt>5@*uB~ٚ??c-P GПf@O3X TQ'};>} fkt>5@*uB~ٚ??c-P GПf@O3X TQ'}O)XĦdi]f۬ު~o)BN4-ܷ##0E^,yKb<ޘ=:X^yS0ήΏ;;NrVJ^v^l%*QL6mw'}w q_dc[yNǔ*ʝ|A]w q_dc[yNǔ*ʝ|A]w q_dc[yNà~UWhX/YWUI:%~$a*JTe(JZj2u$I ܃껷}^3Njx{7RhZ^3MqiR˃u6鑶6Ok#J)ֵfMg([(ܶӄ̍ &.2\>3`d![Yn;f@Q.XLKd/Sn IFGCQnp\wѤ} x O'_hlX0_;4|<-;ŃC-̉c,.zYYjmK D8_T?hl;4|΍P<Jf;Pm%cae7CNsa- ˉ)_5ekNR VqŨNϽ\A{U)V 9'f_JLR&hF|\$sFOaѧG~،r֋4bΪ#&B[S˄I3V<; YwZN;騑%p˗bծY4-GL&EI-&n$Fj-Shl;4|>21ubVIuYʋ5mԕp,J~3U\meJeG%Rԧ㚤._9uTxҶ5II$Shl;4|K5qjmNգŰrZ9(BT~Km$ҲeGޑ,sRvv[fjE(mu컉q 4i>ے B& Զn}0j" EkncFD[Nd_2t!9dSv{!Ȏ,e+߀֒stU9dLS 媍pc-`U83.9Kpu*e)YbLϴ3$Btijc dKeꌹ̍˔ۮ#cJS•9Aw?ikQ߶y>Zw^Xms>j#c>b[7SQ^۪؈[aun\n\VmzsI+\ِˬQ92[j##O ev hS.χ*B-JHԧ5))"&d^GsFObu|Ey^UN~Jf-*Gsn*eq׺Nh-¤;uE7Pg WjZ5놠pQ-֖_l0Iy%iJj3-csO'_hlq՚\gjjŷh0U:VS~|dp4:^2S2Oi~%_SX4ئ*Tc2חZKj&{TƜqMܞ7_)ǔ*ʝc)lU;O=o{S} w'MwWoc,߅UU9URb:_9J:qJ$I/C9Y}sCRjVӎ- = f%țSbBZ[ƢR6Ah[vmW5hۙ6kjF*$*\Td$M̍ 6)?DU? ]I N by-qe4)v5T3IHhn0vL#RsE.qP2\V CVyL-| %-sd)>oy ͸ 2UImqdnJTc/1ld&u[)?1Sƍ̻]??+ci>eoX2iexqE%F}:ZfNq6i7DEKa3%]ZlA (2ZQEuC&T c3[&#2%<&Jk4y##[= k*w2|:q6]%GZݧy.ڔn6) "CYA=~Z鵀,t{ލ#S[iBr7e U*[lOvcQsđf%pD$q橁iw(vܫX0ܥSΎm2ԊZI:t) JKHR HRO}W` T+.*AHgW H|f}7y齺VV[qjf<{ D-Ը%J8TIIm/]8@] &^ViҊ";g mND\bRTlᚋm̎`=eضt)vIvSYe&m/P$s8>իS{eHrIf٥Lg*.8KF[ăRg5E"iw/#/;ŧ1"4'9H2u+.SJ6ҢADdd~.Ih15v[6MfPPgU(R]Mq˖IRx [Nߢh1@U/wRWrD71DC\l&e/jhB亍ͩLy=IQq|M@K+%/ԭI;D_5[/W$NF}e<8=̷Z/quc\J(5/Ԅ3W( WmmNH%܌#X~OwNhMo"|Г0SJ&XKdJ#h~%k5w=sDt7#}0%Dl )RjSOEzJةQJbM&NJ"2=_fF=_W]s5B{f%޿hǭ||bt٣q!F"׹ox:G`ph_z'k٪ij_RfoGu%k5ⴔ;=ïibIBY*7eV~\ |Px} Q-*O{7Zw&|o/sx8fTمN~Fdq[]QoqKQp}jckexߥL&Nl&JLmXel%$˜v, ̆Q";uRKBТRT-˰gbb\ULr5CTƖxo<˫K7T)i#BUڒZ E֤ XbjI /0)N'_;<̣ mrELT\d܋~&gߐ"K>+S`jLwN4K%nJJ!k~]XbL9zl_[%kI;)32ܻ3avTGȉBT]46-5{Wl{s5c6ODa/7Y[pI>3.Ю32۴rx)Zmjj4ˊ- ujB -IgOE֭~7m`hΞ?wZo E_=qF)- z4Oz@Q?R߼ɟ/p=fy?|^>+n3*zqWJ:ipbdbQ)'"BGz)y &ضu*Q]J"%nUU7%MnS'&4$/c_)}YM. "e-?qoH>MH3 RԞs&(E]GƙUx\{G+%#ɫ4ZFo^2:z:t}_j)L #X*iݏu&.j? )3eIKYz㧫 ђ7VnxSd%FnI|̚eF|(IgU1NUٛ4M=6ݛqSeNS]VQ5#sۍ6bNq+-i}"%mI¨ˎI4u-Y#úѱt1[9~.$u9fV?mĥhW {(1׀Ϝ[n*l`JUVXY-/3Rmպ6zo-$3+8/,j^Nl9VؕMC%q%66o5,Tbpn˚eZʼLT橖Ta㆔$KW Od 񱨬[vMoFȂ.qd>a-kq;jI'cQvp|tz:&n-B;r5УmĒf#˰H}Ӯ,)]HXڞ??@k.]Z4"6j(AiY˳B]~'~1Tr[R=q7ԤGDWd穤(?#3?hVjuXή }.d&2$Jwb2W v܈̬̏Ѿ*V*(ͷDZu.ۉK#5˰NʣXEMEʆ*ZVԔQZW-JԧH[Df)Eٱ7>SߐZF%MwIlf{vJeH*ќJG_*U3dˌ#q<*>ڃ7uu\RKe`G&HnFᤜ3ZE?H R9%P3h6F]ݝ9QE]jp˩UZ[jqPO=b#Ii܋NY7PQĊΰ --F,$f"333? .6!\tĵTmIK$i(umcY6FE>ypgf.32m3V64XgOE֭~7m`/HzE|GЧ ׍tXZHu^ES`r$OOLТ#4E1Z1>s1ew3mN/R{ͽu8xS^&{Bs1{Bs1 {Bs1{Bs1чj[3Wf_gxbM뢄1U N4s$M5fj>s/+W? }߈pΙoN0qNxγxUJ H\4}[) yDHW LpDsyuzzb '&sݻ\l\;_RQW:k76k_Υfuc-\~a÷f*F,bk'-TRQǞ\FԵ£Q9mrSئ⠳n+Ű)fw2Q̞aIÈy.OD:2IR}yVBT̸BSs!2l=LUGp)NBckfugbzMAL=F\TH%nrY%O[ $X^i__oЧ 3q'}q4Vm:{vfz.O.5fJ2B2".cطVDD%ON|Vv4ՏץVRdU]m\f;Y%JI~rŪ*QT_@:0OOR8% {(PjRd#&ˎι%*?I_@:8iG5gOG_7ڠ-F-O!]찲u2ȖS9u8h{/f!Ȧ$涭_OWmP&aS"A,5Ȋc&%=fi5)KefhF*-S 5M#b,hU[ƻmZsZR[ wި}!`jz N bykn3=1$Y,Ƿb:)K&Yv8 _v.Iߧ=*nu%iF6Rߋm# Ҵ;/'3K_n]2LRfLxlD M÷v]]jPy25"bꕶ#ssCMq%F%bSw=bwV*qǿEe=yGfl%3qYmk;o:YN9-IZRT Li#"/, jnsN4Ei663J{v#-˰܇<>M*1؎>6qQ"vMFfg] #=~Z鵁:z,޵kk4X|GЧ(K.;><ě)΋wW08l:/cI+oo}\ Tv]ՋmnƹE3gLtiG;ȋs2!Zڄ{''QiUNĈ"SI% 'Dd[ 0YfjOeYYbWT┸1cMM(ȒID|I-Zp|^߃r)}"m"-r p$j z&IzBS 3q,o-(#6rV> jccH~<'y)+B)&FFFGt\B&շkviQ*4j c 0ͧڊ2d̔.2J?L !`/i1V|e6lZ"L=^uqRֵ5)J333=|{R>A7ЇtDM#icɧyN!NǓN*6@p{R>A7ЇtDM#icɧyN!NǓN*6@P=,Vw&qP]:l7FD,ȌҢ>#Oh1ƸI6Ƕͧmp;%&<>D$d]g۰:.t,o:ūV)5r#DuFFiAnDeoB|ұq'־!z^ioC\ω!@4po?վOC 柧{QVa? 3~=[t0ipH6S7`S,B]IFr$qq2Qq5v<+ʵN^T*קJ&[(r%ƄI""TZ=KDVT%iI\%=Fg)DU? Yx–Ec,u$+962m$vWըV\\j"id&R}w; Y {x?>ڡxJOri|RfFȈ!8钮{G)-ZPEiR:bK*ok6iRػGj\Y%ge AUzQ ]1XLgXyO 8PK'S,{m NPvS2^P.pT_T}B?T|-U-%6^y i 4($a zկM g_X(K.;><^E_=qF),|V3'tpxbҾ wX̟M?gJlPSk' '}ɬߣ6+gK5FքiatZ nWԦ_&0]mqЂIoAG;iOoaܝ7 z0N~S熽w'm?)^ҏ'?qMz}(BhTjDN?ArYn\ Tud*l2#-D.kı C")il:a+b"2I[njc2~WELj35*c2~WELj35tu|]ubd\ub=.M/Z[m$E$DFfj"/=~:z/jpOEED%RS؇$SRm[҅~6-̀X =K[*u*ݗ.1WM4 'f[(mU 缕|ӘzJodqliYDZY"e(x椌.8 ׶&lqVA7bE!dUEK$H$;dI$C]N'{,Z􉷻9XV|K I4 M&JR .$[Jn\ҫ5v&HOU2 J&)ddFGj/iZL#(DT-t]R1kKYIr5BDV^2 S*4oIOӮ,)]HXڞ??@CzR8u8+pҤ}ˀID{adzFgHt8jx;!-KнGuDA7H*˲1FgĤi#=ޑd]ih۸Գt%Tiք<,GVdDFgoϾ^ˣͺע^ˣͺעz4뎟uȎT=3−v#O/p8P:u?W6P}M5dHORn^ˣͺע^ˣͺע{PMn;˫ 4\ I3=֧j]iwB~]mֽwB~]mֽ -g_XGt/_kT?޹WCםVTf&]Rީ87Гpo }ې E_=qF)- z4Oe5cⱙ?wώě~ΕՏd?W>8lY:Wd5{W(:i5|"4JKN!uIQvHBw_MzŮnn(>MpNe"As j_3w\O(w.0sw詨&c[ 7P()Ql’aA]+ לzKOZ5Ki6"N5C^u_FHֆ]wuKu#]TQD!MDrO)m)=jb )fIfMQAgy {x&Ʋf\-HU-mxmn@3(Х)>T"KuKE.Ge,n-թ4K۰a\4K̬uN3SxR#R]?nd_=;ƲnVu33 {2&iǶDI"JH"/]i?MhY,Fvfo#;h%X4iAS tw91;De<G }AG˛UQ~n[' ԝ“$W_fo#;hwK74?@Z'&7RNX݅RedF,DFQHuk$;-EY9",Fvz@Qofo#;hwK74?@c>SNoT>NםpTXLzknN,d[b5 [iB/H/HSV>+p\:8Rb3؏b/4sug`m#jj ?P-KQsZQ=,Y0ao,͘ (K7e?ÃG2f/H -#`f̰|هpĚIkBrk+7͊)4kGlx)jӜeDj7Y-b [)$}-܅R-{*߶f<ۯ)q :{-m4}c4ۀU~|E]"xD~|E]"x@Z;K/jѱ|5=ng^5)&Oy\\GvS&9/!l\N*~z¢.I(smd6 wh.daBs1{Bs1ht'}=ht'} _|! _|";ok0ok0'+W? }߈+W? }߈ևMzևMzHЭ\%o~"Э\%o~"#Z6v_sZ6v_s"{Bs1{Bs1ht'}=ht'} _|! _|";ok0ok0'+W? }߈+W? }߈ևMzևMzHЭ\%o~"Э\%o~"#Z6v_sZ6v_s"{Bs1{Bs1ht'}=ht'} _|! _|";ok0ok0sTW5n\#BU$P[R#C'QIRTdd~3K/ׂm)λi1;oP XV o%^jfo9s\b zs.u4Ӥ%7%g>7ʩJeɲ6i R[ffa`|GЧ(K.;><X 79jWEJdv(D˿hn]ꧭQjO35n_$;G+HW[ELj35e*t\x?_\Mj|GЧ(K.;><vۖu"Km"J2a.;nZjkRH֓>&'eD{@)wô4?"zT%+[t'%nnrvˋlOKWT5kqs]zuS:\hwKIJG);GY}Ld5Rn^lnF`~6ZlF\عl{)I):\7ZYv⩪^Qn fQ2*_&_$Jm;ɘcq+ם%ECn(GƣRJ j>%q+cdHYzVgĘJm*eV&\LC*Iȫin4qKtRJPHIy6Z8}VD[.#1s7(0UY]5:\B6*ie*_ ϏcQlvXҟkU(t ̲[7ߩ˒Tѭu\DJsI$$ȻW XI+ܵ&.A-UG*SN&eH۽s*'2>rm%eR裝R5Q]t $i\+BӲY*;z^eYsJQ-ۅ5 A:cеM*J\ğnSUWh+NZ#W;6Q *I0g-8["Z;on4W[]s-{ MSjU)H}mnEF]%@_:@|M2:.<^CbNӽPfLt2-υ0j{I8ivį~~bWvR~?Z]1+uG.ߘ]֗oJA|K%}`'hw_4q_hI8ivį~~bWvR~?Z]1+uG.ߘ]֗oJA|K%}`'hw_4q_hI8ivį~~bWvR~?Z]1+uG.ߘJ >&_ ls"xEyI/gfԮE֮ RBL:hJRI q'}q4lJj{~ꦱ!2ڇ[39JTJK$i%o_@"jvׄJvS5Jzpf7Ҥu.3RIԗJJ:lzV-}\D%FD\W£i"KJ C=ojvM,i5G4n:MgxˍA*c %Q6=ӛNjXz-%ekW[V] 2:j}ȝ5QduuI"y}G6v=Ӊuw[Np[ualLfYˤjA-_6>MjFv-[uPA=]nD9LTcҌj2Cj_ T![!u@T =Ͳt o*%AE1ДtZZd ym1Ol.0qWn$Kt9"WKmJnM4&~G8~r(zj=j+Nl\f9:ݗV=Ƕj-G9v$&jQJQFffbgEyömA6lZ2 <Ք,N/n)J5)G=]:iɮ-^*L_ )SIKAЁ_57 3܏ʯv\RmI>3[ϰ{Qv8ծ8Ee;jyl\R%(*2"2O\JTFHZmX ͪ)gg~G.䴮/,JVTK2SHinM%kdė[Sn5J:lzV-rFds_ .%*#$-6jOVxL^4;_ӨTKfS'LqJV{-H%s,}IҳV32URc"BM- LT-V5n[H5 ޛ5WhL{\󐞧8-o-6e* [0E1UiW:iܹEŴENſ91m]ۈL>bW3 F돾IsY֡ӮV]ԛ6oU=:I3[\d\I#2܆U~#()p{Ղi ;>JLFIMҥ]jԪ-XW3q=TeHZxĶ-1HlH(fJj+ZrҡVE:DەP WiFKw%/&F{-\]-j)VjNZmURߕ%xNrDf#/C_zr[&.M6ZjQ m pP]*J]AԾZO\;io!X7VB/~RuJ:mM/_ZyR[mFWөY]ꗭkY&|u9m͌-q'l[n1N|mvDLkoU",vl"O;"-y2}QX%Q\y)K] Bj«x[Z%RUQeХSP5 ҍENiTјhMzVWE٨ [EXnݬ bP|/Z>503$I{K])OX6Eߑ©^魵FLw٪dM1PUf*Qv M:I)Ml ^9[Sܤāiy"Cfҧ\}>kBG$+r U3僧w%QQ*4gcs7R֥H#uD|BԥVqi$=Tqf;ԫj עT)$Tt̙J H[ۜH4/νjgk]Hh[Db%2z CP̓D۱"[%iJohT㜵v*pVk tFLq4P7Μ{Lc$ JIHqJO Ӯp喳j]I]BDK5p#JPdimא3K4&j)V`ڸڬ/Ik2]>C(UIE!&R4ILvHyT$옂&h\pIT Օj-':^CI.cyƐ_%FT nc ֗vd-Pܖ¤Ӟ8I沄7R҅'\^(W[Z0}V|"1-2*+8 ZmjCj$0\H5 )vF8cjr:LǟiLh}Mq,\*yRPTDI$t+B:e~UʹtʺiNy~S>&(У5ϡy\|fz͖.TYQ^(]&Hm8MA$2#"&>_1x#h~s ̋UJd@3K҈Pi2u"4pH |3*f|p֥`/ێee)ʥ=[rCyd]Eĭ&*e&W7{Gt.I*G +vDtd%t.UVz*SzXMViՑE Vѣ.-NrօL,{Z|4y(O1|<[ƭ&<[OX Ʈźl.>Q0Jc Bm%Yqg6[\q]y;)-4K%?1kʙɸOrd4abpfje*Z]m2CJH.JI婙J:QJVw-}IFDGH-J35n8iGJ8IXU^_"U^RHȔ#>[(Q4Ff5N擌s^rE~<ZVf5 [3M%եII҃"#RK}2sW*Nwj_~3jZk1Ƿ49)Fַ*FeHbemgc=#iVXvT۷ǐ^G,}#>-Vvo> -_oK`_y/u7a}^Eg6y |9_}Qn͞nw_0/lvE[}sg 3<݅z@`_y/u7a}^Eg6y |9_}Qn͞nw_0/lvE[}sg 3<݅z@`_y/u7a}^Eg6y |9_}Q 1:xS&eLN=A݅Ƿ+%X6FG6­jZbK(yI%VDdJQo~WX|I4&'xas%PEs_/b-_oKz@x+ˣj4:MP=_ KKOZZO-q4qfW L1Vwm܉HuYoz۪ΏɗɢDﺯ;sSĤ(Ԓ|̫=.u/N-<229 FRRw48s.Yme**ʨUԄ4$'!%ڦluǾ(j=3jɏӪxU*Tl3*ORٌۍ Ng6d!iI'r2\oKʸi9 nc{FUeȌUR$-! A-)IiVA1וnkrNѥR9WU5tjJ9[)ݢ#Y~g~'qUs%ձmd+m \h$mI/i=`;Q+Ӆ,9H3YV Ncdi>fQRֳIHŚ|sEfTzpCu dxrnOH6bȌ%kbo4ډ4FI\*u;zɌ9ԣ5}c%{QlY/"}?WiyuK)Q*~ۍN8T曧v3ÌƵ%S\6(= ޴Wj5bޣϮU%HmMf: djW ArReWܔbU+qyܗ 6eșOCKLue'OxR&c֨Vkv]Q.|or®z.Qċ*O)KqnMg#=\Meѝn:M1Xer&K:ZIA9TR+/NF/v\t0BVZAIO%ʌ]JZۦڌBBM=-wltՍiuGH%!8m,&Җ SFj"2 pɹP vPh׾MXjK"BdD$c){uOѿ{iZ|?e Q8zY*-L_ErD*{ϲĘ.NZY'ymRawEo`^GĹPdTk4S*->˪CFCmo4e&{)K5Fք٤7`B},>$oOZfV0ѯԱzEׯ΍~7Կƥ 1i\o䥲rqIGCNK&SD٧}v>UWj'֭ͨX?=9"::f癫; ]Mėlbhk2vTWx;ԸˉFLվj#+3ЬK)Pn-:8[mU6 O1[8_zg0ܐWnΚ>K=}GrƐ5y5SdZu.%z;Im̲$wq;3O`%Y曑 Q5bo9jSN),M[ŰǶIػ r5]2cɔQj싎t6߹%Ӝ7%q) MG-Di-b!-Gb7Mٖ<) )}rݕ&\n=!RZJR"".>a&h~Л4ⱆwOĚIkBlwW0Uڛ` G2d_r5:#ĤO6p1QnqnRNQ`[%֮MX̩)L7%a{fHpI$؍[ـ BqfNÒWe.RF}a8RfD.dXK&n,JY[LyDPM$ֵD$[a^fC(:ө%hQ)*Idede@TȐY9e32#[$$b-ϳZ$$fDELɏ1IonY)*/#.t{؟R >7Ф ҙ>G,33I_}6Ekb&Rhz`|jqqqZaJI5I,2&,/&f޻SzSf#{58Ĩ%Q&b}zuoopxv߷o[Fi/K/Ls3XnQX[ LmfF;drgz5 `J;,jԅa+["*uPXnFQe!J]5I&M)I6ߠT*%>TIOFBݎ̷G ([¨0ĵ*:A-'TD2܌#FQVb(1ȡ˔mvwn[vDmZ8jDq @#A m(N}DD= i b|o/H,3_B4XgOJg֒7mh~ZNެ`Zc*5$7/6bв5 O(k)!?5?oߔ쇷XPoS@~~t~R}cC])O,J~{} v?dO(k)!?5?oߔ쇷XPoS@~~t~R}cC])O,J~{} v?dO(k)!?5?oߔ쇷XPoS@hM-񼾅 h IlG@ʹ>sSu+KOpe¥Gxxnee-3.19/doc/Makefile.in0000664000000000000000000007137412332167123012124 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 = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(xnee_TEXINFOS) $(top_srcdir)/./autotools/mdate-sh \ $(srcdir)/version.texi $(srcdir)/stamp-vti \ $(top_srcdir)/./autotools/texinfo.tex AUTHORS COPYING \ ChangeLog NEWS README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/xnee.info TEXINFO_TEX = $(top_srcdir)/./autotools/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/./autotools DVIS = xnee.dvi PDFS = xnee.pdf PSS = xnee.ps HTMLS = xnee.html TEXINFOS = xnee.texi TEXI2DVI = texi2dvi MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(docdir)" 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; }; \ } DATA = $(doc_DATA) 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/xnee dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ xnee_TEXINFOS = xnee_error.texi xnee_prot.texi version.texi xnee_error.texi xnee_exampl.texi xnee_faq.texi xnee_install.texi xnee_intro.texi xnee_req.texi xnee_synch.texi xnee_usage.texi xnee_general.texi xnee_start.texi xnee_intern.texi xnee_copying fdl.texi xnee_func.texi xnee_progs.texi IMG_DIA = xndetail.dia xngener.dia xnrec.dia xnrep.dia xnswinp.dia IMG_EPS = xndetail.eps xngener.eps xnrec.eps xnrep.eps xnswinp.eps IMG_PDF = xndetail.pdf xngener.pdf xnrec.pdf xnrep.pdf xnswinp.pdf IMG_PNG = xndetail.png xngener.png xnrec.png xnrep.png xnswinp.png IMG_JPG = xndetail.jpg xngener.jpg xnrec.jpg xnrep.jpg xnswinp.jpg GEN_IMAGES = $(IMG_EPS) $(IMG_PDF) $(IMG_PNG) $(IMG_JPG) GEN_IMAGES_TO_INSTALL = $(IMG_PNG) $(IMG_JPG) MANUALS = xnee.html xnee.ps xnee.txt EXTRA_DIST = xnee_copying fdl.texi *.dia xnee.dox xnee.html xnee.pdf xnee.ps xnee.txt \ $(GEN_IMAGES_TO_INSTALL) #\ # $(MANUALS) @BUILDDOC_TRUE@DOC_DEP = $(GEN_IMAGES_TO_INSTALL) $(MANUALS) @BUILDDOC_TRUE@doc_DATA = $(MANUALS) $(GEN_IMAGES_TO_INSTALL) #MAKEINFO = @MAKEINFO@ --no-split #TEXI2HTML = texi2html #DVI2PS = dvi2ps #PS2PDF = ps2pdf ### TEXI2HTML_FLAGS = -split_chapter info_TEXINFOS = xnee.texi CLEANFILES = xnee.acs xnee.cvs xnee.mss xnee.prs \ xnee.ats xnee.evs xnee.fns xnee.ovs \ xnee.tmp stamp-vti \ $(IMG_EPS) $(IMG_PDF) $(IMG_PNG) $(IMG_JPG) \ *.eps *.jpg *.png *.pdf *.html all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/xnee.info: xnee.texi $(srcdir)/version.texi $(xnee_TEXINFOS) xnee.pdf: xnee.texi $(srcdir)/version.texi $(xnee_TEXINFOS) $(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti $(srcdir)/stamp-vti: xnee.texi $(top_srcdir)/configure @(dir=.; test -f ./xnee.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/./autotools/mdate-sh $$dir/xnee.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: @MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf xnee.t2d xnee.t2p clean-aminfo: -test -z "xnee.dvi xnee.pdf xnee.ps xnee.html" \ || rm -rf xnee.dvi xnee.pdf xnee.ps xnee.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) 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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) $(DATA) installdirs: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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-am: clean-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-docDATA install-info-am install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-docDATA uninstall-dvi-am uninstall-html-am \ uninstall-info-am uninstall-pdf-am uninstall-ps-am .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ clean-libtool cscopelist-am ctags-am dist-info distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-docDATA 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-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-docDATA uninstall-dvi-am uninstall-html-am \ uninstall-info-am uninstall-pdf-am uninstall-ps-am # HTML xnee.html: xnee.texi $(GEN_IMAGES) $(TEXI2HTML) $(TEXI2HTML_FLAGS) $(srcdir)/xnee.texi # PDF for RedHat #xnee.pdf: xnee.texi # -$(TEXI2DVI) --pdf --batch $(srcdir)/xnee.texi # PDF for Debian #xnee.pdf: xnee.ps $(GEN_IMAGES) # $(PS2PDF) $(srcdir)/xnee.ps # DVI xnee.dvi: $(GEN_IMAGES) $(TEXI2DVI) --batch $(srcdir)/xnee.texi # PS for RedHat #xnee.ps: xnee.pdf # pdf2ps $(srcdir)/xnee.pdf # PS for Debian #xnee.ps: xnee.dvi $(GEN_IMAGES) # $(DVI2PS) -c xnee.ps $(srcdir)/xnee.dvi #xnee.pdf: xnee.dvi $(GEN_IMAGES) # $(DVIPDF) xnee.dvi xnee.pdf # PS for Debian #xnee.ps: xnee.pdf $(GEN_IMAGES) # $(PDF2PS) $(srcdir)/xnee.pdf %.eps:%.dia @echo "creating EPS" $(DIA) --nosplash -e $@ $< %.pdf: %.texi @echo "creating PDF" $(TEXI2PDF) $< %.pdf: %.eps @echo "creating PDF" $(EPSTOPDF) --outfile $@ $< %.png: %.eps @echo "creating PNG" $(CONVERT) -density 144x144 $< $@ ( mv $@ `echo $@ | sed 's,\.png,_big\.png,g'` ) $(CONVERT) -density 32x32 $< $@ ( mv $@ `echo $@ | sed 's,\.png,_small\.png,g'` ) $(CONVERT) -density 60x60 $< $@ %.jpg: %.eps echo "creating JPG" $(CONVERT) -density 144x144 $< $@ ( mv $@ `echo $@ | sed 's,\.jpg,_big\.jpg,g'` ) $(CONVERT) -density 32x32 $< $@ ( mv $@ `echo $@ | sed 's,\.jpg,_small\.jpg,g'` ) $(CONVERT) -density 60x60 $< $@ ${IMG_EPS}: ${IMG_DIA} ${IMG_PDF}: ${IMG_EPS} ${IMG_PNG}: ${IMG_EPS} ${IMG_JPG}: ${IMG_EPS} @BUILDDOC_TRUE@install: @BUILDDOC_TRUE@ mkdir -p $(DESTDIR)/$(docdir) @BUILDDOC_TRUE@ cp $(MANUALS) $(GEN_IMAGES_TO_INSTALL) $(DESTDIR)$(docdir)/ @BUILDDOC_FALSE@install: @BUILDDOC_FALSE@ echo not installing docs api-doc: xnee.dox \rm -fr alldocs/ -mkdir alldocs -mkdir alldocs/devel \rm -fr latex $(DOXYGEN) xnee.dox cd latex && make ps && make pdf xnee.txt: $(MAKEINFO) -o xnee.txt --no-headers --no-split --no-validate xnee.texi manual: $(MANUALS) all: $(DOC_DEP) default: all clean: -rm -f $(CLEANFILES) # 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: xnee-3.19/doc/xnee_usage.texi0000664000000000000000000000000010230721125013040 00000000000000xnee-3.19/doc/xnee.texi0000664000000000000000000000506411715172360011705 00000000000000\input texinfo @c -*- Texinfo -*- @c %**start of header @setfilename xnee.info @settitle Xnee Manual @setchapternewpage off @c %**end o @include version.texi @dircategory Miscellaneous @direntry @ * : (Xnee). Xnee's Not Event Emulator. @end direntry @c Put everything in one index (arbitrarily chosen to be the concept index). @syncodeindex fn cp @syncodeindex ky cp @syncodeindex pg cp @syncodeindex vr cp @c This is used by a cross ref in make-stds.texi @set CODESTD 1 @iftex @set CHAPTER chapter @end iftex @ifinfo @set CHAPTER node @end ifinfo @titlepage @sp 10 @c omment The title is printed in a large font @center @titlefont{Xnee Manual} @c The following two commands start the copyright page. @page @vskip 0pt plus 1filll @title Xnee Manual @subtitle Xnee is a suite of programs with, @subtitle recording, replaying and 'distribution' @subtitle capabilities for X Window System @subtitle version @value{VERSION} @value{UPDATED} @author Henrik Sandklef @include xnee_copying @end titlepage @node Top, Summary, (dir), (dir) @ifinfo @top @end ifinfo @menu * Summary:: Summary. * Getting started:: Getting started * Functional overview:: Functional overview * Installation:: Installation * Examples:: examples * File format:: File format * Programs:: Programs * Internals:: Internals * Requirements:: Requirements * FAQ:: FAQ * Copying This Manual:: Copying This Manual * Index:: Index @end menu @shortcontents @node Summary, Getting started, Top, Top @include xnee_intro.texi @page @node Getting started, Functional overview, Summary, top @include xnee_start.texi @page @node Functional overview, Installation, Getting started, top @include xnee_func.texi @include xnee_general.texi @page @node Installation, Examples, Functional overview, top @include xnee_install.texi @page @node Examples, Programs, Installation, top @include xnee_exampl.texi @page @node Programs, File format, Examples, top @include xnee_progs.texi @page @node File format, Internals, Programs, top @include xnee_prot.texi @page @node Internals, Requirements, File format, top @include xnee_intern.texi @page @node Requirements , FAQ, Internals, top @include xnee_req.texi @page @node FAQ, Copying This Manual, Requirements, top @include xnee_faq.texi @page @node Copying This Manual, Index, FAQ, top @appendix Copying This Manual @include fdl.texi @node Index, (dir), Copying This Manual, top @chapter Index @printindex cp @contents @bye xnee-3.19/doc/fdl.texi0000664000000000000000000004600010265433502011503 00000000000000@appendixsec GNU Free Documentation License @cindex FDL, GNU Free Documentation License @center Version 1.2, November 2002 @display Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML}, PostScript or @acronym{PDF} designed for human modification. Examples of transparent image formats include @acronym{PNG}, @acronym{XCF} and @acronym{JPG}. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, @acronym{SGML} or @acronym{XML} for which the @acronym{DTD} and/or processing tools are not generally available, and the machine-generated @acronym{HTML}, PostScript or @acronym{PDF} produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warrany Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document 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. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. @end enumerate @page xnee-3.19/doc/NEWS0000664000000000000000000001506207773126256010565 00000000000000libxnee / NEWS ---------------------------- This file contains major news about cnee which is a part of the Xnee project. For more information about Xnee, http://www.gnu.org All text below concerns the old structure of Xnee ------------------------------------------------------------------------------ xnee / NEWS ---------------------------- Changes in - new options: '--data-to-record' '--events-to-record' '--time-to-record' '--event-range' Changes in 1.08 - new options: '--write-settings' writes a resource file from settings done '--mouse' sets up ranges for all mouse events '--keyboard' sets up ranges for all keynoard events '--recorded-resolution' resolution used when recording '--replay-resolution' resolution to use when replaying '--no-resolution-adjustment' Don't use resolution adjustment '--speed-percent [percent]' change the replaying speed '--pause-key [k m]' key+modifier pauses xnee's current action '--pause-key [k m]' key+modifier resume xnee's paused action '--insert-key [k m]' key+modifier inserts a meta mark in the log file '--max-threshold [nr]' sets the maximum threshold during sync '--min-threshold [nr]' sets the maximum threshold during sync '--tot-threshold [nr]' sets the total threshold during sync '--retype-file [file]' retype the contents of file '--retype-help ' retype the help printout - synchronisation rewritten Changes in 1.07 - version numbering changed (x.yz is used instead of x.y.z) - plugin functionality renamed to resource - plugin functionality added (plug in dynamic libs) - synchronization rewritten - force-replay option added - replay delay rewritten - Xnee can be configured (during configure) to: + exclude buffer verbose - print functions replaced by function pointers in dispatch functions, - Added modifier+key binding to pause, resume Changes in 1.0.6 - data names can now be more then 10 chars long ... errrh - Xnee can be configured to: + exclude verbose mode + gcov compilation + grpof compilation - new or modified options: '--print-event-names' prints all event names and number '--print-request-names' prints all request names and number '--print-event-names' prints event name or number '--print-request-names' prints request names or number Changes in 1.0.6pre1 - multiple modifiers added - data names can be used when setting ranges - docs updated with the above changes - range setting (when replaying) bug corrected - speed increased (removed recording of device event when replying) - Xnee is now a GNU package Changes in 1.0.5 - Typos corrected in doc/ & README (after GNU review) - Fiex parser error (--no_sync ----> --no-sync ) - Manual corrected (after GNU review) - new options added to ease up usage a bit: '--print-event-name' '--print-error-name' '--print-reply-name' '--print-request-name' '--print-data-name' - info, manuals updated Changes in 1.0.4 - changed printout for --help and --version - made ChangeLog what is supposed to be build.sh doesn't copy NEWS to ChangeLog anymore - xnee manual is now under FDL - xnee developer manual is now under FDL - TODO updated with GNU Coding Standard todos - doc (texi) files updated with index refs - doc (texi) files updated to make info pages nice - build_web.sh added to CVS - fixed one sigbus & one sigsegv on non-glibc platforms (thanks freeBSD) Changes in 1.0.3 - fixed parse error (mainor_range ---> minor_range ) - switched to CLI options syntax as recommended by the GNU Coding Standards - fixed a seg fault when closing down recording Changes in 1.0.2 - stop_key is now correctly parsed (man page updated) - CPU consuming calls to XRecordProcessReplies removed - Async recording is not used anymore - Fixed memory leak (a few bytes when closing down) - man page corrected - help printout corrected Changes in 1.0.1 - Fixed memory leak Changes in 1.0 - Added --stop_key option to CLI and plugin files and record file - Added --future_clients option to CLI - Manual in pdf has moved to Documentation package - Manual updated - Example session included - Source code is documented (using doxygen) - man pages are generated from xnee binary - Xnee now comes in two packages Program and Documentation Changes in 0.9 - new command line options: --print_settings - xnee reads (and uses) settings from recorded file - added texi files (pdf, html, txt manuals) - added man page - EXAMPLES file updated - redhat specs updated Changes in 0.9beta - ugly printout when using delayed startup removed - MANUAL added Changes in 0.9alpha - synchronisation works .... at last :) - removed a lot of duplicated code - The following option has been updated 1) help 2) binary 3) out "stdout" in plugin scripts is treated as stdout (not creating a file called stdout) 4) err "stderr" in plugin scripts is treated as stderr (not creating a file called stderr) - DESCRIPTION, EXAMPLES, FAQ, README, TODO updated - DEVELOPMENT added Changes in 0.8.1 - fixed a hanging (not on all platforms) xnee when finished replaying - fixed dependency to libxnee for the xnee binary in the generated Makefiles - fiexd missing newline in help text Changes in 0.8 - minor bugfixes - copyright years added - the depcomp script have been added. - It compiles and runs on Solaris8 (intel) and Windows98/Cygwin/Xfree86. - The order of libs to be linked has changed. Changes in 0.8beta - --time options now works - Pressing Ctrl-C will stop Xnee but __NOT__ remove the recorded file Changes in 0.8alpha - worked around the bug* that crashed the X server when recording delivered events. *) I still do not know where the bug is located (e.g xnee, X, RECORD) Changes in 0.7.2 - "plugins / xnee settings" is from now on only called plugin .. sorry about the fuzz - Support for RedHat RPM/SRPMS is included is distribution - build.sh is extended to build from clean dist to RPMs Changes in 0.7.1 - Support for plugins / xnee settings file is corrected Changes in 0.7 - Delay works fine - System info printing is back ... never missed it really since replay doesn't use it .. yet - Support for plugins / xnee settings file is added Changes in 0.7alpha_2 - Xnee can now record delivered events (used FutureClients) without crashing - First event not recorded (thank to Ton van Vliet) Changes in 0.7alpha_1 - Seg. fault on debian fixed - Mem fault on OpenBSD fixed - Xnee is now (at last) "autoconfed" xnee-3.19/doc/xndetail.jpg0000664000000000000000000011416412332167165012372 00000000000000JFIF<< ICC_PROFILE mntrRGB XYZ acspAPPL, desc|cprtx(wtptbkptrXYZgXYZbXYZrTRC gTRC bTRC desc"Artifex Software sRGB ICC Profile"Artifex Software sRGB ICC ProfiletextCopyright Artifex Software 2011XYZ QXYZ XYZ o8XYZ bXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC       C "  _  !"18X7VWYvw#AUu29Q$at36R%45BGTq'(Dbrs ?0 k35Zve}*mjc1Ti">֗ہKm>7Uʵ'f֮ z]:7ګ|Ooq-i-ds2.ZƇi,=7KVm.&jʟ(FQ H鋉MPbe9-,m茸Ґi{l"?+b㻤VKIjm6M":R-Hm- rд?MddJpu 鶮)VtH*V5Mq I҃p|+F򲳎:ѵˡލ^OM锗b|IdB )\Ck4-+}JMvlˎ t;,%) ۅi3/ |i ġZ%ɛiHyT*Is\z*Vm5%y(W1N%5SrtdlOƇ' e-64ip+d%I(u.)Me 0ݸPz=NըmGn廭TjSْHiinSh79i6rLwR`\jRfm[ڔ- UmrM>+2q܊}Fyhuu #!`5趷/fdlY/Ԯ TAv%?1c?eηj'xIJinH3S.8HKR"Z(~Ψ*r5|'=Kvȴ+S .K *Lv!?zRsF8͆ bf[O%kvi1!R\R„/[m]b@*u*KT69Em 2LHud)wʝK\'>SDܪjk+iǏk]X~m>Q_ϣҘi/5Nm-m6Nv%@2/K|хtA^$Tk Ylʨ.[̔vX6 q&ck7T%ԭ}@ :v(_z¶NXjzmR|^;~΋iBc2jCklkBZK)+֕l#Wc~j5 S1[J(2"5$s/ںmFޡkʶ$Wh)5*V&EnK)}=m<ڶˬ2l5n`\MP]?BOG%*_S/G :RyRyVq>,#KVf?ĝ4i̵[rW-\;o]9 YVtd*T'2KZqU%1KM n@E rQ1eF;--Gn&sm IL')Hj-ܥb]wݍ(ʹ,NA ^Gak&_-ۜm5+m \KoՍ*s7>oU:VKÓO̊>l8ɧi堔 H:/[y֭B_<㒪R*Y[$֮$ȈkpU4Ww6ʧvʝ7q7rĤ(-[c`,zӻ o:O)r%1 sd+hI4u V :2d b_Qf9PNĥpNQ<Rs$8 T9>}KS}B^+*G6t._5x_'O £I~fCVe8;/ԜU-OmeW(kd;zj6K5"2mfMkB4 ܫpjhMTlEAY4T>8ol6Qc%]2Jƶ ˑMhksq-JJMf[1JV QMpږؒm.%*RId[ﱟfi:f5\f:1+TL&xDVvA&4kBt⬗~7i֦`^ռɠdV:qilK:߇ ܒSO= Kք78>-mlם--c9[&Tꔘ,P%ed&.'=[Y^zKJ.RɗENOubRi;SPqJ-oW &6n<ĤIukK z\%n(iZF q^5)>H֪M\sǤm/%K2yp/_=uՌO.T=ƖOobz4goػv/e#r\ß1J?,K+ݕJ<\;jACwm!(A>:6| 6G"2iwNw/qPm" QDnI-FK:Z iAT)ޚl枵Ŀߩ)ҕ$`͟SlK3xI%bSr}wP)XjZdT-pFQZB5$!ԶI$4.M6+>cZJ!s&K]_d}ppyIfq8iJJ-nɠ 4y:oؿ3t\tI:}|DH͡1P}IH z /Wr6!I϶T%jQ GQU飜s?wZ#'ĈgPlFh73- $IDy#g IYͥ[q+Af5=wGeIm yfKҕ+J&=>i]J`{Si;aL}^3NfeƥuU=4s_dQj5+V<ęع}b}69f;Oo{WY\:t:+\"ΑPOP.t慓o5 37BPm|Gկ^r{McѤю~ĬӮMf qւ,J$q%FVRVMSy/{6oojQPfBNʹ-33?W#Mnղ쬅kEǔqq=m/ҷ{o> vzfZFΘ.n䵢I&mpJ#m䒿DWY6!L\cڝ>Hv8&9#)qѸNr8iJh!hwJ1%&X*תS^Zj$) H[+崔-ZOk%yUޏMܶͳhVG|y1(䚵Aa Kuե.du5o[&⼶Yz_ .ɒbϚn6VOe!pֹFl4-Q|*kRzc[i&sur}bJ$-֔ˑ=N584HOCpԤ4f_GAtۿYK>3O<<]{[y:q͹c0̗o"1OU(s]15ȳ;#J2|d\/$H5`ɻ.jo[waQm|FO)nr"ڜu!GH{lDg=ajc2|?g>*O5 I:#x+[~d2E>)h"Q%5!1}+m [JIEwLO e}ݟoHcFD8IDYMu8ʙSK*|MJR -F|WU[ť1$'|K=}Bbp7g OZ5S 3b?N7JrUxHz:5G\.!5iTc0azֲ4I4ġHIɴjjѬZaQm|z]:75nr"[i5!%{nfg!m Ѿ0'Vh6nz# KrqGK2#-%֞m}dKmpDIRL~VZzSNSlzs"]קN1OudsӀ5<`qwUn}W V n-*s􆛖h[7[jRJeBI[Ί_BuVmB2t̠ n%/p[C|[.Y|O#=Vb.<e 2c]BQQ.:$kMK}1 I "w($_w*N h7v[܋ BIm-tSuN/M[Z]ZeZ1M/(Ke%FۦI3.Xގ+꾴enݷ쪍RcUqᚕ„%%$EDuǶU+69H6գ¢CvZҧb3(e8)5PFfIIo^)˓nRi A_PyZXj(4flіGkXrNZ~oNuT]Imn:Jrtfҷ $򐔐}^tj٤yFGjވؿџ}s38V恖 6lӞi{ 5[]•TI!Ur~c "^;]KEuT%Q#x;^ $r>:5|eGSgZ'Ͷ~eBk)Zژ/+:DDtZHrT $q:ԞGuoZůjڧR(Z3o gֵ2:LxUMtJZ(-HI5Ae.9RKO53+ŮO:X̟'ό k0,rЮo{~$ƾؚ(_F7Hzbt\x?_lMj[ehC|k~֘5$eQ7ƻi+y3,vk4)U$BJ$hmDfN2߿=ϋoPkȻ<&F6Ӗr;6Ԅ;M[p _E箚.<@04}C@ߨyah ܖfi%0!1fm(ԝˬ_zcWM^綵EU˓h ١jc0_-D˨_{}Cst̲ZRݎM4Mݏq_zbe,cb "/r;Sz2Dt5߅%wb(fͻ5 f]5*6jfӞCNg /!.6LI2܌d:ژ|7a=*: Cu1]XZZ%uDC}5 6'}s$ۙϯa=*:ɘ-"^5֗vW3n+m LP\ TҐ&F}mĤܺIӬ.jݠbTBk]z.9eMCIqChuqAD^ M?70D".a:=}I?]>:Z/:MTKJ[[B̉2%G.Upn? ?Ɯc2|?g>3t\ҭPh>FIII=չ}}^Z\rt.g ӏӊdh l4OFmO<m%=DDff}DD?2fB\n͔(IRqLG@!o{~$ƾؚ*m^i*~U*%n%FnبFR]Idb2Qu["x@ZY"4OPQ!qݻo6H5-j:͈Ƣyck"[4kir4K%0GUN41#ط33bu{y%r~Ό 竫ݍs}u{y<0z<u8ԝ8Ե%XR{Fgdpci&rVU/$7.:HtQf=iC%R+3ITD{nG[QZK4ςBw5hkbLUFG:sPOe6rБ6|ХZ׭J(x;&Tܸ-+GN*-˩I#. eε7dǯMKU6)ͦ3.u +WZoi"IfFF|fFIK1~jUXߪ4rܴe*) !o)BIJmd[E/;KM8m;Ї;KM8m;ЀyZn2V^a3G`=.{r|Д>-G$Uf]駯C4#ML*ȝ[R*TTq\ #25w4m.7Th;+P>bxۍ[xLu`'VgubVDUQM6l*$e8{kȔh%+433IZ|!^}7CT*-#>zY-q q,K.[wo[`gϖmy2Prgƚr m 4$(h&4hbӢZW}rЛHmLǖyύ֝""]I#JOr.eClNIc5*Rm^[t\G Fj$ڷQ wQHnT*wG!uj<-9+B>5Jx͊tv[^T:O B`Ӿ]6ڵVչzk)Ӯ)lȖ䷙e4vI殿yH5 w-RjZzeLN*kΥ8mɅ0٩i܉JR&P%ZJRWk8m:;LYb3 8$ IFdDDf`>Vu;=BW &i>ʣge}Le/K2-ĕ\m*xbL@pfFe[n[g:+[AiB[Ed}c*e,D;rɢT컆^ꪴuh&\ 4%v$ 8/-7cd;u}ٵʉ4r*[m)Il$[s?G9e:`38y_ӧ[ٶV]=5oIp'<9Wӧ;Ǔmm y ԇsJ"-siCj/\{]ZbӆRJPݥSRi<},RQq(;ű C{I ?=Q=6^ͨQ=6^ͨN3E9X5zTqb]YpSܕOSN%6~Zgúr#-|nn;./*jU2]ħSiܗ2dm&q%JHj3""#3UT TvMGr\ɒK,Faud!)#Q̈eKyS?*=0dq:U]H_q &ixջ{Y.ѣO^g3B8h~!GUV``دx*)DfIQ1xR2Bhd[H-\>-".m.\y(q= h4(7DIh^[' TwCMGr\ɒb3 8PF2""31boC^Ȍ(r-شl%<26c\&#߯b D>NEjlGG:ˈ%dG0Ң>߬G5=ݑ53G:LʣGG٨u; %*&pdZ \^He ;8ĶHI%IS$DE#ߢ汐&X5c5H8n.L̕@7MsfJhzQvdFnʮ6[1%1nI\JIxR|#L):dmB5TdKN/}u) JJ###"2X󥫖.qQa ki"H٤.˛n6bIQqTӁ ~Ek]bA-rV\.#9@ӝ {!s(˧ږ5Ő{BqHV#jCS'ER>48/hͰ['|܀>JZ@Ljq)tw%̙-fI\qFIB5Ȉ0kC_]W8ny, zTf ͯ `#Ip$!RiUTvMr$rKIaĚ\iFI3ǏF,y4⯡Bi\ aٺw'_F-۴WSbxۍ[xLiPʵjXݕ0˒FIQ]g:M*-PȕmFO2RXr.4j#JФdddfFAaCړU>:c*:zsYm(#$#ƒctK$-$nҎƭq/[)_>.U"R̒".c+Q%ĥDd{ӊӽ\O1gzcKV+{EF|\o% /}շu`kWEV֪m팣l nfM%MkIZw[ Q27v>Vn[啥SrKi% %|dh3CQ:ٚLȮЬUj-v=c('-Sj%!FbSelRVn 2Z-rƩ9lfkagi%Di>|²4(l&d^VuºV?qeӧKN4I3[m̐R⌑ Rddfko[w\+%i*3[:ttJMē5 H%)n(Е-fFFhIKSIZ.,q4Gq\FJ^J%8%9,ԣ"[I-dDMD$4j=UbɗDwdĢYÊk"ZcȍJ2%DDmY@:G|i_򀿴h[6K!\]uNLd8p2#W b3"3۬aݕO쌅h{Flti;/ú'FB4Ċgc4W|j7mDC 5i4YlGǀ1iƦ%_}z%_}z؝&U6GI&hXu1:Nܸs"Zp~3ۭHZTDQļ /Bļ /BEei˜_yySmKf[ăuر\y_ $|&G,ELj35JiNfc-wArΨʁͨےd\|5pŪ*. N b-S'WuCŪ*.w8Oe_5 ?qQDwmhh//SzNyso9](ǥ)RYyImMFڊC}{jUbok>#/6[-*JrQULqqNԩ۴."U>RHȲ[#>[N幤Ҥ Z@Ü0~KK'RUQǵ%W)1j7$GԇTe)]KanW{LqqNԩ۴."U>RHȲ[#>[N幤Ҥ Z$[><^E_=qʍ#S^F;ƭ[}*֮LSmÒ]k48%i"%$˭&##22(u{WDVƤе:3[AFi.>3ض04ޤ+V7%eEkw1)N+ >#L$%[)FH߽Y6QWZf]ZQL8avKQv'`j&%c4 d;6ѩQ)I/Tů Kbi)Qso-j7HVRG'Kwsaa\4ܗ5Fa{V=(_{Mq~{9Tz|w^z|)aY'2_>)/*J)$ГY(ΩZ="^*wͽ+q,Aq%/fIp_,BVf/}!_:Zf+&cWݐo!˨.:6c %9pۍ)l;rٹ6Ϸq-Jej-@>K qȆ܅\.n#22A2aI͖[U>22J]JvB356wIZd- bsn*":eMuVE3f\i|[BdeK>'b-7hW,;7 ǣv[Φ9bIW8.' ޑDyNZ۲Cr]]WMr%놞=2g+%Zlc r>+k6':ع 1Oe~9ku'O \I!J[[41n5* y/e1]: K̿f]iIR5? }_ ;kvCx\{)!*O24hu">~1޸##cZΙNO.}Vl;ZERHmHlajRJI%%[)Eaf]H]5?eDǓi*PPCa[#gdӬeQ-*I'QRlJ 9pRd)3$J%-F=YR1Z~ܖY+DKɥ!l؎O9?BwSHJ^gQ2u"؋HvE6u!7!(+I> $ #4F6eҫ5O3hE9> X2]>I3D5iLwT{56FgnKjx_SUiu [l*V'O[1MeIW-}G,|E2d R׭c%[cVzéƊQ mQ8rNFD8ZiKMn[!* IԷfEiْrд#WtW~ ϔK%TeơeWڗtYɄQ_mqH"ZznF'v=qtgn[Jon7R|].Ҏ^TlSSbuwۢY*5hQM@7Jcr'8|Jy*4)Z )̋ms#n8x%nAƘ߉el9I:qt`P5+E.%G|=)RW-̔ZˬL :Z5˵+]VUrj M$`H$/5ީ*"%+Obh57\zvEz cZIw`RX~'9F! x>!.b3NfjQ:ddVfd 5ǥ fo8ʡ:e~Q+eJBҢQn[[IQC~'~1Tԁh_ xt۴eW`1 n%B+kɚM%IJ=btAASR߭KV:brٰݹUq~+ƥsZV%.&9̔fSG,,v¥C6D:lͥԒԎȎF52B 2#RSE] |&1LKN-˨R,]Zq7l&KvDSi&Jv4<OWJ.%]Q( [[vmF=&ߌl52;-5'c !kʷ]`/Z `Ώ _-iԯ* ;1sSS)%8]I=3NuHP;odzUçXW{S"JU.K!d'7R OWj,eAke:u~&ij=TQ88n5"2RII4GU\ȶ,*|uD!BeJ4I5uH =i}DiV#QʓEJ虣-Ūz"S5>H߅[WB[I"/ կ]`[><^E_=qʍ#S^5-+r&ry$[l_ |F(n>tJm--Pf^:0fS&|^G;iOo<5ù;iOo<5G;iOo<5ù;iOo<5G;iOo<5ù;iOo<5iV)WšSm%&$>:cdfj=̐F{l[Cq'}4Vm:{B6fz. ö&Jۼr 1+[Iߝ?#Gm$iyI8 K$F~s71HuŬJ".dj-;OWU ͦr*(n:LhYuĢ#Q{ $J~Է̑m喻Gj4IV+.jPr-jCeH |G sNb׃T *=IHDKh|ҭ q)>xOoSG)q=Ē(I}=O6iCӱc&:tjߐ2қpN"U\DڅI_&G% sDjQղD/4 ۷Sƾؚ+6=uvJp="x@ZtΘN⣔2giPviZ"\qc6f\Ǘ­rI%*ZԄ!kNYiT9ST&LJoݾ(RGdh3"%*q"7 )ؒm*IZ@F@Ъr*t s"<_u*mID222# $||If)ImvHoXFHM2"4ECltu|Etu|k.V=[Lk9;Ue4V s. Y6TjTMA %oYL'Pם2*6eVF|[ 7RJwd3U+Z=dϯЪ1fAW#)n&bRP 3=*LMEP9hG-/e$xxI^ϫFiV R=(Is]H""չlD*~)ϹV`iz-6"ETRJU %>jIl"/w~r.|@*TLuTRj,zm:AB|:8UmdS|22D֝I- BIRL##.#/?ثTAønlбTQUQ?1+n,8sMBԵ[p;usjo: -FQiЮ⸭[p]SRIO [SBd{ ? !=LgieITN)%7["%~'98N4f\+W.W2OK^A(ja)7-.-^5!j!٩&>rF'^l/cI+o9}00OӇna=a柧Q{??N!~^Ot`9FƵqzݾNW8"(̚q<(g{)v܆iq{aIXbwqvݐ4JRQr%f4O\Y`)>(Iyq|$f{'Gn}BtlBvpN8e뒔iQҤcdi2eQy?u}־\QH_x=W~)=k=:{B6,:c:tfXyC(V{-2DKPn,f˘UnI$KZ-i4o`|<ˉ[kv)*IJ#;c#d*R9:/ӲI+FxQ^.%bBq-f{! CdXg NܩSzQZ- A,JOdQ<;RI$6"1f?]*۔s|(9Mm1RiCu'tIDFFm7.zm6!i Gdl$Jv$OL]胵=9˵ OL]+Lni*x%ʦVm'asSy28i T[Fdz(Ns065,Qig|qjb3P+SeAIٗ qI"#>N5/2ˑs?S9ES%1؉H$a$DdFEC4gK&&T"u2S Ԧ֝iiRv%A|$F{kTʸnIr:{GD1&ۜhxR}ZxIt'ujO|}evU:Vڽ.1 :۬669h6"N\kT֢2uJzNir +{.+9fee{0Xw"n7V}hh"}r6dY'R['s1vᱧ JUYSS6%rԞbS2b3DghIenn挑q5ZJI^4xͶ mZг3l-g/̟|uՕdɬUdCDTwLCe*_Y$ '!bg4굨gKSj\:1)pHW ТDdf;Pݥ~R;S#5@3kbߗ'қQ),IK8'Ƥ-(J˨GnZ~W&z&d”1%jZ n}릤n+sܻ-:Ŷ}Y 2G K2!L2ۈ2IA)$mWf3#".)g]XXSλT>=~'~1Tԁ%H諾b2J.ƦRDj[u eS2Bߚ 'gB58 f<ۊ˲[W܁iGf\Vq"rm$L%Dpw; V/,_~A&Ȓmt8|F48m0Fj;|8l#hA]jleBafT%՗S\8R)jQRF%2#2"1܀2嶨jTxZEV:ͅ)qYl)'dd1_LtQo1Uba^2VQS;}<:fљsˆ]hN݌,ܧ5 oW.xAG;:dddd-*$ IдI4$dQͲ0^ܦ"WEO:|Y94+nRi%uGD[^Nu?Vm8hۙc +VmK*hp3ƒ$'D܄ImlV0s(ws&oƶI0 kkΧ Cs51a=ge.UQP$%&H$uo[ B16ڈϺ~YvvdJQzmf t)#Hi!`fl">fSr)kOFVMJ%HRTfhe8_ߤ:hb_FTIu2\ANJs_ w=$J!7qLqN4;Ι.UBRR\".cN$ B&t{B㿕Gԧ e?~wNX'ě)w?`klX>96l+] մ{usLD#{-H$W=*lB]vKu*ʤƨqv:6 IϾ5@UqT[[iRrENB)>kQ$hI͓i$o\$e,[dMU"ܵq+3)GkJ 'cɶ#Ԛ%0阨Ng71HWj3}Sb$LC|}HNNNqkpe !3ceW$7jN܄}nq f35﹄7ҏ'?DIW,n2UBoӪ2ͺҒy͸bJ?L !5|PIwoUCwoUEwoUCwoUE.Ҿ'Ώ F3de)NBR%<&d[ h՗GN,Ҥnu۷ jrAfiQւ27vc2|?g>"̛"Ld<=2A8\n’sJNL[Y>5m9e<(#eWnJCj+nɑHA;RoY=>ж)5fCRaZ[2R^Q=~:z/jZWLx6 ՍZmK6앰m14ڔӪ#tIldE+/G_7Z4Xt::÷}hAjZ~Ͱ,}̷R\M͒>9n$:kRb%O @t{B㿕Gԧ(K.;Q}Jx ݙ&lfǴsFiDIQDgչSEX\wFfNS!ES:DfFhZ4#.Op:8[eN$Ȕh3">h,҅q`US+Lr'H$Z6,NۦS4FEװneOf:&vmq))#}0ى)i$Z֮%]{ǽ,>$oOZOSY_iVl*c@h=JRGE!If)3Iv،ȺSf5YsȊ44]ǹp8 {Ÿ6(m*-l+9T`5'G1'{=vYf;(4I$!I%)IDEDEWO&b (QЅ:QDg_! OиMEZX̟'ψObhucⱙ>OWELj35qU/\lաϏ&%0kmƗKuK$)&, 7'/ٙމ]JL|50HnCDwh'Yl "44@:z:t}_:z:t}_?/O:P2u 8 zMBMܗ\*N2SZeKJc/\h%;Bu=~'~1Tԁ?UqL0[ړJ[Z282!$gP~g{Ŗ ԵD<:Jw9N۩O6ԲJm*풵;npϡn)Z\҉&e5r,Ў%q7VPg]P;JfiLErEN7C4i2dJV7Iqj=?row6@ZS) Ӓ[NJb7 ԵpǰYw6V5ޙ_;@>9ƉRy$KĢyfF#sXx< qeVEv=6%ڵ[u趝;VBDIώedC.*h%&I3YIu~OtKց}"9![2 >'=s3T";'j4ed J֏Ck \TH3$_ؒ}&:x܈=~Z뵁:z,kk4X|*4OQnh\wHSV>+9tpxbҾ wX̟'ώě~,S6p5bV#rjau HB-Eu$zڹ_ `l$*4=T[7nTT1 m$ͭN'c-c@TKl|x3pR5 R=䲇[$YpFj=GF_^Q,>>c[-Rj)ˑ)Բj#n^)ݓX9*Xz݃iR ;-oT=D"J[ORVU>Ww,LGQ)0橤$J#J\"=r"XzX|I4# JmVXT0܃r"se&gO33Jv#33xLH,>$oOZOSY_iVlDf̰~=dzY,0.QoYo,?˃G23z@ve- t2^ͷYl.ѳy7F`HWzmr3#חc{R˟!84g~[0R̷-(cⱙ>OWELj35*c2|?g>"_d7dzdLoߓdZ[F+j2-<#&z{e&HA Rff`?&] Du/+VCBIDWmZVf[b$qȼ3E0-;erQRqpMR&|DPg K`,)g]XXz$`qejSfNSx0ݏti"SWl{ŇcUU; ݫǸw・Wp9WT (vKrߎ^=_5S/ڽ,{ʾj~8;zX|Npwj*A\/lΔ̆W봪f%)u ?" d2%T[gZ(K.;Q}Jx"t{B㿕GԧX̟'ώě~Տd?~|p$سt`;vwP*6JSU t9(%!iZ_E *z޸Fd =Bm?vԧ GY0F"AbL Xj-ak+o+\"NT59+R{=csIXk${F%6C̚Z},)JY\<*2@K|{_tQ\:YFȶz!<Lyž;DE'Q4 &Rm6JInfg#ĚIBjk+7͊Mvud5vfu*Տd?~|E]"xDp./fA9jBY{vb˭m%ԥ)$_1D5Ӏ0ձh>YfڎtNvl7wsA6Nͼ'OM/oAK`ٝ?ʯzgk^r=4OiOM/o@:fv*UCٝ?ʯz>?=d=4Oi=?=d.N>pWvRDY @)CthI;xzGiԤ.?=dEgOOM/oAK` >=4OiOM/o@4Xt>?=d=4Oi`K`z>?=dEgOOM/oAK` p.UeGʿ̨TSWʅ;*2PwGuOc_T*P |ʏA?Q_@;1*?twT>UeGʿ̨TSWʅ;*2PwGuOc_T*P |ʏA?Q_@;1*?twT>UeGʿ̨T%kvV_Wli3e[˒rIRN;&ѠpQ]~ڛJX - TiR/H/иF)/H -{\q֨j5cqra*sшCJM.4dV_ % "کϱpҩ-sO;DKd-{,՟ O=ˠQk:BUH?+~E-)-ešqȓڌWl|m Jbm(וI]mA\W6o:MJz̖Z1}:^2`ՊM re8d 6l@-8 bBtk@ɵ MinV,yb@I9&$"2Q|mRZғ.3kr빮 |y.OE"ުɑ[!.2M<-Rˌ\`흩ԯUW*4Qnh\wHzE|*4Oz@@fiU (Pܽ$GNL(K&TpWpR\e%$j=Q= y#T21*VR(TPXC-n%MH"R.\[U}4i+ŸV*ha'DմPM-AphZhNUo'+rOdˈqdFb,i\"5i;{Z\*XDp )eLZ aY:9'nDf&X(4 Z&-jJ]C䔭לijR%9h*χrOpV^ƪ%R &ۇCh-G?s5I !gYfDvRVZ3K;S_XE:`f>kQ%)IBffgDEm)6uj¢P:.5v:/>S 8+sDf̷0KRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث;KRث; imGbƞtx -WKRث; E*,쉩Y"䲟V.yi%T伦ЅJRMI$~NWtIOěWG}3"[kz$#2j3K;LX= {>7sDt 7#}0w84MHL,} {>7sDt 7#}0w84MHL,} {>7sDt 7#}0w84MHL,} {>7sDt 7#}0w84MHL,} {>7sDt 7#}0w84MHL,} {>7 k.](YDz tkj 6֥%}3dG? ԁZKA~}~K@it{giW4_=H -fpM`S-m-l\mI3:1z96fp p\RLҢ=#l<3Sm,W&[3O)SSe6HG+%n$Ѻb^xn[7eyUBැʉu뤢ᎇ IFDCŰ+4q ˗ jDCs%oպP4w0dڴ O+V[7RjVySoOR" eR6Q֒3YdS,7o(LC.XS)Xte6N8TI{uB%~氲=I,'_.6ARM8:o$Y588&dȻ1f2ۛ[zr7ozF)A&Cθuk}g~odoq1$dkmTD]rd)FlZIfDEۗLڢУ17(oeXrLy(RcwnChY>JTDM C)sD{v>N$O3X]{UJZ" 5&|>Z]ln((Qgccj{sjׯNO7umr*RS RM<֥7Wę/QB>w![3Ikn*$؞iHq֍+>аqi]Jv[2Pa9&IRFҖԔ{ejVuSp9Wk3+QQ rmfWcmTd<{{(f R#Q)V삻 /VKmjS$Diy% RW $_z\RN#Ҭ_ӱ-"5f4VCihꌾ<~&%-7аٓʍTl-+eDl=%ƥ]&Ԇɮ_Z-ӵ̸M;еܘ^VV4ZXJu -2%E(QaW$%j*ͫI[b\ZTe  DM#7QF=ߊ%{qemoAh9Ĩq(M'£=ār᪅n׬;0걍E7RDt$ FGչx@pl降:}hD^I[8 Zԝ)teuW.JrݹuAnsR#G%Õ&e@5) o)g҂qNG^sNMエZOBe0lN HA0OsvQl>Jv{*Ů㬉G}VQeNʔZ\ϲR Jо"S^ dUXEuձʽY֒9Ra QDn7%Ąo֓ۈ}g^CfBeY"F;fN:N-qBIeqpլJ[2E_G#-Q74b֥nQÿP]IjI'][ub`}8]]sE*Sء*cP]xx9IV‚uo4T0ih-%{np>L4_=Hј2htNUʊf[6ԥ(ȿYGN@R~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvR~?j]bW?j]bWvii/u`{8v_x@}}%%Yrp!imU fH?Q@_XeƖoavb8yrG'Rlc]6us|\IGfQ*oA}zҜeIQԄ(gIbXi_Ciބ=Xi_CiބU;7A9(w;":T7ZJH4ۋmCu範w6yo@YObv"tZ(~Ψ(M_ŭ }߫6:jk+7͎Y*ig{SRG)'7IJ4qmI2=۬V7W.HԳE HiS #Za(-)FyJh8O @ȹmFjMRqĶiRֵ!)IDD9&1V͸oʔIRKN I)*i Y(x [YE6Fj%*W2KUr\*}2R3%-| [Ԓ?.&\9o5i蔺=af6|$fv8[5p%fHQa5j ثqϴmusn%}9f!_4!OF|5!m;ZWb%TƬgRRNLNelEs-̈pjKg\V'OmC:5=gĒ6Q%POxI׹J4ﷲ?pᥣ4ﷲ?pZ(M_ŭꈿtZ(~Ψ8ښMc!.~xוnnZjۙpT`q蔨jB^'e*YRjVģ"-?Fjj!NH/ Bb[3$ێ}*QCv&V5bbnknu>#n5I'&ҒIDB[F6Ɍ4;„tj"ʟF6^S-Df4s23M 4ﷲ?pᥣ4ﷲ?pZ(M_ŭꈿtZ(~Ψ+ظ΋+%ZۍY!Ei25FGհ}w7|~a@{{Z^{{{Z^{~w7|=w7|~a@{{Z^{{{Z^{~w7|=w7|~a@{{Z^{{{Z^{~w7|=w7|~a@{{Z^{{{Z^{~w7|=w7|~a@{{Z^{{{Z^{~w7|gZEjljXSLrJ2N#"R ̏$Eƾǚxnee-3.19/doc/xnee_func.texi0000664000000000000000000000145710230717607012722 00000000000000@chapter Functional overview @section Functional overview @cindex Functional overview The Xnee applications (gnee and xnee) receives X11 protocol data (e.g. events) from an X server (using libxnee) and print them to a file, called Xnee Session File. Theses events are later read from the session file and replayed. Gnee and xnee can read its settings from a file, called Xnee Project File, or from command line (cnee) or via the GUI (gnee). @* Events directly generated by the user (e.g KeyPress) can be replayed or faked. Requests, replies, errors and events not directly generated by the user (e.g MapNotify) can be recorded as well. By using these data Xnee can replay with synchronisation. @ifnotinfo This picture gives an overview of Xnee and the files used. @* @image{xngener, 10cm} @end ifnotinfo xnee-3.19/doc/xnswinp.png0000664000000000000000000002553112332167164012272 00000000000000PNG  IHDR*e&gAMA asRGB cHRMz&u0`:pQ<bKGD̿ pHYs<<))IDATxo$}?envMN{.368Q0%'Fp9XZs9Ckp 8zȋj_'UB:`gʝzΛŎʜЮQ^SOWyiv=Oէꩧ"#OQ~!tn!):.!𞢣n4lfRtTB,?ẟ*բ#bAhrO)D $lBB &D $lBB &D $lBB &D $lBB&͞i:Xd!, ml\.xs<:71D}Nt`o~_|XD[xKmqqu):}CX@tf q6,n&k, |oćYaUת;cnaX-I~fKMd%XcXnڗ6,IJ dxI`,۬)vz^ab8 7ֲbsK"Zbf~͒KWs~YZefֶaUKذU-ڹV,kr"j[dU|i Õ_7Ȫ~$UryAXO&&d%?U6_RMa%+y[:(znN|ںXdUKwNzjCNl75bR9M w86MVYecۥz0. y![aߡ4ir##|=+qmqMgk}zzea`8?Sd/^6 ~p ^r͡y&G#^aIOVwY8B([ՍV,;K吮YmX.nG^Kz)6QϳX4" D/^zd!lBB_D i3lBB &D $lBB &D $lBB &D $lBbOlEG%Ăp97=TsEG(n?=+E$"w-!anlBB &D $lBB9':9|@&Q}|ct[Ktq/ym1qݢS«n؅cڍ9?0UTK98isIWMB7&^ՀMcP5$3dsh`ulb]5m$V fY7&TM`|`VulbL5M$y&W fQ7&fd3UYM`l&rp`tlbFj0;I61LO5$ĂnMW fAOT7F,}Eٍk{7ӽK3jAa7<5🌘6]ջ;f67مq޷u 忲%s{F,j7֫/ ,C7V8%8_].s$[^;\a`ΑMCeF#˻ϙ S RM:s&uj"s'tuj"s(tj"$s)ttj",s*uj"4s+tj"{E?P3ne'fe˼7ܿEc򸟾Tt r/?3M:e9^t#AprDi-1/[=;$NEY[*~G°,ʥA4 -Ī9yS[ֱK +Y,qꐍҍblTʮ-*6fV6Úӓ6vQ$O#W1ͬ6L՟:c_Wҗ^rK;=ޝn΃U`dwMF?Y/>OX/W^vs5 H0`;|G17UޥE#lQr}^~ºt{D .8b^)%""Ku\#⵩=ZdqFkO}Y"7y 7ٹ6_LҶ%]bd _ޡn̍\mIZb detTwm*~ӭub|]jE MwKLCퟲnS^M?ޟO_ig9M<\5=fSٚ_(/qms?ӗ*2M3=릑\d b>iN}=&J.E%VMsU.pȚ E8'|Nh+wM-Dw{FAAE$>Ŧmt~b#D fa ,:!u#d"M@H6!!لd"M@H6!!لd"M@H6!1O󵢣E ";EG% B=OlD@{f_E$Ģs!H!!لd"M@H6!#d;oKm徵w{ڂgrQf! ?IҮ?|ﵳ(E#>؁7$<Qd:T)0D`UYk0M3[l׉hʚKݤt&lvmX9洝!uhCEw@zہ{3rr-7xwhMqwle1U9Aէ^c3:ny°vdU33Xٺa ,XX/I|+n%VvOں/fu3k;X:Xb\\ K,c䲔[հ"+Y٭ѱOҚurmpea+ʆ l"WB喖InNY׭c˱֨mS^V6'+_22eZ+u3k[ڰrL,b>$}["+Z[ɕkY%ðbܖn)[pUMIC\iu: `P5l,5_ g вwRnK\#bKn #'GܷeSurX-KשXmL۱"ohd*ffqeU-SX{~pٲVY7([U[#Uf6-ewts-Y:.}XSܻY}/ruA;Pʣj{)[YuQ[=k|7Hr薓W+=eg̴Z՜m?P{V˝+:.ly,{(-k9m,tc/?Srs:]7KU|7EgsteKwn?\N_m$UTo bOz!+[#zNLt%\ks);vSo@tmn#BڱJdU+eIp>KK,)M.*'ʯ<9 kCșC{$Ybr/=cu븩Ͽ{cMx38g1eԲ}L;Hiu IafVEnxj;Rְ[ڛ~P%ְ՜]Jٺ5lUYZW~3l]Z=aK{|s([wl|2˩r4;~5쏖ܜxD;Pw퉱2-hMaGAٺev/[nN*f8hd)ZF%3CWaQZJ j~Og:fv%$fֱjOe4Mѕup2ޭwnȪJ#Pqѷ!X(]geˤƺt'Ve!B#94vI; 8};d{`NL{d9N?z(kvɈ;"/7L=2{Kef}]V*i{Aj24rKxMg1X!Bw<305l^ 6X{i( .vy~&D $lBB &D $lBB &D $lBB &D Jb1KE dJඐag8 &&z,4%^,:b_,:!";xbq.beH6!!!لd"M@H6!P[ [Gx7Hl)"NBb໑U8_1lskEp<Cd{\XK5SknlBB &D $lBB &D $lBB &D $8ٚ|E )='ҾI*QrVyc-^Kg99Y8,Lr[={,4W5Up%^ws˜.*QNOC츟Z^(&/q*;4X):0a=7,Ybݲͬcfm77[ֲ'EİnĆ/n%EԶm(Ӻ4,6ҘJԠR7,%T+aۯ>6Ic~[dk ni{T,uܜ%VۣZXl*%jCZf!f%nN +[b,r WVbغul%XݜĆojFYYDY, ܒ\fu+[ܳچUJ*Y9ffuJ[yHN 0rm[ɵe>dk[d![?]YlE.5K~N:[l_p-kYWoᒕaDnk,m×[dmϩ1PNͰ*2U,[,wT͗/[}0ߒUy7)աqSSkq|Ȗڰr빹io(r[7=4g۠Ҕ}[gS]Z8$l<V4[#|w\'J2 >ȏ \PEgXNs{ 𹛷q/yJZE" YqmsX>gJAu^(M\]vgM`>u>4ir Z8<,۩1ҬܡձsmrwiQ6yE+7o\ӯP 8N- Ug }v; |{å?CZ8,,#e?3d~wNs[ݑιe?+Yq3@.Ѣƛ`ݚ§U/ߧ:b˫ɵX*JW1[-$9qg)=Dc†_qomvw˜._-M>y\^%u-9ex̫ 8OUXg{;<?:5N!>=s&~'Ye| |Y 0?&DNkY!Xf*Z8GGY|哼<0p(Yٞg|c\b_-^r@~y/O[32WB-ϡ>WF88&2㣑P(gUe?}#վ,\ìi ^)BhS79G=w,Ew%ns(_׺ OS!٦Yra䮗TsZtu  &D $lBB &D $lBB &D $lBB o!w/ لDvGLW&J=P݃Dq)D $lBB &D $EGp0$|/8MQǽ<&TYIttbĞ):n1Lt_+:}cd{?|-["S_7әsbɫt\v&)6EI^b2"8(:wGf?c KqB>K,OƲCWwr4Йmx ]qk?0aG&^CLdy6Tzznkrnqݹ庡~!!Wst)LY6O _fecDD<LjIDDZ gx=ש vs抛)gx8O|}X\.\<.Qeu'%)&WCݸSlm!Czq=F`H6!!لd"M@H6!!لd"M@H6!!لd"M@H6!!ل?]-:V!撷mT1BW[_6#%tEXtdate:create2014-05-06T16:15:16+02:00T%tEXtdate:modify2014-05-06T16:15:16+02:00%G-tEXtps:HiResBoundingBox526x559+0+0utEXtps:LevelAdobe-2.0 EPSF-2.0 ZIENDB`xnee-3.19/autotools/0000775000000000000000000000000012332167175011416 500000000000000xnee-3.19/autotools/depcomp0000755000000000000000000005601612261335263012715 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: xnee-3.19/autotools/mdate-sh0000755000000000000000000001363712261335263012772 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2010-08-21.06; # UTC # Copyright (C) 1995-2013 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # 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 # . 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 fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # 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: xnee-3.19/autotools/config.sub0000755000000000000000000010535412201675101013313 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-08-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xnee-3.19/autotools/missing0000755000000000000000000001533012261335263012731 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: xnee-3.19/autotools/ltmain.sh0000644000000000000000000105204412332167121013151 00000000000000 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1.7ubuntu1" TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 xnee-3.19/autotools/install-sh0000755000000000000000000003325512261335263013344 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: xnee-3.19/autotools/CVS/0000775000000000000000000000000012332167115012043 500000000000000xnee-3.19/autotools/CVS/Repository0000664000000000000000000000001712332167115014063 00000000000000xnee/autotools xnee-3.19/autotools/CVS/Entries0000664000000000000000000000000212332167115013307 00000000000000D xnee-3.19/autotools/CVS/Root0000664000000000000000000000004712332167115012632 00000000000000hesa@cvs.savannah.gnu.org/sources/xnee xnee-3.19/autotools/config.guess0000755000000000000000000013036112201675101013644 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xnee-3.19/autotools/texinfo.tex0000644000000000000000000116703612261335263013544 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2013-02-01.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore xnee-3.19/autotools/compile0000755000000000000000000001624512261335263012716 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: xnee-3.19/EXAMPLES0000664000000000000000000000005011175421455010437 00000000000000See Xnee manual and cnee man/info pages xnee-3.19/FAQ0000664000000000000000000001146010524452670007637 00000000000000*** GNU Xnee FAQ *** (this file was generated from the complete GNU Xnee Manual) `Where do I send questions?' `Where and how do I report bugs?' Turn on verbose mode `cnee --verbose' and save the printouts. Include all printouts and log files in the mail which is sent to `When setting ranges (integers), how do I know what numbers belong' to X11 data? You can either type the data name directly (e.g MotionNotify) or you can use the print-xxx-name options. * `--print-data-name' * `--print-event-name' * `--print-error-name' * `--print-reply-name' * `--print-request-name' `Can Xnee record more than one display?' No, but we are considering adding the functionality (see the TODO file) `Where is the CVS repository?' You can find a CVS tree at `http://savannah.gnu.org'. You are more than welcome to join `Is there a GUI frontend for Xnee ?' Yes! Gnee. `What license is Xnee released under ?' GPL. Which can be found at `http://www.gnu.org/copyleft/gpl.html' `Why the name Xnee?' We wanted to use a recursive acronym, as GNU ("GNU's Not Unix'). After having read the Wine documentation, we thought that Xnee is not an Event Emulator would work fine since Xnee is Not an Event Emulator but rather a event recorder and faker. `What does the name Gnee mean?' Gnee's not an Emulator Either `What doesn't the name Gnee mean?' Gnee's not an Event Emulator `Can you add xxx functionality to Xnee' Send an email to and we'll consider it. `When starting Xnee I get noticed that I am missing RECORD extension' Your X server doesn't have the RECORD extension either loaded or compiled. To solve this you have to, depending on what Xserver you have do the following: * XFree86 4.0 and higher Make sure that the RECORD extension is loaded. This is done by letting the Module section in the X config file (e.g /etc/X11/XF86Config-4) look something like: `Section "Module"' `Load "dbe" # Double-buffering' `Load "GLcore" # OpenGL support' `Load "dri" # Direct rendering infrastructure' `Load "glx" # OpenGL X protocol interface' `Load "extmod" # Misc. required extensions' `Load "v4l" # Video4Linux' `# Load "pex5" # PHIGS for X 3D environment (obsolete)' `Load "record" # X event recorder' `# Load "xie" # X Image Extension (obsolete)' `# You only need the following two modules if you do not use xfs.' `# Load "freetype" # TrueType font handler' `# Load "type1" # Adobe Type 1 font handler' EndSection The important load directive (in this case) is the following line `Load "record" # X event recorder' * X.org, XFree86 (3.3 and lower) or any other Xserver Recompile and reinstall the Xserver and make sure that RECORD extension is built into the Xserver. Please look at the documentation from your Xserver "vendor" on how to do that. `How do I build VNC so that I can use Xnee together with it?' Download vnc source from: `http://www.uk.research.att.com/vnc/xvnchistory.html' In the file `Xvnc/config/cf/vnc.def' change NO on the following items to YES as below: `#define BuildRECORD YES' `#define BuildRECORDlib YES' Download the Xfree86 distribution from `http://www.xfree86.org'. Specifically, the following dir, (currently in the file `X430src-3.tgz file' ): `tar zxvf \' `X430src-3.tgz ' `xc/programs/Xserver/record/' `xc/programs/Xserver/record/Imakefile' `xc/programs/Xserver/record/record.c' `xc/programs/Xserver/record/recordmod.c' `xc/programs/Xserver/record/set.c' `xc/programs/Xserver/record/set.h' `xc/programs/Xserver/record/module/' `xc/programs/Xserver/record/module/Imakefile' `cp -rf \' `xc/programs/Xserver/record \' `vnc_unixsrc/Xvnc/programs/Xserver' `cd libvncauth/' `xmkmf' `make all' `cd Xvnc' `make World |& tee LOG' Verify the build by running `xdpyinfo' in an xterm in the vncserver and verify that RECORD and XTEST extensions are loaded. `How do I ensure that the mouse, during replay, is at the same position (x,y) as when recorded?' Use the `--store-mouse-pos' option. This will cause Xnee to store the mouse position before starting to record. This position will be used to set the start position before replaying of recorded data starts. `How do I ensure that the same window is focused as when recorded?' It's simple, just make sure that you record the window get focus. xnee-3.19/INSTALL0000664000000000000000000002243210447720664010344 00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 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' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. 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 option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `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. xnee-3.19/BUGS0000664000000000000000000000026311313525276007767 00000000000000 BUGS are reported at The Xnee bug page: http://savannah.gnu.org/bugs/?group=xnee .... or using the mailing list: Bug-xnee http://lists.gnu.org/mailman/listinfo/bug-xnee xnee-3.19/COPYING0000664000000000000000000012332410642261766010350 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. xnee-3.19/man/0000775000000000000000000000000012332167177010142 500000000000000xnee-3.19/man/Makefile.am0000664000000000000000000000036110635514702012110 00000000000000XNEE_MAN_PAGE=xnee.1 man_MANS = $(XNEE_MAN_PAGE) EXTRA_DIST=$(man_MANS) $(man_MANS).in CLEAN_FILES=$(man_MANS) $(XNEE_MAN_PAGE): $(XNEE_MAN_PAGE).in cat $(XNEE_MAN_PAGE).in | sed "s/__VERSION_TAG__/$(VERSION)/g" > $(XNEE_MAN_PAGE) all: xnee-3.19/man/xnee.10000664000000000000000000000276712332167172011112 00000000000000.\" Copyright Henrik Sandklef 2007 .\" .\" This file is part of GNU Xnee. .\" .\" GNU Xnee 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, or (at your option) .\" any later version. .\" .\" GNU Xnee is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Emacs; see the file COPYING. If not, write to the .\" Free Software Foundation, Inc., 59 Temple Place - Suite 330, .\" Boston, MA 02111-1307, USA. .\" .TH "XNEE" 1 2007 "GNU Xnee" .SH "NAME" GNU Xnee records, replays or distributes X11 data .sp .SH "DESCRIPTION" The program suite GNU Xnee can record and replay an X session. GNU Xnee also has the ability to distribute events to multiple displays. Xnee gets copies of X protocol data from the X server. These are either printed to file ( record mode) or replayed and synchronised (replay mode). During record and replay cnee can distribute the record/replayed events to multiple displays. .SH "MANUAL" .B For more information, read the GNU Xnee manual ot the xnee info page .SH "VERSION" Xnee man page, 3.19 .SH "NOTES" This page describes .B GNU Xnee. Mail corrections and additions to bug-xnee@gnu.org xnee-3.19/man/xnee.1.in0000664000000000000000000000300210640701431011466 00000000000000.\" Copyright Henrik Sandklef 2007 .\" .\" This file is part of GNU Xnee. .\" .\" GNU Xnee 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, or (at your option) .\" any later version. .\" .\" GNU Xnee is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Emacs; see the file COPYING. If not, write to the .\" Free Software Foundation, Inc., 59 Temple Place - Suite 330, .\" Boston, MA 02111-1307, USA. .\" .TH "XNEE" 1 2007 "GNU Xnee" .SH "NAME" GNU Xnee records, replays or distributes X11 data .sp .SH "DESCRIPTION" The program suite GNU Xnee can record and replay an X session. GNU Xnee also has the ability to distribute events to multiple displays. Xnee gets copies of X protocol data from the X server. These are either printed to file ( record mode) or replayed and synchronised (replay mode). During record and replay cnee can distribute the record/replayed events to multiple displays. .SH "MANUAL" .B For more information, read the GNU Xnee manual ot the xnee info page .SH "VERSION" Xnee man page, __VERSION_TAG__ .SH "NOTES" This page describes .B GNU Xnee. Mail corrections and additions to bug-xnee@gnu.org xnee-3.19/man/Makefile.in0000664000000000000000000003700312332167124012122 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 = : build_triplet = @build@ host_triplet = @host@ subdir = man DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__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) 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ XNEE_MAN_PAGE = xnee.1 man_MANS = $(XNEE_MAN_PAGE) EXTRA_DIST = $(man_MANS) $(man_MANS).in CLEAN_FILES = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: 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 $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man 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-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 $(XNEE_MAN_PAGE): $(XNEE_MAN_PAGE).in cat $(XNEE_MAN_PAGE).in | sed "s/__VERSION_TAG__/$(VERSION)/g" > $(XNEE_MAN_PAGE) all: # 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: xnee-3.19/gnee/0000775000000000000000000000000012332167175010303 500000000000000xnee-3.19/gnee/src/0000775000000000000000000000000012332167175011072 500000000000000xnee-3.19/gnee/src/Makefile.am0000664000000000000000000000167611530306057013051 00000000000000## Process this file with automake to produce Makefile.in LIBXNEE_DIR="../../libxnee" INCLUDES = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -I${LIBXNEE_DIR}/include \ -I../../ bin_PROGRAMS = gnee gnee_SOURCES = \ main.c \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h \ recordables.c recordables.h \ gnee_xnee.c gnee_xnee.h if XNEE_XINPUT_SUPPORT XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT else XNEE_XINPUT_SUPPORT_FLAGS = endif gnee_CFLAGS = ${PEDANTIC_FLAGS} $(libgnomeui_CFLAGS) $(gtk_CFLAGS) ${XNEE_XINPUT_SUPPORT_FLAGS} AM_CFLAGS = ${PEDANTIC_FLAGS} if BUILD_STATIC STATIC_FLAGS = -static else STATIC_FLAGS = endif gnee_LDFLAGS = $(STATIC_FLAGS) gnee_LDADD = \ -L${LIBXNEE_DIR}/ -L${LIBXNEE_DIR}/.. -L${LIBXNEE_DIR}/src -lxnee \ ${X_LIBS} ${X11_LIBS} ${LIBDL} $(LIBSEMA) \ $(libgnomeui_LIBS) $(gtk_LIBS) ${LIBXI} xnee-3.19/gnee/src/interface.h0000664000000000000000000000032310444064420013110 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ GtkWidget* create_gnee_window (void); GtkWidget* create_fileselection1 (void); GtkWidget* create_dialog1 (void); GtkWidget* create_gnee_about (void); xnee-3.19/gnee/src/gnee_xnee.c0000664000000000000000000004411711671477631013130 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2003, 2004, 2005 * 2010, 2011 Henrik Sandklef and Jon-Erling Dahl * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #include #include "gnee_xnee.h" #include "interface.h" #include #include #include #include #include #include #include #include #include #include #include #include /* static gnee_xnee gx ; */ /* static pthread_t action_thread; */ extern xnee_data *ext_xd; extern gnee_xnee *ext_gx; extern GtkWidget *ext_gnee_window; static GtkWidget *err_win=NULL; void gx_init_gx(gnee_xnee *gx) { GNEE_DEBUG(("gx_init_gx\n")); gx->use_rec_display = 0 ; gx->use_rep_display = 0 ; gx->use_speed = 0 ; gx->speed = 100 ; } static int gx_is_using_rec_display(gnee_xnee *gx) { return (gx->use_rec_display!=0); } static int gx_is_using_rep_display(gnee_xnee *gx) { return (gx->use_rep_display!=0); } /*static int gx_is_using_speed(gnee_xnee *gx) { return (gx->use_speed!=0);} */ int gnee_set_cb(char * cb_name, int on_or_off) { GtkToggleButton *togglebutton; togglebutton = (GtkToggleButton*)lookup_widget (ext_gnee_window, cb_name); if (togglebutton!=NULL) { gtk_toggle_button_set_active(togglebutton, on_or_off); } return GNEE_OK; } void gnee_set_sb(char *sb_name, int val) { GtkSpinButton *spinbutton; GNEE_DEBUG(("gnee_set_sb\n")); spinbutton = (GtkSpinButton *) lookup_widget (ext_gnee_window, sb_name); if (spinbutton!=NULL) { gtk_spin_button_set_value(spinbutton, val); } } static int gnee_set_interval() { GtkSpinButton *spin=NULL; GtkToggleButton *togglebutton; GNEE_DEBUG(("gnee_set_interval\n")); spin = (GtkSpinButton*)lookup_widget (ext_gnee_window, "wait_spinbutton"); togglebutton = (GtkToggleButton*)lookup_widget (ext_gnee_window, "wait_checkbox"); if (spin!=NULL) { gtk_spin_button_set_value(spin, xnee_get_interval(ext_xd)); } if (togglebutton!=NULL) { gtk_toggle_button_set_active(togglebutton, 1); } return GNEE_OK; } int gnee_set_verbosity(int on_or_off) { GNEE_DEBUG(("gnee_set_verbosity\n")); return gnee_set_cb ("verbose_logging_checkbox", on_or_off); } int gnee_set_no_feedback() { GNEE_DEBUG(("gnee_set_no\n")); return gnee_set_cb ("no_fb_b", 1); } int gnee_set_xosd_feedback() { GNEE_DEBUG(("gnee_set_xosd\n")); return gnee_set_cb ("xosd_fb_b", 1); } /* static int gnee_set_stderr_feedback() { GNEE_DEBUG(("gnee_set_stderr\n")); gnee_set_cb ("stderr_fb_b", 1); return XNEE_OK; } */ static int gnee_set_various_display(int use_recording_display) { GtkWidget *disp_text; char *disp_to; GNEE_DEBUG(("gnee_set_various\n")); if (use_recording_display) { disp_text = (GtkWidget*) lookup_widget (ext_gnee_window, "rec_disp_text"); } else { disp_text = (GtkWidget*) lookup_widget (ext_gnee_window, "rep_disp_text"); } if (disp_text==NULL) { ; } else { disp_to = xnee_get_display_name(ext_xd); gtk_entry_set_text((GtkEntry*)disp_text, disp_to); } return GNEE_OK; } int gx_set_record_display(xnee_data *xd, gnee_xnee *gx) { GtkWidget *rec_disp_text; GNEE_DEBUG(("gx_set_record\n")); if (gx_is_using_rec_display(gx)) { rec_disp_text = (GtkWidget*) lookup_widget (ext_gnee_window, "rec_disp_text"); if (rec_disp_text==NULL) { xnee_set_display_name(ext_xd, ""); } else { xnee_verbose((xd, "set record display to %s\n", gtk_entry_get_text((GtkEntry*)rec_disp_text))); xnee_set_display_name(ext_xd, (char*) gtk_entry_get_text((GtkEntry*)rec_disp_text)); } } else { xnee_set_display_name(ext_xd, ""); } return GNEE_OK; } int gx_set_replay_display(xnee_data *xd, gnee_xnee *gx) { GtkWidget *rep_disp_text; GNEE_DEBUG(("gx_set_replay\n")); if (gx_is_using_rep_display(gx)) { rep_disp_text = (GtkWidget*) lookup_widget (ext_gnee_window, "rep_disp_text"); if (rep_disp_text==NULL) { xnee_set_display_name(ext_xd, ""); } else { xnee_verbose((xd, "set replay display to %s\n", gtk_entry_get_text((GtkEntry*)rep_disp_text))); xnee_set_display_name(ext_xd, (char*) gtk_entry_get_text((GtkEntry*)rep_disp_text)); } } else { xnee_set_display_name(ext_xd, ""); } return GNEE_OK; } int gx_set_variable_data(xnee_data *xd, gnee_xnee *gx) { GNEE_DEBUG(("gx_set_variable\n")); /* * Set display (record or replay) */ if (xnee_is_recorder(xd)) { gx_set_record_display(xd, gx); } else if (xnee_is_replayer(xd)) { gx_set_replay_display(xd, gx); } GNEE_DEBUG(( "Speed settings : %d (%d) using=%d\n", xnee_get_replay_speed(xd), ext_gx->speed, ext_gx->use_speed)); return GNEE_OK; } void gnee_set_events_max(int val) { GtkSpinButton *spinbutton; GNEE_DEBUG(("gnee_set_events\n")); spinbutton = (GtkSpinButton *) lookup_widget (ext_gnee_window, "spinbutton11"); gtk_spin_button_set_value(spinbutton, val); } void gnee_set_max_thresh(int val) { GNEE_DEBUG(("gnee_set_max\n")); gnee_set_sb("max_thresh_sb", val); } void gnee_set_min_thresh(int val) { GNEE_DEBUG(("thresh(int val\n")); gnee_set_sb("min_thresh_sb", val); } void gnee_set_tot_thresh(int val) { GNEE_DEBUG(("gnee_set_tot\n")); gnee_set_sb("tot_thresh_sb", val); } void gnee_set_data_max(int val) { GtkSpinButton *spinbutton; GNEE_DEBUG(("gnee_set_data\n")); spinbutton = (GtkSpinButton *) lookup_widget (ext_gnee_window, "spinbutton12"); gtk_spin_button_set_value(spinbutton, val); } void gnee_set_time_max(int val) { GtkSpinButton *spinbutton; GNEE_DEBUG(("gnee_set_time\n")); spinbutton = (GtkSpinButton *) lookup_widget (ext_gnee_window, "spinbutton13"); gtk_spin_button_set_value(spinbutton, val); } void gx_save(void) { GNEE_DEBUG(("gx_save(void\n")); if (ext_xd != NULL) { FILE *file; char *fname = xnee_get_rc_name(ext_xd); if (fname == NULL) { printf ("Implement me... no file to save\n"); } else { file = fopen (fname, "w"); xnee_write_settings_to_file (ext_xd, file) ; fclose (file); } } } void gnee_set_ranges(int type) { int i = 0 ; int len = 0 ; int *data = NULL ; char *name = NULL ; GNEE_DEBUG(("gnee_set_ranges\n")); len = xnee_get_nr_of_data(type); data = xnee_get_data (type); GNEE_DEBUG(("Setting ranges from project file \n")); for (i=0;iuse_speed = val; if (val==0) { gx_set_replay_speed(ext_xd, 100); ; } else { GtkSpinButton *spinbutton; int val ; spinbutton = (GtkSpinButton *) lookup_widget (ext_gnee_window, "speed_spin"); val = gtk_spin_button_get_value_as_int(spinbutton); GNEE_DEBUG(("gx_set_replay_speed (%d\n", val)); gx_set_replay_speed(ext_xd, val); } return GNEE_OK; } int gx_set_speed (int val) { GNEE_DEBUG(("gx_set_speed to %d\n", val)); if ( ext_gx->use_speed != 0 ) { gx_set_replay_speed(ext_xd, val); ext_gx->speed = val ; } else { gx_set_replay_speed(ext_xd, 100); } return GNEE_OK; } void gnee_set_rec_file(char *filename) { GtkEntry *file_text ; GNEE_DEBUG(("gnee_set_rec\n")); file_text = (GtkEntry*) lookup_widget(GTK_WIDGET(ext_gnee_window), "rec_file_text"); gtk_entry_set_text (file_text, filename); xnee_set_out_name (ext_xd, filename); } void gnee_set_rep_file(char *filename) { GtkEntry *file_text ; GNEE_DEBUG(("gnee_set_rep\n")); file_text = (GtkEntry*) lookup_widget(GTK_WIDGET(ext_gnee_window), "rep_file_text"); gtk_entry_set_text (file_text, filename); xnee_set_data_name (ext_xd, filename); } void gnee_close_down() { GNEE_DEBUG(("gnee_close_down\n")); xnee_close_down(ext_xd); exit(GNEE_OK); } char * gx_get_default_filename() { char *tmp_dir = NULL; char *user_name = NULL; const char *default_tmp_dir = "/tmp/"; const char *default_user_name = "user"; const char *file_prefix = "gnee_"; const char *file_suffix = ".xns"; char *ret_str; int size = 0 ; GNEE_DEBUG(("gx_get_default\n")); /* set the dir */ tmp_dir = getenv("TMPIR"); if (tmp_dir==NULL) { tmp_dir= (char *) default_tmp_dir; } /* set the user name */ user_name = getlogin(); if (user_name==NULL) { user_name = (char *) default_user_name; } #define GNEE_CHECK_CHAR_PTR(a) { if ( a==NULL) { fprintf(stderr, "Couldn't put together default file name\n") ; return NULL; } } GNEE_CHECK_CHAR_PTR(tmp_dir); GNEE_CHECK_CHAR_PTR(user_name); GNEE_CHECK_CHAR_PTR(file_prefix); GNEE_CHECK_CHAR_PTR(file_suffix); size = strlen (tmp_dir) + strlen (user_name) + strlen (file_prefix) + strlen (file_suffix) ; if (size <= 0 ) { fprintf (stderr, "Trying to allocate size %d\n", size); } ret_str = (char*) malloc (size*sizeof(char)); if (ret_str==NULL) { return NULL; } strncpy (ret_str, tmp_dir, size); strncat (ret_str, file_prefix, size - strlen(ret_str)); strncat (ret_str, user_name, size - strlen(ret_str)); strncat (ret_str, file_suffix, size - strlen(ret_str)); return ret_str; } xnee-3.19/gnee/src/recordables.h0000664000000000000000000000447110640701427013450 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2003, 2004, 2005 Henrik Sandklef and Jon-Erling Dahl * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef MODELS__H #define MODELS__H #include #include #include void gnee_recordables_create(GtkWidget* gnee_window); void gnee_recordables_include(GtkTreeView* source_list, GtkTreeView* destination_list, xnee_data* xd, int type); void gnee_recordables_exclude(GtkTreeView* source_list, GtkTreeView* destination_list, xnee_data* xd, int type); void gnee_move_recordable(GtkWidget* gnee_window, char* data_name, char* exclude_store_name, char* include_store_name, int type, int delete); void gnee_recordable2xd(GtkWidget* gnee_window, char* include_store_name, int type); void gnee_remove_all_recordables(); #endif /* MODELS__H */ xnee-3.19/gnee/src/gnee_xnee.h0000664000000000000000000002047211671477740013134 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2003, 2004, 2005, * 2011 Henrik Sandklef and Jon-Erling Dahl * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef GNEE_XNEE__H #define GNEE_XNEE__H #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #ifdef USE_GNEE_DEBUG #define GNEE_DEBUG(a) printf a ; fflush(stdout); #else #define GNEE_DEBUG(a) #endif #define GNEE_OK 0 #define XNEE_GUI "gnee" typedef struct { int use_rec_display ; int use_rep_display ; int use_speed ; int speed ; } gnee_xnee ; #define GNEE_IF_ERROR_RETURN(ret, wind) \ if (ret != XNEE_OK) \ { \ gtk_widget_show_all(ext_gnee_window); \ gx_display_errror(ret); \ return ret; \ } int gnee_set_cb(char * cb_name, int on_or_off); void gnee_set_sb(char *sb_name, int val); int gx_set_replay_display(xnee_data *xd, gnee_xnee *gx); int gx_set_record_display(xnee_data *xd, gnee_xnee *gx); int gx_set_variable_data(xnee_data *xd, gnee_xnee *gx); #define gx_set_xosd_feedback() xnee_set_xosd_feedback(ext_xd) #define gx_set_no_feedback() xnee_set_no_feedback(ext_xd) #define gx_set_stderr_feedback() xnee_set_stderr_feedback(ext_xd) #define gnee_set_record_display() gnee_set_various_display(0) #define gnee_set_replay_display() gnee_set_various_display(1) #define gnee_set_verbose() gnee_set_verbosity(1) #define gnee_unset_verbose() gnee_set_verbosity(0) #define gnee_set_sync() gnee_set_cb("skip_sync_cb",1) #define gnee_unset_sync() gnee_set_cb("skip_sync_cb",0) #define gnee_set_force() gnee_set_cb("force_rep_cb",1) #define gnee_unset_force() gnee_set_cb("force_rep_cb",0) #define gx_set_all_clients() xnee_set_all_clients(ext_xd) #define gx_unset_all_clients() xnee_unset_all_clients(ext_xd) #define gx_set_human_printout() xnee_set_human_printout(ext_xd) #define gx_set_xnee_printout() xnee_set_human_printout(ext_xd) #define gx_add_event(gw, ev) \ gnee_move_recordable(gw, ev, \ "exclude_event_store","include_event_store", \ XNEE_EVENT, XNEE_FALSE) #define gx_del_event(gw, ev) \ gnee_move_recordable(gw, ev, \ "include_event_store", "exclude_event_store",\ XNEE_EVENT, XNEE_TRUE) #define gx_add_reply(gw, rep) \ gnee_move_recordable(gw, rep, \ "exclude_reply_store","include_reply_store", \ XNEE_REPLY, XNEE_FALSE) #define gx_del_reply(gw, rep) \ gnee_move_recordable(gw, rep, \ "exclude_reply_store","include_reply_store", \ XNEE_REPLY, XNEE_TRUE) #define gx_add_request(gw, req) \ gnee_move_recordable(gw, req, \ "exclude_request_store","include_request_store", \ XNEE_REQUEST, XNEE_FALSE) #define gx_del_request(gw, req) \ gnee_move_recordable(gw, req, \ "exclude_request_store","include_request_store", \ XNEE_REQUEST, XNEE_TRUE) #define gx_add_error(gw, err) \ gnee_move_recordable(gw, err, \ "exclude_error_store","include_error_store" ,\ XNEE_ERROR, XNEE_FALSE) #define gx_del_error(gw, err) \ gnee_move_recordable(gw, err, \ "exclude_error_store","include_error_store" ,\ XNEE_ERROR, XNEE_TRUE) #define gx_set_replay_speed(xd,s) xnee_set_replay_speed(xd,s) #define gx_set_replay_offset_x(xd,val) xnee_set_replay_offset_x(xd,val) #define gx_set_replay_offset_y(xd,val) xnee_set_replay_offset_y(xd,val) #define gx_set_recall_window_pos(xd) xnee_set_recall_window_pos (xd) #define gx_unset_recall_window_pos(xd) xnee_unset_recall_window_pos (xd) #define gx_set_interval(xd,i) xnee_set_interval(xd,i) #define gx_set_verbose(xd) xnee_set_verbose(xd) #define gx_unset_verbose(xd) xnee_unset_verbose(xd) #define gx_set_rc_byname(xd,f) xnee_set_rc_byname(xd,f) #define gx_get_rc_file(xd) xnee_get_rc_file(xd) #define gx_add_resource(xd) xnee_add_resource (xd) #define gx_set_out_byname(xd,f) xnee_set_out_byname(xd,f) #define gx_get_rc_name(xd) xnee_get_rc_name(xd) #define gx_write_settings_to_file(xd,f) xnee_write_settings_to_file(xd,f) #define gx_set_key(xd,km,mode) xnee_set_key(xd,km,mode) #define gx_get_key(ext_xd,mode) xnee_get_key(ext_xd,mode) #define gx_set_events_max(ext_xd,loops) xnee_set_events_max(ext_xd, loops); #define gx_get_events_max(ext_xd) xnee_get_events_max(ext_xd) #define gx_get_events_left(ext_xd) xnee_get_events_left(ext_xd) #define gx_set_data_max(ext_xd,loops) xnee_set_data_max(ext_xd, loops); #define gx_get_data_max(ext_xd) xnee_get_data_max(ext_xd) #define gx_get_data_left(ext_xd) xnee_get_data_left(ext_xd) #define gx_set_time_max(ext_xd,time) xnee_set_time_max(ext_xd,time); #define gx_get_time_max(ext_xd) xnee_get_time_max(ext_xd) #define gx_get_time_left(ext_xd) xnee_get_time_left(ext_xd) #define gx_set_max_threshold(xd,thresh) xnee_set_max_threshold(xd,thresh); gnee_set_max_thresh(thresh); #define gx_set_min_threshold(xd,thresh) xnee_set_min_threshold(xd,thresh); gnee_set_min_thresh(thresh); #define gx_set_tot_threshold(xd,thresh) xnee_set_tot_threshold(xd,thresh); gnee_set_tot_thresh(thresh); #define gnee_get_max_threshold(xd) xnee_get_max_threshold(xd) #define gnee_get_min_threshold(xd) xnee_get_min_threshold(xd) #define gnee_get_tot_threshold(xd) xnee_get_tot_threshold(xd) #define gx_set_using_rec_display(gx) gx->use_rec_display=1 #define gx_unset_using_rec_display(gx) gx->use_rec_display=0 #define gx_set_using_rep_display(gx) gx->use_rep_display=1 #define gx_unset_using_rep_display(gx) gx->use_rep_display=0 #define gx_set_sync(ext_xd) xnee_set_sync(ext_xd) #define gx_unset_sync(ext_xd) xnee_unset_sync(ext_xd) #define gx_set_force_replay(ext_xd) xnee_set_force_replay(ext_xd) #define gx_unset_force_replay(ext_xd) xnee_unset_force_replay(ext_xd) void gx_save(void); void gx_init_gx(gnee_xnee *gx); int gx_init_value(xnee_data* xd); int gx_start_recording(xnee_data* xd); int gx_stop_recording(xnee_data* xd); int gx_start_replaying(xnee_data* xd); int gx_stop_replaying(xnee_data* xd); void gx_display_errror(int err_nr); void gx_undisplay_errror(void); void gnee_set_events_max(int val); void gnee_set_data_max(int val); void gnee_set_time_max(int val); void gnee_set_max_thresh(int val); void gnee_set_min_thresh(int val); void gnee_set_tot_thresh(int val); void gnee_set_rec_file(char *filename); void gnee_set_rep_file(char *filename); char * gx_get_default_filename(); void gx_create_km_lists(); void gnee_close_down(); int gx_set_speed (int val); void gx_set_xd_settings(); int gx_set_use_speed (int val) ; int gnee_set_xosd_feedback(); #endif /* GNEE_XNEE__H */ xnee-3.19/gnee/src/support.c0000664000000000000000000000712707742260150012675 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "support.h" GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to find pixmap files. */ static gchar* find_pixmap_file (const gchar *filename) { GList *elem; /* We step through each of the pixmaps directory to find it. */ elem = pixmaps_directories; while (elem) { gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, G_DIR_SEPARATOR_S, filename); if (g_file_test (pathname, G_FILE_TEST_EXISTS)) return pathname; g_free (pathname); elem = elem->next; } return NULL; } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename) { gchar *pathname = NULL; GtkWidget *pixmap; if (!filename || !filename[0]) return gtk_image_new (); pathname = find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return gtk_image_new (); } pixmap = gtk_image_new_from_file (pathname); g_free (pathname); return pixmap; } /* This is an internally used function to create pixmaps. */ GdkPixbuf* create_pixbuf (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return NULL; } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description) { gint n_actions, i; n_actions = atk_action_get_n_actions (action); for (i = 0; i < n_actions; i++) { if (!strcmp (atk_action_get_name (action, i), action_name)) atk_action_set_description (action, i, description); } } xnee-3.19/gnee/src/callbacks.h0000664000000000000000000003524611715172040013103 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2003, 2004, 2005, 2011 Henrik Sandklef and Jon-Erling Dahl * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include void on_record_include_button_clicked (GtkButton *button, gpointer user_data); void on_record_exclude_button_clicked (GtkButton *button, gpointer user_data); void on_exclude_list_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data); void on_include_list_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data); void on_combo_label1_changed (GtkEditable *editable, gpointer user_data); void on_new1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_open1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_save1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_save_as1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_quit1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_cut1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_copy1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_paste1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_delete1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_about1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_log_window_activate (GtkMenuItem *menuitem, gpointer user_data); void on_record (GtkButton *button, gpointer user_data); void on_replay (GtkButton *button, gpointer user_data); void on_spinbutton3_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_wait_checkbox_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_wait_spinbutton_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_wait_button_value_change (GtkEditable *editable, gpointer user_data); void on_wait_spinbutton_value_change (GtkEditable *editable, gpointer user_data); void on_verbose_logging_checkbox_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_spinbutton5_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton4_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton6_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_ok_button1_clicked (GtkButton *button, gpointer user_data); void on_open_button_clicked (GtkButton *button, gpointer user_data); void on_cancel_button1_clicked (GtkButton *button, gpointer user_data); void on_sfile_activate (GtkMenuItem *menuitem, gpointer user_data); void on_save_button_clicked (GtkButton *button, gpointer user_data); void on_about_ok_button_clicked (GtkButton *button, gpointer user_data); void on_about1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_stop_m_combo_changed (GtkEditable *editable, gpointer user_data); void on_stop_k_combo_changed (GtkEditable *editable, gpointer user_data); void on_pause_m_combo_changed (GtkEditable *editable, gpointer user_data); void on_resume_m_combo_changed (GtkEditable *editable, gpointer user_data); void on_mark_m_combo_changed (GtkEditable *editable, gpointer user_data); void on_exec_m_combo_changed (GtkEditable *editable, gpointer user_data); void on_pause_k_combo_changed (GtkEditable *editable, gpointer user_data); void on_resume_k_combo_changed (GtkEditable *editable, gpointer user_data); void on_mark_k_combo_changed (GtkEditable *editable, gpointer user_data); void on_exec_k_combo_changed (GtkEditable *editable, gpointer user_data); void on_err_cont_button_clicked (GtkButton *button, gpointer user_data); void on_err_quit_button_clicked (GtkButton *button, gpointer user_data); void on_cancelbutton1_clicked (GtkButton *button, gpointer user_data); void on_okbutton1_clicked (GtkButton *button, gpointer user_data); void on_rep_menu_open_activate (GtkMenuItem *menuitem, gpointer user_data); void on_sfile_activate (GtkMenuItem *menuitem, gpointer user_data); void on_open_project_file2_activate (GtkMenuItem *menuitem, gpointer user_data); void on_set_session_file1_activate (GtkMenuItem *menuitem, gpointer user_data); void on_checkbutton10_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_rec_file_sel_clicked (GtkButton *button, gpointer user_data); void on_rep_disp_cb_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_rep_disp_text_changed (GtkEditable *editable, gpointer user_data); void on_button11_clicked (GtkButton *button, gpointer user_data); void on_max_thresh_sb_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_min_thresh_sb_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_tot_thresh_sb_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton11_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton12_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton13_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton7_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_speed_spin_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_rec_disp_text_changed (GtkEditable *editable, gpointer user_data); void on_skip_sync_cb_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_force_rep_cb_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_okbutton2_clicked (GtkButton *button, gpointer user_data); void on_speed_toggle_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_radiobutton1_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_radiobutton2_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_xnee_format_rb_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_human_format_rb_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_gnee_window_destroy (GtkObject *object, gpointer user_data); void on_stderr_fb_b_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_no_fb_b_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_xosb_fb_b_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_xosd_fb_b_toggled (GtkToggleButton *togglebutton, gpointer user_data); gboolean on_replay_settings_box_realize (GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean on_replay_settings_box_visi (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_replay_settings_box_map (GtkWidget *widget, gpointer user_data); void on_record_settings_box_map (GtkWidget *widget, gpointer user_data); void on_button5_clicked (GtkButton *button, gpointer user_data); void on_about_ok_button_clicked (GtkButton *button, gpointer user_data); void on_new_win_check_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_x_offs_spin_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_y_offs_spin_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_offset_toggle_toggled (GtkToggleButton *togglebutton, gpointer user_data); gboolean on_gnee_about_close (GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_gnee_about_response (GtkDialog *dialog, gint response_id, gpointer user_data); xnee-3.19/gnee/src/Makefile.in0000664000000000000000000007640312332167124013063 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 = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gnee$(EXEEXT) subdir = gnee/src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/./autotools/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gnee_OBJECTS = gnee-main.$(OBJEXT) gnee-support.$(OBJEXT) \ gnee-interface.$(OBJEXT) gnee-callbacks.$(OBJEXT) \ gnee-recordables.$(OBJEXT) gnee-gnee_xnee.$(OBJEXT) gnee_OBJECTS = $(am_gnee_OBJECTS) am__DEPENDENCIES_1 = gnee_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = gnee_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gnee_CFLAGS) $(CFLAGS) \ $(gnee_LDFLAGS) $(LDFLAGS) -o $@ 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) depcomp = $(SHELL) $(top_srcdir)/./autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(gnee_SOURCES) DIST_SOURCES = $(gnee_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ LIBXNEE_DIR = "../../libxnee" INCLUDES = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -I${LIBXNEE_DIR}/include \ -I../../ gnee_SOURCES = \ main.c \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h \ recordables.c recordables.h \ gnee_xnee.c gnee_xnee.h @XNEE_XINPUT_SUPPORT_FALSE@XNEE_XINPUT_SUPPORT_FLAGS = @XNEE_XINPUT_SUPPORT_TRUE@XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT gnee_CFLAGS = ${PEDANTIC_FLAGS} $(libgnomeui_CFLAGS) $(gtk_CFLAGS) ${XNEE_XINPUT_SUPPORT_FLAGS} AM_CFLAGS = ${PEDANTIC_FLAGS} @BUILD_STATIC_FALSE@STATIC_FLAGS = @BUILD_STATIC_TRUE@STATIC_FLAGS = -static gnee_LDFLAGS = $(STATIC_FLAGS) gnee_LDADD = \ -L${LIBXNEE_DIR}/ -L${LIBXNEE_DIR}/.. -L${LIBXNEE_DIR}/src -lxnee \ ${X_LIBS} ${X11_LIBS} ${LIBDL} $(LIBSEMA) \ $(libgnomeui_LIBS) $(gtk_LIBS) ${LIBXI} all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnee/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gnee/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gnee$(EXEEXT): $(gnee_OBJECTS) $(gnee_DEPENDENCIES) $(EXTRA_gnee_DEPENDENCIES) @rm -f gnee$(EXEEXT) $(AM_V_CCLD)$(gnee_LINK) $(gnee_OBJECTS) $(gnee_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnee-callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnee-gnee_xnee.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnee-interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnee-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnee-recordables.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnee-support.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< gnee-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-main.o -MD -MP -MF $(DEPDIR)/gnee-main.Tpo -c -o gnee-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-main.Tpo $(DEPDIR)/gnee-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='gnee-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c gnee-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-main.obj -MD -MP -MF $(DEPDIR)/gnee-main.Tpo -c -o gnee-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-main.Tpo $(DEPDIR)/gnee-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='gnee-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` gnee-support.o: support.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-support.o -MD -MP -MF $(DEPDIR)/gnee-support.Tpo -c -o gnee-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-support.Tpo $(DEPDIR)/gnee-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support.c' object='gnee-support.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c gnee-support.obj: support.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-support.obj -MD -MP -MF $(DEPDIR)/gnee-support.Tpo -c -o gnee-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-support.Tpo $(DEPDIR)/gnee-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support.c' object='gnee-support.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` gnee-interface.o: interface.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-interface.o -MD -MP -MF $(DEPDIR)/gnee-interface.Tpo -c -o gnee-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-interface.Tpo $(DEPDIR)/gnee-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='interface.c' object='gnee-interface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c gnee-interface.obj: interface.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-interface.obj -MD -MP -MF $(DEPDIR)/gnee-interface.Tpo -c -o gnee-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-interface.Tpo $(DEPDIR)/gnee-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='interface.c' object='gnee-interface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi` gnee-callbacks.o: callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-callbacks.o -MD -MP -MF $(DEPDIR)/gnee-callbacks.Tpo -c -o gnee-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-callbacks.Tpo $(DEPDIR)/gnee-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='callbacks.c' object='gnee-callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c gnee-callbacks.obj: callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-callbacks.obj -MD -MP -MF $(DEPDIR)/gnee-callbacks.Tpo -c -o gnee-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-callbacks.Tpo $(DEPDIR)/gnee-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='callbacks.c' object='gnee-callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi` gnee-recordables.o: recordables.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-recordables.o -MD -MP -MF $(DEPDIR)/gnee-recordables.Tpo -c -o gnee-recordables.o `test -f 'recordables.c' || echo '$(srcdir)/'`recordables.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-recordables.Tpo $(DEPDIR)/gnee-recordables.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recordables.c' object='gnee-recordables.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-recordables.o `test -f 'recordables.c' || echo '$(srcdir)/'`recordables.c gnee-recordables.obj: recordables.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-recordables.obj -MD -MP -MF $(DEPDIR)/gnee-recordables.Tpo -c -o gnee-recordables.obj `if test -f 'recordables.c'; then $(CYGPATH_W) 'recordables.c'; else $(CYGPATH_W) '$(srcdir)/recordables.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-recordables.Tpo $(DEPDIR)/gnee-recordables.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recordables.c' object='gnee-recordables.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-recordables.obj `if test -f 'recordables.c'; then $(CYGPATH_W) 'recordables.c'; else $(CYGPATH_W) '$(srcdir)/recordables.c'; fi` gnee-gnee_xnee.o: gnee_xnee.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-gnee_xnee.o -MD -MP -MF $(DEPDIR)/gnee-gnee_xnee.Tpo -c -o gnee-gnee_xnee.o `test -f 'gnee_xnee.c' || echo '$(srcdir)/'`gnee_xnee.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-gnee_xnee.Tpo $(DEPDIR)/gnee-gnee_xnee.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gnee_xnee.c' object='gnee-gnee_xnee.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-gnee_xnee.o `test -f 'gnee_xnee.c' || echo '$(srcdir)/'`gnee_xnee.c gnee-gnee_xnee.obj: gnee_xnee.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -MT gnee-gnee_xnee.obj -MD -MP -MF $(DEPDIR)/gnee-gnee_xnee.Tpo -c -o gnee-gnee_xnee.obj `if test -f 'gnee_xnee.c'; then $(CYGPATH_W) 'gnee_xnee.c'; else $(CYGPATH_W) '$(srcdir)/gnee_xnee.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gnee-gnee_xnee.Tpo $(DEPDIR)/gnee-gnee_xnee.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gnee_xnee.c' object='gnee-gnee_xnee.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gnee_CFLAGS) $(CFLAGS) -c -o gnee-gnee_xnee.obj `if test -f 'gnee_xnee.c'; then $(CYGPATH_W) 'gnee_xnee.c'; else $(CYGPATH_W) '$(srcdir)/gnee_xnee.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS # 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: xnee-3.19/gnee/src/interface.c0000664000000000000000000037215710671607263013136 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "callbacks.h" #include "interface.h" #include "support.h" #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) GtkWidget* create_gnee_window (void) { GtkWidget *gnee_window; GdkPixbuf *gnee_window_icon_pixbuf; GtkWidget *vbox1; GtkWidget *menubar1; GtkWidget *menuitem1; GtkWidget *menuitem1_menu; GtkWidget *new1; GtkWidget *open1; GtkWidget *save1; GtkWidget *save_as1; GtkWidget *separatormenuitem1; GtkWidget *quit1; GtkWidget *menuitem3; GtkWidget *menuitem3_menu; GtkWidget *log_window; GtkWidget *menuitem4; GtkWidget *menuitem4_menu; GtkWidget *about1; GtkWidget *hbox34; GtkWidget *new2_button; GtkWidget *open2_button; GtkWidget *save2_button; GtkWidget *record2_button; GtkWidget *replay2_button; GtkWidget *stop2_button; GtkWidget *notebook; GtkWidget *general_settings_box; GtkWidget *hbox21; GtkWidget *log_settings_box; GtkWidget *label14; GtkWidget *verbose_logging_box; GtkWidget *verbose_logging_checkbox; GtkWidget *time_settings_box; GtkWidget *label11; GtkWidget *timeout_box; GtkWidget *wait_checkbox; GtkObject *wait_spinbutton_adj; GtkWidget *wait_spinbutton; GtkWidget *vbox16; GtkWidget *feedback_label; GtkWidget *no_fb_b; GSList *no_fb_b_group = NULL; GtkWidget *xosd_fb_b; GtkWidget *stderr_fb_b; GtkWidget *distribution_settings_box; GtkWidget *label13; GtkWidget *distribution_list_box; GtkWidget *vbox4; GtkWidget *hbox6; GtkWidget *distr_displ_label; GtkWidget *distribute_display_entry; GtkWidget *scrolledwindow3; GtkWidget *distribution_list_view; GtkWidget *vbuttonbox1; GtkWidget *add_to_distribution_list_butotn; GtkWidget *remove_from_distribution_list_button; GtkWidget *hbox12; GtkWidget *distribute_when_recording_checkbox; GtkWidget *label6; GtkWidget *vbox20; GtkWidget *record_settings_box; GtkWidget *vbox30; GtkWidget *label76; GtkWidget *hbox32; GtkWidget *checkbutton10; GtkWidget *rec_disp_text; GtkWidget *repl_file_box; GtkWidget *label61; GtkWidget *hbox30; GtkWidget *rec_file_text; GtkWidget *rec_file_sel; GtkWidget *table1; GtkWidget *vbox8; GtkWidget *label21; GtkWidget *record_clients_box; GtkWidget *radiobutton1; GSList *radiobutton1_group = NULL; GtkWidget *radiobutton2; GtkWidget *printout_box; GtkWidget *printout_label; GtkWidget *xnee_format_rb; GSList *xnee_format_rb_group = NULL; GtkWidget *human_format_rb; GtkWidget *vbox27; GtkWidget *label70; GtkWidget *vbox28; GtkWidget *table7; GtkWidget *label71; GtkObject *spinbutton11_adj; GtkWidget *spinbutton11; GtkWidget *label72; GtkObject *spinbutton12_adj; GtkWidget *spinbutton12; GtkWidget *label73; GtkObject *spinbutton13_adj; GtkWidget *spinbutton13; GtkWidget *vbox6; GtkWidget *label20; GtkWidget *record_recordables_box; GtkWidget *hbox3; GtkWidget *event_group_combo; GtkWidget *combo_label1; GtkWidget *recordable_listview_box; GtkWidget *vbox10; GtkWidget *label22; GtkWidget *scrolledwindow4; GtkWidget *exclude_list; GtkWidget *vbuttonbox2; GtkWidget *record_include_button; GtkWidget *image3; GtkWidget *record_exclude_button; GtkWidget *image2; GtkWidget *vbox11; GtkWidget *label23; GtkWidget *scrolledwindow5; GtkWidget *include_list; GtkWidget *label1; GtkWidget *replay_settings_box; GtkWidget *hbox23; GtkWidget *replay_display_box; GtkWidget *hbox33; GtkWidget *vbox25; GtkWidget *label67; GtkWidget *hbox26; GtkWidget *rep_disp_cb; GtkWidget *rep_disp_text; GtkWidget *vbox32; GtkWidget *label62; GtkWidget *hbox24; GtkWidget *speed_toggle; GtkObject *speed_spin_adj; GtkWidget *speed_spin; GtkWidget *new_win_check; GtkWidget *hbox36; GtkWidget *checkbutton13; GtkObject *x_offs_spin_adj; GtkWidget *x_offs_spin; GtkObject *y_offs_spin_adj; GtkWidget *y_offs_spin; GtkWidget *vbox29; GtkWidget *hbox31; GtkWidget *label75; GtkWidget *rep_file_text; GtkWidget *button11; GtkWidget *spin_boxes; GtkWidget *threshold_box; GtkWidget *threshold_label; GtkWidget *threshold_table; GtkWidget *max_thresh_label; GtkWidget *min_thresh_label; GtkWidget *tot_thresh_label; GtkObject *max_thresh_sb_adj; GtkWidget *max_thresh_sb; GtkObject *min_thresh_sb_adj; GtkWidget *min_thresh_sb; GtkObject *tot_thresh_sb_adj; GtkWidget *tot_thresh_sb; GtkWidget *vbox22; GtkWidget *replay_error_handling_box; GtkWidget *label18; GtkWidget *skip_sync_cb; GtkWidget *force_rep_cb; GtkWidget *vbox12; GtkWidget *label24; GtkWidget *replay_files_box; GtkWidget *scrolledwindow6; GtkWidget *treeview3; GtkWidget *vbuttonbox3; GtkWidget *button3; GtkWidget *label2; GtkWidget *km_table; GtkWidget *label32; GtkWidget *label33; GtkWidget *label36; GtkWidget *label37; GtkWidget *label38; GtkWidget *label39; GtkWidget *label35; GtkWidget *combo7; GtkWidget *pause_k_combo; GtkWidget *combo8; GtkWidget *resume_k_combo; GtkWidget *combo9; GtkWidget *mark_k_combo; GtkWidget *combo10; GtkWidget *exec_k_combo; GtkWidget *combo2; GtkWidget *stop_k_combo; GtkWidget *label80; GtkWidget *hbox35; GtkWidget *label81; GtkWidget *entry1; GtkWidget *label82; GtkWidget *label83; GtkWidget *label84; GtkWidget *label85; GtkWidget *keymodifierpane; GtkWidget *label74; GtkWidget *resolution; GtkWidget *label78; GtkWidget *project_tab; GtkAccelGroup *accel_group; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); accel_group = gtk_accel_group_new (); gnee_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (gnee_window), _("Gnee")); gtk_window_set_default_size (GTK_WINDOW (gnee_window), 640, 480); gnee_window_icon_pixbuf = create_pixbuf ("xnee.xpm"); if (gnee_window_icon_pixbuf) { gtk_window_set_icon (GTK_WINDOW (gnee_window), gnee_window_icon_pixbuf); gdk_pixbuf_unref (gnee_window_icon_pixbuf); } vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (gnee_window), vbox1); menubar1 = gtk_menu_bar_new (); gtk_widget_show (menubar1); gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0); menuitem1 = gtk_menu_item_new_with_mnemonic (_("_File")); gtk_widget_show (menuitem1); gtk_container_add (GTK_CONTAINER (menubar1), menuitem1); menuitem1_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu); new1 = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_widget_show (new1); gtk_container_add (GTK_CONTAINER (menuitem1_menu), new1); open1 = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); gtk_widget_show (open1); gtk_container_add (GTK_CONTAINER (menuitem1_menu), open1); save1 = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); gtk_widget_show (save1); gtk_container_add (GTK_CONTAINER (menuitem1_menu), save1); save_as1 = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); gtk_widget_show (save_as1); gtk_container_add (GTK_CONTAINER (menuitem1_menu), save_as1); separatormenuitem1 = gtk_menu_item_new (); gtk_widget_show (separatormenuitem1); gtk_container_add (GTK_CONTAINER (menuitem1_menu), separatormenuitem1); gtk_widget_set_sensitive (separatormenuitem1, FALSE); quit1 = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); gtk_widget_show (quit1); gtk_container_add (GTK_CONTAINER (menuitem1_menu), quit1); menuitem3 = gtk_menu_item_new_with_mnemonic (_("_View")); gtk_widget_show (menuitem3); gtk_container_add (GTK_CONTAINER (menubar1), menuitem3); menuitem3_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menuitem3_menu); log_window = gtk_check_menu_item_new_with_mnemonic (_("_Log window")); gtk_widget_show (log_window); gtk_container_add (GTK_CONTAINER (menuitem3_menu), log_window); menuitem4 = gtk_menu_item_new_with_mnemonic (_("_Help")); gtk_widget_show (menuitem4); gtk_container_add (GTK_CONTAINER (menubar1), menuitem4); menuitem4_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu); about1 = gtk_menu_item_new_with_mnemonic (_("_About")); gtk_widget_show (about1); gtk_container_add (GTK_CONTAINER (menuitem4_menu), about1); hbox34 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox34); gtk_box_pack_start (GTK_BOX (vbox1), hbox34, FALSE, TRUE, 0); new2_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (new2_button); gtk_box_pack_start (GTK_BOX (hbox34), new2_button, FALSE, FALSE, 0); GTK_WIDGET_UNSET_FLAGS (new2_button, GTK_CAN_FOCUS); gtk_tooltips_set_tip (tooltips, new2_button, _("Create new Xnee Project File"), NULL); open2_button = gtk_button_new_from_stock ("gtk-open"); gtk_widget_show (open2_button); gtk_box_pack_start (GTK_BOX (hbox34), open2_button, FALSE, FALSE, 0); GTK_WIDGET_UNSET_FLAGS (open2_button, GTK_CAN_FOCUS); gtk_tooltips_set_tip (tooltips, open2_button, _("Open Xnee Project File"), NULL); save2_button = gtk_button_new_from_stock ("gtk-save"); gtk_widget_show (save2_button); gtk_box_pack_start (GTK_BOX (hbox34), save2_button, FALSE, FALSE, 0); GTK_WIDGET_UNSET_FLAGS (save2_button, GTK_CAN_FOCUS); gtk_tooltips_set_tip (tooltips, save2_button, _("Save settings to Xnee Project File"), NULL); record2_button = gtk_button_new_from_stock ("gtk-media-record"); gtk_widget_show (record2_button); gtk_box_pack_start (GTK_BOX (hbox34), record2_button, FALSE, FALSE, 0); GTK_WIDGET_UNSET_FLAGS (record2_button, GTK_CAN_FOCUS); gtk_tooltips_set_tip (tooltips, record2_button, _("Start recording"), NULL); replay2_button = gtk_button_new_from_stock ("gtk-media-play"); gtk_widget_show (replay2_button); gtk_box_pack_start (GTK_BOX (hbox34), replay2_button, FALSE, FALSE, 0); GTK_WIDGET_UNSET_FLAGS (replay2_button, GTK_CAN_FOCUS); gtk_tooltips_set_tip (tooltips, replay2_button, _("Start replay "), NULL); stop2_button = gtk_button_new_from_stock ("gtk-stop"); gtk_widget_show (stop2_button); gtk_box_pack_start (GTK_BOX (hbox34), stop2_button, FALSE, FALSE, 0); gtk_widget_set_sensitive (stop2_button, FALSE); GTK_WIDGET_UNSET_FLAGS (stop2_button, GTK_CAN_FOCUS); gtk_tooltips_set_tip (tooltips, stop2_button, _("Stop"), NULL); notebook = gtk_notebook_new (); gtk_widget_show (notebook); gtk_box_pack_start (GTK_BOX (vbox1), notebook, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (notebook), 4); general_settings_box = gtk_vbox_new (FALSE, 4); gtk_widget_show (general_settings_box); gtk_container_add (GTK_CONTAINER (notebook), general_settings_box); gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (notebook), general_settings_box, FALSE, FALSE, GTK_PACK_START); gtk_container_set_border_width (GTK_CONTAINER (general_settings_box), 4); hbox21 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox21); gtk_box_pack_start (GTK_BOX (general_settings_box), hbox21, FALSE, FALSE, 0); log_settings_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (log_settings_box); gtk_box_pack_start (GTK_BOX (hbox21), log_settings_box, TRUE, TRUE, 0); label14 = gtk_label_new (_("Logging")); gtk_widget_show (label14); gtk_box_pack_start (GTK_BOX (log_settings_box), label14, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label14), TRUE); gtk_misc_set_alignment (GTK_MISC (label14), 0, 0); verbose_logging_box = gtk_hbox_new (FALSE, 0); gtk_widget_show (verbose_logging_box); gtk_box_pack_start (GTK_BOX (log_settings_box), verbose_logging_box, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (verbose_logging_box), 4); verbose_logging_checkbox = gtk_check_button_new_with_mnemonic (_("Verbose logging")); gtk_widget_show (verbose_logging_checkbox); gtk_box_pack_start (GTK_BOX (verbose_logging_box), verbose_logging_checkbox, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, verbose_logging_checkbox, _("Turn on verbose printout (to stderr)"), NULL); time_settings_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (time_settings_box); gtk_box_pack_start (GTK_BOX (hbox21), time_settings_box, TRUE, TRUE, 0); label11 = gtk_label_new (_("Delayed start")); gtk_widget_show (label11); gtk_box_pack_start (GTK_BOX (time_settings_box), label11, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label11), TRUE); gtk_misc_set_alignment (GTK_MISC (label11), 0, 0.5); timeout_box = gtk_hbox_new (FALSE, 4); gtk_widget_show (timeout_box); gtk_box_pack_start (GTK_BOX (time_settings_box), timeout_box, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (timeout_box), 4); wait_checkbox = gtk_check_button_new_with_mnemonic (_("Seconds ")); gtk_widget_show (wait_checkbox); gtk_box_pack_start (GTK_BOX (timeout_box), wait_checkbox, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, wait_checkbox, _("Delay start of recording/replaying"), NULL); wait_spinbutton_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10); wait_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wait_spinbutton_adj), 1, 0); gtk_widget_show (wait_spinbutton); gtk_box_pack_start (GTK_BOX (timeout_box), wait_spinbutton, FALSE, FALSE, 0); vbox16 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox16); gtk_box_pack_start (GTK_BOX (hbox21), vbox16, TRUE, TRUE, 0); feedback_label = gtk_label_new (_("Feedback")); gtk_widget_show (feedback_label); gtk_box_pack_start (GTK_BOX (vbox16), feedback_label, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (feedback_label), TRUE); gtk_misc_set_alignment (GTK_MISC (feedback_label), 0, 0.5); no_fb_b = gtk_radio_button_new_with_mnemonic (NULL, _("none")); gtk_widget_show (no_fb_b); gtk_box_pack_start (GTK_BOX (vbox16), no_fb_b, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, no_fb_b, _("No feedback at all "), NULL); gtk_radio_button_set_group (GTK_RADIO_BUTTON (no_fb_b), no_fb_b_group); no_fb_b_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (no_fb_b)); xosd_fb_b = gtk_radio_button_new_with_mnemonic (NULL, _("xosd")); gtk_widget_show (xosd_fb_b); gtk_box_pack_start (GTK_BOX (vbox16), xosd_fb_b, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, xosd_fb_b, _("Enables XOSD feedback"), NULL); gtk_radio_button_set_group (GTK_RADIO_BUTTON (xosd_fb_b), no_fb_b_group); no_fb_b_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (xosd_fb_b)); stderr_fb_b = gtk_radio_button_new_with_mnemonic (NULL, _("stderr")); gtk_widget_show (stderr_fb_b); gtk_box_pack_start (GTK_BOX (vbox16), stderr_fb_b, FALSE, FALSE, 0); gtk_radio_button_set_group (GTK_RADIO_BUTTON (stderr_fb_b), no_fb_b_group); no_fb_b_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (stderr_fb_b)); distribution_settings_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (distribution_settings_box); gtk_box_pack_start (GTK_BOX (general_settings_box), distribution_settings_box, TRUE, TRUE, 0); label13 = gtk_label_new (_("Distribution")); gtk_widget_show (label13); gtk_box_pack_start (GTK_BOX (distribution_settings_box), label13, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label13), TRUE); gtk_misc_set_alignment (GTK_MISC (label13), 0, 0); distribution_list_box = gtk_hbox_new (FALSE, 4); gtk_widget_show (distribution_list_box); gtk_box_pack_start (GTK_BOX (distribution_settings_box), distribution_list_box, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (distribution_list_box), 4); vbox4 = gtk_vbox_new (FALSE, 4); gtk_widget_show (vbox4); gtk_box_pack_start (GTK_BOX (distribution_list_box), vbox4, TRUE, TRUE, 4); hbox6 = gtk_hbox_new (FALSE, 4); gtk_widget_show (hbox6); gtk_box_pack_start (GTK_BOX (vbox4), hbox6, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox6), 2); distr_displ_label = gtk_label_new (_("Distribute to display:")); gtk_widget_show (distr_displ_label); gtk_box_pack_start (GTK_BOX (hbox6), distr_displ_label, FALSE, FALSE, 0); distribute_display_entry = gtk_entry_new (); gtk_widget_show (distribute_display_entry); gtk_box_pack_start (GTK_BOX (hbox6), distribute_display_entry, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, distribute_display_entry, _("Not used in this release"), NULL); scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow3); gtk_box_pack_start (GTK_BOX (vbox4), scrolledwindow3, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_SHADOW_IN); distribution_list_view = gtk_tree_view_new (); gtk_widget_show (distribution_list_view); gtk_container_add (GTK_CONTAINER (scrolledwindow3), distribution_list_view); gtk_tooltips_set_tip (tooltips, distribution_list_view, _("Not used in this release"), NULL); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (distribution_list_view), FALSE); vbuttonbox1 = gtk_vbutton_box_new (); gtk_widget_show (vbuttonbox1); gtk_box_pack_start (GTK_BOX (distribution_list_box), vbuttonbox1, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbuttonbox1), 4); gtk_button_box_set_layout (GTK_BUTTON_BOX (vbuttonbox1), GTK_BUTTONBOX_START); add_to_distribution_list_butotn = gtk_button_new_from_stock ("gtk-add"); gtk_widget_show (add_to_distribution_list_butotn); gtk_container_add (GTK_CONTAINER (vbuttonbox1), add_to_distribution_list_butotn); GTK_WIDGET_SET_FLAGS (add_to_distribution_list_butotn, GTK_CAN_DEFAULT); gtk_tooltips_set_tip (tooltips, add_to_distribution_list_butotn, _("Not used in this release"), NULL); remove_from_distribution_list_button = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_show (remove_from_distribution_list_button); gtk_container_add (GTK_CONTAINER (vbuttonbox1), remove_from_distribution_list_button); GTK_WIDGET_SET_FLAGS (remove_from_distribution_list_button, GTK_CAN_DEFAULT); gtk_tooltips_set_tip (tooltips, remove_from_distribution_list_button, _("Not used in this release"), NULL); hbox12 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox12); gtk_box_pack_start (GTK_BOX (distribution_settings_box), hbox12, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox12), 4); distribute_when_recording_checkbox = gtk_check_button_new_with_mnemonic (_("Distribute when recording")); gtk_widget_show (distribute_when_recording_checkbox); gtk_box_pack_start (GTK_BOX (hbox12), distribute_when_recording_checkbox, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (distribute_when_recording_checkbox), 4); gtk_tooltips_set_tip (tooltips, distribute_when_recording_checkbox, _("Not used in this release"), NULL); label6 = gtk_label_new (_("General settings")); gtk_widget_show (label6); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 0), label6); vbox20 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox20); gtk_container_add (GTK_CONTAINER (notebook), vbox20); record_settings_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (record_settings_box); gtk_box_pack_start (GTK_BOX (vbox20), record_settings_box, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (record_settings_box), 4); vbox30 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox30); gtk_box_pack_start (GTK_BOX (record_settings_box), vbox30, TRUE, TRUE, 0); label76 = gtk_label_new (_("Display")); gtk_widget_show (label76); gtk_box_pack_start (GTK_BOX (vbox30), label76, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label76), TRUE); gtk_misc_set_alignment (GTK_MISC (label76), 0, 0); hbox32 = gtk_hbox_new (FALSE, 4); gtk_widget_show (hbox32); gtk_box_pack_start (GTK_BOX (vbox30), hbox32, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox32), 4); checkbutton10 = gtk_check_button_new_with_mnemonic (_("Record from display:")); gtk_widget_show (checkbutton10); gtk_box_pack_start (GTK_BOX (hbox32), checkbutton10, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, checkbutton10, _("Set the display to record (default :0)"), NULL); rec_disp_text = gtk_entry_new (); gtk_widget_show (rec_disp_text); gtk_box_pack_start (GTK_BOX (hbox32), rec_disp_text, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rec_disp_text, _("Set the display to record from"), NULL); repl_file_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (repl_file_box); gtk_box_pack_start (GTK_BOX (record_settings_box), repl_file_box, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (repl_file_box), 4); label61 = gtk_label_new (_("Record to session file")); gtk_widget_show (label61); gtk_box_pack_start (GTK_BOX (repl_file_box), label61, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label61), TRUE); gtk_misc_set_alignment (GTK_MISC (label61), 0, 0); hbox30 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox30); gtk_box_pack_start (GTK_BOX (repl_file_box), hbox30, TRUE, TRUE, 0); rec_file_text = gtk_entry_new (); gtk_widget_show (rec_file_text); gtk_box_pack_start (GTK_BOX (hbox30), rec_file_text, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rec_file_text, _("Set the file to store the recorded data in"), NULL); gtk_editable_set_editable (GTK_EDITABLE (rec_file_text), FALSE); rec_file_sel = gtk_button_new_with_mnemonic (_("...")); gtk_widget_show (rec_file_sel); gtk_box_pack_start (GTK_BOX (hbox30), rec_file_sel, FALSE, FALSE, 0); gtk_widget_set_size_request (rec_file_sel, -1, 4); table1 = gtk_table_new (1, 3, TRUE); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (record_settings_box), table1, FALSE, FALSE, 0); gtk_table_set_col_spacings (GTK_TABLE (table1), 20); vbox8 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox8); gtk_table_attach (GTK_TABLE (table1), vbox8, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox8), 4); label21 = gtk_label_new (_("Clients")); gtk_widget_show (label21); gtk_box_pack_start (GTK_BOX (vbox8), label21, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label21), TRUE); gtk_misc_set_alignment (GTK_MISC (label21), 0, 0); record_clients_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (record_clients_box); gtk_box_pack_start (GTK_BOX (vbox8), record_clients_box, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (record_clients_box), 4); radiobutton1 = gtk_radio_button_new_with_mnemonic (NULL, _("Record all clients")); gtk_widget_show (radiobutton1); gtk_box_pack_start (GTK_BOX (record_clients_box), radiobutton1, FALSE, FALSE, 0); gtk_widget_set_size_request (radiobutton1, 72, -1); gtk_tooltips_set_tip (tooltips, radiobutton1, _("Record all clients (current and present)"), NULL); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton1), radiobutton1_group); radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1)); radiobutton2 = gtk_radio_button_new_with_mnemonic (NULL, _("Record only future clients")); gtk_widget_show (radiobutton2); gtk_box_pack_start (GTK_BOX (record_clients_box), radiobutton2, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, radiobutton2, _("Record only future clients (not present)"), NULL); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton2), radiobutton1_group); radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton2)); printout_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (printout_box); gtk_table_attach (GTK_TABLE (table1), printout_box, 2, 3, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); printout_label = gtk_label_new (_("Printout format")); gtk_widget_show (printout_label); gtk_box_pack_start (GTK_BOX (printout_box), printout_label, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (printout_label), TRUE); gtk_misc_set_alignment (GTK_MISC (printout_label), 0, 0.5); xnee_format_rb = gtk_radio_button_new_with_mnemonic (NULL, _("Xnee")); gtk_widget_show (xnee_format_rb); gtk_box_pack_start (GTK_BOX (printout_box), xnee_format_rb, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, xnee_format_rb, _("This has to be used to be able to replay later"), NULL); gtk_radio_button_set_group (GTK_RADIO_BUTTON (xnee_format_rb), xnee_format_rb_group); xnee_format_rb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (xnee_format_rb)); human_format_rb = gtk_radio_button_new_with_mnemonic (NULL, _("human")); gtk_widget_show (human_format_rb); gtk_box_pack_start (GTK_BOX (printout_box), human_format_rb, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, human_format_rb, _("A (bit) more friendly print format"), NULL); gtk_radio_button_set_group (GTK_RADIO_BUTTON (human_format_rb), xnee_format_rb_group); xnee_format_rb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (human_format_rb)); vbox27 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox27); gtk_table_attach (GTK_TABLE (table1), vbox27, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); label70 = gtk_label_new (_("Recording limits")); gtk_widget_show (label70); gtk_box_pack_start (GTK_BOX (vbox27), label70, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label70), TRUE); gtk_misc_set_alignment (GTK_MISC (label70), 0, 0.5); vbox28 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox28); gtk_box_pack_start (GTK_BOX (vbox27), vbox28, TRUE, TRUE, 0); table7 = gtk_table_new (3, 2, FALSE); gtk_widget_show (table7); gtk_box_pack_start (GTK_BOX (vbox28), table7, FALSE, FALSE, 0); label71 = gtk_label_new (_("Events to record:")); gtk_widget_show (label71); gtk_table_attach (GTK_TABLE (table7), label71, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label71), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label71), 4, 0); spinbutton11_adj = gtk_adjustment_new (-1, -1, 1000000, 1, 10, 10); spinbutton11 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton11_adj), 1, 0); gtk_widget_show (spinbutton11); gtk_table_attach (GTK_TABLE (table7), spinbutton11, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_tooltips_set_tip (tooltips, spinbutton11, _("Limit the number of events to record (-1 for no limit)"), NULL); label72 = gtk_label_new (_("Data to record:")); gtk_widget_show (label72); gtk_table_attach (GTK_TABLE (table7), label72, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label72), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label72), 4, 0); spinbutton12_adj = gtk_adjustment_new (-1, -1, 1000000, 1, 10, 10); spinbutton12 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton12_adj), 1, 0); gtk_widget_show (spinbutton12); gtk_table_attach (GTK_TABLE (table7), spinbutton12, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_tooltips_set_tip (tooltips, spinbutton12, _("Limit the total number of data (events, requests, errors, replies) to record (-1 means no limit)"), NULL); label73 = gtk_label_new (_("Time (secs):")); gtk_widget_show (label73); gtk_table_attach (GTK_TABLE (table7), label73, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label73), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label73), 4, 0); spinbutton13_adj = gtk_adjustment_new (0, 0, 10000, 1, 10, 10); spinbutton13 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton13_adj), 1, 0); gtk_widget_show (spinbutton13); gtk_table_attach (GTK_TABLE (table7), spinbutton13, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_tooltips_set_tip (tooltips, spinbutton13, _("Limit the time to record (NOT IMPLEMENTED YET!!!!)"), NULL); vbox6 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox6); gtk_box_pack_start (GTK_BOX (record_settings_box), vbox6, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox6), 4); label20 = gtk_label_new (_("Recordables")); gtk_widget_show (label20); gtk_box_pack_start (GTK_BOX (vbox6), label20, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label20), TRUE); gtk_misc_set_alignment (GTK_MISC (label20), 0, 0); record_recordables_box = gtk_vbox_new (FALSE, 4); gtk_widget_show (record_recordables_box); gtk_box_pack_start (GTK_BOX (vbox6), record_recordables_box, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (record_recordables_box), 4); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (record_recordables_box), hbox3, FALSE, FALSE, 0); event_group_combo = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (event_group_combo)->popwin), "GladeParentKey", event_group_combo); gtk_widget_show (event_group_combo); gtk_box_pack_start (GTK_BOX (hbox3), event_group_combo, TRUE, TRUE, 0); combo_label1 = GTK_COMBO (event_group_combo)->entry; gtk_widget_show (combo_label1); gtk_editable_set_editable (GTK_EDITABLE (combo_label1), FALSE); recordable_listview_box = gtk_hbox_new (FALSE, 0); gtk_widget_show (recordable_listview_box); gtk_box_pack_start (GTK_BOX (record_recordables_box), recordable_listview_box, TRUE, TRUE, 0); vbox10 = gtk_vbox_new (FALSE, 4); gtk_widget_show (vbox10); gtk_box_pack_start (GTK_BOX (recordable_listview_box), vbox10, TRUE, TRUE, 0); label22 = gtk_label_new_with_mnemonic (_("Exclude:")); gtk_widget_show (label22); gtk_box_pack_start (GTK_BOX (vbox10), label22, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (label22), 0, 0); scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow4); gtk_box_pack_start (GTK_BOX (vbox10), scrolledwindow4, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow4), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow4), GTK_SHADOW_IN); exclude_list = gtk_tree_view_new (); gtk_widget_show (exclude_list); gtk_container_add (GTK_CONTAINER (scrolledwindow4), exclude_list); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (exclude_list), FALSE); vbuttonbox2 = gtk_vbutton_box_new (); gtk_widget_show (vbuttonbox2); gtk_box_pack_start (GTK_BOX (recordable_listview_box), vbuttonbox2, FALSE, FALSE, 16); gtk_container_set_border_width (GTK_CONTAINER (vbuttonbox2), 4); gtk_button_box_set_layout (GTK_BUTTON_BOX (vbuttonbox2), GTK_BUTTONBOX_END); record_include_button = gtk_button_new (); gtk_widget_show (record_include_button); gtk_container_add (GTK_CONTAINER (vbuttonbox2), record_include_button); GTK_WIDGET_SET_FLAGS (record_include_button, GTK_CAN_DEFAULT); image3 = gtk_image_new_from_stock ("gtk-go-forward", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image3); gtk_container_add (GTK_CONTAINER (record_include_button), image3); record_exclude_button = gtk_button_new (); gtk_widget_show (record_exclude_button); gtk_container_add (GTK_CONTAINER (vbuttonbox2), record_exclude_button); GTK_WIDGET_SET_FLAGS (record_exclude_button, GTK_CAN_DEFAULT); image2 = gtk_image_new_from_stock ("gtk-go-back", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image2); gtk_container_add (GTK_CONTAINER (record_exclude_button), image2); vbox11 = gtk_vbox_new (FALSE, 4); gtk_widget_show (vbox11); gtk_box_pack_start (GTK_BOX (recordable_listview_box), vbox11, TRUE, TRUE, 0); label23 = gtk_label_new_with_mnemonic (_("Include:")); gtk_widget_show (label23); gtk_box_pack_start (GTK_BOX (vbox11), label23, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (label23), 0, 0); scrolledwindow5 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow5); gtk_box_pack_start (GTK_BOX (vbox11), scrolledwindow5, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow5), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow5), GTK_SHADOW_IN); include_list = gtk_tree_view_new (); gtk_widget_show (include_list); gtk_container_add (GTK_CONTAINER (scrolledwindow5), include_list); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (include_list), FALSE); label1 = gtk_label_new (_("Record settings")); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 1), label1); gtk_widget_set_size_request (label1, -1, 8); replay_settings_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (replay_settings_box); gtk_container_add (GTK_CONTAINER (notebook), replay_settings_box); gtk_container_set_border_width (GTK_CONTAINER (replay_settings_box), 4); hbox23 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox23); gtk_box_pack_start (GTK_BOX (replay_settings_box), hbox23, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox23, -1, 55); replay_display_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (replay_display_box); gtk_box_pack_start (GTK_BOX (hbox23), replay_display_box, TRUE, TRUE, 0); hbox33 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox33); gtk_box_pack_start (GTK_BOX (replay_display_box), hbox33, FALSE, FALSE, 0); vbox25 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox25); gtk_box_pack_start (GTK_BOX (hbox33), vbox25, TRUE, TRUE, 0); label67 = gtk_label_new (_("Display")); gtk_widget_show (label67); gtk_box_pack_start (GTK_BOX (vbox25), label67, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label67), TRUE); gtk_misc_set_alignment (GTK_MISC (label67), 0, 0); hbox26 = gtk_hbox_new (FALSE, 4); gtk_widget_show (hbox26); gtk_box_pack_start (GTK_BOX (vbox25), hbox26, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox26), 4); rep_disp_cb = gtk_check_button_new_with_mnemonic (_("Replay to display:")); gtk_widget_show (rep_disp_cb); gtk_box_pack_start (GTK_BOX (hbox26), rep_disp_cb, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rep_disp_cb, _("Set the display to replay to (default localhost:0)"), NULL); rep_disp_text = gtk_entry_new (); gtk_widget_show (rep_disp_text); gtk_box_pack_start (GTK_BOX (hbox26), rep_disp_text, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rep_disp_text, _("Set the display name to replay to"), NULL); vbox32 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox32); gtk_box_pack_start (GTK_BOX (hbox33), vbox32, TRUE, TRUE, 0); label62 = gtk_label_new (_("Various")); gtk_widget_show (label62); gtk_box_pack_start (GTK_BOX (vbox32), label62, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label62), TRUE); gtk_misc_set_alignment (GTK_MISC (label62), 0, 0); hbox24 = gtk_hbox_new (FALSE, 4); gtk_widget_show (hbox24); gtk_box_pack_start (GTK_BOX (vbox32), hbox24, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (hbox24), 4); speed_toggle = gtk_check_button_new_with_mnemonic (_("Replay with speed:")); gtk_widget_show (speed_toggle); gtk_box_pack_start (GTK_BOX (hbox24), speed_toggle, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, speed_toggle, _("Enable replay speed"), NULL); speed_spin_adj = gtk_adjustment_new (100, 0, 10000, 1, 10, 100); speed_spin = gtk_spin_button_new (GTK_ADJUSTMENT (speed_spin_adj), 1, 0); gtk_widget_show (speed_spin); gtk_box_pack_start (GTK_BOX (hbox24), speed_spin, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, speed_spin, _("Set replay speed (in percent)"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (speed_spin), TRUE); new_win_check = gtk_check_button_new_with_mnemonic (_("New window adjustment")); gtk_widget_show (new_win_check); gtk_box_pack_start (GTK_BOX (vbox32), new_win_check, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, new_win_check, _("Make sure windows pop up at the same position as when recorded"), NULL); hbox36 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox36); gtk_box_pack_start (GTK_BOX (vbox32), hbox36, FALSE, FALSE, 0); checkbutton13 = gtk_check_button_new_with_mnemonic (_("X,Y offset")); gtk_widget_show (checkbutton13); gtk_box_pack_start (GTK_BOX (hbox36), checkbutton13, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, checkbutton13, _("Enable replay speed"), NULL); x_offs_spin_adj = gtk_adjustment_new (0, -20000, 20000, 1, 10, 100); x_offs_spin = gtk_spin_button_new (GTK_ADJUSTMENT (x_offs_spin_adj), 1, 0); gtk_widget_show (x_offs_spin); gtk_box_pack_start (GTK_BOX (hbox36), x_offs_spin, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, x_offs_spin, _("Set replay speed (in percent)"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (x_offs_spin), TRUE); y_offs_spin_adj = gtk_adjustment_new (0, -20000, 20000, 1, 10, 100); y_offs_spin = gtk_spin_button_new (GTK_ADJUSTMENT (y_offs_spin_adj), 1, 0); gtk_widget_show (y_offs_spin); gtk_box_pack_start (GTK_BOX (hbox36), y_offs_spin, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, y_offs_spin, _("Set replay speed (in percent)"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (y_offs_spin), TRUE); vbox29 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox29); gtk_box_pack_start (GTK_BOX (replay_display_box), vbox29, TRUE, TRUE, 0); gtk_widget_set_size_request (vbox29, -1, 13); gtk_container_set_border_width (GTK_CONTAINER (vbox29), 4); GTK_WIDGET_SET_FLAGS (vbox29, GTK_CAN_DEFAULT); hbox31 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox31); gtk_box_pack_start (GTK_BOX (vbox29), hbox31, TRUE, TRUE, 0); label75 = gtk_label_new (_("Replay from session file")); gtk_widget_show (label75); gtk_box_pack_start (GTK_BOX (hbox31), label75, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label75), TRUE); gtk_misc_set_alignment (GTK_MISC (label75), 0, 0); rep_file_text = gtk_entry_new (); gtk_widget_show (rep_file_text); gtk_box_pack_start (GTK_BOX (hbox31), rep_file_text, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rep_file_text, _("Set the file to use to read recorded data from"), NULL); gtk_editable_set_editable (GTK_EDITABLE (rep_file_text), FALSE); button11 = gtk_button_new_with_mnemonic (_("...")); gtk_widget_show (button11); gtk_box_pack_start (GTK_BOX (hbox31), button11, FALSE, FALSE, 0); gtk_widget_set_size_request (button11, -1, 8); spin_boxes = gtk_hbox_new (FALSE, 0); gtk_widget_show (spin_boxes); gtk_box_pack_start (GTK_BOX (replay_settings_box), spin_boxes, FALSE, FALSE, 0); threshold_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (threshold_box); gtk_box_pack_start (GTK_BOX (spin_boxes), threshold_box, TRUE, TRUE, 0); threshold_label = gtk_label_new (_("Thresholds")); gtk_widget_show (threshold_label); gtk_box_pack_start (GTK_BOX (threshold_box), threshold_label, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (threshold_label), TRUE); gtk_misc_set_alignment (GTK_MISC (threshold_label), 0, 0.5); threshold_table = gtk_table_new (3, 2, FALSE); gtk_widget_show (threshold_table); gtk_box_pack_start (GTK_BOX (threshold_box), threshold_table, TRUE, TRUE, 0); max_thresh_label = gtk_label_new (_("Maximum ")); gtk_widget_show (max_thresh_label); gtk_table_attach (GTK_TABLE (threshold_table), max_thresh_label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (max_thresh_label), 0, 0.5); min_thresh_label = gtk_label_new (_("Minimum ")); gtk_widget_show (min_thresh_label); gtk_table_attach (GTK_TABLE (threshold_table), min_thresh_label, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (min_thresh_label), 0, 0.5); tot_thresh_label = gtk_label_new (_("Total ")); gtk_widget_show (tot_thresh_label); gtk_table_attach (GTK_TABLE (threshold_table), tot_thresh_label, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (tot_thresh_label), 0, 0.5); max_thresh_sb_adj = gtk_adjustment_new (1, 0, 1000, 1, 10, 10); max_thresh_sb = gtk_spin_button_new (GTK_ADJUSTMENT (max_thresh_sb_adj), 1, 0); gtk_widget_show (max_thresh_sb); gtk_table_attach (GTK_TABLE (threshold_table), max_thresh_sb, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); min_thresh_sb_adj = gtk_adjustment_new (1, -1000, 1000, 1, 10, 10); min_thresh_sb = gtk_spin_button_new (GTK_ADJUSTMENT (min_thresh_sb_adj), 1, 0); gtk_widget_show (min_thresh_sb); gtk_table_attach (GTK_TABLE (threshold_table), min_thresh_sb, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); tot_thresh_sb_adj = gtk_adjustment_new (1, 0, 1000, 1, 10, 10); tot_thresh_sb = gtk_spin_button_new (GTK_ADJUSTMENT (tot_thresh_sb_adj), 1, 0); gtk_widget_show (tot_thresh_sb); gtk_table_attach (GTK_TABLE (threshold_table), tot_thresh_sb, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); vbox22 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox22); gtk_box_pack_start (GTK_BOX (spin_boxes), vbox22, TRUE, TRUE, 0); replay_error_handling_box = gtk_vbox_new (FALSE, 0); gtk_widget_show (replay_error_handling_box); gtk_box_pack_start (GTK_BOX (vbox22), replay_error_handling_box, TRUE, TRUE, 0); label18 = gtk_label_new (_("Synchronisation handling")); gtk_widget_show (label18); gtk_box_pack_start (GTK_BOX (replay_error_handling_box), label18, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label18), TRUE); gtk_misc_set_alignment (GTK_MISC (label18), 0, 0); skip_sync_cb = gtk_check_button_new_with_mnemonic (_("Use synchronisation")); gtk_widget_show (skip_sync_cb); gtk_box_pack_start (GTK_BOX (replay_error_handling_box), skip_sync_cb, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (skip_sync_cb), 4); gtk_tooltips_set_tip (tooltips, skip_sync_cb, _("Synchronisation is used to make sure that the replaying is in sync with the recorded session (read the manual)"), NULL); force_rep_cb = gtk_check_button_new_with_mnemonic (_("Force replay even when not synchronized")); gtk_widget_show (force_rep_cb); gtk_box_pack_start (GTK_BOX (replay_error_handling_box), force_rep_cb, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (force_rep_cb), 4); gtk_tooltips_set_tip (tooltips, force_rep_cb, _("If Xnee considers the replaying to be out of sync you can force Xnee to continue anyway"), NULL); vbox12 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox12); gtk_box_pack_start (GTK_BOX (replay_settings_box), vbox12, TRUE, TRUE, 0); label24 = gtk_label_new (_("Replay file")); gtk_widget_show (label24); gtk_box_pack_start (GTK_BOX (vbox12), label24, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (label24), TRUE); gtk_misc_set_alignment (GTK_MISC (label24), 0, 0); replay_files_box = gtk_hbox_new (FALSE, 0); gtk_widget_show (replay_files_box); gtk_box_pack_start (GTK_BOX (vbox12), replay_files_box, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (replay_files_box), 4); scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow6); gtk_box_pack_start (GTK_BOX (replay_files_box), scrolledwindow6, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN); treeview3 = gtk_tree_view_new (); gtk_widget_show (treeview3); gtk_container_add (GTK_CONTAINER (scrolledwindow6), treeview3); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview3), FALSE); vbuttonbox3 = gtk_vbutton_box_new (); gtk_widget_show (vbuttonbox3); gtk_box_pack_start (GTK_BOX (replay_files_box), vbuttonbox3, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbuttonbox3), 4); gtk_button_box_set_layout (GTK_BUTTON_BOX (vbuttonbox3), GTK_BUTTONBOX_START); button3 = gtk_button_new_from_stock ("gtk-delete"); gtk_widget_show (button3); gtk_container_add (GTK_CONTAINER (vbuttonbox3), button3); GTK_WIDGET_SET_FLAGS (button3, GTK_CAN_DEFAULT); label2 = gtk_label_new (_("Replay settings")); gtk_widget_show (label2); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 2), label2); km_table = gtk_table_new (6, 3, FALSE); gtk_widget_show (km_table); gtk_container_add (GTK_CONTAINER (notebook), km_table); label32 = gtk_label_new (_("Stop")); gtk_widget_show (label32); gtk_table_attach (GTK_TABLE (km_table), label32, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label32), TRUE); gtk_misc_set_alignment (GTK_MISC (label32), 0, 0.5); label33 = gtk_label_new (_("Action")); gtk_widget_show (label33); gtk_table_attach (GTK_TABLE (km_table), label33, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label33), TRUE); gtk_misc_set_alignment (GTK_MISC (label33), 0, 0.5); label36 = gtk_label_new (_("Pause")); gtk_widget_show (label36); gtk_table_attach (GTK_TABLE (km_table), label36, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label36), TRUE); gtk_misc_set_alignment (GTK_MISC (label36), 0, 0.5); label37 = gtk_label_new (_("Resume")); gtk_widget_show (label37); gtk_table_attach (GTK_TABLE (km_table), label37, 0, 1, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label37), TRUE); gtk_misc_set_alignment (GTK_MISC (label37), 0, 0.5); label38 = gtk_label_new (_("Mark")); gtk_widget_show (label38); gtk_table_attach (GTK_TABLE (km_table), label38, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label38), TRUE); gtk_misc_set_alignment (GTK_MISC (label38), 0, 0.5); label39 = gtk_label_new (_("Execution")); gtk_widget_show (label39); gtk_table_attach (GTK_TABLE (km_table), label39, 0, 1, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label39), TRUE); gtk_misc_set_alignment (GTK_MISC (label39), 0, 0.5); label35 = gtk_label_new (_("Key")); gtk_widget_show (label35); gtk_table_attach (GTK_TABLE (km_table), label35, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (label35, 20, -1); gtk_label_set_use_markup (GTK_LABEL (label35), TRUE); gtk_misc_set_alignment (GTK_MISC (label35), 0, 0.5); combo7 = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo7)->popwin), "GladeParentKey", combo7); gtk_widget_show (combo7); gtk_table_attach (GTK_TABLE (km_table), combo7, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); pause_k_combo = GTK_COMBO (combo7)->entry; gtk_widget_show (pause_k_combo); gtk_tooltips_set_tip (tooltips, pause_k_combo, _("Set the pause key"), NULL); combo8 = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo8)->popwin), "GladeParentKey", combo8); gtk_widget_show (combo8); gtk_table_attach (GTK_TABLE (km_table), combo8, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); resume_k_combo = GTK_COMBO (combo8)->entry; gtk_widget_show (resume_k_combo); gtk_tooltips_set_tip (tooltips, resume_k_combo, _("Set the resume key"), NULL); combo9 = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo9)->popwin), "GladeParentKey", combo9); gtk_widget_show (combo9); gtk_table_attach (GTK_TABLE (km_table), combo9, 1, 2, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); mark_k_combo = GTK_COMBO (combo9)->entry; gtk_widget_show (mark_k_combo); gtk_tooltips_set_tip (tooltips, mark_k_combo, _("Set the insert mark key "), NULL); combo10 = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo10)->popwin), "GladeParentKey", combo10); gtk_widget_show (combo10); gtk_table_attach (GTK_TABLE (km_table), combo10, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); exec_k_combo = GTK_COMBO (combo10)->entry; gtk_widget_show (exec_k_combo); gtk_tooltips_set_tip (tooltips, exec_k_combo, _("Set the exec key"), NULL); combo2 = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo2)->popwin), "GladeParentKey", combo2); gtk_widget_show (combo2); gtk_table_attach (GTK_TABLE (km_table), combo2, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); stop_k_combo = GTK_COMBO (combo2)->entry; gtk_widget_show (stop_k_combo); gtk_tooltips_set_tip (tooltips, stop_k_combo, _("Set the stop key"), NULL); label80 = gtk_label_new (_("Extra parameter")); gtk_widget_show (label80); gtk_table_attach (GTK_TABLE (km_table), label80, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label80), TRUE); gtk_misc_set_alignment (GTK_MISC (label80), 0, 0.5); hbox35 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox35); gtk_table_attach (GTK_TABLE (km_table), hbox35, 2, 3, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); label81 = gtk_label_new (_("Execute string:")); gtk_widget_show (label81); gtk_box_pack_start (GTK_BOX (hbox35), label81, FALSE, FALSE, 0); entry1 = gtk_entry_new (); gtk_widget_show (entry1); gtk_box_pack_start (GTK_BOX (hbox35), entry1, TRUE, TRUE, 0); label82 = gtk_label_new (_("Unused")); gtk_widget_show (label82); gtk_table_attach (GTK_TABLE (km_table), label82, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label82), 0, 0.5); label83 = gtk_label_new (_("Unused")); gtk_widget_show (label83); gtk_table_attach (GTK_TABLE (km_table), label83, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label83), 0, 0.5); label84 = gtk_label_new (_("Unused")); gtk_widget_show (label84); gtk_table_attach (GTK_TABLE (km_table), label84, 2, 3, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label84), 0, 0.5); label85 = gtk_label_new (_("Unused")); gtk_widget_show (label85); gtk_table_attach (GTK_TABLE (km_table), label85, 2, 3, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label85), 0, 0.5); keymodifierpane = gtk_label_new (_("Key bindings")); gtk_widget_show (keymodifierpane); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 3), keymodifierpane); label74 = gtk_label_new (_("Only automatic resolution adjustment in this release of gnee.... \nwhich is what you would probably use anyway :)")); gtk_widget_show (label74); gtk_container_add (GTK_CONTAINER (notebook), label74); resolution = gtk_label_new (_("Resolution")); gtk_widget_show (resolution); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 4), resolution); label78 = gtk_label_new (_("No project stuff in this release\n.... but one fine day")); gtk_widget_show (label78); gtk_container_add (GTK_CONTAINER (notebook), label78); project_tab = gtk_label_new (_("Project")); gtk_widget_show (project_tab); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), 5), project_tab); g_signal_connect_swapped ((gpointer) gnee_window, "destroy", G_CALLBACK (on_gnee_window_destroy), GTK_OBJECT (gnee_window)); g_signal_connect ((gpointer) new1, "activate", G_CALLBACK (on_new1_activate), NULL); g_signal_connect ((gpointer) open1, "activate", G_CALLBACK (on_open1_activate), NULL); g_signal_connect ((gpointer) save1, "activate", G_CALLBACK (on_save1_activate), NULL); g_signal_connect ((gpointer) save_as1, "activate", G_CALLBACK (on_save_as1_activate), NULL); g_signal_connect ((gpointer) quit1, "activate", G_CALLBACK (on_quit1_activate), NULL); g_signal_connect ((gpointer) log_window, "activate", G_CALLBACK (on_log_window_activate), NULL); g_signal_connect_swapped ((gpointer) about1, "activate", G_CALLBACK (on_about1_activate), GTK_OBJECT (gnee_window)); g_signal_connect ((gpointer) open2_button, "clicked", G_CALLBACK (on_open_button_clicked), NULL); g_signal_connect ((gpointer) save2_button, "clicked", G_CALLBACK (on_save_button_clicked), NULL); g_signal_connect_swapped ((gpointer) record2_button, "clicked", G_CALLBACK (on_record), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) replay2_button, "clicked", G_CALLBACK (on_replay), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) verbose_logging_checkbox, "toggled", G_CALLBACK (on_verbose_logging_checkbox_toggled), GTK_OBJECT (verbose_logging_checkbox)); g_signal_connect_swapped ((gpointer) wait_checkbox, "toggled", G_CALLBACK (on_wait_checkbox_toggled), GTK_OBJECT (wait_checkbox)); g_signal_connect_swapped ((gpointer) wait_spinbutton, "change_value", G_CALLBACK (gtk_main_quit), GTK_OBJECT (wait_spinbutton)); g_signal_connect_swapped ((gpointer) wait_spinbutton, "changed", G_CALLBACK (on_wait_spinbutton_change_value), GTK_OBJECT (wait_spinbutton)); g_signal_connect_swapped ((gpointer) no_fb_b, "toggled", G_CALLBACK (on_no_fb_b_toggled), GTK_OBJECT (no_fb_b)); g_signal_connect_swapped ((gpointer) xosd_fb_b, "toggled", G_CALLBACK (on_xosd_fb_b_toggled), GTK_OBJECT (xosd_fb_b)); g_signal_connect_swapped ((gpointer) stderr_fb_b, "toggled", G_CALLBACK (on_stderr_fb_b_toggled), GTK_OBJECT (stderr_fb_b)); g_signal_connect ((gpointer) record_settings_box, "map", G_CALLBACK (on_record_settings_box_map), NULL); g_signal_connect_swapped ((gpointer) checkbutton10, "toggled", G_CALLBACK (on_checkbutton10_toggled), GTK_OBJECT (checkbutton10)); g_signal_connect_swapped ((gpointer) rec_disp_text, "changed", G_CALLBACK (on_rec_disp_text_changed), GTK_OBJECT (rec_disp_text)); g_signal_connect_swapped ((gpointer) rec_file_sel, "clicked", G_CALLBACK (on_rec_file_sel_clicked), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) radiobutton1, "toggled", G_CALLBACK (on_radiobutton1_toggled), GTK_OBJECT (radiobutton1)); g_signal_connect_swapped ((gpointer) radiobutton2, "toggled", G_CALLBACK (on_radiobutton2_toggled), GTK_OBJECT (radiobutton2)); g_signal_connect_swapped ((gpointer) xnee_format_rb, "toggled", G_CALLBACK (on_xnee_format_rb_toggled), GTK_OBJECT (xnee_format_rb)); g_signal_connect_swapped ((gpointer) human_format_rb, "toggled", G_CALLBACK (on_human_format_rb_toggled), GTK_OBJECT (human_format_rb)); g_signal_connect_swapped ((gpointer) spinbutton11, "value_changed", G_CALLBACK (on_spinbutton11_change_value), GTK_OBJECT (spinbutton11)); g_signal_connect_swapped ((gpointer) spinbutton12, "value_changed", G_CALLBACK (on_spinbutton12_change_value), GTK_OBJECT (spinbutton12)); g_signal_connect_swapped ((gpointer) spinbutton13, "value_changed", G_CALLBACK (on_spinbutton13_change_value), GTK_OBJECT (spinbutton13)); g_signal_connect_swapped ((gpointer) combo_label1, "changed", G_CALLBACK (on_combo_label1_changed), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) exclude_list, "row_activated", G_CALLBACK (on_exclude_list_row_activated), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) record_include_button, "clicked", G_CALLBACK (on_record_include_button_clicked), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) record_exclude_button, "clicked", G_CALLBACK (on_record_exclude_button_clicked), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) include_list, "row_activated", G_CALLBACK (on_include_list_row_activated), GTK_OBJECT (gnee_window)); g_signal_connect ((gpointer) replay_settings_box, "map", G_CALLBACK (on_replay_settings_box_map), NULL); g_signal_connect_swapped ((gpointer) rep_disp_cb, "toggled", G_CALLBACK (on_rep_disp_cb_toggled), GTK_OBJECT (rep_disp_cb)); g_signal_connect_swapped ((gpointer) rep_disp_text, "changed", G_CALLBACK (on_rep_disp_text_changed), GTK_OBJECT (gnee_window)); g_signal_connect ((gpointer) speed_toggle, "toggled", G_CALLBACK (on_speed_toggle_toggled), NULL); g_signal_connect_swapped ((gpointer) speed_spin, "value_changed", G_CALLBACK (on_speed_spin_change_value), GTK_OBJECT (speed_spin)); g_signal_connect ((gpointer) new_win_check, "toggled", G_CALLBACK (on_new_win_check_toggled), NULL); g_signal_connect ((gpointer) checkbutton13, "toggled", G_CALLBACK (on_offset_toggle_toggled), NULL); g_signal_connect_swapped ((gpointer) x_offs_spin, "value_changed", G_CALLBACK (on_x_offs_spin_changed), GTK_OBJECT (x_offs_spin)); g_signal_connect_swapped ((gpointer) y_offs_spin, "value_changed", G_CALLBACK (on_y_offs_spin_changed), GTK_OBJECT (y_offs_spin)); g_signal_connect_swapped ((gpointer) button11, "clicked", G_CALLBACK (on_button11_clicked), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) max_thresh_sb, "value_changed", G_CALLBACK (on_max_thresh_sb_value_changed), GTK_OBJECT (max_thresh_sb)); g_signal_connect_swapped ((gpointer) min_thresh_sb, "value_changed", G_CALLBACK (on_min_thresh_sb_value_changed), GTK_OBJECT (min_thresh_sb)); g_signal_connect_swapped ((gpointer) tot_thresh_sb, "value_changed", G_CALLBACK (on_tot_thresh_sb_value_changed), GTK_OBJECT (tot_thresh_sb)); g_signal_connect_swapped ((gpointer) skip_sync_cb, "toggled", G_CALLBACK (on_skip_sync_cb_toggled), GTK_OBJECT (skip_sync_cb)); g_signal_connect_swapped ((gpointer) force_rep_cb, "toggled", G_CALLBACK (on_force_rep_cb_toggled), GTK_OBJECT (force_rep_cb)); g_signal_connect_swapped ((gpointer) pause_k_combo, "changed", G_CALLBACK (on_pause_k_combo_changed), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) resume_k_combo, "changed", G_CALLBACK (on_resume_k_combo_changed), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) mark_k_combo, "changed", G_CALLBACK (on_mark_k_combo_changed), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) exec_k_combo, "changed", G_CALLBACK (on_exec_k_combo_changed), GTK_OBJECT (gnee_window)); g_signal_connect_swapped ((gpointer) stop_k_combo, "changed", G_CALLBACK (on_stop_k_combo_changed), GTK_OBJECT (gnee_window)); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (gnee_window, gnee_window, "gnee_window"); GLADE_HOOKUP_OBJECT (gnee_window, vbox1, "vbox1"); GLADE_HOOKUP_OBJECT (gnee_window, menubar1, "menubar1"); GLADE_HOOKUP_OBJECT (gnee_window, menuitem1, "menuitem1"); GLADE_HOOKUP_OBJECT (gnee_window, menuitem1_menu, "menuitem1_menu"); GLADE_HOOKUP_OBJECT (gnee_window, new1, "new1"); GLADE_HOOKUP_OBJECT (gnee_window, open1, "open1"); GLADE_HOOKUP_OBJECT (gnee_window, save1, "save1"); GLADE_HOOKUP_OBJECT (gnee_window, save_as1, "save_as1"); GLADE_HOOKUP_OBJECT (gnee_window, separatormenuitem1, "separatormenuitem1"); GLADE_HOOKUP_OBJECT (gnee_window, quit1, "quit1"); GLADE_HOOKUP_OBJECT (gnee_window, menuitem3, "menuitem3"); GLADE_HOOKUP_OBJECT (gnee_window, menuitem3_menu, "menuitem3_menu"); GLADE_HOOKUP_OBJECT (gnee_window, log_window, "log_window"); GLADE_HOOKUP_OBJECT (gnee_window, menuitem4, "menuitem4"); GLADE_HOOKUP_OBJECT (gnee_window, menuitem4_menu, "menuitem4_menu"); GLADE_HOOKUP_OBJECT (gnee_window, about1, "about1"); GLADE_HOOKUP_OBJECT (gnee_window, hbox34, "hbox34"); GLADE_HOOKUP_OBJECT (gnee_window, new2_button, "new2_button"); GLADE_HOOKUP_OBJECT (gnee_window, open2_button, "open2_button"); GLADE_HOOKUP_OBJECT (gnee_window, save2_button, "save2_button"); GLADE_HOOKUP_OBJECT (gnee_window, record2_button, "record2_button"); GLADE_HOOKUP_OBJECT (gnee_window, replay2_button, "replay2_button"); GLADE_HOOKUP_OBJECT (gnee_window, stop2_button, "stop2_button"); GLADE_HOOKUP_OBJECT (gnee_window, notebook, "notebook"); GLADE_HOOKUP_OBJECT (gnee_window, general_settings_box, "general_settings_box"); GLADE_HOOKUP_OBJECT (gnee_window, hbox21, "hbox21"); GLADE_HOOKUP_OBJECT (gnee_window, log_settings_box, "log_settings_box"); GLADE_HOOKUP_OBJECT (gnee_window, label14, "label14"); GLADE_HOOKUP_OBJECT (gnee_window, verbose_logging_box, "verbose_logging_box"); GLADE_HOOKUP_OBJECT (gnee_window, verbose_logging_checkbox, "verbose_logging_checkbox"); GLADE_HOOKUP_OBJECT (gnee_window, time_settings_box, "time_settings_box"); GLADE_HOOKUP_OBJECT (gnee_window, label11, "label11"); GLADE_HOOKUP_OBJECT (gnee_window, timeout_box, "timeout_box"); GLADE_HOOKUP_OBJECT (gnee_window, wait_checkbox, "wait_checkbox"); GLADE_HOOKUP_OBJECT (gnee_window, wait_spinbutton, "wait_spinbutton"); GLADE_HOOKUP_OBJECT (gnee_window, vbox16, "vbox16"); GLADE_HOOKUP_OBJECT (gnee_window, feedback_label, "feedback_label"); GLADE_HOOKUP_OBJECT (gnee_window, no_fb_b, "no_fb_b"); GLADE_HOOKUP_OBJECT (gnee_window, xosd_fb_b, "xosd_fb_b"); GLADE_HOOKUP_OBJECT (gnee_window, stderr_fb_b, "stderr_fb_b"); GLADE_HOOKUP_OBJECT (gnee_window, distribution_settings_box, "distribution_settings_box"); GLADE_HOOKUP_OBJECT (gnee_window, label13, "label13"); GLADE_HOOKUP_OBJECT (gnee_window, distribution_list_box, "distribution_list_box"); GLADE_HOOKUP_OBJECT (gnee_window, vbox4, "vbox4"); GLADE_HOOKUP_OBJECT (gnee_window, hbox6, "hbox6"); GLADE_HOOKUP_OBJECT (gnee_window, distr_displ_label, "distr_displ_label"); GLADE_HOOKUP_OBJECT (gnee_window, distribute_display_entry, "distribute_display_entry"); GLADE_HOOKUP_OBJECT (gnee_window, scrolledwindow3, "scrolledwindow3"); GLADE_HOOKUP_OBJECT (gnee_window, distribution_list_view, "distribution_list_view"); GLADE_HOOKUP_OBJECT (gnee_window, vbuttonbox1, "vbuttonbox1"); GLADE_HOOKUP_OBJECT (gnee_window, add_to_distribution_list_butotn, "add_to_distribution_list_butotn"); GLADE_HOOKUP_OBJECT (gnee_window, remove_from_distribution_list_button, "remove_from_distribution_list_button"); GLADE_HOOKUP_OBJECT (gnee_window, hbox12, "hbox12"); GLADE_HOOKUP_OBJECT (gnee_window, distribute_when_recording_checkbox, "distribute_when_recording_checkbox"); GLADE_HOOKUP_OBJECT (gnee_window, label6, "label6"); GLADE_HOOKUP_OBJECT (gnee_window, vbox20, "vbox20"); GLADE_HOOKUP_OBJECT (gnee_window, record_settings_box, "record_settings_box"); GLADE_HOOKUP_OBJECT (gnee_window, vbox30, "vbox30"); GLADE_HOOKUP_OBJECT (gnee_window, label76, "label76"); GLADE_HOOKUP_OBJECT (gnee_window, hbox32, "hbox32"); GLADE_HOOKUP_OBJECT (gnee_window, checkbutton10, "checkbutton10"); GLADE_HOOKUP_OBJECT (gnee_window, rec_disp_text, "rec_disp_text"); GLADE_HOOKUP_OBJECT (gnee_window, repl_file_box, "repl_file_box"); GLADE_HOOKUP_OBJECT (gnee_window, label61, "label61"); GLADE_HOOKUP_OBJECT (gnee_window, hbox30, "hbox30"); GLADE_HOOKUP_OBJECT (gnee_window, rec_file_text, "rec_file_text"); GLADE_HOOKUP_OBJECT (gnee_window, rec_file_sel, "rec_file_sel"); GLADE_HOOKUP_OBJECT (gnee_window, table1, "table1"); GLADE_HOOKUP_OBJECT (gnee_window, vbox8, "vbox8"); GLADE_HOOKUP_OBJECT (gnee_window, label21, "label21"); GLADE_HOOKUP_OBJECT (gnee_window, record_clients_box, "record_clients_box"); GLADE_HOOKUP_OBJECT (gnee_window, radiobutton1, "radiobutton1"); GLADE_HOOKUP_OBJECT (gnee_window, radiobutton2, "radiobutton2"); GLADE_HOOKUP_OBJECT (gnee_window, printout_box, "printout_box"); GLADE_HOOKUP_OBJECT (gnee_window, printout_label, "printout_label"); GLADE_HOOKUP_OBJECT (gnee_window, xnee_format_rb, "xnee_format_rb"); GLADE_HOOKUP_OBJECT (gnee_window, human_format_rb, "human_format_rb"); GLADE_HOOKUP_OBJECT (gnee_window, vbox27, "vbox27"); GLADE_HOOKUP_OBJECT (gnee_window, label70, "label70"); GLADE_HOOKUP_OBJECT (gnee_window, vbox28, "vbox28"); GLADE_HOOKUP_OBJECT (gnee_window, table7, "table7"); GLADE_HOOKUP_OBJECT (gnee_window, label71, "label71"); GLADE_HOOKUP_OBJECT (gnee_window, spinbutton11, "spinbutton11"); GLADE_HOOKUP_OBJECT (gnee_window, label72, "label72"); GLADE_HOOKUP_OBJECT (gnee_window, spinbutton12, "spinbutton12"); GLADE_HOOKUP_OBJECT (gnee_window, label73, "label73"); GLADE_HOOKUP_OBJECT (gnee_window, spinbutton13, "spinbutton13"); GLADE_HOOKUP_OBJECT (gnee_window, vbox6, "vbox6"); GLADE_HOOKUP_OBJECT (gnee_window, label20, "label20"); GLADE_HOOKUP_OBJECT (gnee_window, record_recordables_box, "record_recordables_box"); GLADE_HOOKUP_OBJECT (gnee_window, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (gnee_window, event_group_combo, "event_group_combo"); GLADE_HOOKUP_OBJECT (gnee_window, combo_label1, "combo_label1"); GLADE_HOOKUP_OBJECT (gnee_window, recordable_listview_box, "recordable_listview_box"); GLADE_HOOKUP_OBJECT (gnee_window, vbox10, "vbox10"); GLADE_HOOKUP_OBJECT (gnee_window, label22, "label22"); GLADE_HOOKUP_OBJECT (gnee_window, scrolledwindow4, "scrolledwindow4"); GLADE_HOOKUP_OBJECT (gnee_window, exclude_list, "exclude_list"); GLADE_HOOKUP_OBJECT (gnee_window, vbuttonbox2, "vbuttonbox2"); GLADE_HOOKUP_OBJECT (gnee_window, record_include_button, "record_include_button"); GLADE_HOOKUP_OBJECT (gnee_window, image3, "image3"); GLADE_HOOKUP_OBJECT (gnee_window, record_exclude_button, "record_exclude_button"); GLADE_HOOKUP_OBJECT (gnee_window, image2, "image2"); GLADE_HOOKUP_OBJECT (gnee_window, vbox11, "vbox11"); GLADE_HOOKUP_OBJECT (gnee_window, label23, "label23"); GLADE_HOOKUP_OBJECT (gnee_window, scrolledwindow5, "scrolledwindow5"); GLADE_HOOKUP_OBJECT (gnee_window, include_list, "include_list"); GLADE_HOOKUP_OBJECT (gnee_window, label1, "label1"); GLADE_HOOKUP_OBJECT (gnee_window, replay_settings_box, "replay_settings_box"); GLADE_HOOKUP_OBJECT (gnee_window, hbox23, "hbox23"); GLADE_HOOKUP_OBJECT (gnee_window, replay_display_box, "replay_display_box"); GLADE_HOOKUP_OBJECT (gnee_window, hbox33, "hbox33"); GLADE_HOOKUP_OBJECT (gnee_window, vbox25, "vbox25"); GLADE_HOOKUP_OBJECT (gnee_window, label67, "label67"); GLADE_HOOKUP_OBJECT (gnee_window, hbox26, "hbox26"); GLADE_HOOKUP_OBJECT (gnee_window, rep_disp_cb, "rep_disp_cb"); GLADE_HOOKUP_OBJECT (gnee_window, rep_disp_text, "rep_disp_text"); GLADE_HOOKUP_OBJECT (gnee_window, vbox32, "vbox32"); GLADE_HOOKUP_OBJECT (gnee_window, label62, "label62"); GLADE_HOOKUP_OBJECT (gnee_window, hbox24, "hbox24"); GLADE_HOOKUP_OBJECT (gnee_window, speed_toggle, "speed_toggle"); GLADE_HOOKUP_OBJECT (gnee_window, speed_spin, "speed_spin"); GLADE_HOOKUP_OBJECT (gnee_window, new_win_check, "new_win_check"); GLADE_HOOKUP_OBJECT (gnee_window, hbox36, "hbox36"); GLADE_HOOKUP_OBJECT (gnee_window, checkbutton13, "checkbutton13"); GLADE_HOOKUP_OBJECT (gnee_window, x_offs_spin, "x_offs_spin"); GLADE_HOOKUP_OBJECT (gnee_window, y_offs_spin, "y_offs_spin"); GLADE_HOOKUP_OBJECT (gnee_window, vbox29, "vbox29"); GLADE_HOOKUP_OBJECT (gnee_window, hbox31, "hbox31"); GLADE_HOOKUP_OBJECT (gnee_window, label75, "label75"); GLADE_HOOKUP_OBJECT (gnee_window, rep_file_text, "rep_file_text"); GLADE_HOOKUP_OBJECT (gnee_window, button11, "button11"); GLADE_HOOKUP_OBJECT (gnee_window, spin_boxes, "spin_boxes"); GLADE_HOOKUP_OBJECT (gnee_window, threshold_box, "threshold_box"); GLADE_HOOKUP_OBJECT (gnee_window, threshold_label, "threshold_label"); GLADE_HOOKUP_OBJECT (gnee_window, threshold_table, "threshold_table"); GLADE_HOOKUP_OBJECT (gnee_window, max_thresh_label, "max_thresh_label"); GLADE_HOOKUP_OBJECT (gnee_window, min_thresh_label, "min_thresh_label"); GLADE_HOOKUP_OBJECT (gnee_window, tot_thresh_label, "tot_thresh_label"); GLADE_HOOKUP_OBJECT (gnee_window, max_thresh_sb, "max_thresh_sb"); GLADE_HOOKUP_OBJECT (gnee_window, min_thresh_sb, "min_thresh_sb"); GLADE_HOOKUP_OBJECT (gnee_window, tot_thresh_sb, "tot_thresh_sb"); GLADE_HOOKUP_OBJECT (gnee_window, vbox22, "vbox22"); GLADE_HOOKUP_OBJECT (gnee_window, replay_error_handling_box, "replay_error_handling_box"); GLADE_HOOKUP_OBJECT (gnee_window, label18, "label18"); GLADE_HOOKUP_OBJECT (gnee_window, skip_sync_cb, "skip_sync_cb"); GLADE_HOOKUP_OBJECT (gnee_window, force_rep_cb, "force_rep_cb"); GLADE_HOOKUP_OBJECT (gnee_window, vbox12, "vbox12"); GLADE_HOOKUP_OBJECT (gnee_window, label24, "label24"); GLADE_HOOKUP_OBJECT (gnee_window, replay_files_box, "replay_files_box"); GLADE_HOOKUP_OBJECT (gnee_window, scrolledwindow6, "scrolledwindow6"); GLADE_HOOKUP_OBJECT (gnee_window, treeview3, "treeview3"); GLADE_HOOKUP_OBJECT (gnee_window, vbuttonbox3, "vbuttonbox3"); GLADE_HOOKUP_OBJECT (gnee_window, button3, "button3"); GLADE_HOOKUP_OBJECT (gnee_window, label2, "label2"); GLADE_HOOKUP_OBJECT (gnee_window, km_table, "km_table"); GLADE_HOOKUP_OBJECT (gnee_window, label32, "label32"); GLADE_HOOKUP_OBJECT (gnee_window, label33, "label33"); GLADE_HOOKUP_OBJECT (gnee_window, label36, "label36"); GLADE_HOOKUP_OBJECT (gnee_window, label37, "label37"); GLADE_HOOKUP_OBJECT (gnee_window, label38, "label38"); GLADE_HOOKUP_OBJECT (gnee_window, label39, "label39"); GLADE_HOOKUP_OBJECT (gnee_window, label35, "label35"); GLADE_HOOKUP_OBJECT (gnee_window, combo7, "combo7"); GLADE_HOOKUP_OBJECT (gnee_window, pause_k_combo, "pause_k_combo"); GLADE_HOOKUP_OBJECT (gnee_window, combo8, "combo8"); GLADE_HOOKUP_OBJECT (gnee_window, resume_k_combo, "resume_k_combo"); GLADE_HOOKUP_OBJECT (gnee_window, combo9, "combo9"); GLADE_HOOKUP_OBJECT (gnee_window, mark_k_combo, "mark_k_combo"); GLADE_HOOKUP_OBJECT (gnee_window, combo10, "combo10"); GLADE_HOOKUP_OBJECT (gnee_window, exec_k_combo, "exec_k_combo"); GLADE_HOOKUP_OBJECT (gnee_window, combo2, "combo2"); GLADE_HOOKUP_OBJECT (gnee_window, stop_k_combo, "stop_k_combo"); GLADE_HOOKUP_OBJECT (gnee_window, label80, "label80"); GLADE_HOOKUP_OBJECT (gnee_window, hbox35, "hbox35"); GLADE_HOOKUP_OBJECT (gnee_window, label81, "label81"); GLADE_HOOKUP_OBJECT (gnee_window, entry1, "entry1"); GLADE_HOOKUP_OBJECT (gnee_window, label82, "label82"); GLADE_HOOKUP_OBJECT (gnee_window, label83, "label83"); GLADE_HOOKUP_OBJECT (gnee_window, label84, "label84"); GLADE_HOOKUP_OBJECT (gnee_window, label85, "label85"); GLADE_HOOKUP_OBJECT (gnee_window, keymodifierpane, "keymodifierpane"); GLADE_HOOKUP_OBJECT (gnee_window, label74, "label74"); GLADE_HOOKUP_OBJECT (gnee_window, resolution, "resolution"); GLADE_HOOKUP_OBJECT (gnee_window, label78, "label78"); GLADE_HOOKUP_OBJECT (gnee_window, project_tab, "project_tab"); GLADE_HOOKUP_OBJECT_NO_REF (gnee_window, tooltips, "tooltips"); gtk_window_add_accel_group (GTK_WINDOW (gnee_window), accel_group); return gnee_window; } GtkWidget* create_fileselection1 (void) { GtkWidget *fileselection1; GtkWidget *ok_button1; GtkWidget *cancel_button1; fileselection1 = gtk_file_selection_new (_("Select File")); gtk_container_set_border_width (GTK_CONTAINER (fileselection1), 10); gtk_window_set_type_hint (GTK_WINDOW (fileselection1), GDK_WINDOW_TYPE_HINT_DIALOG); ok_button1 = GTK_FILE_SELECTION (fileselection1)->ok_button; gtk_widget_show (ok_button1); GTK_WIDGET_SET_FLAGS (ok_button1, GTK_CAN_DEFAULT); cancel_button1 = GTK_FILE_SELECTION (fileselection1)->cancel_button; gtk_widget_show (cancel_button1); GTK_WIDGET_SET_FLAGS (cancel_button1, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) ok_button1, "clicked", G_CALLBACK (on_ok_button1_clicked), NULL); g_signal_connect ((gpointer) cancel_button1, "clicked", G_CALLBACK (on_cancel_button1_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (fileselection1, fileselection1, "fileselection1"); GLADE_HOOKUP_OBJECT_NO_REF (fileselection1, ok_button1, "ok_button1"); GLADE_HOOKUP_OBJECT_NO_REF (fileselection1, cancel_button1, "cancel_button1"); return fileselection1; } GtkWidget* create_dialog1 (void) { GtkWidget *dialog1; GtkWidget *dialog_vbox2; GtkWidget *vbox17; GtkWidget *err_label; GtkWidget *table5; GtkWidget *label43; GtkWidget *label44; GtkWidget *descr_label; GtkWidget *solu_label; GtkWidget *label47; GtkWidget *err_nr_label; GtkWidget *dialog_action_area2; GtkWidget *okbutton2; dialog1 = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dialog1), _("Gnee error")); gtk_window_set_type_hint (GTK_WINDOW (dialog1), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox2 = GTK_DIALOG (dialog1)->vbox; gtk_widget_show (dialog_vbox2); vbox17 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox17); gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox17, TRUE, TRUE, 0); err_label = gtk_label_new (_("\ngnee error\n")); gtk_widget_show (err_label); gtk_box_pack_start (GTK_BOX (vbox17), err_label, FALSE, FALSE, 0); gtk_label_set_use_markup (GTK_LABEL (err_label), TRUE); table5 = gtk_table_new (3, 2, FALSE); gtk_widget_show (table5); gtk_box_pack_start (GTK_BOX (vbox17), table5, FALSE, FALSE, 0); label43 = gtk_label_new (_("Description")); gtk_widget_show (label43); gtk_table_attach (GTK_TABLE (table5), label43, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label43), TRUE); gtk_misc_set_alignment (GTK_MISC (label43), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label43), 6, 0); label44 = gtk_label_new (_("Solution")); gtk_widget_show (label44); gtk_table_attach (GTK_TABLE (table5), label44, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label44), TRUE); gtk_misc_set_alignment (GTK_MISC (label44), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label44), 6, 0); descr_label = gtk_label_new (_("none")); gtk_widget_show (descr_label); gtk_table_attach (GTK_TABLE (table5), descr_label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (descr_label), 0, 0.5); solu_label = gtk_label_new (_("none")); gtk_widget_show (solu_label); gtk_table_attach (GTK_TABLE (table5), solu_label, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (solu_label), 0, 0.5); label47 = gtk_label_new (_("Number")); gtk_widget_show (label47); gtk_table_attach (GTK_TABLE (table5), label47, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label47), TRUE); gtk_misc_set_alignment (GTK_MISC (label47), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label47), 6, 0); err_nr_label = gtk_label_new (_("none")); gtk_widget_show (err_nr_label); gtk_table_attach (GTK_TABLE (table5), err_nr_label, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (err_nr_label), 0, 0.5); dialog_action_area2 = GTK_DIALOG (dialog1)->action_area; gtk_widget_show (dialog_action_area2); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END); okbutton2 = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (okbutton2); gtk_dialog_add_action_widget (GTK_DIALOG (dialog1), okbutton2, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) okbutton2, "clicked", G_CALLBACK (on_okbutton2_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (dialog1, dialog1, "dialog1"); GLADE_HOOKUP_OBJECT_NO_REF (dialog1, dialog_vbox2, "dialog_vbox2"); GLADE_HOOKUP_OBJECT (dialog1, vbox17, "vbox17"); GLADE_HOOKUP_OBJECT (dialog1, err_label, "err_label"); GLADE_HOOKUP_OBJECT (dialog1, table5, "table5"); GLADE_HOOKUP_OBJECT (dialog1, label43, "label43"); GLADE_HOOKUP_OBJECT (dialog1, label44, "label44"); GLADE_HOOKUP_OBJECT (dialog1, descr_label, "descr_label"); GLADE_HOOKUP_OBJECT (dialog1, solu_label, "solu_label"); GLADE_HOOKUP_OBJECT (dialog1, label47, "label47"); GLADE_HOOKUP_OBJECT (dialog1, err_nr_label, "err_nr_label"); GLADE_HOOKUP_OBJECT_NO_REF (dialog1, dialog_action_area2, "dialog_action_area2"); GLADE_HOOKUP_OBJECT (dialog1, okbutton2, "okbutton2"); return dialog1; } GtkWidget* create_gnee_about (void) { GtkWidget *gnee_about; const gchar *authors[] = { "Henrik Sandklef ", "Jon-Erling Dahl ", NULL }; const gchar *documenters[] = { "None, interested in joing? ", "Send an email to xnee-devel@gnu.org", NULL }; const gchar *artists[] = { "Luis Santander", NULL }; /* TRANSLATORS: Replace this string with your names, one name per line. */ gchar *translators = "None, interested in joing? \nSend an email to xnee-devel@gnu.org"; GdkPixbuf *gnee_about_logo_pixbuf; gnee_about = gtk_about_dialog_new (); gtk_window_set_destroy_with_parent (GTK_WINDOW (gnee_about), TRUE); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG (gnee_about), VERSION); gtk_about_dialog_set_name (GTK_ABOUT_DIALOG (gnee_about), _("Gnee")); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (gnee_about), _("\302\2512003,2004,2005,2006 \nHenrik Sandklef, Jon-Erling Dahl\n\302\2512006 Luis Santander")); gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG (gnee_about), _("Gnee is the GUI frontend for GNU Xnee")); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG (gnee_about), _(" GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. \n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n \n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n \n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n \n Copyright (C) \n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see .\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n Copyright (C) \n This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free software, and you are welcome to redistribute it\n under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License. Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n.\n\n The GNU General Public License does not permit incorporating your program\ninto proprietary programs. If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library. If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License. But first, please read\n.\n\n\n\n GNU LESSER GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. \n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n 0. Additional Definitions. \n\n As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library. The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n 1. Exception to Section 3 of the GNU GPL.\n\n You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n 2. Conveying Modified Versions.\n\n If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n a) under this License, provided that you make a good faith effort to\n ensure that, in the event an Application does not supply the\n function or data, the facility still operates, and performs\n whatever part of its purpose remains meaningful, or\n\n b) under the GNU GPL, with none of the additional permissions of\n this License applicable to that copy.\n\n 3. Object Code Incorporating Material from Library Header Files.\n\n The object code form of an Application may incorporate material from\na header file that is part of the Library. You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n a) Give prominent notice with each copy of the object code that the\n Library is used in it and that the Library and its use are\n covered by this License.\n\n b) Accompany the object code with a copy of the GNU GPL and this license\n document.\n\n 4. Combined Works.\n\n You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n a) Give prominent notice with each copy of the Combined Work that\n the Library is used in it and that the Library and its use are\n covered by this License.\n\n b) Accompany the Combined Work with a copy of the GNU GPL and this license\n document.\n\n c) For a Combined Work that displays copyright notices during\n execution, include the copyright notice for the Library among\n these notices, as well as a reference directing the user to the\n copies of the GNU GPL and this license document.\n\n d) Do one of the following:\n\n 0) Convey the Minimal Corresponding Source under the terms of this\n License, and the Corresponding Application Code in a form\n suitable for, and under terms that permit, the user to\n recombine or relink the Application with a modified version of\n the Linked Version to produce a modified Combined Work, in the\n manner specified by section 6 of the GNU GPL for conveying\n Corresponding Source.\n\n 1) Use a suitable shared library mechanism for linking with the\n Library. A suitable mechanism is one that (a) uses at run time\n a copy of the Library already present on the user's computer\n system, and (b) will operate properly with a modified version\n of the Library that is interface-compatible with the Linked\n Version. \n\n e) Provide Installation Information, but only if you would otherwise\n be required to provide such information under section 6 of the\n GNU GPL, and only to the extent that such information is\n necessary to install and execute a modified version of the\n Combined Work produced by recombining or relinking the\n Application with a modified version of the Linked Version. (If\n you use option 4d0, the Installation Information must accompany\n the Minimal Corresponding Source and Corresponding Application\n Code. If you use option 4d1, you must provide the Installation\n Information in the manner specified by section 6 of the GNU GPL\n for conveying Corresponding Source.)\n\n 5. Combined Libraries.\n\n You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n a) Accompany the combined library with a copy of the same work based\n on the Library, uncombined with any other library facilities,\n conveyed under the terms of this License.\n\n b) Give prominent notice with the combined library that part of it\n is a work based on the Library, and explaining where to find the\n accompanying uncombined form of the same work.\n\n 6. Revised Versions of the GNU Lesser General Public License.\n\n The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n")); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (gnee_about), "www.gnu.org/software/xnee"); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (gnee_about), authors); gtk_about_dialog_set_documenters (GTK_ABOUT_DIALOG (gnee_about), documenters); gtk_about_dialog_set_artists (GTK_ABOUT_DIALOG (gnee_about), artists); gtk_about_dialog_set_translator_credits (GTK_ABOUT_DIALOG (gnee_about), translators); gnee_about_logo_pixbuf = create_pixbuf ("xnee.xpm"); gtk_about_dialog_set_logo (GTK_ABOUT_DIALOG (gnee_about), gnee_about_logo_pixbuf); g_signal_connect_swapped ((gpointer) gnee_about, "response", G_CALLBACK (on_gnee_about_response), GTK_OBJECT (gnee_about)); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (gnee_about, gnee_about, "gnee_about"); return gnee_about; } xnee-3.19/gnee/src/callbacks.c0000664000000000000000000011702612153732265013103 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2002, 2003, 2004, 2005, 2007, 2011, 2013 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifdef HAVE_CONFIG_H # include #endif #include #include "callbacks.h" #include "interface.h" #include "support.h" #include "recordables.h" #include "gnee_xnee.h" #include #include #include static int use_delay = 0; static gint delay = 0 ; extern xnee_data *ext_xd; extern gnee_xnee *ext_gx; extern GtkWidget *ext_gnee_window; static int x_offset = 0; static int y_offset = 0; static int use_offset = 0; const char *predef_string = "Predefined"; const char *events_string = "Events"; const char *replies_string = "Replies"; const char *requests_string = "Requests"; const char *errors_string = "Errors"; const char *exclude_list_string = "exclude_list"; const char *include_list_string = "include_list"; const char *combo_label1_string = "combo_label1"; const char *stop_k_combo_string = "stop_k_combo"; const char *pause_k_combo_string = "pause_k_combo"; const char *resume_k_combo_string = "resume_k_combo"; const char *mark_k_combo_string = "mark_k_combo"; const char *exec_k_combo_string = "exec_k_combo"; const char *stop_m_combo_string = "stop_m_combo"; const char *pause_m_combo_string = "pause_m_combo"; const char *resume_m_combo_string = "resume_m_combo"; const char *mark_m_combo_string = "mark_m_combo"; const char *exec_m_combo_string = "exec_m_combo"; const char *exclude_predef_store_string = "exclude_predef_store"; const char *include_predef_store_string = "include_predef_store"; const char *exclude_event_store_string = "exclude_event_store"; const char *include_event_store_string = "include_event_store"; const char *exclude_reply_store_string = "exclude_reply_store"; const char *include_reply_store_string = "include_reply_store"; const char *exclude_request_store_string = "exclude_request_store"; const char *include_request_store_string = "include_request_store"; const char *exclude_error_store_string = "exclude_error_store"; const char *include_error_store_string = "include_error_store"; const char *rec_file_text_string = "rec_file_text"; const char *rep_file_text_string = "rep_file_text"; GtkWidget* fs; gchar *filename; #define CHOOSE_XNEE_PROJECT_FILE 1 #define CHOOSE_XNEE_SESSION_FILE 2 #define FILE_TO_SAVE 1 #define FILE_TO_OPEN 2 static int file_choosen = 0; static int file_action = 0; int err_continue_clicked=0; int err_quit_clicked=0; int read_session_file() { GNEE_DEBUG(("read_session_file()\n")); if (fs==NULL) { fs = create_fileselection1 (); } file_choosen = CHOOSE_XNEE_SESSION_FILE; file_action=FILE_TO_OPEN; gtk_widget_show (fs); return GNEE_OK; } int write_session_file() { GNEE_DEBUG(("write_session_file()\n")); if (fs==NULL) { fs = create_fileselection1 (); } file_choosen = CHOOSE_XNEE_SESSION_FILE; file_action=FILE_TO_SAVE; gtk_widget_show (fs); return GNEE_OK; } int read_project_file() { GNEE_DEBUG(("read_project_file()\n")); if (fs==NULL) { fs = create_fileselection1 (); } file_choosen = CHOOSE_XNEE_PROJECT_FILE; file_action=FILE_TO_OPEN; gtk_widget_show (fs); return GNEE_OK; } int write_project_file() { GNEE_DEBUG(("write_project_file()\n")); if (fs==NULL) { fs = create_fileselection1 (); } file_choosen = CHOOSE_XNEE_PROJECT_FILE; file_action=FILE_TO_SAVE; gtk_widget_show (fs); return GNEE_OK; } int get_type(GtkWidget* combo_label) { int type = 0 ; gchar *selection; GNEE_DEBUG(("int get_type(GtkWidget* combo_label)\n")); selection = gtk_editable_get_chars (GTK_EDITABLE(combo_label), 0, -1); if (selection != 0) { if (strncmp(selection, predef_string, strlen(predef_string) ) == 0) { type = XNEE_PREDEF_EVENTS; } else if (strncmp(selection, events_string, strlen(events_string) ) == 0) { type = XNEE_EVENT; } else if (strncmp(selection, replies_string, strlen(replies_string)) == 0) { type = XNEE_REPLY; } else if (strncmp(selection, requests_string, strlen(requests_string)) == 0) { type = XNEE_REQUEST; } else if (strncmp(selection, errors_string, strlen(errors_string) ) == 0) { type = XNEE_ERROR; } } g_free(selection); return type; } void on_record_include_button_clicked (GtkButton *button, gpointer user_data) { GtkWidget *source_list; GtkWidget *destination_list; GtkWidget *combo_label; GNEE_DEBUG(("on_record_include_button_clicked\n")); source_list = lookup_widget(GTK_WIDGET(user_data), exclude_list_string); destination_list = lookup_widget(GTK_WIDGET(user_data), include_list_string); combo_label = lookup_widget(GTK_WIDGET(user_data), combo_label1_string); gnee_recordables_exclude(GTK_TREE_VIEW(source_list), GTK_TREE_VIEW(destination_list), ext_xd, get_type(combo_label)); } void on_record_exclude_button_clicked (GtkButton *button, gpointer user_data) { GtkWidget *source_list; GtkWidget *destination_list; GtkWidget *combo_label; GNEE_DEBUG(("on_record_exclude_button_clicked\n")); source_list = lookup_widget(GTK_WIDGET(user_data), include_list_string); destination_list = lookup_widget(GTK_WIDGET(user_data), exclude_list_string); combo_label = lookup_widget(GTK_WIDGET(user_data), combo_label1_string); gnee_recordables_include(GTK_TREE_VIEW(source_list), GTK_TREE_VIEW(destination_list), ext_xd, get_type(combo_label)); } void on_exclude_list_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { GtkWidget *source_list; GtkWidget *destination_list; GtkWidget *combo_label; GNEE_DEBUG(("on_exclude_list_row_activated\n")); source_list = lookup_widget(GTK_WIDGET(user_data), exclude_list_string); destination_list = lookup_widget(GTK_WIDGET(user_data), include_list_string); combo_label = lookup_widget(GTK_WIDGET(user_data), combo_label1_string); gnee_recordables_include(GTK_TREE_VIEW(source_list), GTK_TREE_VIEW(destination_list), ext_xd, get_type(combo_label)); } void on_include_list_row_activated (GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { GtkWidget *source_list; GtkWidget *destination_list; GtkWidget *combo_label; GNEE_DEBUG(("on_include_list_row_activated\n")); source_list = lookup_widget(GTK_WIDGET(user_data), include_list_string); destination_list = lookup_widget(GTK_WIDGET(user_data), exclude_list_string); combo_label = lookup_widget(GTK_WIDGET(user_data), combo_label1_string); gnee_recordables_exclude(GTK_TREE_VIEW(source_list), GTK_TREE_VIEW(destination_list), ext_xd, get_type(combo_label)); } void fake_on_include_list_row_activated (gpointer user_data, int type) { GNEE_DEBUG(("fake_on_include_list_row_activated\n")); } void on_combo_label1_changed (GtkEditable *editable, gpointer user_data) { GtkWidget *exclude_list; GtkWidget *include_list; GtkTreeStore *exclude_store = 0; GtkTreeStore *include_store = 0; gchar *selection; GtkWidget *combo_label; GNEE_DEBUG(("on_combo_label1_changed\n")); exclude_list = lookup_widget(GTK_WIDGET(user_data), exclude_list_string); include_list = lookup_widget(GTK_WIDGET(user_data), include_list_string); combo_label = lookup_widget(GTK_WIDGET(user_data), combo_label1_string); selection = gtk_editable_get_chars (GTK_EDITABLE(combo_label), 0, -1); if (selection != 0) { if (strcmp(selection, predef_string) == 0) { exclude_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), exclude_predef_store_string)); include_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), include_predef_store_string)); } else if (strcmp(selection, events_string) == 0) { exclude_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), exclude_event_store_string)); include_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), include_event_store_string)); } else if (strcmp(selection, replies_string) == 0) { exclude_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), exclude_reply_store_string)); include_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), include_reply_store_string)); } else if (strcmp(selection, requests_string) == 0) { exclude_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), exclude_request_store_string)); include_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), include_request_store_string)); } else if (strcmp(selection, errors_string) == 0) { exclude_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), exclude_error_store_string)); include_store = GTK_TREE_STORE (lookup_widget(GTK_WIDGET(user_data), include_error_store_string)); } if (exclude_store != NULL && include_store != NULL) { gtk_tree_view_set_model(GTK_TREE_VIEW(exclude_list), GTK_TREE_MODEL(exclude_store)); gtk_tree_view_set_model(GTK_TREE_VIEW(include_list), GTK_TREE_MODEL(include_store)); } g_free(selection); } } void on_new1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_new1_activate\n")); write_project_file(); } void on_open1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_open1_activate\n")); read_project_file(); } void on_save1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_save1_activate\n")); gx_save(); } void on_save_as1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_save_as1\n")); write_project_file(); } void on_quit1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_quit1_activate\n")); gnee_close_down(); } void on_cut1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_cut1_activate\n")); } void on_copy1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_copy1_activate\n")); } void on_paste1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_paste1_activate\n")); } void on_delete1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_delete1_activate\n")); } void on_about1_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *about_box; GtkWidget *about_label_1; char buf[256]; GNEE_DEBUG(("on_about1_activate\n")); about_box = lookup_widget(GTK_WIDGET(user_data), "gnee_about"); if (about_box == NULL) { about_box = create_gnee_about(); } about_label_1 = lookup_widget(GTK_WIDGET(about_box), "gnee_label"); if (about_label_1!=NULL) { sprintf(buf,"%s %s\n\n", XNEE_GUI, VERSION); strcat(buf, "is the graphical frontend to " PACKAGE "\n\n"); strcat(buf, PACKAGE " is Free Software released under GPL version 3\n"); gtk_label_set_markup((GtkLabel*)about_label_1, (gchar*)buf); } if (about_box!=NULL) { gtk_widget_show (about_box); } } void on_log_window_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_log_window\n")); } void on_record (GtkButton *button, gpointer user_data) { GtkWidget *window; window = lookup_widget(user_data, "gnee_window"); /* xnee_set_verbose(ext_xd); */ xnee_verbose((ext_xd, "verbose: %d", ext_xd->verbose)); usleep(1000*1000); if (window != NULL) { gtk_widget_hide(window); while (gtk_events_pending ()) { gtk_main_iteration (); } if (ext_xd != NULL) { gnee_recordable2xd(ext_gnee_window, "include_event_store" , XNEE_EVENT); gx_start_recording(ext_xd); } } gtk_widget_show_all(window); fflush(stdout); } void on_replay (GtkButton *button, gpointer user_data) { GtkWidget *window; window = lookup_widget(user_data, "gnee_window"); xnee_verbose((ext_xd, "verbose: %d", ext_xd->verbose)); usleep(1000*1000); /* xnee_set_verbose(ext_xd); */ if (window != NULL) { gtk_widget_hide(window); while (gtk_events_pending ()) { gtk_main_iteration (); } if (ext_xd != NULL) { /* This usleep is to prevent the * window iconification to disturbe * replay..... */ usleep(50*1000); gx_start_replaying(ext_xd); } } gtk_widget_show_all(window); } void on_spinbutton3_change_value (GtkSpinButton *spinbutton, gpointer user_data) { gint speed = 0 ; speed = gtk_spin_button_get_value_as_int(spinbutton); if (ext_xd != NULL) { gx_set_speed (speed); } } void on_wait_spinbutton_value_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_wait_spinbutton\n")); } void on_wait_checkbox_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_wait_checkbox\n")); use_delay = gtk_toggle_button_get_active(togglebutton); if (ext_xd != NULL) { if (use_delay) { gx_set_interval (ext_xd, delay); } else { gx_set_interval (ext_xd, 0); } } } void on_wait_button_value_change (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_wait_button\n")); } void on_wait_spinbutton_value_change (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_wait_spinbutton\n")); } void on_wait_spinbutto_change_value (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_wait_spinbutto\n")); } void on_wait_spinbutton_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_wait_spinbutton\n")); delay = gtk_spin_button_get_value_as_int(spinbutton); if (ext_xd != NULL) { if (use_delay) { gx_set_interval (ext_xd, delay); } else { gx_set_interval (ext_xd, 0); } } } void on_verbose_logging_checkbox_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_verbose_logging_checkbox_toggled\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_verbose(ext_xd); } else { gx_unset_verbose(ext_xd); } } } void on_spinbutton5_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_spinbutton5_change\n")); if (ext_xd != NULL) { gx_set_events_max(ext_xd,gtk_spin_button_get_value_as_int(spinbutton)); } } void on_spinbutton4_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_spinbutton4_change\n")); if (ext_xd != NULL) { gx_set_data_max(ext_xd,gtk_spin_button_get_value_as_int(spinbutton)); } } void on_spinbutton6_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_spinbutton6_change\n")); if (ext_xd != NULL) { gx_set_time_max(ext_xd,gtk_spin_button_get_value_as_int(spinbutton)); } } void on_ok_button1_clicked (GtkButton *button, gpointer user_data) { FILE *file; GtkEntry *file_text ; GNEE_DEBUG(("on_ok_button1_clicked\n")); if (filename!=NULL) { free (filename); } filename = strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(fs))); switch (file_choosen) { case CHOOSE_XNEE_PROJECT_FILE: if ( file_action == FILE_TO_SAVE ) { gx_set_rc_byname (ext_xd, filename); file = fopen (filename, "w"); gx_write_settings_to_file (ext_xd, file) ; fclose (file); file_choosen = 0; file_action = 0; } else if ( file_action == FILE_TO_OPEN) { file = fopen (filename, "rw"); xnee_refresh_ranges(ext_xd); gnee_remove_all_recordables(); gx_set_rc_byname (ext_xd, filename); if ( gx_get_rc_file (ext_xd) != NULL) { gx_add_resource (ext_xd ); } else { g_print (" Could not open project file %s\n", filename); } fclose (file); file_choosen = 0; file_action = 0; /* Make the GUI reflect all settings as read from file */ gx_set_xd_settings(); } else { ; } break; case CHOOSE_XNEE_SESSION_FILE: if ( file_action == FILE_TO_SAVE ) { file_text = (GtkEntry*) lookup_widget(GTK_WIDGET(ext_gnee_window), rec_file_text_string); gtk_entry_set_text (file_text, filename); xnee_set_out_name (ext_xd, filename); } else if ( file_action == FILE_TO_OPEN) { file_text = (GtkEntry*) lookup_widget(GTK_WIDGET(ext_gnee_window), rep_file_text_string); gtk_entry_set_text (file_text, filename); xnee_set_data_name(ext_xd, filename); /* Make the GUI reflect all settings as read from file */ gx_set_xd_settings(); } file_choosen=0; break; case 0: default: break; } gtk_widget_hide(fs); } void on_open_button_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_open_button\n")); read_project_file(); } void on_cancel_button1_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_cancel_button1\n")); gtk_widget_hide(fs); } void on_sfile_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_sfile_activate\n")); } void on_save_button_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_save_button\n")); if (ext_xd != NULL) { FILE *file; char *fname = gx_get_rc_name(ext_xd); if (fname == NULL) { write_project_file(); } else { file = fopen (fname, "w"); gx_write_settings_to_file (ext_xd, file) ; fclose (file); } } } void on_about_ok_button_clicked (GtkButton *button, gpointer user_data) { GtkWidget *about_box; GNEE_DEBUG(("on_about_ok\n")); about_box = lookup_widget(GTK_WIDGET(user_data), "gnee_about"); if (about_box==NULL) { about_box = create_gnee_about(); } if (about_box!=NULL) { gtk_widget_hide (about_box); } } static void combo_change_helper(gpointer gw, const char *combo_name, int mod_or_key, int grab_action) { gchar *k_selection = NULL; GtkWidget *k_combo = NULL; #define MOD_KEY_SIZE 128 #define COMBO_NAME_SIZE 50 char mod_key[MOD_KEY_SIZE]; char k_combo_name[COMBO_NAME_SIZE] ; GNEE_DEBUG(("combo_change_helper\n")); GNEE_DEBUG((" combo .............. \n")); switch (grab_action) { case XNEE_GRAB_STOP: GNEE_DEBUG((" stop \n")); strncpy (k_combo_name, stop_k_combo_string, COMBO_NAME_SIZE); break; case XNEE_GRAB_PAUSE: GNEE_DEBUG((" pause \n")); strncpy (k_combo_name, pause_k_combo_string, COMBO_NAME_SIZE); break; case XNEE_GRAB_RESUME: GNEE_DEBUG((" resume \n")); strncpy (k_combo_name, resume_k_combo_string, COMBO_NAME_SIZE); break; case XNEE_GRAB_INSERT: GNEE_DEBUG((" insert \n")); strncpy (k_combo_name, mark_k_combo_string, COMBO_NAME_SIZE); break; case XNEE_GRAB_EXEC: GNEE_DEBUG((" exec \n")); strncpy (k_combo_name, exec_k_combo_string, COMBO_NAME_SIZE); break; default: GNEE_DEBUG(("NO action choosen\n")); strncpy (k_combo_name, "", COMBO_NAME_SIZE); } if (strlen (k_combo_name) != 0) { k_combo = lookup_widget(GTK_WIDGET(gw), k_combo_name); k_selection = gtk_editable_get_chars (GTK_EDITABLE(k_combo), 0, -1); } if (strlen(k_selection)!=0) { if (strcmp (k_selection, "None")==0) { GNEE_DEBUG((" combo no 1 \n")); } else { strncpy (mod_key, k_selection, MOD_KEY_SIZE); GNEE_DEBUG(("combo_change_helper: mod/key=%d type=%.2d %s \n", mod_or_key, grab_action, mod_key)); gx_set_key (ext_xd, grab_action, mod_key); } } } void on_stop_m_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_stop_m_combo_changed\n")); combo_change_helper(user_data, stop_m_combo_string, XNEE_GRAB_MODIFIER, XNEE_GRAB_STOP ); } void on_stop_k_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_stop_k\n")); combo_change_helper(user_data, stop_k_combo_string, XNEE_GRAB_KEY, XNEE_GRAB_STOP ); } void on_pause_m_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_pause_m\n")); combo_change_helper(user_data, pause_m_combo_string, XNEE_GRAB_MODIFIER, XNEE_GRAB_PAUSE ); } void on_resume_m_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_resume_m\n")); combo_change_helper(user_data, resume_m_combo_string, XNEE_GRAB_MODIFIER, XNEE_GRAB_RESUME ); } void on_mark_m_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_mark_m\n")); combo_change_helper(user_data, mark_m_combo_string, XNEE_GRAB_MODIFIER, XNEE_GRAB_INSERT ); } void on_exec_m_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_exec_m\n")); combo_change_helper(user_data, exec_m_combo_string, XNEE_GRAB_MODIFIER, XNEE_GRAB_EXEC ); } void on_pause_k_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_pause_k\n")); combo_change_helper(user_data, pause_k_combo_string, XNEE_GRAB_KEY, XNEE_GRAB_PAUSE ); } void on_resume_k_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_resume_k\n")); combo_change_helper(user_data, resume_k_combo_string, XNEE_GRAB_KEY, XNEE_GRAB_RESUME ); } void on_mark_k_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_mark_k\n")); combo_change_helper(user_data, mark_k_combo_string, XNEE_GRAB_KEY, XNEE_GRAB_INSERT ); } void on_exec_k_combo_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_exec_k\n")); combo_change_helper(user_data, exec_k_combo_string, XNEE_GRAB_KEY, XNEE_GRAB_EXEC ); } void on_err_cont_button_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_err_cont\n")); } void on_err_quit_button_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_err_quit\n")); } void on_cancelbutton1_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_cancelbutton1_clicked\n")); err_continue_clicked=1; err_quit_clicked=0; gx_undisplay_errror(); } void on_okbutton1_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_okbutton1_clicked\n")); } void on_rep_menu_open_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_rep_menu\n")); read_session_file(); } void on_open_project_file2_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_open_project\n")); read_project_file(); } void on_set_session_file1_activate (GtkMenuItem *menuitem, gpointer user_data) { GNEE_DEBUG(("on_set_session\n")); write_session_file(); } void on_checkbutton10_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_checkbutton10_toggled\n")); if (gtk_toggle_button_get_active(togglebutton)) { gx_set_using_rec_display(ext_gx); } else { gx_unset_using_rec_display(ext_gx); } } void on_rec_file_sel_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_rec_file\n")); write_session_file(); } void on_rep_disp_cb_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_rep_disp\n")); if (gtk_toggle_button_get_active(togglebutton)) { gx_set_using_rep_display(ext_gx); } else { gx_unset_using_rep_display(ext_gx); } } void on_rep_disp_text_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_rep_disp\n")); } void on_button11_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_button11_clicked\n")); read_session_file(); } void on_max_thresh_sb_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_max_thresh\n")); if (ext_xd != NULL) { gx_set_max_threshold(ext_xd, gtk_spin_button_get_value_as_int(spinbutton)); } } void on_min_thresh_sb_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_min_thresh\n")); if (ext_xd != NULL) { gx_set_min_threshold(ext_xd, gtk_spin_button_get_value_as_int(spinbutton)); } } void on_tot_thresh_sb_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_tot_thresh\n")); if (ext_xd != NULL) { gx_set_tot_threshold(ext_xd, gtk_spin_button_get_value_as_int(spinbutton)); } } void on_spinbutton11_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_spinbutton11_change\n")); if (ext_xd != NULL) { gx_set_events_max(ext_xd,gtk_spin_button_get_value_as_int(spinbutton)); } } void on_spinbutton12_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_spinbutton12_change\n")); if (ext_xd != NULL) { gx_set_data_max(ext_xd,gtk_spin_button_get_value_as_int(spinbutton)); } } void on_spinbutton13_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_spinbutton13_change\n")); if (ext_xd != NULL) { gx_set_time_max(ext_xd,gtk_spin_button_get_value_as_int(spinbutton)); } } void on_spinbutton7_change_value (GtkSpinButton *spinbutton, gpointer user_data) { GNEE_DEBUG(("on_spinbutton7_change\n")); } void on_speed_spin_change_value (GtkSpinButton *spinbutton, gpointer user_data) { gint speed = 0 ; GNEE_DEBUG(("on_speed_spin\n")); speed = gtk_spin_button_get_value_as_int(spinbutton); if (ext_xd != NULL) { gx_set_speed (speed); } } void on_rec_disp_text_changed (GtkEditable *editable, gpointer user_data) { GNEE_DEBUG(("on_rec_disp\n")); } void on_skip_sync_cb_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_skip_sync ")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { GNEE_DEBUG((" SYNC ON")); gx_set_sync (ext_xd); } else { GNEE_DEBUG((" SYNC OFF ")); gx_unset_sync (ext_xd); } } GNEE_DEBUG((" xd says=%d\n", xnee_get_sync(ext_xd))); } void on_force_rep_cb_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_force_rep\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_force_replay (ext_xd); } else { gx_unset_force_replay (ext_xd); } } } void on_okbutton2_clicked (GtkButton *button, gpointer user_data) { GNEE_DEBUG(("on_okbutton2_clicked\n")); err_continue_clicked=0; err_quit_clicked=1; gx_undisplay_errror(); } void on_speed_toggle_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_speed_toggle\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_use_speed(1); } else { gx_set_use_speed(0); } } } void on_radiobutton1_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_radiobutton1_toggled\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_all_clients(); } } } void on_radiobutton2_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_radiobutton2_toggled\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_unset_all_clients(); } } } void on_xnee_format_rb_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_xnee_format\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_xnee_printout(); } } } void on_human_format_rb_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_human_format\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_human_printout(); } } } void on_gnee_window_destroy (GtkObject *object, gpointer user_data) { GNEE_DEBUG(("on_gnee_window\n")); gnee_close_down(); } void on_stderr_fb_b_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_stderr_fb\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_stderr_feedback(); } } } void on_no_fb_b_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_no_fb\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_no_feedback(); } } } void on_xosd_fb_b_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("on_xosd_fb\n")); if (ext_xd != NULL) { if (gtk_toggle_button_get_active(togglebutton)) { gx_set_xosd_feedback(); } } } void on_replay_settings_box_map (GtkWidget *widget, gpointer user_data) { /* printf ("map\n"); */ ; } void on_record_settings_box_map (GtkWidget *widget, gpointer user_data) { ; } void on_button5_clicked (GtkButton *button, gpointer user_data) { GtkWidget *window; if (user_data) { window = lookup_widget(user_data, "gnee_about"); } else { return; } if (window) { gtk_widget_hide (window); } } void on_new_win_check_toggled (GtkToggleButton *togglebutton, gpointer user_data) { int use_recall; GNEE_DEBUG(("on_new_win_checkbox\n")); use_recall = gtk_toggle_button_get_active(togglebutton); if (ext_xd != NULL) { if (use_recall) { gx_set_recall_window_pos(ext_xd); } else { gx_unset_recall_window_pos(ext_xd); } } } void on_x_offs_spin_changed (GtkSpinButton *spinbutton, gpointer user_data) { x_offset = gtk_spin_button_get_value_as_int(spinbutton); if (ext_xd != NULL) { if (use_offset) { gx_set_replay_offset_x (ext_xd, x_offset); } } } void on_y_offs_spin_changed (GtkSpinButton *spinbutton, gpointer user_data) { y_offset = gtk_spin_button_get_value_as_int(spinbutton); if (ext_xd != NULL) { if (use_offset) { gx_set_replay_offset_y (ext_xd, y_offset); } } } void on_offset_toggle_toggled (GtkToggleButton *togglebutton, gpointer user_data) { GNEE_DEBUG(("%s\n", __func__)); use_offset = gtk_toggle_button_get_active(togglebutton); if (ext_xd != NULL) { if (use_offset) { gx_set_replay_offset_x(ext_xd, x_offset); gx_set_replay_offset_y(ext_xd, y_offset); } else { gx_set_replay_offset_x(ext_xd, 0); gx_set_replay_offset_y(ext_xd, 0); } } } gboolean on_gnee_about_close (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { printf ("Close\n"); return FALSE; } void on_gnee_about_response (GtkDialog *dialog, gint response_id, gpointer user_data) { GtkWidget *window = user_data; if (window != NULL ) { gtk_widget_hide (window); } } xnee-3.19/gnee/src/recordables.c0000664000000000000000000003140212153732265013442 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2002, 2003, 2004, 2005, 2011, 2013 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "recordables.h" #include "support.h" #include "gnee_xnee.h" #include "libxnee/xnee.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_xinput.h" #define GNEE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) #define CHECK_EQUALITY(a,b) ( (a!=NULL) && (b!=NULL) && (strlen(a)==strlen(b)) && (strcmp(a,b)==0) ) extern xnee_data *ext_xd; extern GtkWidget *ext_gnee_window; static int predef_events[10]; struct data_description gnee_predef_events[]= { {0,"Mouse", "All mouse events"}, {1,"Keyboard", "All keyboard events"}, {-1,NULL, ""} } ; void move_between_lists(GtkTreeView* source_list, GtkTreeView* destination_list, xnee_data* xd, int type, gboolean include); void create_recordable_list(GtkWidget* gnee_window, struct data_description*, char* exclude_store_name, char* include_store_name); void store_predef_str(char *selection_value) { int i ; for (i=0;gnee_predef_events[i].data_nr!=-1;i++) { if (CHECK_EQUALITY(selection_value, gnee_predef_events[i].data_name)) { predef_events[i]=1; break; } } } void remove_predef_str(char *selection_value) { int i ; for (i=0;gnee_predef_events[i].data_nr!=-1;i++) { if (CHECK_EQUALITY(selection_value, gnee_predef_events[i].data_name)) { predef_events[i]=0; break; } } } void gnee_recordables_create(GtkWidget* gnee_window) { create_recordable_list (gnee_window, gnee_predef_events, "exclude_predef_store", "include_predef_store"); create_recordable_list (gnee_window, xnee_get_event_names(), "exclude_event_store", "include_event_store"); create_recordable_list (gnee_window, xnee_get_error_names(), "exclude_error_store", "include_error_store"); create_recordable_list (gnee_window, xnee_get_reply_names(), "exclude_reply_store", "include_reply_store"); create_recordable_list (gnee_window, xnee_get_request_names(), "exclude_request_store", "include_request_store"); } void gnee_recordables_include(GtkTreeView* source_list, GtkTreeView* destination_list, xnee_data* xd, int type) { move_between_lists(source_list, destination_list, xd, type, TRUE); } void gnee_recordables_exclude(GtkTreeView* source_list, GtkTreeView* destination_list, xnee_data* xd, int type) { move_between_lists(source_list, destination_list, xd, type, FALSE); } void move_between_lists(GtkTreeView* source_list, GtkTreeView* destination_list, xnee_data* xd, int type, gboolean include) { GtkTreeSelection *selection; char *selection_value; gboolean selected; GtkTreeModel *model; GtkTreeIter iterator; GtkTreeStore *store; /* gint new_order; */ selection = gtk_tree_view_get_selection(source_list); selected = gtk_tree_selection_get_selected(selection, &model, &iterator); if (selected) { gtk_tree_model_get(model, &iterator, 0, &selection_value, -1); store = GTK_TREE_STORE(model); gtk_tree_store_remove(store, &iterator); store = GTK_TREE_STORE(gtk_tree_view_get_model (destination_list)); gtk_tree_store_append(store, &iterator, NULL); gtk_tree_store_set(store, &iterator, 0, selection_value, -1); if (xd == NULL) { GNEE_DEBUG(("xd is null\n")); } if (include) { GNEE_DEBUG(("will include '%s' %d \n", selection_value, type)); if (type == XNEE_PREDEF_EVENTS ) { store_predef_str(selection_value); } else { xnee_add_range_str (xd, type, selection_value); } } else { GNEE_DEBUG(("will exclude '%s' %d \n", selection_value, type)); if (type == XNEE_PREDEF_EVENTS ) { remove_predef_str(selection_value); } else { xnee_rem_data_from_range_str (xd, -1, selection_value); } } g_free(selection_value); } } void create_recordable_list(GtkWidget* gnee_window, struct data_description* data_names, char* exclude_store_name, char* include_store_name) { GtkTreeStore *store; GtkTreeIter iterator; int i; store = gtk_tree_store_new (1, G_TYPE_STRING); i = 0; while (data_names[i].data_nr != -1) { gtk_tree_store_append(store, &iterator, NULL); gtk_tree_store_set(store, &iterator, 0, data_names[i].data_name, -1); i++; } GNEE_HOOKUP_OBJECT(gnee_window, store, exclude_store_name); store = gtk_tree_store_new (1, G_TYPE_STRING); GNEE_HOOKUP_OBJECT(gnee_window, store, include_store_name); } void gnee_move_recordable(GtkWidget* gnee_window, char* data_name, char* exclude_store_name, char* include_store_name, int type, int delete) { GtkTreeStore *excl_store; GtkTreeStore *incl_store; GtkTreeIter iter; GtkTreeIter incl_iter; int valid; gint row_count=0; excl_store = g_object_get_data (G_OBJECT(gnee_window), exclude_store_name); valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(excl_store), &iter); incl_store = g_object_get_data (G_OBJECT(gnee_window), include_store_name); while (valid) { gchar *str_data; gchar *str_data2; gtk_tree_model_get (GTK_TREE_MODEL(excl_store), &iter, 0, &str_data, -1); GNEE_DEBUG((" comparing '%s' '%s'\n", data_name, str_data)); if (strncmp(str_data, data_name, strlen(str_data))==0) { gtk_tree_store_remove(GTK_TREE_STORE(excl_store), &iter); GNEE_DEBUG((" EXCL move_recordable %s %s;\n", data_name, str_data)); while (valid) { valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(incl_store), &incl_iter); } if (delete) { gtk_tree_model_get (GTK_TREE_MODEL(incl_store), &incl_iter, 0, &str_data2, -1); GNEE_DEBUG((" INCL move_recordable %s \n", str_data2)); } gtk_tree_store_append(GTK_TREE_STORE(incl_store), &incl_iter, NULL); gtk_tree_store_set(GTK_TREE_STORE(incl_store), &incl_iter, 0, str_data, -1); if (delete) { xnee_rem_data_from_range_str (ext_xd, type, str_data); } else { xnee_add_range_str (ext_xd, type, str_data); } } g_free (str_data); row_count++; valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(excl_store), &iter); } } void gnee_recordable2xd(GtkWidget* gnee_window, char* include_store_name, int type) { GtkTreeStore *incl_store; GtkTreeIter incl_iter; int valid = 1 ; int incl_valid = 0; gint row_count=0; xnee_verbose((ext_xd," read_recordable (,,..);\n")); incl_store = g_object_get_data (G_OBJECT(gnee_window), include_store_name); incl_valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(incl_store), &incl_iter); while (valid && incl_store && incl_valid) { gchar *str_data; gtk_tree_model_get (GTK_TREE_MODEL(incl_store), &incl_iter, 0, &str_data, -1); xnee_verbose((ext_xd,"Found a string: %s\n", str_data)); xnee_add_range_str (ext_xd, type, str_data); g_free (str_data); row_count++; valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(incl_store), &incl_iter); } int i ; for (i=0;gnee_predef_events[i].data_nr!=-1;i++) { /* Check if we are to record the event */ if (predef_events[i]==1) { /* Add it to record */ int ret; ret = xnee_parse_range (ext_xd, XNEE_DEVICE_EVENT, gnee_predef_events[i].data_name); #ifdef XNEE_XINPUT_SUPPORT /* If the data_nr is: 0 => request mouse recording 1 => request keyboard recording */ if (gnee_predef_events[i].data_nr==0) { xnee_xinput_request_mouse(ext_xd); } else if (gnee_predef_events[i].data_nr==1) { xnee_xinput_request_keyboard(ext_xd); } #endif /* XNEE_XINPUT_SUPPORT */ } else { /* We shall nott record it */ #ifdef XNEE_XINPUT_SUPPORT /* un-request mouse or keyboard */ if (gnee_predef_events[i].data_nr==0) { xnee_xinput_unrequest_mouse(ext_xd); } else if (gnee_predef_events[i].data_nr==1) { xnee_xinput_unrequest_keyboard(ext_xd); } #endif /* XNEE_XINPUT_SUPPORT */ } } } void gnee_remove_type(GtkWidget* gnee_window, char* exclude_store_name, char* include_store_name, int type) { GtkTreeStore *excl_store; GtkTreeStore *incl_store; GtkTreeIter iter; GtkTreeIter incl_iter; int valid; gint row_count=0; excl_store = g_object_get_data (G_OBJECT(gnee_window), exclude_store_name); incl_store = g_object_get_data (G_OBJECT(gnee_window), include_store_name); valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(excl_store), &iter); while (valid) { gchar *str_data; gchar *str_data2; gtk_tree_model_get (GTK_TREE_MODEL(excl_store), &iter, 0, &str_data, -1); GNEE_DEBUG((" REMOVING '%s' '%s'\n", str_data)); gtk_tree_store_remove(GTK_TREE_STORE(excl_store), &iter); while (valid) { valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(incl_store), &incl_iter); } gtk_tree_model_get (GTK_TREE_MODEL(incl_store), &incl_iter, 0, &str_data2, -1); GNEE_DEBUG((" INCL move_recordable %s \n", str_data2)); gtk_tree_store_append(GTK_TREE_STORE(incl_store), &incl_iter, NULL); gtk_tree_store_set(GTK_TREE_STORE(incl_store), &incl_iter, 0, str_data, -1); g_free (str_data); g_free (str_data2); row_count++; valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(excl_store), &iter); } } void gnee_remove_all_recordables() { GNEE_DEBUG(("Removing events **************** \n")); gnee_remove_type(ext_gnee_window, "include_predef_store", "exclude_predef_store", XNEE_PREDEF_EVENTS); gnee_remove_type(ext_gnee_window, "include_event_store", "exclude_event_store", XNEE_EVENT); xnee_verbose((ext_xd, "removing request\n")); gnee_remove_type(ext_gnee_window, "include_request_store", "exclude_request_store", XNEE_REQUEST); xnee_verbose((ext_xd, "removing error\n")); gnee_remove_type(ext_gnee_window, "include_error_store", "exclude_error_store", XNEE_ERROR); xnee_verbose((ext_xd, "removing reply\n")); gnee_remove_type(ext_gnee_window, "include_reply_store", "exclude_reply_store", XNEE_REPLY); } xnee-3.19/gnee/src/support.h0000664000000000000000000000372210444064420012672 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include /* * Standard gettext macros. */ #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) # define Q_(String) g_strip_context ((String), gettext (String)) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define Q_(String) g_strip_context ((String), (String)) # define N_(String) (String) #endif /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps used in the interface. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename); /* This is used to create the pixbufs used in the interface. */ GdkPixbuf* create_pixbuf (const gchar *filename); /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description); xnee-3.19/gnee/src/main.c0000664000000000000000000001535212154177623012111 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2002, 2003, 2004, 2005, 2007, 2011, 2013 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ /* * Initial main.c file generated by Glade. Edit as required. * Glade will not overwrite this file. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include "interface.h" #include "support.h" #include "recordables.h" #include #include #include #include #define GNEE "gnee" xnee_data *ext_xd; gnee_xnee *ext_gx; GtkWidget *ext_gnee_window; const char *version_string = "--version" ; int main (int argc, char *argv[]) { GtkWidget *gnee_window; GtkWidget *exclude_list; GtkTreeStore *exclude_store; /* GtkTreeIter exclude_iterator; */ GtkCellRenderer *exclude_list_renderer; GtkTreeViewColumn *exclude_list_column; GtkWidget *include_list; GtkTreeStore *include_store; /* GtkTreeIter include_iterator; */ GtkCellRenderer *include_list_renderer; GtkTreeViewColumn *include_list_column; GList *combo_list = NULL; GtkWidget *event_group_combo; char *default_tmp_file; int i ; xnee_data *xd; gnee_xnee gx; ext_gx = &gx; gx_init_gx(ext_gx); #ifdef ENABLE_NLS bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif gtk_set_locale (); gtk_init (&argc, &argv); /* printf("Adding: %s\n", PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); */ add_pixmap_directory (PACKAGE_DATA_DIR "/pixmaps"); add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); /* * The following code was added by Glade to create one of each component * (except popup menus), just so that you see something after building * the project. Delete any components that you don't want shown initially. */ gnee_window = create_gnee_window (); ext_gnee_window = gnee_window; /* gnee_settings = gnee_settings_new(); */ gnee_recordables_create(gnee_window); exclude_list = lookup_widget(gnee_window, "exclude_list"); /* exclude_store = gnee_settings->record_settings->events->exclude_store; */ exclude_store = gtk_tree_store_new(1, G_TYPE_STRING); exclude_list_renderer = gtk_cell_renderer_text_new (); exclude_list_column = gtk_tree_view_column_new_with_attributes ("Exclude when recording", exclude_list_renderer, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW (exclude_list), exclude_list_column); gtk_tree_view_set_model(GTK_TREE_VIEW(exclude_list), GTK_TREE_MODEL(exclude_store)); include_list = lookup_widget(gnee_window, "include_list"); /* include_store = gnee_settings->record_settings->events->exclude_store; */ include_store = gtk_tree_store_new(1, G_TYPE_STRING); include_list_renderer = gtk_cell_renderer_text_new (); include_list_column = gtk_tree_view_column_new_with_attributes ("Include when recording", include_list_renderer, "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(include_list), include_list_column); gtk_tree_view_set_model(GTK_TREE_VIEW(include_list), GTK_TREE_MODEL(include_store)); combo_list = g_list_append(combo_list, _("Predefined")); combo_list = g_list_append(combo_list, _("Events")); combo_list = g_list_append(combo_list, _("Replies")); combo_list = g_list_append(combo_list, _("Requests")); combo_list = g_list_append(combo_list, _("Errors")); event_group_combo = lookup_widget(gnee_window, "event_group_combo"); gtk_combo_set_popdown_strings(GTK_COMBO(event_group_combo), combo_list); gtk_widget_show (gnee_window); xd = xnee_new_xnee_data(); ext_xd = xd; /* Set the program name */ xnee_set_program_name (xd, XNEE_GUI); /* Set the cli parameters */ xnee_set_application_parameters (xd, argv); /* scan through the args .... */ for (i=0;i True Gnee GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False 640 480 True False xnee.xpm True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True gtk-new True True gtk-open True True gtk-save True True gtk-save-as True True True gtk-quit True True _View True True _Log window True False True _Help True True _About True 0 False False True False 0 True Create new Xnee Project File gtk-new True GTK_RELIEF_NORMAL True 0 False False True Open Xnee Project File gtk-open True GTK_RELIEF_NORMAL True 0 False False True Save settings to Xnee Project File gtk-save True GTK_RELIEF_NORMAL True 0 False False True Start recording gtk-media-record True GTK_RELIEF_NORMAL True 0 False False True Start replay gtk-media-play True GTK_RELIEF_NORMAL True 0 False False True False Stop gtk-stop True GTK_RELIEF_NORMAL True 0 False False 0 False True 4 True True True True GTK_POS_TOP False False 4 True False 4 True False 0 True False 0 True <b>Logging</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 0 True Turn on verbose printout (to stderr) True Verbose logging True GTK_RELIEF_NORMAL True False False True 0 False False 0 False False 0 True True True False 0 True <b>Delayed start</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 4 True Delay start of recording/replaying True Seconds True GTK_RELIEF_NORMAL True False False True 0 False False True True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 100 1 10 10 0 False False 0 False False 0 True True True False 0 True <b>Feedback</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True No feedback at all True none True GTK_RELIEF_NORMAL True False False True 0 False False True Enables XOSD feedback True xosd True GTK_RELIEF_NORMAL True False False True no_fb_b 0 False False True True stderr True GTK_RELIEF_NORMAL True False False True no_fb_b 0 False False 0 True True 0 False False True False 0 True <b>Distribution</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 4 True False 4 2 True False 4 True Distribute to display: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True Not used in this release True True True 0 True * False 0 True True 0 False True True True GTK_POLICY_AUTOMATIC GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True Not used in this release True False False False True False False False 0 True True 4 True True 4 True GTK_BUTTONBOX_START 0 True Not used in this release True True gtk-add True GTK_RELIEF_NORMAL True True Not used in this release True True gtk-remove True GTK_RELIEF_NORMAL True 0 False True 0 True True 4 True False 0 4 True Not used in this release True Distribute when recording True GTK_RELIEF_NORMAL True False False True 0 False False 0 False False 0 True True False False True General settings False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True False 0 4 True False 0 True False 0 True <b>Display</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 4 True Set the display to record (default :0) True Record from display: True GTK_RELIEF_NORMAL True False False True 0 False False True Set the display to record from True True True 0 True * False 0 True True 0 False False 0 True True 4 True False 0 True <b>Record to session file</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 0 True Set the file to store the recorded data in True False True 0 True * False 0 True True 4 True True ... True GTK_RELIEF_NORMAL True 0 False False 0 True True 0 True True True 1 3 True 0 20 4 True False 0 True <b>Clients</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 0 72 True Record all clients (current and present) True Record all clients True GTK_RELIEF_NORMAL True False False True 0 False False True Record only future clients (not present) True Record only future clients True GTK_RELIEF_NORMAL True False False True radiobutton1 0 False False 0 False False 0 1 0 1 True False 0 True <b>Printout format</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True This has to be used to be able to replay later True Xnee True GTK_RELIEF_NORMAL True False False True 0 False False True A (bit) more friendly print format True human True GTK_RELIEF_NORMAL True False False True xnee_format_rb 0 False False 2 3 0 1 fill True False 0 True <b>Recording limits</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True False 0 True 3 2 False 0 0 True Events to record: False False GTK_JUSTIFY_LEFT False False 0 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Limit the number of events to record (-1 for no limit) True 1 0 False GTK_UPDATE_ALWAYS False False -1 -1 1000000 1 10 10 1 2 0 1 True Data to record: False False GTK_JUSTIFY_LEFT False False 0 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True Limit the total number of data (events, requests, errors, replies) to record (-1 means no limit) True 1 0 False GTK_UPDATE_ALWAYS False False -1 -1 1000000 1 10 10 1 2 1 2 True Time (secs): False False GTK_JUSTIFY_LEFT False False 0 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Limit the time to record (NOT IMPLEMENTED YET!!!!) True 1 0 False GTK_UPDATE_ALWAYS False False 0 0 10000 1 10 10 1 2 2 3 0 False False 0 True True 1 2 0 1 fill 0 False False 4 True False 0 True <b>Recordables</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 4 True False 0 True False True False True False True True False True 0 True * False True GTK_SELECTION_BROWSE 0 True True 0 False False True False 0 True False 4 True Exclude: True False GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_POLICY_AUTOMATIC GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True False False False 0 True True 0 True True 4 True GTK_BUTTONBOX_END 0 True True True GTK_RELIEF_NORMAL True True gtk-go-forward 4 0.5 0.5 0 0 True True True GTK_RELIEF_NORMAL True True gtk-go-back 4 0.5 0.5 0 0 16 False False True False 4 True Include: True False GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True GTK_POLICY_AUTOMATIC GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True False False False 0 True True 0 True True 0 True True 0 True True 0 True True 0 True True False True 8 Record settings False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 4 True False 0 55 True False 0 True False 0 True False 0 True False 0 True <b>Display</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 4 True Set the display to replay to (default localhost:0) True Replay to display: True GTK_RELIEF_NORMAL True False False True 0 False False True Set the display name to replay to True True True 0 True * False 0 True True 0 False False 0 True True True False 0 True <b>Various</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 4 True Enable replay speed True Replay with speed: True GTK_RELIEF_NORMAL True False False True 0 False False True Set replay speed (in percent) True 1 0 True GTK_UPDATE_ALWAYS False False 100 0 10000 1 10 100 0 True True 0 True True True Make sure windows pop up at the same position as when recorded True New window adjustment True GTK_RELIEF_NORMAL True False False True 0 False False True False 0 True Enable replay speed True X,Y offset True GTK_RELIEF_NORMAL True False False True 0 False False True Set replay speed (in percent) True 1 0 True GTK_UPDATE_ALWAYS False False 0 -20000 20000 1 10 100 0 True True True Set replay speed (in percent) True 1 0 True GTK_UPDATE_ALWAYS False False 0 -20000 20000 1 10 100 0 True True 0 False False 0 True True 0 False False 4 13 True True False 0 True False 0 True <b>Replay from session file</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True Set the file to use to read recorded data from True False True 0 True * False 0 True True 8 True True ... True GTK_RELIEF_NORMAL True 0 False False 0 True True 0 True True 0 True True 0 True True True False 0 True False 0 True <b>Thresholds</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 3 2 False 0 0 True Maximum False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Minimum False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True Total False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 1000 1 10 10 1 2 0 1 True True 1 0 False GTK_UPDATE_ALWAYS False False 1 -1000 1000 1 10 10 1 2 1 2 True True 1 0 False GTK_UPDATE_ALWAYS False False 1 0 1000 1 10 10 1 2 2 3 0 True True 0 True True True False 0 True False 0 True <b>Synchronisation handling</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True Synchronisation is used to make sure that the replaying is in sync with the recorded session (read the manual) True Use synchronisation True GTK_RELIEF_NORMAL True False False True 0 False False 4 True If Xnee considers the replaying to be out of sync you can force Xnee to continue anyway True Force replay even when not synchronized True GTK_RELIEF_NORMAL True False False True 0 False False 0 True True 0 True True 0 False False True False 0 True <b>Replay file</b> False True GTK_JUSTIFY_LEFT False False 0 0 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 4 True False 0 True True GTK_POLICY_AUTOMATIC GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT True True False False False True False False False 0 True True 4 True GTK_BUTTONBOX_START 0 True True True gtk-delete True GTK_RELIEF_NORMAL True 0 False False 0 True True 0 True True False True True Replay settings False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True 6 3 False 0 0 True Stop False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True <b>Action</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Pause False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Resume False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 fill True Mark False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True Execution False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill 20 True <b>Key</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True False True False True False True Set the pause key True True True 0 True * False True GTK_SELECTION_BROWSE 1 2 2 3 True False True False True False True Set the resume key True True True 0 True * False True GTK_SELECTION_BROWSE 1 2 3 4 True False True False True False True Set the insert mark key True True True 0 True * False True GTK_SELECTION_BROWSE 1 2 4 5 True False True False True False True Set the exec key True True True 0 True * False True GTK_SELECTION_BROWSE 1 2 5 6 True False True False True False True Set the stop key True True True 0 True * False True GTK_SELECTION_BROWSE 1 2 1 2 True <b>Extra parameter</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True False 0 True Execute string: False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True True 0 True * False 0 True True 2 3 5 6 fill fill True Unused False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 1 2 fill True Unused False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True Unused False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 3 4 fill True Unused False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 4 5 fill False True True Key bindings False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True Only automatic resolution adjustment in this release of gnee.... which is what you would probably use anyway :) False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True Resolution False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab True No project stuff in this release .... but one fine day False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 False True True Project False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 tab 0 True True 10 True Select File GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True True True GTK_RELIEF_NORMAL True True True True GTK_RELIEF_NORMAL True True Gnee error GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True False 0 True <b>gnee error</b> False True GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True 3 2 False 0 0 True <b>Description</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 6 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True <b>Solution</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 6 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True none False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True none False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True <b>Number</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 6 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True none False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill 0 False False 0 True True True True Gnee ©2003,2004,2005,2006 Henrik Sandklef, Jon-Erling Dahl ©2006 Luis Santander Gnee is the GUI frontend for GNU Xnee GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 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 <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU 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 Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. False www.gnu.org/software/xnee Henrik Sandklef <hesa@gnu.org> Jon-Erling Dahl <joda@gadgeteer.nu> None, interested in joing? Send an email to xnee-devel@gnu.org Luis Santander None, interested in joing? Send an email to xnee-devel@gnu.org xnee.xpm xnee-3.19/gnee/man/0000775000000000000000000000000012332167175011056 500000000000000xnee-3.19/gnee/man/Makefile.am0000664000000000000000000000040610635514422013025 00000000000000GNEE_MAN_PAGE=gnee.1 man_MANS = $(GNEE_MAN_PAGE) EXTRA_DIST=$(man_MANS) $(TEXINF_FILES) $(GNEE_MAN_PAGE).in CLEAN_FILES_DIST=$(man_MANS) $(GNEE_MAN_PAGE): $(GNEE_MAN_PAGE).in cat $(GNEE_MAN_PAGE).in | sed "s/__VERSION_TAG__/$(VERSION)/g" > $(GNEE_MAN_PAGE) xnee-3.19/gnee/man/gnee.1.in0000664000000000000000000000331510640701426012376 00000000000000.\" Copyright Henrik Sandklef 2007 .\" .\" This file is part of GNU Xnee. .\" .\" GNU Xnee 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, or (at your option) .\" any later version. .\" .\" GNU Xnee is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Emacs; see the file COPYING. If not, write to the .\" Free Software Foundation, Inc., 59 Temple Place - Suite 330, .\" Boston, MA 02111-1307, USA. .\" .TH "GNEE" 1 2007 "Xnee" .SH "NAME" gnee record, replays or distributes X11 data .SH "SYNOPSIS" .BI "gnee .sp .SH "DESCRIPTION" .B gnee is the grapgical frontend to GNU Xnee. If you want more information about GNU Xnee read the GNU Xnee manual and the cnee info pages. GNU Xnee consists of a command lie program (cnee), a graphical frontend (gnee) and a Gnome Panel Applet (pnee). .SH "AUTHOR" Henrik Sandklef. .SH "REPORTING BUGS" Report bugs in the program to bug-xnee@gnu.org. .SH "COPYRIGHT" Copyright (C) 2006, 2007 Henrik Sandklef. This is free software; see the source for copying conditions. There is NO warranty;not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "SEE ALSO" .BR cnee(info), cnee(1), Xnee(info) .SH "VERSION" gnee man page, version __VERSION_TAG__ .SH "NOTES" This page describes the Gnome Panel Applet gnee .B gnee. Mail corrections and additions to bug-xnee@gnu.org xnee-3.19/gnee/man/gnee.10000664000000000000000000000330212332167154011771 00000000000000.\" Copyright Henrik Sandklef 2007 .\" .\" This file is part of GNU Xnee. .\" .\" GNU Xnee 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, or (at your option) .\" any later version. .\" .\" GNU Xnee is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Emacs; see the file COPYING. If not, write to the .\" Free Software Foundation, Inc., 59 Temple Place - Suite 330, .\" Boston, MA 02111-1307, USA. .\" .TH "GNEE" 1 2007 "Xnee" .SH "NAME" gnee record, replays or distributes X11 data .SH "SYNOPSIS" .BI "gnee .sp .SH "DESCRIPTION" .B gnee is the grapgical frontend to GNU Xnee. If you want more information about GNU Xnee read the GNU Xnee manual and the cnee info pages. GNU Xnee consists of a command lie program (cnee), a graphical frontend (gnee) and a Gnome Panel Applet (pnee). .SH "AUTHOR" Henrik Sandklef. .SH "REPORTING BUGS" Report bugs in the program to bug-xnee@gnu.org. .SH "COPYRIGHT" Copyright (C) 2006, 2007 Henrik Sandklef. This is free software; see the source for copying conditions. There is NO warranty;not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "SEE ALSO" .BR cnee(info), cnee(1), Xnee(info) .SH "VERSION" gnee man page, version 3.19 .SH "NOTES" This page describes the Gnome Panel Applet gnee .B gnee. Mail corrections and additions to bug-xnee@gnu.org xnee-3.19/gnee/man/Makefile.in0000664000000000000000000003704712332167123013047 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 = : build_triplet = @build@ host_triplet = @host@ subdir = gnee/man DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__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) 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ GNEE_MAN_PAGE = gnee.1 man_MANS = $(GNEE_MAN_PAGE) EXTRA_DIST = $(man_MANS) $(TEXINF_FILES) $(GNEE_MAN_PAGE).in CLEAN_FILES_DIST = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnee/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gnee/man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: 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 $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man 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-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 $(GNEE_MAN_PAGE): $(GNEE_MAN_PAGE).in cat $(GNEE_MAN_PAGE).in | sed "s/__VERSION_TAG__/$(VERSION)/g" > $(GNEE_MAN_PAGE) # 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: xnee-3.19/gnee/AUTHORS0000664000000000000000000000010407772665544011305 00000000000000Jon-Erling Dahl Henrik Sandklef xnee-3.19/gnee/ChangeLog0000664000000000000000000000000007740043660011762 00000000000000xnee-3.19/gnee/gnee.gladep0000664000000000000000000000041507740043660012316 00000000000000 Gnee gnee FALSE xnee-3.19/gnee/Makefile.in0000664000000000000000000004716112332167123012272 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 = : build_triplet = @build@ host_triplet = @host@ subdir = gnee DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am AUTHORS \ ChangeLog NEWS README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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 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 = src man DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ @BUILDGUI_TRUE@SUBDIRS = src man @BUILDGUI_TRUE@EXTRA_DIST = \ @BUILDGUI_TRUE@ autogen.sh \ @BUILDGUI_TRUE@ gnee.glade \ @BUILDGUI_TRUE@ gnee.gladep all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnee/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu gnee/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 @BUILDGUI_FALSE@dist-hook: 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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @BUILDGUI_FALSE@install-data-local: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am dist-hook distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am @BUILDGUI_TRUE@install-data-local: @BUILDGUI_TRUE@ @$(NORMAL_INSTALL) @BUILDGUI_TRUE@ if test -d $(srcdir)/pixmaps; then \ @BUILDGUI_TRUE@ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/pixmaps; \ @BUILDGUI_TRUE@ for pixmap in $(srcdir)/pixmaps/*; do \ @BUILDGUI_TRUE@ if test -f $$pixmap; then \ @BUILDGUI_TRUE@ $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir)/pixmaps; \ @BUILDGUI_TRUE@ fi \ @BUILDGUI_TRUE@ done \ @BUILDGUI_TRUE@ fi @BUILDGUI_TRUE@dist-hook: @BUILDGUI_TRUE@ if test -d pixmaps; then \ @BUILDGUI_TRUE@ mkdir $(distdir)/pixmaps; \ @BUILDGUI_TRUE@ for pixmap in pixmaps/*; do \ @BUILDGUI_TRUE@ if test -f $$pixmap; then \ @BUILDGUI_TRUE@ cp -p $$pixmap $(distdir)/pixmaps; \ @BUILDGUI_TRUE@ fi \ @BUILDGUI_TRUE@ done \ @BUILDGUI_TRUE@ fi # 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: xnee-3.19/gnee/autogen.sh0000775000000000000000000001063007740043660012223 00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` test -z "$srcdir" && srcdir=. DIE=0 if [ -n "$GNOME2_DIR" ]; then ACLOCAL_FLAGS="-I $GNOME2_DIR/share/aclocal $ACLOCAL_FLAGS" LD_LIBRARY_PATH="$GNOME2_DIR/lib:$LD_LIBRARY_PATH" PATH="$GNOME2_DIR/bin:$PATH" export PATH export LD_LIBRARY_PATH fi (test -f $srcdir/configure.in) || { echo -n "**Error**: Directory "\`$srcdir\'" does not look like the" echo " top-level package directory" exit 1 } (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } (grep "^AC_PROG_INTLTOOL" $srcdir/configure.in >/dev/null) && { (intltoolize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`intltool' installed." echo "You can get it from:" echo " ftp://ftp.gnome.org/pub/GNOME/" DIE=1 } } (grep "^AM_PROG_XML_I18N_TOOLS" $srcdir/configure.in >/dev/null) && { (xml-i18n-toolize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`xml-i18n-toolize' installed." echo "You can get it from:" echo " ftp://ftp.gnome.org/pub/GNOME/" DIE=1 } } (grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`libtool' installed." echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" DIE=1 } } (grep "^AM_GLIB_GNU_GETTEXT" $srcdir/configure.in >/dev/null) && { (grep "sed.*POTFILES" $srcdir/configure.in) > /dev/null || \ (glib-gettextize --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`glib' installed." echo "You can get it from: ftp://ftp.gtk.org/pub/gtk" DIE=1 } } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed." echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing \`aclocal'. The version of \`automake'" echo "installed doesn't appear recent enough." echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \`$0\'" command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac for coin in `find $srcdir -path $srcdir/CVS -prune -o -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" if grep "^AM_GLIB_GNU_GETTEXT" configure.in >/dev/null; then echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running glib-gettextize... Ignore non-fatal messages." echo "no" | glib-gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi if grep "^AC_PROG_INTLTOOL" configure.in >/dev/null; then echo "Running intltoolize..." intltoolize --copy --force --automake fi if grep "^AM_PROG_XML_I18N_TOOLS" configure.in >/dev/null; then echo "Running xml-i18n-toolize..." xml-i18n-toolize --copy --force --automake fi if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then if test -z "$NO_LIBTOOLIZE" ; then echo "Running libtoolize..." libtoolize --force --copy fi fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --gnu $am_opt ..." automake --add-missing --gnu $am_opt echo "Running autoconf ..." autoconf ) fi done conf_flags="--enable-maintainer-mode" if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile. || exit 1 else echo Skipping configure process. fi xnee-3.19/gnee/NEWS0000664000000000000000000000000007740043660010707 00000000000000xnee-3.19/pnee/0000775000000000000000000000000012332167175010314 500000000000000xnee-3.19/pnee/src/0000775000000000000000000000000012332167175011103 500000000000000xnee-3.19/pnee/src/Makefile.am0000664000000000000000000000201311530306017013040 00000000000000## Process this file with automake to produce Makefile.in INCLUDES = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -I../../libxnee/include PNEE=pnee noinst_PROGRAMS = $(PNEE) if XNEE_XINPUT_SUPPORT XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT else XNEE_XINPUT_SUPPORT_FLAGS = endif pnee_CFLAGS = -DHAVE_STDARG $(PANEL_FLAGS) -Wall -g -DPNEE_PIXDIR=\""$(datadir)/xnee/pixmaps"\" $(libgnomeui_CFLAGS) $(gtk_CFLAGS) ${XNEE_XINPUT_SUPPORT_FLAGS} pnee_SOURCES = \ main.c \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h \ pnee_impl.c pnee_impl.h pnee_types.h pnee_LDADD = -L../../ -L../../libxnee/src $(INTLLIBS) $(PANEL_LD_FLAGS) -lxnee -lXtst $(LIBSEMA) $(libgnomeui_LIBS) $(gtk_LIBS) $(X11_LIBS) $(LIBDL) ${LIBXI} if BUILD_STATIC STATIC_FLAGS = -static else STATIC_FLAGS = endif pnee_LDFLAGS = $(STATIC_FLAGS) install-exec-local: $(PNEE) mkdir -p $(DESTDIR)$(PANEL_APPLET_DIR) cp $(PNEE) $(DESTDIR)$(PANEL_APPLET_DIR) xnee-3.19/pnee/src/interface.h0000664000000000000000000000037210603035053013122 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ GtkWidget* create_pnee_pref (void); GtkWidget* create_filechooserdialog1 (void); GtkWidget* create_pnee_about (void); GtkWidget* create_delay (void); GtkWidget* create_error_dialog (void); xnee-3.19/pnee/src/pnee_impl.h0000664000000000000000000001347312065357443013156 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2005, 2006, 2007, 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef PNEE_IMPL_H #define PNEE_IMPL_H #include #include #include /* #include #include #include #include */ #include #include #include "libxnee/xnee.h" #include "libxnee/xnee_alloc.h" #include "libxnee/print_varargs.h" #include "libxnee/print.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_fileop.h" #include #include #define PTHREAD_RETURN_VAL void* #define PTHREAD_RETURN return NULL #include extern GtkWidget* fs; extern gchar *filename; extern pnee_panel_applet *pnee_applet; #define DEBUG_MARK() fprintf(stderr, " --- %s:%d %s()\n", __FILE__, __LINE__, __func__); #define DEBUG_IN() fprintf(stderr, " ----> IN %s:%d %s()\n", __FILE__, __LINE__, __func__); #define DEBUG_IN2() fprintf(stderr, " <--- IN %s:%d %s()\n", __FILE__, __LINE__, __func__); #define DEBUG_OUT() fprintf(stderr, " ----> OUT %s:%d %s()\n", __FILE__, __LINE__, __func__); #define DEBUG_OUT2() fprintf(stderr, " <---- OUT %s:%d %s()\n", __FILE__, __LINE__, __func__); #define _IN gdk_threads_enter() #define _OUT gdk_threads_leave() /* #define _IN DEBUG_IN(); gdk_threads_enter(); DEBUG_IN2() #define _OUT DEBUG_OUT(); gdk_threads_leave(); DEBUG_OUT2() */ #define pnee_set_no_action(p) p->action_state=PNEE_ACTION_NONE #define pnee_set_no_action_no_thread(p) p->action_state=PNEE_ACTION_NONE #define pnee_set_recording(p) p->action_state=PNEE_ACTION_RECORD #define pnee_set_replaying(p) p->action_state=PNEE_ACTION_REPLAY #define pnee_set_configure(p) p->action_state=PNEE_ACTION_CONFIGURE #define pnee_is_recording(p) (p->action_state==PNEE_ACTION_RECORD) #define pnee_is_replaying(p) (p->action_state==PNEE_ACTION_REPLAY) #define pnee_is_configure(p) (p->action_state==PNEE_ACTION_CONFIGURE) #define pnee_is_ready(p) (p->action_state==PNEE_ACTION_NONE) #define pnee_set_update_no_action(p) p->update_state=PNEE_UPDATE_NONE #define pnee_set_update_recording(p) p->update_state=PNEE_UPDATE_RECORD #define pnee_set_update_replaying(p) p->update_state=PNEE_UPDATE_REPLAY #define GCHAR_TO_CHAR(a) ((char *) (a)) #define pnee_reset_zero_ctr(r) r->reset=0 #define pnee_reset_inc_ctr(r) r->reset++ #define pnee_reset_need_reset(r) (r->reset>=2) #define pnee_show_states(p) \ xnee_verbose((xd, \ " pnee status : %d %d threads: %x %x evs left: %d\n", \ p->action_state, \ p->update_state, \ (int)p->xnee_thread, \ (int)p->xnee_updater, \ xnee_get_events_left(xd))); #ifdef PNEE_DEBUGGER PTHREAD_RETURN_VAL pnee_debugger(void *pnee_applet_in); #endif void pnee_create_button(pnee_panel_applet *pnee_applet_in, const gchar *tooltip_str, const gchar *id, GCallback press_callback, pnee_button_type mode); int pnee_handle_xerr(Display *dpy, XErrorEvent *errevent); int pnee_prepare_record(void); int pnee_prepare_replay(void); void display_properties_dialog(BonoboUIComponent *component, gpointer user_data, const char *cname); void display_about_dialog(BonoboUIComponent *component, gpointer user_data, const char *cname); void init_stock_icons(pnee_panel_applet *pnee_applet_in); void register_stock_icons(pnee_panel_applet *pnee_applet_in, GtkIconFactory *factory); gboolean cb_button_press(GtkWidget *w, GdkEventButton *event, GtkWidget *applet); PTHREAD_RETURN_VAL pnee_stop_pressed_impl(void *pnee_applet); PTHREAD_RETURN_VAL pnee_start_recording(void *pnee_applet); PTHREAD_RETURN_VAL pnee_start_replaying(void *pnee_applet); PTHREAD_RETURN_VAL pnee_progress_updater(void *pnee_applet); int pnee_update_progress(pnee_panel_applet *pnee_applet, double perc); PTHREAD_RETURN_VAL pnee_progress_updater(void *pnee_applet); int pnee_update_progress(pnee_panel_applet *pnee_applet, double perc); int pnee_setup(pnee_panel_applet *pnee_applet); void create_delay_splash (void); void pnee_2xnee_update_all(void); void pnee_display_error(int err_nr); #endif /* PNEE_IMPL_H */ xnee-3.19/pnee/src/pnee_types.h0000664000000000000000000000536510641032702013344 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef PNEE_TYPES_H #define PNEE_TYPES_H typedef enum _pnee_actions { PNEE_ACTION_NONE, PNEE_ACTION_RECORD, PNEE_ACTION_REPLAY, PNEE_ACTION_CONFIGURE } pnee_actions; typedef enum _pnee_update_actions { PNEE_UPDATE_NONE, PNEE_UPDATE_RECORD, PNEE_UPDATE_REPLAY } pnee_update_actions; typedef enum _pnee_button_type { PNEE_BUTTON_RECORD, PNEE_BUTTON_REPLAY, PNEE_BUTTON_STOP } pnee_button_type; typedef struct { PanelApplet *applet; GtkWidget *button_box; GtkWidget *label; GtkWidget *container; GtkTooltips *tooltips; GtkWidget *rec_button; GtkWidget *rep_button; GtkWidget *stop_button; GtkWidget *rec_image; GtkWidget *rep_image; GtkWidget *stop_image; GtkTooltips* rec_tooltip; GtkTooltips* rep_tooltip; GtkTooltips* stop_tooltip; GtkWidget *progress; GtkIconSize icon_size; pthread_t xnee_thread; pthread_t xnee_updater; sem_t action_mutex; sem_t update_mutex; GtkWidget *pnee_pref; volatile pnee_actions action_state ; volatile pnee_update_actions update_state ; GtkWidget *delay_progr; unsigned char reset; xnee_data *xd ; /* #define FAKED_MAIN */ #define PNEE_DEBUGGER #ifdef PNEE_DEBUGGER pthread_t xnee_debugger; #endif /* PNEE_DEBUGGER */ } pnee_panel_applet; #endif /* PNEE_TYPES_H */ xnee-3.19/pnee/src/pnee_impl.c0000664000000000000000000004654311513700301013133 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2005, 2006, 2007, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #include #include "pnee_types.h" xnee_data *xd; extern pnee_panel_applet *pnee_applet; #define PNEE_DELAY_RECORD 0 #define PNEE_DELAY_REPLAY 1 GtkWidget *my_delay; GtkWidget *my_del_progr_win; GtkWidget *my_delay_progr; GtkWidget *my_delay_label; GtkWidget *my_err_dial; static int pnee_handle_err(xnee_data *xd, int error) { const char *err; const char *descr; if ( ( error != XNEE_OK ) && ( error != XNEE_OK_LEAVE ) ) { err = xnee_get_err_description(error); descr = xnee_get_err_solution(error); fprintf (stderr, "Error number: %d\n", error); fprintf (stderr, " Error: %s\n", err); fprintf (stderr, " Solution: %s\n", descr); } return XNEE_OK; } GtkWidget * create_delay_splash_impl (void) { _IN; my_delay = gtk_window_new (GTK_WINDOW_POPUP); gtk_container_set_border_width (GTK_CONTAINER (my_delay), 3); gtk_window_set_title (GTK_WINDOW (my_delay), "pnee delay"); gtk_window_set_position (GTK_WINDOW (my_delay), GTK_WIN_POS_CENTER); _OUT; _IN; my_del_progr_win = gtk_vbox_new (FALSE, 0); gtk_widget_show (my_del_progr_win); gtk_container_add (GTK_CONTAINER (my_delay), my_del_progr_win); _OUT; _IN; my_delay_label = gtk_label_new ("Pnee - a GNU Xnee Applet"); gtk_widget_show (my_delay_label); gtk_box_pack_start (GTK_BOX (my_del_progr_win), my_delay_label, FALSE, FALSE, 0); /* gtk_label_set_text (GTK_LABEL (my_delay_progr), "Delayd start of pnee"); */ _OUT; _IN; my_delay_progr = gtk_progress_bar_new (); gtk_widget_show (my_delay_progr); gtk_box_pack_start (GTK_BOX (my_del_progr_win), my_delay_progr, FALSE, FALSE, 0); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (my_delay_progr), "Delayd start of pnee"); _OUT; /* Store pointers to all widgets, for use by lookup_widget(). */ /* GLADE_HOOKUP_OBJECT_NO_REF (my_delay, my_delay, "delay"); GLADE_HOOKUP_OBJECT (my_delay, my_del_progr_win, "del_progr_win"); GLADE_HOOKUP_OBJECT (my_delay, my_delay_progr, "delay_progr"); */ return my_delay; } void create_delay_splash (void) { if (my_delay == NULL) { create_delay_splash_impl (); } } void delay_start (int mode) { gdouble perc; char buf[100]; int delay_time ; int delay_time_start; pnee_set_interval(NULL, pnee_applet->pnee_pref); delay_time = xnee_get_interval (xd) ; delay_time_start = delay_time; xnee_verbose((xd, " ============================================================ delay: %d\n", delay_time)); xnee_verbose((xd, " ****** %s:%d delay %d \n", __FILE__, __LINE__, xnee_get_interval(pnee_applet->xd))); create_delay_splash (); _IN; gtk_widget_show_all (my_delay); _OUT; while (delay_time != 0) { if (!pnee_is_recording (pnee_applet) && !pnee_is_replaying (pnee_applet)) { xnee_verbose((xd, "Action interrupted ...., leaving start\n")); _IN; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (my_delay_progr), 0.0); _OUT; xnee_verbose((xd, " ****** %s:%d delay %d \n", __FILE__, __LINE__, xnee_get_interval(pnee_applet->xd))); return; } perc = (gdouble) delay_time / (gdouble) delay_time_start; if (mode == PNEE_DELAY_RECORD) { sprintf (buf, "Starting to record in %d seconds", delay_time); } else { sprintf (buf, "Starting to replay in %d seconds", delay_time); } xnee_verbose((xd, " delay_start->\n")); sem_wait (&pnee_applet->update_mutex); xnee_verbose((xd, " delay_start -- %u\n", (int) my_delay_progr)); _IN; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (my_delay_progr), perc); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (my_delay_progr), buf); _OUT; xnee_verbose((xd, " delay_start -- \n")); sem_post (&pnee_applet->update_mutex); xnee_verbose((xd, " <-delay_start\n")); usleep (1000 * 1000); delay_time--; } _IN; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (my_delay_progr), 0.0); _OUT; _IN; gtk_widget_hide_all (my_delay); _OUT; xnee_verbose((xd, " ****** %s:%d delay %d \n", __FILE__, __LINE__, xnee_get_interval(pnee_applet->xd))); xnee_set_interval(xd, 0); return; } PTHREAD_RETURN_VAL pnee_start_recording (void *pnee_applet_in) { int ret; pnee_panel_applet *pa = (pnee_panel_applet *) pnee_applet_in; create_delay_splash (); DEBUG_MARK(); pnee_set_recording (pa); pnee_set_update_no_action (pa); pnee_set_events_to_record(NULL, pnee_applet_in); xnee_set_events_recorded(pa->xd,0); pnee_prepare_record (); xnee_verbose((xd, "\n\n\n ********** RECORDING SETTINGS ******** \n\n\n")); xnee_print_ranges(pa->xd, stderr); xnee_print_xnee_settings(pa->xd, stderr); pnee_set_interval(NULL, pa->pnee_pref); delay_start (PNEE_DELAY_RECORD); xnee_verbose((xd, "\n\n\n ********** SET RECORDER ******** \n\n\n")); ret = xnee_set_recorder (pa->xd); if ( ( ret != XNEE_OK) && ( ret != XNEE_OK_LEAVE) ) { pnee_handle_err(xd, ret); } xnee_verbose((xd, "\n\n\n ********** START RECORDING ******** \n\n\n")); ret = xnee_start (pa->xd); xnee_verbose((xd, "\n\n\n ********** FINISHED RECORDING ******** \n\n\n")); if ( ( ret != XNEE_OK) && ( ret != XNEE_OK_LEAVE) ) { pnee_handle_err(xd, ret); } xnee_verbose((xd, "\n\n\n ********** STOPED RECORDING (%d) ******** \n\n\n", ret)); DEBUG_MARK(); pnee_set_no_action (pa); PTHREAD_RETURN; } void pnee_display_error(int err_nr) { GtkLabel *my_text; #define GNEE_BUF_SIZE 8 gchar buf[GNEE_BUF_SIZE]; const char *str_ptr = NULL; if (my_err_dial==NULL) { my_err_dial = create_error_dialog(); } /* number field */ my_text = (GtkLabel *) lookup_widget (my_err_dial, "err_nr_label"); snprintf (buf, GNEE_BUF_SIZE, "%d", err_nr); gtk_label_set_text(my_text,buf); /* description field */ my_text = (GtkLabel *) lookup_widget (my_err_dial, "err_descr_label"); if (my_text!=NULL) { str_ptr = xnee_get_err_description(err_nr); if (str_ptr!=NULL) { gtk_label_set_text(my_text,str_ptr); } } /* solution field */ my_text = (GtkLabel *) lookup_widget (my_err_dial, "err_sol_label"); if (my_text!=NULL) { str_ptr = xnee_get_err_solution(err_nr); if (str_ptr!=NULL) { gtk_label_set_text(my_text,str_ptr); } } gtk_widget_show (my_err_dial); } PTHREAD_RETURN_VAL pnee_start_replaying (void *pnee_applet_in) { int ret; pnee_panel_applet *pa = (pnee_panel_applet *) pnee_applet_in; create_delay_splash (); pnee_set_replaying (pa); pnee_set_update_no_action (pa); pnee_prepare_replay (); delay_start (PNEE_DELAY_REPLAY); ret = xnee_start (pa->xd); if (ret!=XNEE_OK) { xnee_verbose((xd, "xnee_start failed :(\n")); pnee_display_error(ret); } pnee_set_no_action (pa); PTHREAD_RETURN; } PTHREAD_RETURN_VAL pnee_progress_updater (void *pnee_applet_in) { gint max; gint curr; gdouble perc; pnee_panel_applet *pa = (pnee_panel_applet *) pnee_applet_in; static unsigned char do_reset_ctr=0; /* GtkWidget *wid; GdkWindow *win; */ while (1) { /* Multiple quick presses on stop button * means reset everything */ if (pnee_reset_need_reset(pa)) { xnee_verbose((xd, "\tRESETing xnee structure!!!!!\n")); /* Dealloc xnee structures */ xnee_close_down(pa->xd); /* Alloc/init new xnee structures */ pnee_xnee_init(pa); /* Zero reset ctr */ pnee_reset_zero_ctr(pa); } if (do_reset_ctr++==1) { /* Zero reset ctr */ pnee_reset_zero_ctr(pa); do_reset_ctr=0; } while (pnee_is_replaying (pa) || pnee_is_recording (pa)) { if (pnee_is_replaying (pa)) { pnee_set_update_replaying (pa); } else if (pnee_is_recording (pa)) { pnee_set_update_recording (pa); } max = xnee_get_events_max (pa->xd); if (pnee_is_replaying (pa)) { curr = xnee_get_events_replayed (pa->xd); } else { curr = xnee_get_events_recorded (pa->xd); } perc = (gdouble) curr / (gdouble) max; pnee_update_progress (pa, perc); usleep (1000 * 200); } pnee_set_update_no_action (pa); pnee_update_progress (pa, 0.0); usleep (1000 * 1000); } } int pnee_update_progress (pnee_panel_applet * pnee_applet_in, double perc) { if ((pnee_applet_in != 0) && (pnee_applet_in->progress != 0)) { sem_wait (&pnee_applet->update_mutex); _IN; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pnee_applet_in->progress), perc); _OUT; sem_post (&pnee_applet->update_mutex); } return 0; } void pnee_create_button (pnee_panel_applet * pnee_applet_in, const gchar * tooltip_str, const gchar * id, GCallback press_callback, pnee_button_type mode) { GtkWidget *button; GtkWidget *image; GtkTooltips *tooltip; /* Button */ button = gtk_button_new (); _IN; gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_HALF); gtk_container_set_border_width (GTK_CONTAINER (button), 0); _OUT; /* Image */ _IN; image = gtk_image_new_from_stock (id, pnee_applet->icon_size); tooltip = gtk_tooltips_new (); gtk_widget_show (image); _OUT; /* Tooltip */ _IN; gtk_container_add (GTK_CONTAINER (button), image); gtk_tooltips_set_tip (tooltip, button, tooltip_str, NULL); _OUT; /* callback */ g_signal_connect (button, "button_press_event", G_CALLBACK (cb_button_press), pnee_applet->applet); g_signal_connect (button, "clicked", G_CALLBACK (press_callback), pnee_applet); _IN; gtk_widget_show (button); _OUT; if (mode == PNEE_BUTTON_RECORD) { pnee_applet->rec_button = button; pnee_applet->rec_image = image; pnee_applet->rec_tooltip = tooltip; } else if (mode == PNEE_BUTTON_REPLAY) { pnee_applet->rep_button = button; pnee_applet->rep_image = image; pnee_applet->rep_tooltip = tooltip; } else if (mode == PNEE_BUTTON_STOP) { pnee_applet->stop_button = button; pnee_applet->stop_image = image; pnee_applet->stop_tooltip = tooltip; } } int pnee_handle_xerr (Display * dpy, XErrorEvent * errevent) { int ret; /*@out@ */ char tmp[100] = ""; if (errevent->type == 0) { return XNEE_OK; } else if (errevent->type == 161) { return XNEE_OK; } fprintf (stderr, "Error received:\n"); fprintf (stderr, "\terror type %u (0x%x)\n", errevent->type, errevent->type); fprintf (stderr, "\terror code %u (0x%x)\n", errevent->error_code, errevent->error_code); fprintf (stderr, "\terror code major %u (0x%x)\n", errevent->request_code, errevent->request_code); fprintf (stderr, "\terror code minor %u (0x%x)\n", errevent->minor_code, errevent->minor_code); fprintf (stderr, "\tdisplay %d (0x%x)\n", (int) dpy, (unsigned int) dpy); ret = XGetErrorText (dpy, (int) errevent->error_code, tmp, 100); fprintf (stderr, " %s\n", (char *) tmp); fprintf (stderr, "This error can be ignored\n"); usleep (1000 * 1000); return XNEE_OK; } int pnee_xnee_init (pnee_panel_applet * pnee_panel_in) { char *default_tmp_file; /* char *default_err_file; */ default_tmp_file = pnee_get_default_filename (); /* default_err_file = pnee_get_default_err_name (); */ /* Get a new xnee_data structure */ xd = xnee_new_xnee_data (); pnee_panel_in->xd = xd; (void) XSetErrorHandler (pnee_handle_xerr); /* xnee_set_verbose (pnee_panel_in->xd); */ /* pnee_set_err_file (default_err_file); */ xnee_open_files (pnee_panel_in->xd); xnee_unset_recall_window_pos (pnee_panel_in->xd); xnee_set_events_max (pnee_panel_in->xd, 600); xnee_set_data_max (pnee_panel_in->xd, -1); xnee_set_key (pnee_panel_in->xd, XNEE_GRAB_STOP, "F5"); pnee_panel_in->reset=0; /* Set the program name */ xnee_set_program_name (pnee_panel_in->xd, "pnee"); /* Set the cli parameters */ xnee_set_application_parameters (pnee_panel_in->xd, NULL); pnee_set_rec_file (default_tmp_file); pnee_set_rep_file(default_tmp_file); free (default_tmp_file); /* free (default_err_file); */ xnee_verbose((xd, " ****** %s:%d delay %d \n", __FILE__, __LINE__, xnee_get_interval(pnee_applet->xd))); pnee_set_interval(NULL, pnee_panel_in->pnee_pref); xnee_verbose((xd, " ****** %s:%d delay %d \n", __FILE__, __LINE__, xnee_get_interval(pnee_applet->xd))); return XNEE_OK; } int pnee_setup (pnee_panel_applet * pnee_panel_in) { static int already_setup = 0; if (already_setup) { return 0; } already_setup = 1; fs = create_filechooserdialog1 (); if (pnee_panel_in->pnee_pref == NULL) { pnee_panel_in->pnee_pref = create_pnee_pref (); } pnee_xnee_init (pnee_panel_in); /* init threads */ gdk_threads_init (); gdk_threads_leave (); return 0; } int pnee_prepare_record (void) { pnee_setup (pnee_applet); pnee_2xnee_update_all(); xnee_parse_range (pnee_applet->xd, XNEE_DEVICE_EVENT, "KeyPress-MotionNotify"); xnee_set_recorder (pnee_applet->xd); pnee_set_interval(NULL, pnee_applet->pnee_pref); return 0; } int pnee_prepare_replay (void) { /* gchar *my_file; */ pnee_setup (pnee_applet); pnee_2xnee_update_all(); xnee_set_replayer (pnee_applet->xd); xnee_unset_sync (pnee_applet->xd); pnee_set_interval(NULL, pnee_applet->pnee_pref); return 0; } PTHREAD_RETURN_VAL pnee_stop_pressed_impl (void *pnee_applet_in) { /* gint ev_max; */ pnee_panel_applet *pa = (pnee_panel_applet *) pnee_applet_in; pnee_setup (pa); /* * Make sure we are in action, * otherwise we will prevent next cation (only once though) */ if (pnee_is_replaying (pa) || pnee_is_recording (pa)) { xnee_set_interrupt_action (xd); } pnee_set_no_action (pa); pnee_set_no_action_no_thread (pa); pnee_set_update_no_action (pa); pnee_reset_inc_ctr(pa); _IN; gtk_widget_hide_all (my_delay); _OUT ; PTHREAD_RETURN; } gboolean cb_button_press (GtkWidget * w, GdkEventButton * event, GtkWidget * applet) { if ((event->button == 3) || (event->button == 2)) { gtk_propagate_event (applet, (GdkEvent *) event); return TRUE; } return FALSE; } void register_stock_icons (pnee_panel_applet * pnee_applet_in, GtkIconFactory * factory) { gint i; static gchar file_name[1024]; const gchar *items[] = { "pnee-record.png", "pnee-replay.png", "pnee-stop.png" }; for (i = 0; i < sizeof (items) / sizeof (items[0]); ++i) { GdkPixbuf *pixbuf; GtkIconSet *icon_set; GError *error = NULL; sprintf (file_name, "%s/%s", PNEE_PIXDIR, items[i]); pixbuf = gdk_pixbuf_new_from_file (file_name, &error); icon_set = gtk_icon_set_new_from_pixbuf (pixbuf); gtk_icon_factory_add (factory, items[i], icon_set); gtk_icon_set_unref (icon_set); g_object_unref (G_OBJECT (pixbuf)); } } void init_stock_icons (pnee_panel_applet * pnee_applet_in) { GtkIconFactory *factory; factory = gtk_icon_factory_new (); gtk_icon_factory_add_default (factory); register_stock_icons (pnee_applet, factory); pnee_applet->icon_size = gtk_icon_size_register ("pnee_icon_size", 5, 5); g_object_unref (factory); } void display_about_dialog (BonoboUIComponent * component, gpointer user_data, const char *cname) { static GtkWidget *pnee_about = NULL; /* * Prevent about to showwhile in action */ if (pnee_is_replaying (pnee_applet) || pnee_is_recording (pnee_applet)) { xnee_verbose((xd, "************** about blocked ")); return; } if (pnee_about == NULL) { pnee_about = create_pnee_about (); } gtk_widget_show (pnee_about); return; } void display_properties_dialog (BonoboUIComponent * component, gpointer user_data, const char *cname) { /* * Prevent properties to showwhile in action */ if (pnee_is_replaying (pnee_applet) || pnee_is_recording (pnee_applet)) { xnee_verbose((xd, "***************** properties blocked ")); return; } if (pnee_applet->pnee_pref == NULL) { pnee_applet->pnee_pref = create_pnee_pref (); } gtk_widget_show (pnee_applet->pnee_pref); return; } void pnee_2xnee_update_err_name(void) { GtkFileChooserButton *file_text; char *my_file ; file_text = (GtkFileChooserButton *) lookup_widget (GTK_WIDGET (pnee_applet->pnee_pref), "rep_choose_but"); my_file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_text)); if (my_file != NULL) { xnee_set_data_name (pnee_applet->xd, my_file); } } void pnee_2xnee_update_out_name(void) { GtkFileChooserButton *file_text; char *my_file ; file_text = (GtkFileChooserButton *) lookup_widget (GTK_WIDGET (pnee_applet->pnee_pref), "rec_chooser_but"); my_file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_text)); if (my_file != NULL) { xnee_set_out_name (pnee_applet->xd, my_file); } } void pnee_2xnee_update_stop_key(void) { GtkEntry *entry; char * my_key = NULL; entry = (GtkEntry *) lookup_widget (GTK_WIDGET (pnee_applet->pnee_pref), "entry5"); if ( entry != NULL) { my_key = GCHAR_TO_CHAR(gtk_entry_get_text (GTK_ENTRY(entry))); } if (my_key!=NULL) { xnee_set_key (xd, XNEE_GRAB_STOP, my_key); } } void pnee_2xnee_update_all(void) { if (xnee_is_replayer(pnee_applet->xd)) { /* * update err file name */ pnee_2xnee_update_err_name(); } else if (xnee_is_recorder(pnee_applet->xd)) { /* * update out file name */ pnee_2xnee_update_err_name(); } /* * update stop key */ pnee_2xnee_update_stop_key(); } #ifdef PNEE_DEBUGGER PTHREAD_RETURN_VAL pnee_debugger (void *pnee_applet_in) { pnee_panel_applet *pa = (pnee_panel_applet *) pnee_applet_in; while (1) { xnee_verbose((xd, " debugger thread:: ")); pnee_show_states (pa); usleep (1000 * 1000); } PTHREAD_RETURN; } #endif /* PNEE_DEBUGGER */ xnee-3.19/pnee/src/support.c0000664000000000000000000000712110447452722012704 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "support.h" GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to find pixmap files. */ static gchar* find_pixmap_file (const gchar *filename) { GList *elem; /* We step through each of the pixmaps directory to find it. */ elem = pixmaps_directories; while (elem) { gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, G_DIR_SEPARATOR_S, filename); if (g_file_test (pathname, G_FILE_TEST_EXISTS)) return pathname; g_free (pathname); elem = elem->next; } return NULL; } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename) { gchar *pathname = NULL; GtkWidget *pixmap; if (!filename || !filename[0]) return gtk_image_new (); pathname = find_pixmap_file (filename); if (!pathname) { g_warning ("Couldn't find pixmap file: %s", filename); return gtk_image_new (); } pixmap = gtk_image_new_from_file (pathname); g_free (pathname); return pixmap; } /* This is an internally used function to create pixmaps. */ GdkPixbuf* create_pixbuf (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = find_pixmap_file (filename); if (!pathname) { g_warning ("Couldn't find pixmap file: %s", filename); return NULL; } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description) { gint n_actions, i; n_actions = atk_action_get_n_actions (action); for (i = 0; i < n_actions; i++) { if (!strcmp (atk_action_get_name (action, i), action_name)) atk_action_set_description (action, i, description); } } xnee-3.19/pnee/src/callbacks.h0000664000000000000000000001501710642270301013103 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef CALLBACKS_H #define CALLBACKS_H #include #include void pnee_set_rec_file(char *filename); void pnee_set_rep_file(char *filename); void pnee_set_err_file(char *filename); char * pnee_get_default_filename(); char * pnee_get_default_err_name(); void on_setting_ok_clicked (GtkButton *button, gpointer user_data); void on_verbose_check_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_display_check_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_delay_check_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_speed_check_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_feedback_button_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_faked_rec_clicked (GtkButton *button, gpointer user_data); void on_faked_rep_clicked (GtkButton *button, gpointer user_data); void on_spinbutton2_change_value (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton3_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_spinbutton1_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_rec_file_button_clicked (GtkButton *button, gpointer user_data); void on_rep_file_button_clicked (GtkButton *button, gpointer user_data); void on_f_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_f_ok_button_clicked (GtkButton *button, gpointer user_data); void on_f_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_f_ok_button_clicked (GtkButton *button, gpointer user_data); void on_entry2_editing_done (GtkEditable *editable, gpointer user_data); void on_entry3_editing_done (GtkEditable *editable, gpointer user_data); void on_entry4_changed (GtkEditable *editable, gpointer user_data); void on_verbose_f_sel_clicked (GtkButton *button, gpointer user_data); void on_use_display_ok_clicked (GtkButton *button, gpointer user_data); void on_entry1_changed (GtkEditable *editable, gpointer user_data); void on_entry5_changed (GtkEditable *editable, gpointer user_data); void on_f_c_button_clicked (GtkButton *button, gpointer user_data); void on_f_open_button_clicked (GtkButton *button, gpointer user_data); void on_rec_chooser_but_file_activated (GtkFileChooser *filechooser, gpointer user_data); void on_rec_file_button_clicked (GtkButton *button, gpointer user_data); void on_rep_choose_but_file_activated (GtkFileChooser *filechooser, gpointer user_data); void pnee_rep_pressed(void); void pnee_rec_pressed(void); void pnee_stop_pressed(void); void pnee_set_interval (GtkToggleButton *togglebutton, gpointer user_data); void on_log_file_button_clicked (GtkButton *button, gpointer user_data); void on_error_ok_clicked (GtkButton *button, gpointer user_data); void pnee_set_events_to_record (GtkToggleButton *togglebutton, gpointer user_data); #endif /* CALLBACKS_H */ void on_pnee_about_response (GtkDialog *dialog, gint response_id, gpointer user_data); xnee-3.19/pnee/src/Makefile.in0000664000000000000000000006726312332167124013100 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 = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = $(am__EXEEXT_1) subdir = pnee/src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/./autotools/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = pnee$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_pnee_OBJECTS = pnee-main.$(OBJEXT) pnee-support.$(OBJEXT) \ pnee-interface.$(OBJEXT) pnee-callbacks.$(OBJEXT) \ pnee-pnee_impl.$(OBJEXT) pnee_OBJECTS = $(am_pnee_OBJECTS) am__DEPENDENCIES_1 = pnee_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = pnee_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(pnee_CFLAGS) $(CFLAGS) \ $(pnee_LDFLAGS) $(LDFLAGS) -o $@ 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) depcomp = $(SHELL) $(top_srcdir)/./autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(pnee_SOURCES) DIST_SOURCES = $(pnee_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ INCLUDES = \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -I../../libxnee/include PNEE = pnee @XNEE_XINPUT_SUPPORT_FALSE@XNEE_XINPUT_SUPPORT_FLAGS = @XNEE_XINPUT_SUPPORT_TRUE@XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT pnee_CFLAGS = -DHAVE_STDARG $(PANEL_FLAGS) -Wall -g -DPNEE_PIXDIR=\""$(datadir)/xnee/pixmaps"\" $(libgnomeui_CFLAGS) $(gtk_CFLAGS) ${XNEE_XINPUT_SUPPORT_FLAGS} pnee_SOURCES = \ main.c \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h \ pnee_impl.c pnee_impl.h pnee_types.h pnee_LDADD = -L../../ -L../../libxnee/src $(INTLLIBS) $(PANEL_LD_FLAGS) -lxnee -lXtst $(LIBSEMA) $(libgnomeui_LIBS) $(gtk_LIBS) $(X11_LIBS) $(LIBDL) ${LIBXI} @BUILD_STATIC_FALSE@STATIC_FLAGS = @BUILD_STATIC_TRUE@STATIC_FLAGS = -static pnee_LDFLAGS = $(STATIC_FLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pnee/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pnee/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pnee$(EXEEXT): $(pnee_OBJECTS) $(pnee_DEPENDENCIES) $(EXTRA_pnee_DEPENDENCIES) @rm -f pnee$(EXEEXT) $(AM_V_CCLD)$(pnee_LINK) $(pnee_OBJECTS) $(pnee_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnee-callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnee-interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnee-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnee-pnee_impl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnee-support.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< pnee-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-main.o -MD -MP -MF $(DEPDIR)/pnee-main.Tpo -c -o pnee-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-main.Tpo $(DEPDIR)/pnee-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='pnee-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c pnee-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-main.obj -MD -MP -MF $(DEPDIR)/pnee-main.Tpo -c -o pnee-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-main.Tpo $(DEPDIR)/pnee-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='pnee-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` pnee-support.o: support.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-support.o -MD -MP -MF $(DEPDIR)/pnee-support.Tpo -c -o pnee-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-support.Tpo $(DEPDIR)/pnee-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support.c' object='pnee-support.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c pnee-support.obj: support.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-support.obj -MD -MP -MF $(DEPDIR)/pnee-support.Tpo -c -o pnee-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-support.Tpo $(DEPDIR)/pnee-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='support.c' object='pnee-support.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` pnee-interface.o: interface.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-interface.o -MD -MP -MF $(DEPDIR)/pnee-interface.Tpo -c -o pnee-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-interface.Tpo $(DEPDIR)/pnee-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='interface.c' object='pnee-interface.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-interface.o `test -f 'interface.c' || echo '$(srcdir)/'`interface.c pnee-interface.obj: interface.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-interface.obj -MD -MP -MF $(DEPDIR)/pnee-interface.Tpo -c -o pnee-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-interface.Tpo $(DEPDIR)/pnee-interface.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='interface.c' object='pnee-interface.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-interface.obj `if test -f 'interface.c'; then $(CYGPATH_W) 'interface.c'; else $(CYGPATH_W) '$(srcdir)/interface.c'; fi` pnee-callbacks.o: callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-callbacks.o -MD -MP -MF $(DEPDIR)/pnee-callbacks.Tpo -c -o pnee-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-callbacks.Tpo $(DEPDIR)/pnee-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='callbacks.c' object='pnee-callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-callbacks.o `test -f 'callbacks.c' || echo '$(srcdir)/'`callbacks.c pnee-callbacks.obj: callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-callbacks.obj -MD -MP -MF $(DEPDIR)/pnee-callbacks.Tpo -c -o pnee-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-callbacks.Tpo $(DEPDIR)/pnee-callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='callbacks.c' object='pnee-callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-callbacks.obj `if test -f 'callbacks.c'; then $(CYGPATH_W) 'callbacks.c'; else $(CYGPATH_W) '$(srcdir)/callbacks.c'; fi` pnee-pnee_impl.o: pnee_impl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-pnee_impl.o -MD -MP -MF $(DEPDIR)/pnee-pnee_impl.Tpo -c -o pnee-pnee_impl.o `test -f 'pnee_impl.c' || echo '$(srcdir)/'`pnee_impl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-pnee_impl.Tpo $(DEPDIR)/pnee-pnee_impl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pnee_impl.c' object='pnee-pnee_impl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-pnee_impl.o `test -f 'pnee_impl.c' || echo '$(srcdir)/'`pnee_impl.c pnee-pnee_impl.obj: pnee_impl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -MT pnee-pnee_impl.obj -MD -MP -MF $(DEPDIR)/pnee-pnee_impl.Tpo -c -o pnee-pnee_impl.obj `if test -f 'pnee_impl.c'; then $(CYGPATH_W) 'pnee_impl.c'; else $(CYGPATH_W) '$(srcdir)/pnee_impl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pnee-pnee_impl.Tpo $(DEPDIR)/pnee-pnee_impl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pnee_impl.c' object='pnee-pnee_impl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pnee_CFLAGS) $(CFLAGS) -c -o pnee-pnee_impl.obj `if test -f 'pnee_impl.c'; then $(CYGPATH_W) 'pnee_impl.c'; else $(CYGPATH_W) '$(srcdir)/pnee_impl.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-exec-local install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am install-exec-local: $(PNEE) mkdir -p $(DESTDIR)$(PANEL_APPLET_DIR) cp $(PNEE) $(DESTDIR)$(PANEL_APPLET_DIR) # 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: xnee-3.19/pnee/src/interface.c0000664000000000000000000020666410642270301013131 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "callbacks.h" #include "interface.h" #include "support.h" #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) GtkWidget* create_pnee_pref (void) { GtkWidget *pnee_pref; GtkWidget *main_notebook; GtkWidget *vbox1; GtkWidget *general_frame; GtkWidget *alignment5; GtkWidget *table1; GtkWidget *hbox9; GtkWidget *delay_check; GtkObject *spinbutton2_adj; GtkWidget *spinbutton2; GtkWidget *verbose_check; GtkWidget *general_label; GtkWidget *record_frame; GtkWidget *alignment4; GtkWidget *vbox4; GtkWidget *hbox4; GtkWidget *rec_file_label; GtkWidget *entry3; GtkWidget *rec_file_button; GtkWidget *hbox11; GtkWidget *hbox10; GtkWidget *nr_events_label; GtkObject *spinbutton3_adj; GtkWidget *spinbutton3; GtkWidget *hbox11b; GtkWidget *grab_label; GtkWidget *entry5; GtkWidget *record_label; GtkWidget *replay_frame; GtkWidget *alignment2; GtkWidget *vbox3; GtkWidget *hbox3; GtkWidget *repl_file_label; GtkWidget *rep_choose_but; GtkWidget *hbox5; GtkWidget *speed_check; GtkObject *spinbutton1_adj; GtkWidget *spinbutton1; GtkWidget *replay_label; GtkWidget *frame1; GtkWidget *alignment6; GtkWidget *hbox12; GtkWidget *log_label; GtkWidget *log_entry; GtkWidget *log_button; GtkWidget *log_frame; GtkWidget *setting_ok; GtkWidget *settings_label; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); pnee_pref = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (pnee_pref), "Pnee - Preferences"); main_notebook = gtk_notebook_new (); gtk_widget_show (main_notebook); gtk_container_add (GTK_CONTAINER (pnee_pref), main_notebook); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (main_notebook), vbox1); general_frame = gtk_frame_new (NULL); gtk_widget_show (general_frame); gtk_box_pack_start (GTK_BOX (vbox1), general_frame, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (general_frame), GTK_SHADOW_NONE); alignment5 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment5); gtk_container_add (GTK_CONTAINER (general_frame), alignment5); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment5), 0, 0, 12, 0); table1 = gtk_table_new (2, 3, FALSE); gtk_widget_show (table1); gtk_container_add (GTK_CONTAINER (alignment5), table1); hbox9 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox9); gtk_table_attach (GTK_TABLE (table1), hbox9, 0, 1, 1, 2, (GtkAttachOptions) (0), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); delay_check = gtk_check_button_new_with_mnemonic ("Delay"); gtk_widget_show (delay_check); gtk_box_pack_start (GTK_BOX (hbox9), delay_check, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (delay_check), TRUE); spinbutton2_adj = gtk_adjustment_new (3, 0, 10000, 1, 10, 10); spinbutton2 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton2_adj), 1, 0); gtk_widget_show (spinbutton2); gtk_box_pack_start (GTK_BOX (hbox9), spinbutton2, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, spinbutton2, "Delay start of record or replay. (seconds)", NULL); verbose_check = gtk_check_button_new_with_mnemonic ("verbose logging"); gtk_widget_show (verbose_check); gtk_table_attach (GTK_TABLE (table1), verbose_check, 0, 1, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); general_label = gtk_label_new ("General"); gtk_widget_show (general_label); gtk_frame_set_label_widget (GTK_FRAME (general_frame), general_label); gtk_label_set_use_markup (GTK_LABEL (general_label), TRUE); record_frame = gtk_frame_new (NULL); gtk_widget_show (record_frame); gtk_box_pack_start (GTK_BOX (vbox1), record_frame, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (record_frame), GTK_SHADOW_NONE); alignment4 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment4); gtk_container_add (GTK_CONTAINER (record_frame), alignment4); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment4), 0, 0, 12, 0); vbox4 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox4); gtk_container_add (GTK_CONTAINER (alignment4), vbox4); hbox4 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox4); gtk_box_pack_start (GTK_BOX (vbox4), hbox4, TRUE, TRUE, 0); rec_file_label = gtk_label_new ("Record to file"); gtk_widget_show (rec_file_label); gtk_box_pack_start (GTK_BOX (hbox4), rec_file_label, FALSE, FALSE, 0); entry3 = gtk_entry_new (); gtk_widget_show (entry3); gtk_box_pack_start (GTK_BOX (hbox4), entry3, TRUE, TRUE, 0); gtk_editable_set_editable (GTK_EDITABLE (entry3), FALSE); rec_file_button = gtk_button_new_with_mnemonic ("..."); gtk_widget_show (rec_file_button); gtk_box_pack_start (GTK_BOX (hbox4), rec_file_button, FALSE, FALSE, 0); hbox11 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox11); gtk_box_pack_start (GTK_BOX (vbox4), hbox11, TRUE, TRUE, 0); hbox10 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox10); gtk_box_pack_start (GTK_BOX (hbox11), hbox10, TRUE, TRUE, 0); nr_events_label = gtk_label_new ("Events to record"); gtk_widget_show (nr_events_label); gtk_box_pack_start (GTK_BOX (hbox10), nr_events_label, FALSE, FALSE, 0); spinbutton3_adj = gtk_adjustment_new (200, -1, 10000, 1, 10, 10); spinbutton3 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton3_adj), 1, 0); gtk_widget_show (spinbutton3); gtk_box_pack_start (GTK_BOX (hbox10), spinbutton3, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, spinbutton3, "Number of events to record (-1 for ever).", NULL); hbox11b = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox11b); gtk_box_pack_start (GTK_BOX (vbox4), hbox11b, TRUE, TRUE, 0); grab_label = gtk_label_new ("Stop key"); gtk_widget_show (grab_label); gtk_box_pack_start (GTK_BOX (hbox11b), grab_label, FALSE, FALSE, 0); entry5 = gtk_entry_new (); gtk_widget_show (entry5); gtk_box_pack_start (GTK_BOX (hbox11b), entry5, TRUE, TRUE, 0); gtk_widget_set_size_request (entry5, 4, -1); gtk_tooltips_set_tip (tooltips, entry5, "Grab a key to stop recording", NULL); gtk_entry_set_max_length (GTK_ENTRY (entry5), 5); gtk_entry_set_text (GTK_ENTRY (entry5), "F5"); record_label = gtk_label_new ("Record"); gtk_widget_show (record_label); gtk_frame_set_label_widget (GTK_FRAME (record_frame), record_label); gtk_label_set_use_markup (GTK_LABEL (record_label), TRUE); replay_frame = gtk_frame_new (NULL); gtk_widget_show (replay_frame); gtk_box_pack_start (GTK_BOX (vbox1), replay_frame, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (replay_frame), GTK_SHADOW_NONE); alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment2); gtk_container_add (GTK_CONTAINER (replay_frame), alignment2); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment2), 0, 0, 12, 0); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox3); gtk_container_add (GTK_CONTAINER (alignment2), vbox3); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (vbox3), hbox3, TRUE, TRUE, 0); repl_file_label = gtk_label_new ("Replay from file"); gtk_widget_show (repl_file_label); gtk_box_pack_start (GTK_BOX (hbox3), repl_file_label, FALSE, FALSE, 0); rep_choose_but = gtk_file_chooser_button_new ("V\303\244lj en fil", GTK_FILE_CHOOSER_ACTION_OPEN); gtk_widget_show (rep_choose_but); gtk_box_pack_start (GTK_BOX (hbox3), rep_choose_but, TRUE, TRUE, 0); g_object_set (rep_choose_but, "local-only", FALSE, NULL); hbox5 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox5); gtk_box_pack_start (GTK_BOX (vbox3), hbox5, TRUE, TRUE, 0); speed_check = gtk_check_button_new_with_mnemonic ("Replay speed %"); gtk_widget_show (speed_check); gtk_box_pack_start (GTK_BOX (hbox5), speed_check, FALSE, FALSE, 0); spinbutton1_adj = gtk_adjustment_new (100, 1, 10000, 1, 10, 10); spinbutton1 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton1_adj), 1, 0); gtk_widget_show (spinbutton1); gtk_box_pack_start (GTK_BOX (hbox5), spinbutton1, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, spinbutton1, "Set a different speed", NULL); replay_label = gtk_label_new ("Replay"); gtk_widget_show (replay_label); gtk_frame_set_label_widget (GTK_FRAME (replay_frame), replay_label); gtk_label_set_use_markup (GTK_LABEL (replay_label), TRUE); frame1 = gtk_frame_new (NULL); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_NONE); alignment6 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment6); gtk_container_add (GTK_CONTAINER (frame1), alignment6); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment6), 0, 0, 12, 0); hbox12 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox12); gtk_container_add (GTK_CONTAINER (alignment6), hbox12); log_label = gtk_label_new ("Log to file"); gtk_widget_show (log_label); gtk_box_pack_start (GTK_BOX (hbox12), log_label, FALSE, FALSE, 0); log_entry = gtk_entry_new (); gtk_widget_show (log_entry); gtk_box_pack_start (GTK_BOX (hbox12), log_entry, TRUE, TRUE, 0); log_button = gtk_button_new_with_mnemonic ("..."); gtk_widget_show (log_button); gtk_box_pack_start (GTK_BOX (hbox12), log_button, FALSE, FALSE, 0); log_frame = gtk_label_new ("Logging"); gtk_widget_show (log_frame); gtk_frame_set_label_widget (GTK_FRAME (frame1), log_frame); gtk_label_set_use_markup (GTK_LABEL (log_frame), TRUE); setting_ok = gtk_button_new_with_mnemonic ("OK"); gtk_widget_show (setting_ok); gtk_box_pack_start (GTK_BOX (vbox1), setting_ok, FALSE, FALSE, 0); settings_label = gtk_label_new ("Settings"); gtk_widget_show (settings_label); gtk_notebook_set_tab_label (GTK_NOTEBOOK (main_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (main_notebook), 0), settings_label); g_signal_connect_swapped ((gpointer) delay_check, "toggled", G_CALLBACK (on_delay_check_toggled), GTK_OBJECT (delay_check)); g_signal_connect_swapped ((gpointer) spinbutton2, "value_changed", G_CALLBACK (on_spinbutton2_change_value), GTK_OBJECT (spinbutton2)); g_signal_connect_swapped ((gpointer) verbose_check, "toggled", G_CALLBACK (on_verbose_check_toggled), GTK_OBJECT (verbose_check)); g_signal_connect_swapped ((gpointer) rec_file_button, "clicked", G_CALLBACK (on_rec_file_button_clicked), GTK_OBJECT (rec_file_button)); g_signal_connect_swapped ((gpointer) spinbutton3, "value_changed", G_CALLBACK (on_spinbutton3_value_changed), GTK_OBJECT (spinbutton3)); g_signal_connect_swapped ((gpointer) entry5, "changed", G_CALLBACK (on_entry5_changed), GTK_OBJECT (entry5)); g_signal_connect_swapped ((gpointer) rep_choose_but, "file_activated", G_CALLBACK (on_rep_choose_but_file_activated), GTK_OBJECT (rep_choose_but)); g_signal_connect_swapped ((gpointer) rep_choose_but, "selection_changed", G_CALLBACK (on_rep_choose_but_file_activated), GTK_OBJECT (rep_choose_but)); g_signal_connect_swapped ((gpointer) speed_check, "toggled", G_CALLBACK (on_speed_check_toggled), GTK_OBJECT (speed_check)); g_signal_connect_swapped ((gpointer) spinbutton1, "value_changed", G_CALLBACK (on_spinbutton1_value_changed), GTK_OBJECT (spinbutton1)); g_signal_connect_swapped ((gpointer) log_button, "clicked", G_CALLBACK (on_log_file_button_clicked), GTK_OBJECT (log_button)); g_signal_connect_swapped ((gpointer) setting_ok, "clicked", G_CALLBACK (on_setting_ok_clicked), GTK_OBJECT (pnee_pref)); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (pnee_pref, pnee_pref, "pnee_pref"); GLADE_HOOKUP_OBJECT (pnee_pref, main_notebook, "main_notebook"); GLADE_HOOKUP_OBJECT (pnee_pref, vbox1, "vbox1"); GLADE_HOOKUP_OBJECT (pnee_pref, general_frame, "general_frame"); GLADE_HOOKUP_OBJECT (pnee_pref, alignment5, "alignment5"); GLADE_HOOKUP_OBJECT (pnee_pref, table1, "table1"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox9, "hbox9"); GLADE_HOOKUP_OBJECT (pnee_pref, delay_check, "delay_check"); GLADE_HOOKUP_OBJECT (pnee_pref, spinbutton2, "spinbutton2"); GLADE_HOOKUP_OBJECT (pnee_pref, verbose_check, "verbose_check"); GLADE_HOOKUP_OBJECT (pnee_pref, general_label, "general_label"); GLADE_HOOKUP_OBJECT (pnee_pref, record_frame, "record_frame"); GLADE_HOOKUP_OBJECT (pnee_pref, alignment4, "alignment4"); GLADE_HOOKUP_OBJECT (pnee_pref, vbox4, "vbox4"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox4, "hbox4"); GLADE_HOOKUP_OBJECT (pnee_pref, rec_file_label, "rec_file_label"); GLADE_HOOKUP_OBJECT (pnee_pref, entry3, "entry3"); GLADE_HOOKUP_OBJECT (pnee_pref, rec_file_button, "rec_file_button"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox11, "hbox11"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox10, "hbox10"); GLADE_HOOKUP_OBJECT (pnee_pref, nr_events_label, "nr_events_label"); GLADE_HOOKUP_OBJECT (pnee_pref, spinbutton3, "spinbutton3"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox11b, "hbox11b"); GLADE_HOOKUP_OBJECT (pnee_pref, grab_label, "grab_label"); GLADE_HOOKUP_OBJECT (pnee_pref, entry5, "entry5"); GLADE_HOOKUP_OBJECT (pnee_pref, record_label, "record_label"); GLADE_HOOKUP_OBJECT (pnee_pref, replay_frame, "replay_frame"); GLADE_HOOKUP_OBJECT (pnee_pref, alignment2, "alignment2"); GLADE_HOOKUP_OBJECT (pnee_pref, vbox3, "vbox3"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox3, "hbox3"); GLADE_HOOKUP_OBJECT (pnee_pref, repl_file_label, "repl_file_label"); GLADE_HOOKUP_OBJECT (pnee_pref, rep_choose_but, "rep_choose_but"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox5, "hbox5"); GLADE_HOOKUP_OBJECT (pnee_pref, speed_check, "speed_check"); GLADE_HOOKUP_OBJECT (pnee_pref, spinbutton1, "spinbutton1"); GLADE_HOOKUP_OBJECT (pnee_pref, replay_label, "replay_label"); GLADE_HOOKUP_OBJECT (pnee_pref, frame1, "frame1"); GLADE_HOOKUP_OBJECT (pnee_pref, alignment6, "alignment6"); GLADE_HOOKUP_OBJECT (pnee_pref, hbox12, "hbox12"); GLADE_HOOKUP_OBJECT (pnee_pref, log_label, "log_label"); GLADE_HOOKUP_OBJECT (pnee_pref, log_entry, "log_entry"); GLADE_HOOKUP_OBJECT (pnee_pref, log_button, "log_button"); GLADE_HOOKUP_OBJECT (pnee_pref, log_frame, "log_frame"); GLADE_HOOKUP_OBJECT (pnee_pref, setting_ok, "setting_ok"); GLADE_HOOKUP_OBJECT (pnee_pref, settings_label, "settings_label"); GLADE_HOOKUP_OBJECT_NO_REF (pnee_pref, tooltips, "tooltips"); return pnee_pref; } GtkWidget* create_filechooserdialog1 (void) { GtkWidget *filechooserdialog1; GtkWidget *dialog_vbox1; GtkWidget *dialog_action_area1; GtkWidget *f_c_button; GtkWidget *f_open_button; filechooserdialog1 = gtk_file_chooser_dialog_new ("", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, NULL); g_object_set (filechooserdialog1, "local-only", FALSE, "show-hidden", TRUE, NULL); gtk_window_set_type_hint (GTK_WINDOW (filechooserdialog1), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox1 = GTK_DIALOG (filechooserdialog1)->vbox; gtk_widget_show (dialog_vbox1); dialog_action_area1 = GTK_DIALOG (filechooserdialog1)->action_area; gtk_widget_show (dialog_action_area1); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); f_c_button = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (f_c_button); gtk_dialog_add_action_widget (GTK_DIALOG (filechooserdialog1), f_c_button, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (f_c_button, GTK_CAN_DEFAULT); f_open_button = gtk_button_new_from_stock ("gtk-open"); gtk_widget_show (f_open_button); gtk_dialog_add_action_widget (GTK_DIALOG (filechooserdialog1), f_open_button, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (f_open_button, GTK_CAN_DEFAULT); g_signal_connect_swapped ((gpointer) f_c_button, "clicked", G_CALLBACK (on_f_c_button_clicked), GTK_OBJECT (f_c_button)); g_signal_connect_swapped ((gpointer) f_open_button, "clicked", G_CALLBACK (on_f_open_button_clicked), GTK_OBJECT (f_open_button)); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (filechooserdialog1, filechooserdialog1, "filechooserdialog1"); GLADE_HOOKUP_OBJECT_NO_REF (filechooserdialog1, dialog_vbox1, "dialog_vbox1"); GLADE_HOOKUP_OBJECT_NO_REF (filechooserdialog1, dialog_action_area1, "dialog_action_area1"); GLADE_HOOKUP_OBJECT (filechooserdialog1, f_c_button, "f_c_button"); GLADE_HOOKUP_OBJECT (filechooserdialog1, f_open_button, "f_open_button"); gtk_widget_grab_default (f_open_button); return filechooserdialog1; } GtkWidget* create_pnee_about (void) { GtkWidget *pnee_about; const gchar *authors[] = { "Henrik Sandklef ", NULL }; const gchar *documenters[] = { "Xnee manual and other docs are written by Henrik Sandklef ", NULL }; const gchar *artists[] = { "Luis Santander ", NULL }; /* TRANSLATORS: Replace this string with your names, one name per line. */ gchar *translators = "None, \nplease contact hesa@gnu.org if you want to contribute"; GdkPixbuf *pnee_about_logo_pixbuf; GtkWidget *dialog_vbox2; pnee_about = gtk_about_dialog_new (); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG (pnee_about), VERSION); gtk_about_dialog_set_name (GTK_ABOUT_DIALOG (pnee_about), "Pnee"); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (pnee_about), "\302\251 2005, 2006 Henrik Sandklef \n\302\251 2006 Luis Santander (Xnee logo)"); gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG (pnee_about), "Pnee is a Gnome Panel Applet for GNU Xnee \n....for more features check out gnee and cnee\n"); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG (pnee_about), " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. \n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n Preamble\n\n The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works. By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users. We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors. You can apply it to\nyour programs, too.\n\n When we speak of free software, we are referring to freedom, not\nprice. Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights. Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received. You must make sure that they, too, receive\nor can get the source code. And you must show them these terms so they\nknow their rights.\n\n Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software. For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so. This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software. The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable. Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts. If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary. To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n The precise terms and conditions for copying, distribution and\nmodification follow.\n\n TERMS AND CONDITIONS\n\n 0. Definitions.\n\n \"This License\" refers to version 3 of the GNU General Public License.\n\n \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n \n \"The Program\" refers to any copyrightable work licensed under this\nLicense. Each licensee is addressed as \"you\". \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy. The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy. Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies. Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License. If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n 1. Source Code.\n\n The \"source code\" for a work means the preferred form of the work\nfor making modifications to it. \"Object code\" means any non-source\nform of a work.\n\n A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form. A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities. However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work. For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n The Corresponding Source for a work in source code form is that\nsame work.\n\n 2. Basic Permissions.\n\n All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met. This License explicitly affirms your unlimited\npermission to run the unmodified Program. The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work. This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force. You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright. Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n Conveying under any other circumstances is permitted solely under\nthe conditions stated below. Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n 4. Conveying Verbatim Copies.\n\n You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n 5. Conveying Modified Source Versions.\n\n You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n a) The work must carry prominent notices stating that you modified\n it, and giving a relevant date.\n\n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under section\n 7. This requirement modifies the requirement in section 4 to\n \"keep intact all notices\".\n\n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section 7\n additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n\n d) If the work has interactive user interfaces, each must display\n Appropriate Legal Notices; however, if the Program has interactive\n interfaces that do not display Appropriate Legal Notices, your\n work need not make them do so.\n\n A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit. Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n 6. Conveying Non-Source Forms.\n\n You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n\n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that product\n model, to give anyone who possesses the object code either (1) a\n copy of the Corresponding Source for all the software in the\n product that is covered by this License, on a durable physical\n medium customarily used for software interchange, for a price no\n more than your reasonable cost of physically performing this\n conveying of source, or (2) access to copy the\n Corresponding Source from a network server at no charge.\n\n c) Convey individual copies of the object code with a copy of the\n written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially, and\n only if you received the object code with such an offer, in accord\n with subsection 6b.\n\n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to the\n Corresponding Source in the same way through the same place at no\n further charge. You need not require recipients to copy the\n Corresponding Source along with the object code. If the place to\n copy the object code is a network server, the Corresponding Source\n may be on a different server (operated by you or a third party)\n that supports equivalent copying facilities, provided you maintain\n clear directions next to the object code saying where to find the\n Corresponding Source. Regardless of what server hosts the\n Corresponding Source, you remain obligated to ensure that it is\n available for as long as needed to satisfy these requirements.\n\n e) Convey the object code using peer-to-peer transmission, provided\n you inform other peers where the object code and Corresponding\n Source of the work are being offered to the general public at no\n charge under subsection 6d.\n\n A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling. In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage. For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product. A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source. The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed. Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n 7. Additional Terms.\n\n \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law. If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit. (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.) You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n a) Disclaiming warranty or limiting liability differently from the\n terms of sections 15 and 16 of this License; or\n\n b) Requiring preservation of specified reasonable legal notices or\n author attributions in that material or in the Appropriate Legal\n Notices displayed by works containing it; or\n\n c) Prohibiting misrepresentation of the origin of that material, or\n requiring that modified versions of such material be marked in\n reasonable ways as different from the original version; or\n\n d) Limiting the use for publicity purposes of names of licensors or\n authors of the material; or\n\n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n\n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified versions of\n it) with contractual assumptions of liability to the recipient, for\n any liability that these contractual assumptions directly impose on\n those licensors and authors.\n\n All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10. If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term. If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n 8. Termination.\n\n You may not propagate or modify a covered work except as expressly\nprovided under this License. Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License. If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n 9. Acceptance Not Required for Having Copies.\n\n You are not required to accept this License in order to receive or\nrun a copy of the Program. Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance. However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work. These actions infringe copyright if you do\nnot accept this License. Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n 10. Automatic Licensing of Downstream Recipients.\n\n Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License. You are not responsible\nfor enforcing compliance by third parties with this License.\n\n An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations. If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License. For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n 11. Patents.\n\n A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based. The\nwork thus licensed is called the contributor's \"contributor version\".\n\n A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version. For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement). To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n \n If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License. You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n 12. No Surrender of Others' Freedom.\n\n If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License. If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all. For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n 13. Use with the GNU Affero General Public License.\n\n Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work. The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n 14. Revised Versions of this License.\n\n The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time. Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation. If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n Later license versions may give you additional or different\npermissions. However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n 15. Disclaimer of Warranty.\n\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n 16. Limitation of Liability.\n\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n 17. Interpretation of Sections 15 and 16.\n\n If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n END OF TERMS AND CONDITIONS\n\n How to Apply These Terms to Your New Programs\n\n If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n To do so, attach the following notices to the program. It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n \n Copyright (C) \n\n This program is free software: you can redistribute it and/or modify\n it under the terms of the GNU General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU General Public License for more details.\n\n You should have received a copy of the GNU General Public License\n along with this program. If not, see .\n\nAlso add information on how to contact you by electronic and paper mail.\n\n If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n Copyright (C) \n This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n This is free software, and you are welcome to redistribute it\n under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License. Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n.\n\n The GNU General Public License does not permit incorporating your program\ninto proprietary programs. If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library. If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License. But first, please read\n.\n\n\n\n GNU LESSER GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. \n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n 0. Additional Definitions. \n\n As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library. The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n 1. Exception to Section 3 of the GNU GPL.\n\n You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n 2. Conveying Modified Versions.\n\n If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n a) under this License, provided that you make a good faith effort to\n ensure that, in the event an Application does not supply the\n function or data, the facility still operates, and performs\n whatever part of its purpose remains meaningful, or\n\n b) under the GNU GPL, with none of the additional permissions of\n this License applicable to that copy.\n\n 3. Object Code Incorporating Material from Library Header Files.\n\n The object code form of an Application may incorporate material from\na header file that is part of the Library. You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n a) Give prominent notice with each copy of the object code that the\n Library is used in it and that the Library and its use are\n covered by this License.\n\n b) Accompany the object code with a copy of the GNU GPL and this license\n document.\n\n 4. Combined Works.\n\n You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n a) Give prominent notice with each copy of the Combined Work that\n the Library is used in it and that the Library and its use are\n covered by this License.\n\n b) Accompany the Combined Work with a copy of the GNU GPL and this license\n document.\n\n c) For a Combined Work that displays copyright notices during\n execution, include the copyright notice for the Library among\n these notices, as well as a reference directing the user to the\n copies of the GNU GPL and this license document.\n\n d) Do one of the following:\n\n 0) Convey the Minimal Corresponding Source under the terms of this\n License, and the Corresponding Application Code in a form\n suitable for, and under terms that permit, the user to\n recombine or relink the Application with a modified version of\n the Linked Version to produce a modified Combined Work, in the\n manner specified by section 6 of the GNU GPL for conveying\n Corresponding Source.\n\n 1) Use a suitable shared library mechanism for linking with the\n Library. A suitable mechanism is one that (a) uses at run time\n a copy of the Library already present on the user's computer\n system, and (b) will operate properly with a modified version\n of the Library that is interface-compatible with the Linked\n Version. \n\n e) Provide Installation Information, but only if you would otherwise\n be required to provide such information under section 6 of the\n GNU GPL, and only to the extent that such information is\n necessary to install and execute a modified version of the\n Combined Work produced by recombining or relinking the\n Application with a modified version of the Linked Version. (If\n you use option 4d0, the Installation Information must accompany\n the Minimal Corresponding Source and Corresponding Application\n Code. If you use option 4d1, you must provide the Installation\n Information in the manner specified by section 6 of the GNU GPL\n for conveying Corresponding Source.)\n\n 5. Combined Libraries.\n\n You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n a) Accompany the combined library with a copy of the same work based\n on the Library, uncombined with any other library facilities,\n conveyed under the terms of this License.\n\n b) Give prominent notice with the combined library that part of it\n is a work based on the Library, and explaining where to find the\n accompanying uncombined form of the same work.\n\n 6. Revised Versions of the GNU Lesser General Public License.\n\n The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (pnee_about), "http://www.gnu.org/software/xnee"); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (pnee_about), authors); gtk_about_dialog_set_documenters (GTK_ABOUT_DIALOG (pnee_about), documenters); gtk_about_dialog_set_artists (GTK_ABOUT_DIALOG (pnee_about), artists); gtk_about_dialog_set_translator_credits (GTK_ABOUT_DIALOG (pnee_about), translators); pnee_about_logo_pixbuf = create_pixbuf ("xnee.xpm"); gtk_about_dialog_set_logo (GTK_ABOUT_DIALOG (pnee_about), pnee_about_logo_pixbuf); dialog_vbox2 = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (pnee_about), dialog_vbox2); g_signal_connect_swapped ((gpointer) pnee_about, "response", G_CALLBACK (on_pnee_about_response), GTK_OBJECT (pnee_about)); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (pnee_about, pnee_about, "pnee_about"); GLADE_HOOKUP_OBJECT (pnee_about, dialog_vbox2, "dialog_vbox2"); return pnee_about; } GtkWidget* create_delay (void) { GtkWidget *delay; GtkWidget *del_progr_win; GtkWidget *delay_progr; delay = gtk_window_new (GTK_WINDOW_POPUP); gtk_container_set_border_width (GTK_CONTAINER (delay), 3); gtk_window_set_title (GTK_WINDOW (delay), "pnee delay"); gtk_window_set_position (GTK_WINDOW (delay), GTK_WIN_POS_CENTER); del_progr_win = gtk_vbox_new (FALSE, 0); gtk_widget_show (del_progr_win); gtk_container_add (GTK_CONTAINER (delay), del_progr_win); delay_progr = gtk_progress_bar_new (); gtk_widget_show (delay_progr); gtk_box_pack_start (GTK_BOX (del_progr_win), delay_progr, FALSE, FALSE, 0); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (delay_progr), "Delayd start of pnee"); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (delay, delay, "delay"); GLADE_HOOKUP_OBJECT (delay, del_progr_win, "del_progr_win"); GLADE_HOOKUP_OBJECT (delay, delay_progr, "delay_progr"); return delay; } GtkWidget* create_error_dialog (void) { GtkWidget *error_dialog; GtkWidget *vbox5; GtkWidget *vbox6; GtkWidget *vbox7; GtkWidget *table2; GtkWidget *err_nr_label; GtkWidget *err_sol_label; GtkWidget *err_descr_label; GtkWidget *label9; GtkWidget *label8; GtkWidget *label7; GtkWidget *error_ok; error_dialog = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (error_dialog), "pnee - error"); gtk_window_set_default_size (GTK_WINDOW (error_dialog), 120, -1); vbox5 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox5); gtk_container_add (GTK_CONTAINER (error_dialog), vbox5); vbox6 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox6); gtk_box_pack_start (GTK_BOX (vbox5), vbox6, TRUE, TRUE, 0); vbox7 = gtk_vbox_new (FALSE, 12); gtk_widget_show (vbox7); gtk_box_pack_start (GTK_BOX (vbox6), vbox7, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox7), 12); table2 = gtk_table_new (3, 2, FALSE); gtk_widget_show (table2); gtk_box_pack_start (GTK_BOX (vbox7), table2, TRUE, TRUE, 0); err_nr_label = gtk_label_new (""); gtk_widget_show (err_nr_label); gtk_table_attach (GTK_TABLE (table2), err_nr_label, 1, 2, 2, 3, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (err_nr_label), 0, 0.5); err_sol_label = gtk_label_new (""); gtk_widget_show (err_sol_label); gtk_table_attach (GTK_TABLE (table2), err_sol_label, 1, 2, 1, 2, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (err_sol_label), 0, 0.5); err_descr_label = gtk_label_new (""); gtk_widget_show (err_descr_label); gtk_table_attach (GTK_TABLE (table2), err_descr_label, 1, 2, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (err_descr_label), 0, 0.5); label9 = gtk_label_new ("Number"); gtk_widget_show (label9); gtk_table_attach (GTK_TABLE (table2), label9, 0, 1, 2, 3, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label9), TRUE); gtk_misc_set_alignment (GTK_MISC (label9), 0, 0.5); label8 = gtk_label_new ("Solution"); gtk_widget_show (label8); gtk_table_attach (GTK_TABLE (table2), label8, 0, 1, 1, 2, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label8), TRUE); gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5); label7 = gtk_label_new ("Description"); gtk_widget_show (label7); gtk_table_attach (GTK_TABLE (table2), label7, 0, 1, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label7), TRUE); gtk_misc_set_alignment (GTK_MISC (label7), 0, 0.5); error_ok = gtk_button_new_with_mnemonic ("OK"); gtk_widget_show (error_ok); gtk_box_pack_start (GTK_BOX (vbox5), error_ok, FALSE, FALSE, 0); g_signal_connect_swapped ((gpointer) error_ok, "clicked", G_CALLBACK (on_error_ok_clicked), GTK_OBJECT (error_dialog)); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (error_dialog, error_dialog, "error_dialog"); GLADE_HOOKUP_OBJECT (error_dialog, vbox5, "vbox5"); GLADE_HOOKUP_OBJECT (error_dialog, vbox6, "vbox6"); GLADE_HOOKUP_OBJECT (error_dialog, vbox7, "vbox7"); GLADE_HOOKUP_OBJECT (error_dialog, table2, "table2"); GLADE_HOOKUP_OBJECT (error_dialog, err_nr_label, "err_nr_label"); GLADE_HOOKUP_OBJECT (error_dialog, err_sol_label, "err_sol_label"); GLADE_HOOKUP_OBJECT (error_dialog, err_descr_label, "err_descr_label"); GLADE_HOOKUP_OBJECT (error_dialog, label9, "label9"); GLADE_HOOKUP_OBJECT (error_dialog, label8, "label8"); GLADE_HOOKUP_OBJECT (error_dialog, label7, "label7"); GLADE_HOOKUP_OBJECT (error_dialog, error_ok, "error_ok"); return error_dialog; } xnee-3.19/pnee/src/callbacks.c0000664000000000000000000004607111661222314013105 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2005, 2006, 2007, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifdef HAVE_CONFIG_H # include #endif #include #include "callbacks.h" #include "interface.h" #include "support.h" #include "libxnee/xnee.h" #include "libxnee/print_varargs.h" #include "libxnee/print.h" #include "libxnee/xnee_setget.h" #include "pnee_impl.h" extern xnee_data *xd; extern GtkWidget *pnee_pref; static int use_delay = 1 ; static int use_display = 0 ; static int use_speed = 0 ; GtkWidget* fs = NULL ; gchar *global_filename; gchar *display_string ; extern xnee_data *xd ; enum { PNEE_FILE_NONE , PNEE_FILE_RECORD , PNEE_FILE_REPLAY , PNEE_FILE_VERBOSE } pnee_files; int file_choosen = PNEE_FILE_NONE; extern GtkWidget *my_err_dial; char * pnee_get_default_filename(void) { char *tmp_dir = NULL; char *user_name = NULL; const char *default_tmp_dir = "/tmp/"; const char *default_user_name = "user"; const char *file_prefix = "pnee_"; const char *file_suffix = ".xns"; char *ret_str; int size = 0 ; XNEE_VERBOSE_ENTER_FUNCTION(); /* set the dir */ tmp_dir = getenv("TMPIR"); if (tmp_dir==NULL) { tmp_dir= (char *) default_tmp_dir; } /* set the user name */ user_name = getlogin(); if (user_name==NULL) { user_name= getenv("USER"); } if (user_name==NULL) { user_name = (char *) default_user_name; } #define PNEE_CHECK_CHAR_PTR(a) { if ( a==NULL) { fprintf(stderr, "Couldn't put together default file name\n") ; return NULL; } } PNEE_CHECK_CHAR_PTR(tmp_dir); PNEE_CHECK_CHAR_PTR(user_name); PNEE_CHECK_CHAR_PTR(file_prefix); PNEE_CHECK_CHAR_PTR(file_suffix); size = strlen (tmp_dir) + strlen (user_name) + strlen (file_prefix) + strlen (file_suffix) ; if (size <= 0 ) { fprintf (stderr, "Trying to allocate size %d\n", size); return NULL; } ret_str = (char*) malloc (size*sizeof(char)); if (ret_str==NULL) { return NULL; } strncpy (ret_str, tmp_dir, size); strncat (ret_str, file_prefix, size - strlen(ret_str)); strncat (ret_str, user_name, size - strlen(ret_str)); strncat (ret_str, file_suffix, size - strlen(ret_str)); return ret_str; } char * pnee_get_default_err_name(void) { char *tmp_dir = NULL; char *user_name = NULL; const char *default_tmp_dir = "/tmp/"; const char *default_user_name = "user"; const char *file_prefix = "pnee_"; const char *file_suffix = ".err"; char *ret_str; int size = 0 ; XNEE_VERBOSE_ENTER_FUNCTION(); /* set the dir */ tmp_dir = getenv("TMPIR"); if (tmp_dir==NULL) { tmp_dir= (char *) default_tmp_dir; } /* set the user name */ user_name = getlogin(); if (user_name==NULL) { user_name= getenv("USER"); } if (user_name==NULL) { user_name = (char *) default_user_name; } size = strlen (tmp_dir) + strlen (user_name) + strlen (file_prefix) + strlen (file_suffix) ; ret_str = (char*) malloc (size*sizeof(char)); if (ret_str==NULL) { return NULL; } strncpy (ret_str, tmp_dir, size); strncat (ret_str, file_prefix, size - strlen(ret_str)); strncat (ret_str, user_name, size - strlen(ret_str)); strncat (ret_str, file_suffix, size - strlen(ret_str)); return ret_str; } void pnee_set_rec_file(char *filename) { GtkEntry *file_text ; XNEE_VERBOSE_ENTER_FUNCTION(); file_text = (GtkEntry*) lookup_widget(GTK_WIDGET(pnee_applet->pnee_pref), "entry3"); xnee_verbose((xd, " setting filename to gui: %s\n", filename)); gtk_entry_set_text (file_text, filename); xnee_verbose((xd, " setting filename in xd: %s\n", filename)); xnee_set_out_name (xd, filename); XNEE_VERBOSE_LEAVE_FUNCTION(); } void pnee_set_rep_file(char *filename) { GtkFileChooserButton *file_text ; XNEE_VERBOSE_ENTER_FUNCTION(); if (filename!=NULL) { _IN; file_text = (GtkFileChooserButton*) lookup_widget(GTK_WIDGET(pnee_applet->pnee_pref), "rep_choose_but"); _OUT; _IN; gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(file_text), filename); _OUT; xnee_verbose((xd, " setting date name to:%s\n", filename)); xnee_set_data_name (xd, filename); } XNEE_VERBOSE_LEAVE_FUNCTION(); } void pnee_set_err_file(char *filename) { GtkFileChooserButton *file_text ; XNEE_VERBOSE_ENTER_FUNCTION(); file_text = (GtkEntry*) lookup_widget(GTK_WIDGET(pnee_applet->pnee_pref), "log_entry"); if (file_text!=NULL) { xnee_verbose((xd, " setting filename to gui: %s\n", filename)); gtk_entry_set_text (file_text, filename); xnee_verbose((xd, " setting (err) filename in xd: %s\n", filename)); xnee_set_err_name (xd, filename); } else { xnee_verbose((xd, "Failed to get text entry for ERROR\n")); } XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_setting_ok_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_widget_hide (pnee_applet->pnee_pref); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_verbose_check_toggled (GtkToggleButton *togglebutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); if (gtk_toggle_button_get_active(togglebutton)) { xnee_set_verbose(xd); XNEE_VERBOSE_IN_FUNCTION("Setting verbose"); } else { XNEE_VERBOSE_IN_FUNCTION("Unsetting verbose"); xnee_unset_verbose(xd); } XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_display_check_toggled (GtkToggleButton *togglebutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); if (gtk_toggle_button_get_active(togglebutton)) { xnee_set_display_name(xd, display_string); XNEE_VERBOSE_IN_FUNCTION("Setting display"); use_display = 1 ; } else { xnee_set_display_name(xd, NULL); XNEE_VERBOSE_IN_FUNCTION("Unsetting display (usiong NULL)"); use_display = 0 ; } XNEE_VERBOSE_LEAVE_FUNCTION(); } void pnee_set_interval (GtkToggleButton *togglebutton, gpointer user_data) { gint delay = 0 ; GtkWidget *window=NULL; XNEE_VERBOSE_ENTER_FUNCTION(); if ( use_delay ) { if (user_data) { window = lookup_widget(user_data, "spinbutton2"); } if (window!=NULL) { delay = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(window)); } } else { delay = 0 ; } xnee_set_interval (xd, (int)delay) ; xnee_verbose((xd, " -- : setting delay %d\n", delay)); xnee_verbose((xd, "=================== Setting delay=%d\n", delay)); XNEE_VERBOSE_LEAVE_FUNCTION(); return ; } void pnee_set_events_to_record (GtkToggleButton *togglebutton, gpointer user_data) { gint nr = 0 ; GtkWidget *window=NULL; XNEE_VERBOSE_ENTER_FUNCTION(); if (user_data) { window = lookup_widget(user_data, "spinbutton3"); } if (window) { nr = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(window)); xnee_set_events_max (xd, nr) ; xnee_verbose((xd, " -- : setting events to record: %d\n", nr)); } XNEE_VERBOSE_LEAVE_FUNCTION(); return ; } void pnee_set_speed (GtkToggleButton *togglebutton, gpointer user_data) { gint speed = 0 ; GtkWidget *window=NULL; XNEE_VERBOSE_ENTER_FUNCTION(); if (user_data) { window = lookup_widget(user_data, "spinbutton1"); } if (window) { speed = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(window)); xnee_set_replay_speed (xd, speed) ; xnee_verbose((xd, " -- : setting replay speed: %d\n", speed)); } XNEE_VERBOSE_LEAVE_FUNCTION(); return ; } void on_delay_check_toggled (GtkToggleButton *togglebutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togglebutton))) { use_delay = 1; pnee_set_interval(NULL, user_data); } else { xnee_verbose((xd, " --on_delay_check_toggled: setting default 0\n")); use_delay = 0; xnee_verbose((xd, "***** 346 delay=%d", 0)); xnee_set_interval (xd, 0) ; } XNEE_VERBOSE_LEAVE_FUNCTION(); return; } void on_speed_check_toggled (GtkToggleButton *togglebutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(togglebutton))) { use_speed = 1; pnee_set_speed(togglebutton, user_data); } else { xnee_verbose((xd, " --on_delay_check_toggled: setting default speed 100 \n")); use_speed = 0; xnee_set_replay_speed (xd, 100) ; } XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_feedback_button_toggled (GtkToggleButton *togglebutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_faked_rec_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); pnee_rec_pressed(); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_faked_rep_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); pnee_rep_pressed(); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_spinbutton2_change_value (GtkSpinButton *spinbutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); pnee_set_interval(NULL, user_data); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_spinbutton3_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); pnee_set_events_to_record(NULL, user_data); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_spinbutton1_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); pnee_set_speed(NULL, user_data); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_rec_file_button_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_file_chooser_set_action (GTK_FILE_CHOOSER(fs),GTK_FILE_CHOOSER_ACTION_SAVE); gtk_widget_show (fs); file_choosen=PNEE_FILE_RECORD; XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_rep_file_button_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_file_chooser_set_action (GTK_FILE_CHOOSER(fs),GTK_FILE_CHOOSER_ACTION_OPEN); gtk_widget_show (fs); file_choosen=PNEE_FILE_REPLAY; XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_f_cancel_button_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_widget_hide (fs); XNEE_VERBOSE_LEAVE_FUNCTION(); file_choosen=PNEE_FILE_NONE; } void on_f_ok_button_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_widget_hide (fs); global_filename = strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fs))); if ( file_choosen == PNEE_FILE_RECORD ) { XNEE_VERBOSE_IN_FUNCTION("got rec file "); xnee_verbose((xd, "rec file: %s\n", GCHAR_TO_CHAR(global_filename))); xnee_set_out_name (xd, GCHAR_TO_CHAR(global_filename)); pnee_set_rec_file (GCHAR_TO_CHAR(global_filename)); } else if ( file_choosen == PNEE_FILE_REPLAY ) { XNEE_VERBOSE_IN_FUNCTION("got rep file "); xnee_set_data_name(xd, GCHAR_TO_CHAR(global_filename)); pnee_set_rep_file (GCHAR_TO_CHAR(global_filename)); } else if ( file_choosen == PNEE_FILE_VERBOSE ) { XNEE_VERBOSE_IN_FUNCTION("got verbose file "); xnee_set_err_name(xd, GCHAR_TO_CHAR(global_filename)); pnee_set_err_file (GCHAR_TO_CHAR(global_filename)); xnee_open_err_file(xd); } else { XNEE_VERBOSE_IN_FUNCTION("que?? "); } XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_entry2_editing_done (GtkEditable *editable, gpointer user_data) { /* replay */ XNEE_VERBOSE_ENTER_FUNCTION(); global_filename = GCHAR_TO_CHAR(gtk_entry_get_text (GTK_ENTRY(user_data))); xnee_verbose((xd, "replay file changed to: %s\n", global_filename)); xnee_set_data_name (xd, global_filename); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_entry3_editing_done (GtkEditable *editable, gpointer user_data) { /* record */ XNEE_VERBOSE_ENTER_FUNCTION(); global_filename = GCHAR_TO_CHAR(gtk_entry_get_text (GTK_ENTRY(user_data))); xnee_verbose((xd, "record file changed to: %s\n", global_filename)); xnee_set_out_name (xd, global_filename); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_entry4_changed (GtkEditable *editable, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); display_string = GCHAR_TO_CHAR(gtk_entry_get_text (GTK_ENTRY(user_data))); xnee_verbose((xd, "display: %s\n", display_string)); xnee_set_display_name(xd, display_string); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_verbose_f_sel_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); file_choosen=PNEE_FILE_VERBOSE; gtk_widget_show (fs); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_use_display_ok_clicked (GtkButton *button, gpointer user_data) { } void on_entry1_changed (GtkEditable *editable, gpointer user_data) { char * my_string; XNEE_VERBOSE_ENTER_FUNCTION(); my_string = GCHAR_TO_CHAR(gtk_entry_get_text (GTK_ENTRY(user_data))); xnee_verbose((xd, "verbose file: %s\n", my_string)); xnee_set_err_name(xd, my_string); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_entry5_changed (GtkEditable *editable, gpointer user_data) { char * my_key; XNEE_VERBOSE_ENTER_FUNCTION(); my_key = GCHAR_TO_CHAR(gtk_entry_get_text (GTK_ENTRY(user_data))); xnee_verbose((xd, "stop file: %s\n", my_key)); xnee_set_key (xd, XNEE_GRAB_STOP, my_key); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_f_c_button_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_widget_hide (fs); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_f_open_button_clicked (GtkButton *button, gpointer user_data) { gchar * my_file; XNEE_VERBOSE_ENTER_FUNCTION(); gtk_widget_hide (fs); my_file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(fs)); XNEE_VERBOSE_IN_FUNCTION(my_file); on_f_ok_button_clicked(NULL,NULL); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_rec_chooser_but_file_activated (GtkFileChooser *filechooser, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_widget_hide (fs); XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_rep_choose_but_file_activated (GtkFileChooser *filechooser, gpointer user_data) { gchar * my_file; XNEE_VERBOSE_ENTER_FUNCTION(); my_file = gtk_file_chooser_get_filename (user_data); if (my_file!=NULL) { xnee_set_data_name (xd, my_file); } XNEE_VERBOSE_LEAVE_FUNCTION(); } void pnee_stop_pressed(void) { pthread_create (&pnee_applet->xnee_thread, NULL, pnee_stop_pressed_impl, pnee_applet); return; } void pnee_rec_pressed(void) { sem_wait (&pnee_applet->action_mutex); if (!pnee_is_ready(pnee_applet)) { sem_post (&pnee_applet->action_mutex); return; } pnee_set_recording(pnee_applet); pnee_2xnee_update_all(); sem_post (&pnee_applet->action_mutex); pthread_create (&pnee_applet->xnee_thread, NULL, pnee_start_recording, pnee_applet); return; } void pnee_rep_pressed(void) { sem_wait (&pnee_applet->action_mutex); if (!pnee_is_ready(pnee_applet)) { sem_post (&pnee_applet->action_mutex); return; } pnee_set_replaying(pnee_applet); pnee_2xnee_update_all(); sem_post (&pnee_applet->action_mutex); pthread_create (&pnee_applet->xnee_thread, NULL, pnee_start_replaying, pnee_applet); return; } void on_log_file_button_clicked (GtkButton *button, gpointer user_data) { XNEE_VERBOSE_ENTER_FUNCTION(); gtk_file_chooser_set_action (GTK_FILE_CHOOSER(fs), GTK_FILE_CHOOSER_ACTION_SAVE); gtk_widget_show (fs); file_choosen=PNEE_FILE_VERBOSE; XNEE_VERBOSE_LEAVE_FUNCTION(); } void on_error_ok_clicked (GtkButton *button, gpointer user_data) { gtk_widget_hide (my_err_dial); } void on_pnee_about_response (GtkDialog *dialog, gint response_id, gpointer user_data) { GtkWidget *window = user_data; if (window != NULL ) { gtk_widget_hide (window); } } xnee-3.19/pnee/src/support.h0000664000000000000000000000246510447452722012717 00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps used in the interface. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename); /* This is used to create the pixbufs used in the interface. */ GdkPixbuf* create_pixbuf (const gchar *filename); /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description); xnee-3.19/pnee/src/main.c0000664000000000000000000001705010641032701012101 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #ifdef HAVE_CONFIG_H # include #endif #include #include "callbacks.h" #include "interface.h" #include "support.h" volatile pnee_panel_applet pnee_applet_impl; pnee_panel_applet *pnee_applet; void pnee_panel_applet_create (pnee_panel_applet *pnee_applet_in); static const char Context_menu_xml [] = "\n" /* " \n" " \n"*/ " \n" " \n" "\n"; #ifndef FAKED_MAIN static const BonoboUIVerb myexample_menu_verbs [] = { /* BONOBO_UI_VERB ("Record", pnee_start_recording), BONOBO_UI_VERB ("Replay", pnee_start_replaying), */ BONOBO_UI_VERB ("Properties", display_properties_dialog), BONOBO_UI_VERB ("About", display_about_dialog), BONOBO_UI_VERB_END }; #endif #ifndef FAKED_MAIN static gboolean pnee_applet_fill (PanelApplet *applet, const gchar *iid, gpointer data) { pnee_applet_impl.action_state = PNEE_ACTION_NONE; pnee_applet_impl.update_state = PNEE_UPDATE_NONE; pnee_applet = (pnee_panel_applet*) &pnee_applet_impl; if (strcmp (iid, "OAFIID:pnee") != 0) { return FALSE; } pnee_applet->applet = applet; pnee_panel_applet_create (pnee_applet); return TRUE; } #endif void pnee_panel_applet_create (pnee_panel_applet *pnee_applet_in) { /* GtkTooltips *tooltips; */ AtkObject *atk_obj; sem_init(&pnee_applet->action_mutex, 0, 10); sem_init(&pnee_applet->update_mutex, 0, 1); fprintf(stderr, "Using dir: '%s' \n", PNEE_PIXDIR); add_pixmap_directory (PNEE_PIXDIR); pnee_setup(pnee_applet_in); create_delay_splash(); #ifdef PNEE_DEBUGGER pthread_create (&pnee_applet->xnee_debugger, NULL, pnee_debugger, pnee_applet); #endif /* PNEE_DEBUGGER */ init_stock_icons(pnee_applet); panel_applet_set_flags (pnee_applet->applet, PANEL_APPLET_EXPAND_MINOR); pnee_applet->container = gtk_vbox_new (FALSE,0); gtk_container_add (GTK_CONTAINER (pnee_applet->applet), pnee_applet->container); /* tooltips = gtk_tooltips_new(); */ /* gtk_tooltips_set_tip(tooltips, GTK_WIDGET(pnee_applet->applet), _("GNU Xnee applet"), NULL); */ atk_obj = gtk_widget_get_accessible (GTK_WIDGET (pnee_applet->applet)); if (GTK_IS_ACCESSIBLE (atk_obj)) atk_object_set_name (atk_obj, _("GNU Xnee panel")); gtk_widget_show_all (GTK_WIDGET (pnee_applet->applet)); panel_applet_setup_menu (PANEL_APPLET (pnee_applet->applet), Context_menu_xml, myexample_menu_verbs, pnee_applet->applet); /* pnee_applet->tooltips = tooltips; */ /* Create the visual stuff */ pnee_applet->progress = gtk_progress_bar_new (); gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(pnee_applet->progress), GTK_PROGRESS_LEFT_TO_RIGHT); gtk_widget_set_size_request(pnee_applet->progress, 10, 5); gtk_container_set_border_width (GTK_CONTAINER (pnee_applet->container), 0); pnee_applet->button_box = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (pnee_applet->button_box), 0); pnee_create_button(pnee_applet, "Record" , "pnee-record.png" , pnee_rec_pressed , PNEE_BUTTON_RECORD); pnee_create_button(pnee_applet, "Play" , "pnee-replay.png" , pnee_rep_pressed , PNEE_BUTTON_REPLAY); pnee_create_button(pnee_applet, "Stop" , "pnee-stop.png" , pnee_stop_pressed , PNEE_BUTTON_STOP); /* pnee_applet->rec_image = gtk_image_new_from_file("pnee-record.png"); */ /* pnee_applet->rep_image = gtk_image_new_from_file("/usr/share/pixmaps/pnee-replay.png"); */ gtk_box_pack_start (GTK_BOX (pnee_applet->button_box), pnee_applet->rec_button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (pnee_applet->button_box), pnee_applet->stop_button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (pnee_applet->button_box), pnee_applet->rep_button, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (pnee_applet->container), pnee_applet->button_box, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (pnee_applet->container), pnee_applet->progress, TRUE, TRUE, 0); gtk_widget_show_all (pnee_applet->container); pthread_create (&pnee_applet->xnee_updater, NULL, pnee_progress_updater, pnee_applet); return; } #ifdef FAKED_MAIN int read_cmd() { } int main (int argc, char *argv[]) { gtk_set_locale (); gtk_init (&argc, &argv); /* add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); */ add_pixmap_directory (PNEE_PIXDIR); fprintf(stderr, "Using dir: '%s' \n", PNEE_PIXDIR); pnee_setup(); if (pnee_panel->pnee_pref==NULL) { pnee_panel->pnee_pref = create_pnee_panel->pnee_pref (); } gtk_widget_show (pnee_panel->pnee_pref); /* * The following code was added by Glade to create one of each component * (except popup menus), just so that you see something after building * the project. Delete any components that you don't want shown initially. */ gtk_main (); return 0; } #else PANEL_APPLET_BONOBO_FACTORY ("OAFIID:pnee_Factory", PANEL_TYPE_APPLET, "The Xnee Applet", "0", pnee_applet_fill, NULL); #endif xnee-3.19/pnee/Makefile.am0000664000000000000000000000103312065357443012267 00000000000000## Process this file with automake to produce Makefile.in if BUILDPNEE SUBDIRS = pics src man data EXTRA_DIST = \ autogen.sh \ pnee.glade \ pnee.gladep \ data/pnee.server.in CLEAN_FILES=pnee.server clean-local: rm -f pnee.server all: pnee.server pnee.server: data/pnee.server.in cat data/pnee.server.in | \ sed 's,APPLET_DIR,$(PANEL_APPLET_DIR)/pnee,g' \ > pnee.server install-data-local: pnee.server @$(NORMAL_INSTALL) mkdir -p $(DESTDIR)$(PANEL_SERVER_DIR) cp pnee.server $(DESTDIR)$(PANEL_SERVER_DIR)/ endifxnee-3.19/pnee/pics/0000775000000000000000000000000012332167175011252 500000000000000xnee-3.19/pnee/pics/Makefile.am0000664000000000000000000000023310531344271013215 00000000000000ICONS = pnee-record.png pnee-replay.png pnee-stop-mini.png pnee-stop.png icon_DATA = $(ICONS) icondir = $(datadir)/xnee/pixmaps EXTRA_DIST = $(ICONS) xnee-3.19/pnee/pics/pnee-record.png0000664000000000000000000000042710445757504014112 00000000000000PNG  IHDR bKGD pHYs  IDATӅ @ E]eQE!O2D:Ft 0ĢƗH@k,}YTҚH.x@ΏazeK"pN`*3D?~4ީۭa}7S)W*[Z'|&zTXtCommentxs.JM,IMQ(,PHUp R#epIENDB`xnee-3.19/pnee/pics/pnee-replay.png0000664000000000000000000000041410445757504014124 00000000000000PNG  IHDR 2Ͻ pHYs  tIME :btEXtCommentCreated with The GIMPd%nIDATӅб P#68`NBJbgmbm)(:XJlTB}4UԚ6iP=|J\bau :01b ` }p[ cV8t>|{q(O?EIENDB`xnee-3.19/pnee/pics/pnee-stop.png0000664000000000000000000000044010445757504013614 00000000000000PNG  IHDR bKGDC pHYs  IDATmKjQv_h!b%smwB4uq&9KB W|T,7t/54bcԶh5ÆyY}O+Z_'\s.~FLz)Y78YS&zTXtCommentxs.JM,IMQ(,PHUp R#epIENDB`xnee-3.19/pnee/pics/pnee-stop-mini.png0000664000000000000000000000044010445757504014546 00000000000000PNG  IHDR bKGDC pHYs  IDATmKjQv_h!b%smwB4uq&9KB W|T,7t/54bcԶh5ÆyY}O+Z_'\s.~FLz)Y78YS&zTXtCommentxs.JM,IMQ(,PHUp R#epIENDB`xnee-3.19/pnee/pics/Makefile.in0000664000000000000000000003502412332167124013235 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 = : build_triplet = @build@ host_triplet = @host@ subdir = pnee/pics DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ ICONS = pnee-record.png pnee-replay.png pnee-stop-mini.png pnee-stop.png icon_DATA = $(ICONS) icondir = $(datadir)/xnee/pixmaps EXTRA_DIST = $(ICONS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pnee/pics/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pnee/pics/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-iconDATA # 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: xnee-3.19/pnee/INSTALL0000664000000000000000000002202410415303170011250 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. xnee-3.19/pnee/man/0000775000000000000000000000000012332167175011067 500000000000000xnee-3.19/pnee/man/Makefile.am0000664000000000000000000000040610635514270013037 00000000000000PNEE_MAN_PAGE=pnee.1 man_MANS = $(PNEE_MAN_PAGE) EXTRA_DIST=$(man_MANS) $(TEXINF_FILES) $(PNEE_MAN_PAGE).in CLEAN_FILES_DIST=$(man_MANS) $(PNEE_MAN_PAGE): $(PNEE_MAN_PAGE).in cat $(PNEE_MAN_PAGE).in | sed "s/__VERSION_TAG__/$(VERSION)/g" > $(PNEE_MAN_PAGE) xnee-3.19/pnee/man/pnee.10000664000000000000000000000316312332167175012023 00000000000000.\" Copyright Henrik Sandklef 2007 .\" .\" This file is part of GNU Xnee. .\" .\" GNU Xnee 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, or (at your option) .\" any later version. .\" .\" GNU Xnee is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Emacs; see the file COPYING. If not, write to the .\" Free Software Foundation, Inc., 59 Temple Place - Suite 330, .\" Boston, MA 02111-1307, USA. .\" .TH "PNEE" 1 2007 "Xnee" .SH "NAME" pnee record, replays or distributes X11 data .SH "SYNOPSIS" .BI "pnee .sp .SH "DESCRIPTION" .B pnee is a Gnome Panel Aplet and should be started as such. GNU Xnee consists of a command lie program (cnee), a graphical frontend (gnee) and a Gnome Panel Applet (pnee). .SH "AUTHOR" Henrik Sandklef. .SH "REPORTING BUGS" Report bugs in the program to bug-xnee@gnu.org. .SH "COPYRIGHT" Copyright (C) 2006, 2007 Henrik Sandklef. This is free software; see the source for copying conditions. There is NO warranty;not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "SEE ALSO" .BR cnee(info), cnee(1), Xnee(info) .SH "VERSION" pnee man page, version 3.19 .SH "NOTES" This page describes the Gnome Panel Applet pnee .B pnee. Mail corrections and additions to bug-xnee@gnu.org xnee-3.19/pnee/man/pnee.1.in0000664000000000000000000000317610640701432012422 00000000000000.\" Copyright Henrik Sandklef 2007 .\" .\" This file is part of GNU Xnee. .\" .\" GNU Xnee 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, or (at your option) .\" any later version. .\" .\" GNU Xnee is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Emacs; see the file COPYING. If not, write to the .\" Free Software Foundation, Inc., 59 Temple Place - Suite 330, .\" Boston, MA 02111-1307, USA. .\" .TH "PNEE" 1 2007 "Xnee" .SH "NAME" pnee record, replays or distributes X11 data .SH "SYNOPSIS" .BI "pnee .sp .SH "DESCRIPTION" .B pnee is a Gnome Panel Aplet and should be started as such. GNU Xnee consists of a command lie program (cnee), a graphical frontend (gnee) and a Gnome Panel Applet (pnee). .SH "AUTHOR" Henrik Sandklef. .SH "REPORTING BUGS" Report bugs in the program to bug-xnee@gnu.org. .SH "COPYRIGHT" Copyright (C) 2006, 2007 Henrik Sandklef. This is free software; see the source for copying conditions. There is NO warranty;not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "SEE ALSO" .BR cnee(info), cnee(1), Xnee(info) .SH "VERSION" pnee man page, version __VERSION_TAG__ .SH "NOTES" This page describes the Gnome Panel Applet pnee .B pnee. Mail corrections and additions to bug-xnee@gnu.org xnee-3.19/pnee/man/Makefile.in0000664000000000000000000003705012332167124013053 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 = : build_triplet = @build@ host_triplet = @host@ subdir = pnee/man DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__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) 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ PNEE_MAN_PAGE = pnee.1 man_MANS = $(PNEE_MAN_PAGE) EXTRA_DIST = $(man_MANS) $(TEXINF_FILES) $(PNEE_MAN_PAGE).in CLEAN_FILES_DIST = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pnee/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pnee/man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: 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 $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man 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-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 $(PNEE_MAN_PAGE): $(PNEE_MAN_PAGE).in cat $(PNEE_MAN_PAGE).in | sed "s/__VERSION_TAG__/$(VERSION)/g" > $(PNEE_MAN_PAGE) # 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: xnee-3.19/pnee/data/0000775000000000000000000000000012332167175011225 500000000000000xnee-3.19/pnee/data/Makefile.am0000664000000000000000000000000112065357404013167 00000000000000 xnee-3.19/pnee/data/Makefile.in0000664000000000000000000003036712332167124013215 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 = : build_triplet = @build@ host_triplet = @host@ subdir = pnee/data DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pnee/data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pnee/data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: 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 clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ 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: xnee-3.19/pnee/Makefile.in0000664000000000000000000004652512332167124012307 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 = : build_triplet = @build@ host_triplet = @host@ subdir = pnee DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am INSTALL ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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 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 = pics src man data DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ @BUILDPNEE_TRUE@SUBDIRS = pics src man data @BUILDPNEE_TRUE@EXTRA_DIST = \ @BUILDPNEE_TRUE@ autogen.sh \ @BUILDPNEE_TRUE@ pnee.glade \ @BUILDPNEE_TRUE@ pnee.gladep \ @BUILDPNEE_TRUE@ data/pnee.server.in @BUILDPNEE_TRUE@CLEAN_FILES = pnee.server all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pnee/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pnee/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @BUILDPNEE_FALSE@install-data-local: @BUILDPNEE_FALSE@clean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool clean-local \ cscopelist-am ctags ctags-am distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am @BUILDPNEE_TRUE@clean-local: @BUILDPNEE_TRUE@ rm -f pnee.server @BUILDPNEE_TRUE@all: pnee.server @BUILDPNEE_TRUE@pnee.server: data/pnee.server.in @BUILDPNEE_TRUE@ cat data/pnee.server.in | \ @BUILDPNEE_TRUE@ sed 's,APPLET_DIR,$(PANEL_APPLET_DIR)/pnee,g' \ @BUILDPNEE_TRUE@ > pnee.server @BUILDPNEE_TRUE@install-data-local: pnee.server @BUILDPNEE_TRUE@ @$(NORMAL_INSTALL) @BUILDPNEE_TRUE@ mkdir -p $(DESTDIR)$(PANEL_SERVER_DIR) @BUILDPNEE_TRUE@ cp pnee.server $(DESTDIR)$(PANEL_SERVER_DIR)/ # 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: xnee-3.19/Makefile.cvs0000664000000000000000000000337111314242421011526 00000000000000generate: @echo "*** Creating autotools dir" -mkdir autotools/ # @echo "*** intltoolize (in pnee) ** " libtoolize --automake --copy --force @echo "*** Retrieving configure tests needed by configure.in" @aclocal -I ./autotools/ @ # echo "*** Scanning for include statements" @autoheader @echo "*** Building Makefile templates (step one)" @automake --add-missing @echo "*** Building Makefile templates (step two)" @autoconf @if grep "ac_kw foo" configure &>/dev/null; then perl -p -i -e "s/ac_kw foo/ac_kw int foo/" configure; fi @perl -pi -e 'if (/\[\/\$$\]\*. INSTALL=/) { print $$_ ; $$_ = "\"\") ;;\n"; }' configure @-rm -f config.cache config.h @echo "*** Create date/time stamp" @touch stamp-h.in @echo "*** Finished" @echo " Don't forget to run configure:" @echo " ./configure --enable-doc" @echo " If you haven't done so in a while, run ./configure --help" cvs-clean: @if test ! -d CVS; then \ echo "you don't have a toplevel CVS directory."; \ echo "You most certainly didn't use cvs to get these sources."; \ echo "But this function depends on cvs's informations."; \ exit 1 ;\ fi;\ pwd=`pwd` ;\ dirs=`find . -type d | grep -v CVS | sed -e "s#^./##"` ;\ for i in $$dirs; do \ if test ! -d $$pwd/$$i/CVS; then \ echo "D $$i" ;\ rm -rf $$pwd/$$i; \ continue; \ fi ;\ cd $$pwd/$$i ;\ for f in * .*; do \ if test ! -d $$f; then \ if grep "^/$$f/" CVS/Entries > /dev/null; then \ a="b"; \ else \ echo "F $$i/$$f"; \ rm -f $$pwd/$$i/$$f; \ fi; \ fi ; \ done; \ done xnee-3.19/examples/0000775000000000000000000000000012332167177011205 500000000000000xnee-3.19/examples/Makefile.am0000664000000000000000000000213710450243006013145 00000000000000XNEE_DATA_FILES = simple_bash.sh EXTRA_DIST = simple_bash.sh.in1 pkgdata_DATA = simple_bash.sh pkgdatadir=$(datadir)/xnee/ CLEAN_FILES=simple_bash.sh simple_bash.sh: simple_bash.sh.in1 echo "#!" "$(BASH)" > simple_bash.sh echo " " >> simple_bash.sh echo " " >> simple_bash.sh echo "if [ -f ${bindir}/bin/cnee ]" >> simple_bash.sh echo "then" >> simple_bash.sh echo " CNEE=${bindir}/bin/cnee" >> simple_bash.sh echo "fi" >> simple_bash.sh echo " " >> simple_bash.sh echo " " >> simple_bash.sh echo "if [ -f ${datadir}/xnee/xnee.sh ]" >> simple_bash.sh echo "then" >> simple_bash.sh echo " . ${datadir}/xnee/xnee.sh" >> simple_bash.sh echo " XNEE_SH=${datadir}/xnee/Xnee.sh" >> simple_bash.sh echo "fi" >> simple_bash.sh cat simple_bash.sh.in1 >> simple_bash.sh chmod ugo+x simple_bash.sh xnee-3.19/examples/simple_bash.sh.in10000664000000000000000000000500510361543000014414 00000000000000 if [ "$CNEE" = "" ] then if [ -f cnee ] then export CNEE=cnee elif [ -f ../cnee/src/cnee ] then export CNEE=../cnee/src/cnee elif [ -f $(dirname $0)/../../bin/cnee ] then export CNEE=$(dirname $0)/../../bin/cnee else echo "Could not find cnee" exit 1 fi fi # # Cleverly trying to find xnee.sh # if [ "$XNEE_SH" = "" ] then if [ -f xnee.sh ] then . xnee.sh elif [ -f ../share/xnee.sh ] then . ../share/xnee.sh elif [ -f $(dirname $0)/xnee.sh ] then . $(dirname $0)/xnee.sh else echo "Could not find xnee.sh" exit 1 fi fi fake_ls() { echo " faking press of \"ls -al\" plus additional Enter" xnee_fake_key l xnee_fake_key s xnee_fake_key XK_space xnee_fake_key "-" xnee_fake_key a xnee_fake_key l xnee_fake_key XK_Return } press_keys_stupidly() { fake_ls echo " faking \"!!\" and return" xnee_fake_key_press "Shift" xnee_fake_key "1" xnee_fake_key "1" xnee_fake_key_release "Shift" xnee_fake_key XK_Return } move_mouse_stupidly() { X_START=100 X_STOP=300 Y_START=100 Y_STOP=300 X=$X_START Y=$Y_START while [ $X -le $X_STOP ] do X=$(($X+1)) xnee_move_mouse $X $Y done while [ $Y -le $Y_STOP ] do Y=$(($Y+1)) xnee_move_mouse $X $Y done while [ $X -gt $X_START ] do X=$(($X-1)) xnee_move_mouse $X $Y done while [ $Y -gt $Y_START ] do Y=$(($Y-1)) xnee_move_mouse $X $Y done } # # main # echo "0) Information" echo " This is a simple example on how to use Xnee scripting in shell scripts" echo " " echo " You should see: " echo " the mouse moving in a squre" echo " ls -l being typed" echo " !! being typed" echo " ...so you really should see a file listing twice (after this script has returned)" echo " " echo " " sleep 10 xnee_init_file echo "1) Moving mouse" echo " for some stupid reson we move the mouse a bit..." move_mouse_stupidly echo " " echo " " sleep 4 echo "2) Fake key press and relase" echo " and another exmaple, press a few keys" press_keys_stupidly echo " " echo " " sleep 4 echo "3) Closing down" echo " and then we will leave... for the fjords" sleep 2 xnee_close_down 2>/dev/null >/dev/null echo " " echo " " echo "4) Mind the file listings" echo " after this scrits dies the key press/releases " echo " will be read by your shell and therfore you will not" echo " see them until" sleep 1 echo " NOW!" exit 0 xnee-3.19/examples/Makefile.in0000664000000000000000000003676212332167123013177 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)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = examples DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = $(datadir)/xnee/ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ XNEE_DATA_FILES = simple_bash.sh EXTRA_DIST = simple_bash.sh.in1 pkgdata_DATA = simple_bash.sh CLEAN_FILES = simple_bash.sh all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgdataDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-pkgdataDATA simple_bash.sh: simple_bash.sh.in1 echo "#!" "$(BASH)" > simple_bash.sh echo " " >> simple_bash.sh echo " " >> simple_bash.sh echo "if [ -f ${bindir}/bin/cnee ]" >> simple_bash.sh echo "then" >> simple_bash.sh echo " CNEE=${bindir}/bin/cnee" >> simple_bash.sh echo "fi" >> simple_bash.sh echo " " >> simple_bash.sh echo " " >> simple_bash.sh echo "if [ -f ${datadir}/xnee/xnee.sh ]" >> simple_bash.sh echo "then" >> simple_bash.sh echo " . ${datadir}/xnee/xnee.sh" >> simple_bash.sh echo " XNEE_SH=${datadir}/xnee/Xnee.sh" >> simple_bash.sh echo "fi" >> simple_bash.sh cat simple_bash.sh.in1 >> simple_bash.sh chmod ugo+x simple_bash.sh # 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: xnee-3.19/AUTHORS0000664000000000000000000000075511537116727010367 00000000000000Xnee / AUTHORS -------------------- Authors: -------- Henrik Sandklef hesa@gnu.org (libxnee, cnee, pnee, most of gnee) Jon-Erling Dahl joda@gadgeteer.nu (parts of gnee) Contributors (code fix ideas, comments etc): --------------------------------------- Janice Waddick Juan F. Codagnone Lars Brinkhoff Ton van Vliet Nekrasov Alexander Dr. Adrian Wrigley Conall McGleenan Bianchi Roberto Thomas Riga Stuart Guthrie Volker Stolz Fabian Keil Tuukka Pasanen Scott Kostyshak xnee-3.19/configure.in0000664000000000000000000005472712332167047011633 00000000000000AC_INIT(Xnee,3.19,bug-xnee@gnu.org) AC_CONFIG_AUX_DIR(./autotools/) AM_INIT_AUTOMAKE #AB_INIT AC_PROG_INSTALL AC_PROG_CC AC_LANG_C AC_PROG_MAKE_SET #AC_PROG_RANLIB AC_PATH_X AC_PATH_XTRA AC_FUNC_VPRINTF AC_CHECK_HEADERS(stdarg.h varargs.h, break) AC_EXEEXT AC_PATH_PROG(AWK,awk) AC_PATH_PROG(BASH,bash,sh) AC_PATH_PROG(PKGCFG,pkg-config,,) AC_PATH_PROG(CONVERT,convert,,) AC_PATH_PROG(MAKEINFO,makeinfo,,) AC_PATH_PROG(GTKCONF,gtk-config) #AC_DISABLE_SHARED AC_PROG_LIBTOOL # Add X libs LIBS="$LIBS $X_LIBS" AC_CHECK_LIB(c, dlopen, LIBDL="", [AC_CHECK_LIB(dl, dlopen, LIBDL="-ldl")]) AC_CHECK_LIB(c, sem_init, LIBSEMA="CCC", [AC_CHECK_LIB(pthread, sem_init, LIBSEMA="-lpthread")]) AC_CHECK_LIB(Xtst, XTestFakeMotionEvent, LIBXTST="-lXtst",[AC_CHECK_LIB(Xext,XTestFakeMotionEvent , LIBXTST="-lXext")]) GENERATION_DIRS="" if test "x$LIBXTST" = "x" ; then echo "" echo " **** ERROR **** " echo "" echo "Could not locate the needed X11 extensions:" echo "" echo " RECORD" echo " XTest" echo "" echo "Make sure you have them installed before building Xnee" echo "" echo " ... on Debian based distros do: apt-get install libxtst-dev" echo " " exit 1 fi AC_ARG_ENABLE(gui, [ --enable-gui build the GUI frontend to Xnee], [case "${enableval}" in yes) buildgui=true ;; no) buildgui=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-gui) ;; esac],[buildgui=true]) AC_ARG_ENABLE(gnome-applet, [ --enable-gnome-applet build the Gnome Panel frontend to Xnee (obsoleted)], [case "${enableval}" in yes) buildgapplet=true ;; no) buildgapplet=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-gnome-applet) ;; esac],[buildgapplet=false]) AC_ARG_ENABLE(doc, [ --enable-doc (re)build Xnee documentation], [case "${enableval}" in yes) builddoc=true ;; no) builddoc=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-doc) ;; esac],[builddoc=false]) AC_ARG_ENABLE(man, [ --enable-man (re)build Xnee man pages], [case "${enableval}" in yes) buildman=true ;; no) buildman=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-man) ;; esac],[buildman=false]) AC_ARG_ENABLE(doconly, [ --enable-doconly build Xnee documentation only], [case "${enableval}" in yes) doconly=true ;; no) doconly=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-doconly) ;; esac],[doconly=false]) AC_ARG_ENABLE(xinput2, [ --enable-xinput2 build Xnee with support for XInput2], [case "${enableval}" in yes) use_xi2=true ;; no) use_xi2=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-xinput2) ;; esac],[use_xi2=true]) AC_ARG_ENABLE(cli, [ --enable-cli build Xnee command line tool], [case "${enableval}" in yes) buildcli=true ;; no) buildcli=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-cli) ;; esac],[buildcli=true]) AC_ARG_ENABLE(lib, [ --enable-lib install Xnee library (libxnee)], [case "${enableval}" in yes) buildlib=true ;; no) buildlib=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-lib) ;; esac],[buildlib=false]) AC_ARG_ENABLE(static-programs, [ --enable-static-programs make the Xnee programs static (defaults to static)], [case "${enableval}" in yes) makestatic=true ;; no) makestatic=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-static-programs) ;; esac],[makestatic=true]) AC_ARG_ENABLE(xosd, [ --enable-xosd build Xnee with XOSD support], [case "${enableval}" in yes) xosd=true ;; no) xosd=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-xosd) ;; esac],[xosd=true]) AC_ARG_ENABLE(verbose, [ --enable-verbose build Xnee with no verbose mode support], [case "${enableval}" in yes) verbose=true ;; no) verbose=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-verbose) ;; esac],[verbose=true]) AC_ARG_ENABLE(buffer_verbose, [ --enable-buffer_verbose build xnee without support for buffer printouts], [case "${enableval}" in yes) buffer_verbose=true ;; no) buffer_verbose=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --disable-buffer_verbose) ;; esac],[buffer_verbose=false]) AC_ARG_ENABLE(gcov, [ --enable-gcov build xnee with support for gcov], [case "${enableval}" in yes) gcov=true ;; no) gcov=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-gcov) ;; esac],[gcov=false]) AC_ARG_ENABLE(gprof, [ --enable-gprof build xnee with support for gprof], [case "${enableval}" in yes) gprof=true ;; no) gprof=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-gprof) ;; esac],[gprof=false]) AC_ARG_ENABLE(pedantic, [ --enable-pedantic build xnee with support for pedantic compiling], [case "${enableval}" in yes) pedantic=true ;; no) pedantic=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-pedantic) ;; esac],[pedantic=false]) AC_ARG_ENABLE(paranoid-pedantic, [ --enable-paranoid-pedantic build xnee with support for paranoid pedantic compiling], [case "${enableval}" in yes) para_pedantic=true ;; no) para_pedantic=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-paranoid-pedantic) ;; esac],[para_pedantic=false]) AM_CONDITIONAL(BUILDGUI, test x$buildgui = xtrue) AM_CONDITIONAL(BUILDPNEE, test x$buildgapplet = xtrue) AM_CONDITIONAL(BUILDDOC, test x$builddoc = xtrue) AM_CONDITIONAL(BUILDMAN, test x$buildman = xtrue) AM_CONDITIONAL(VERBOSE, test x$verbose = xtrue) AM_CONDITIONAL(GCOV, test x$gcov = xtrue) AM_CONDITIONAL(GPROF, test x$gprof = xtrue) AM_CONDITIONAL(PEDANTIC, test x$pedantic = xtrue) AM_CONDITIONAL(BUF_VERBOSE, test x$buffer_verbose = xtrue) AM_CONDITIONAL(XOSD, test x$xosd = xtrue) AM_CONDITIONAL(DOCONLY, test x$doconly = xtrue) AM_CONDITIONAL(BUILD_STATIC, test x$makestatic = xtrue) AM_CONDITIONAL(NOT_INSTALL_LIBS, test x$buildlib = xfalse) AM_CONDITIONAL(XNEE_XINPUT_SUPPORT, test x$use_xi2 = xtrue) if test x$verbose = xtrue ; then VERBOSE_FLAG=-DUSE_VERBOSE else VERBOSE_FLAG=-DNO_VERBOSE fi if test x$gcov = xtrue ; then GCOV_FLAG=-fprofile-arcs -ftest-coverage CFLAGS= else GCOV_FLAG= fi if test x$gprof = xtrue ; then GPROF_FLAG=-pg CFLAGS= else GPROF_FLAG= fi if test x$buffer_verbose = xtrue ; then BUF_VERBOSE_FLAG=-DUSE_BUF_VERBOSE else BUF_VERBOSE_FLAG=-DNO_BUF_VERBOSE fi if test x$pedantic = xtrue ; then PEDANTIC_FLAGS= -W -Wall -pedantic -pedantic-errors -Werror else PEDANTIC_FLAGS= fi if test x$para_pedantic = xtrue ; then PEDANTIC_FLAGS= else PEDANTIC_FLAGS= fi AM_CONDITIONAL(XNEE_XINPUT_SUPPORT, test x$use_xi2 = xtrue) if test x$use_xi2 = xtrue; then AC_CHECK_LIB(Xtst, XIQueryPointer, LIBXI="",[AC_CHECK_LIB(Xi, XIQueryPointer, LIBXI="-lXi")]) AC_CHECK_HEADERS(X11/extensions/XInput2.h, HAS_XI2="true",HAS_XI2="false",) XNEE_XINPUT_SUPPORT_FLAGS=-DXNEE_XINPUT_SUPPORT else XNEE_XINPUT_SUPPORT_FLAGS= fi dnl Forward some variables to the makefiles AC_SUBST(LIBDL) AC_SUBST(LIBSEMA) X11_LIBS="-lX11 $LIBXTST $LIBXI" AC_SUBST(X11_LIBS) AM_MAINTAINER_MODE AM_CONFIG_HEADER(config.h) CLI_DIR= LIB_DIR= DOC_DIR= GUI_DIR= check_program() { PROG_VAR_TO_CHECK=$1 PROG_TO_CHECK=$2 if test "x$PROG_VAR_TO_CHECK" = "x" then MISSING_PROGRAMS="$MISSING_PROGRAMS $PROG_TO_CHECK" fi } DEBS_TO_INSTALL="" check_doc_program() { PROG_VAR_TO_CHECK=$1 PROG_TO_CHECK=$2 DEBS=$3 if test "x$PROG_VAR_TO_CHECK" = "x" then DOC_NOT_BUILT_WARNING=true MISSING_PROGRAMS="$MISSING_PROGRAMS $PROG_TO_CHECK" DEBS_TO_INSTALL="$DEBS_TO_INSTALL $DEBS" fi } give_deb_hint() { if test "x$DEBS_TO_INSTALL" != "x" then echo " ** If you are using a Debian based distro " echo " ** (e.g Trisquel, Debian, Gnewsense, Ubuntu), try:" echo " apt-get install $DEBS_TO_INSTALL" echo " **" fi } help_on_missing_progrs() { PROG=$1 DISABLE_OPT=$2 echo " ** Suggested solutions:" echo " ** 1) Build Xnee without $PROG," echo " ** ./configure $DISABLE_OPT" echo " **" echo " ** 2) Install the missing programs/packages" give_deb_hint echo " ** 3) If the programs/packages are installed (and not found) make sure they can be found in the PATH or other environment variable" echo " **" } if test x$buildgapplet = xtrue || test x$buildgui = xtrue || test x$builddoc = xtrue ; then check_doc_program "$CONVERT" "convert" "imagemagick" fi if test x$buildgapplet = xtrue || test x$buildgui = xtrue ; then AC_PATH_PROG(PKGCFG,pkg-config,,) check_doc_program "$PKGCFG" "pkg-config" "pkg-config" if test "x$PKGCFG" = "x" then echo " ********** ERROR **********" echo " ** pnee and/or gnee can't be built ** " echo " ** ..it is obsoleted and not cuurently supported" echo " ** " echo " ** The following program/package is missing:" echo " ** pkg-config" echo " ** " DEBS_TO_INSTALL="pkg-config" help_on_missing_progrs "pnee and gnee" "--disable-gnome-applet --disable-gui " echo " ** " echo " ********** ERROR **********" exit 1 fi fi PIXMAP_DIR=pixmap if test x$buildgapplet = xtrue || test x$buildgui = xtrue ; then AC_ISC_POSIX AC_PROG_CC AM_PROG_CC_STDC AC_HEADER_STDC AC_PATH_XTRA GTK_ERR=0 GTK_MODULES="" GTK2_MODULE="gtk+-2.0 " GTK2_VERSION="2.0.0" gtk_CFLAGS=`$PKGCFG --cflags $GTK2_MODULE ` gtk_LIBS=`$PKGCFG --libs $GTK2_MODULE ` AC_SUBST(gtk_CFLAGS) AC_SUBST(gtk_LIBS) if `$PKGCFG --exists $GTK2_MODULE >= $GTK2_VERSION ` then GTK_MODULES="$GTK2_MODULE" GTK_ERR=1 fi GNOMEUI2_MODULE="libgnomeui-2.0" GNOMEUI2_VERSION="2.0.0" if `$PKGCFG --exists $GNOMEUI2_MODULE >= $GNOMEUI2_VERSION` then GTK_MODULES="$GTK_MODULES $GNOMEUI2_MODULE" GTK_ERR=1 fi libgnomeui_CFLAGS=`$PKGCFG --cflags $GNOMEUI2_MODULE ` libgnomeui_LIBS=`$PKGCFG --libs $GNOMEUI2_MODULE ` AC_SUBST(libgnomeui_CFLAGS) AC_SUBST(libgnomeui_LIBS) PIXMAP_DIR=pixmap if test x$buildgapplet = xtrue ; then if test x$GTKCONF = x ; then echo " **************************************** " echo " * WARNING, missing program: gtk-config *" echo " **************************************** " echo "" echo " On Debian based distros, install sth like: libgtk2.0-dev" echo "" echo "However, I will try my best to continue without gtk-config. " echo "Will not be able to check for gtk/gnome header files properly" echo "On most platforms this implies no problem" echo "" else GTK_PREFIX=`$GTKCONF --prefix` GTK_INC_PATH=$GTK_PREFIX/include/$GNOMEUI2_MODULE/ GNOME_H_FILE=$GTK_INC_PATH/gnome.h ls -l $GNOME_H_FILE 2>/dev/null >/dev/null MISSING_GNOME_H=$? if test x$MISSING_GNOME_H != x0 ; then echo "Missing GNOME header file (gnome.h), you need to install development packages" echo "On a Debian based distro system do:" echo "" echo " sudo apt-get install libgnome2-dev" echo "" echo exit 1 fi fi fi fi if test x$buildgui = xtrue ; then dnl GETTEXT_PACKAGE=gnee dnl AC_SUBST(GETTEXT_PACKAGE) dnl AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [The gettext package]) dnl Add the languages which your application supports here. dnl ALL_LINGUAS="" dnl AM_GLIB_GNU_GETTEXT GUI_DIR=gnee else GUI_DIR= fi if test x$buildgapplet = xtrue; then dnl GETTEXT_PACKAGE=pnee dnl AC_SUBST(GETTEXT_PACKAGE) dnl AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [The gettext package]) dnl Add the languages which your application supports here. dnl ALL_LINGUAS="" dnl AM_GLIB_GNU_GETTEXT GNOME_APPLET_DIR=pnee else GNOME_APPLET_DIR= fi if test x$buildcli = xtrue then CLI_DIR=cnee else CLI_DIR= fi LIB_DIR=libxnee if test x$buildlib = xtrue ; then WANTED_LIBXNEE=libxnee.la AC_SUBST(WANTED_LIBXNEE) else if test x$makestatic = xfalse ; then echo " ********** ERROR **********" echo " You can't build the programs dynamic " echo " and not install the libs $makestatic" echo " ********** ERROR **********" exit 1 fi WANTED_LIBXNEE=libxnee.la AC_SUBST(WANTED_LIBXNEE) fi check_xinput2() { if test x$use_xi2 = xtrue ; then if test x$HAS_XI2 = xfalse ; then echo "XInput2 not found" echo "To compile GNU Xnee you have to:" echo " * Install XInput2 (development package)" echo "or" echo " * Disable XInput2 support in GNU Xnee:" echo " ./configure --disable-xinput2" echo " " exit 1 fi fi } check_xinput2 dnl if test x$builddoc = xtrue ; dnl then dnl DOC_DIR=doc dnl else dnl DOC_DIR= dnl fi FOO_DIR=foo if test x$doconly = xtrue ; then buildgui=false buildlib=false buildcli=false builddoc=false LIB_DIR= CLI_DIR= GUI_DIR= FOO_DIR=bar DOC_DIR=doc DOC_MAKEFILES= fi DOC_DIR=doc show_doc_program() { PROG_VAR_TO_CHECK=$1 PROG_TO_CHECK=$2 MESS=$3 if test "x$PROG_VAR_TO_CHECK" = "x" then echo " ***** $PROG_TO_CHECK missing, $MESS" else echo " $PROG_TO_CHECK - $PROG_VAR_TO_CHECK" fi } DOC_NOT_BUILT_WARNING=false MISSING_PROGRAMS="" DOC_TARGETS="info txt" if test x$builddoc = xtrue ; then AC_PATH_PROG(DIA,dia,,) check_doc_program "$DIA" "dia" "dia" AC_PATH_PROG(TEXI2HTML,texi2html,,) check_doc_program "$TEXI2HTML" "texi2html" "texi2html" # AC_PATH_PROG(DVI2PS,dvi2ps,,) # check_doc_program "$DVI2PS" "dvi2ps" "dvi2ps" AC_PATH_PROG(DVIPDF,dvipdf,,) check_doc_program "$DVIPDF" "dvipdf" "dvipdf" AC_PATH_PROG(PDF2PS,pdf2ps,,) check_doc_program "$PDF2PS" "pdf2ps" "" AC_PATH_PROG(PS2PDF,ps2pdf,ps2pdf14,) check_doc_program "$PS2PDF" "ps2pdf" "gs-common" AC_PATH_PROG(TEXI2PDF,texi2pdf,,) check_doc_program "$TEXI2PDF" "texi2pdf" "" AC_PATH_PROG(EPSTOPDF,epstopdf,,) check_doc_program "$EPSTOPDF" "epstopdf" "texlive-extra-utils texlive-font-utils" # AC_PATH_PROG(DOXYGEN,doxygen,,) # check_doc_program "$DOXYGEN" "doxygen" "doxygen" check_doc_program "$MAKEINFO" "makeinfo" " texinfo" if test x$DOC_NOT_BUILT_WARNING = xtrue ; then echo " " echo " ********** ERROR **********" echo " ** Documents can't be built ** " echo " ** " echo " ** The following programs are missing:" for i in $MISSING_PROGRAMS do echo " ** $i " done echo " ** " help_on_missing_progrs documentation "--disable-doc" echo " ** " echo " ********** ERROR **********" DOC_DIR="" DOC_TARGETS="" builddoc=false doconly=false CNEE_INFO="" echo "... configuration failed" exit 1 else DOC_TARGETS="images html info txt pdf ps" CNEE_INFO="cnee.info" fi else if test x$buildman = xtrue; then check_doc_program "$MAKEINFO" "makeinfo" "texi2html texinfo " if test x$DOC_NOT_BUILT_WARNING = xtrue ; then echo " " echo " ********** ERROR **********" echo " ** Man page(s) and images can't be built ** " echo " ** " echo " ** The following programs are missing:" for i in $MISSING_PROGRAMS do echo " ** $i " done echo " ** " help_on_missing_progrs documentation "--disable-doc" echo " ** " echo " ********** ERROR **********" DOC_DIR="" DOC_TARGETS="" builddoc=false doconly=false CNEE_INFO="" echo "... configuration failed" exit 1 else DOC_TARGETS="info" CNEE_INFO="cnee.info" fi fi fi AC_SUBST(CONVERT) AC_SUBST(DOC_TARGETS) AC_SUBST(GUI_DIR) AC_SUBST(GNOME_APPLET_DIR) AC_SUBST(CLI_DIR) AC_SUBST(LIB_DIR) AC_SUBST(DOC_DIR) AC_SUBST(PIXMAP_DIR) AC_SUBST(FOO_DIR) AC_SUBST(CNEE_INFO) AC_SUBST(XNEE_DOC_DIR) MAKEFILES_TO_GEN="" MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN Makefile examples/Makefile sessions/Makefile share/Makefile" EXCLUDED_COMPONENTS="" INCLUDED_COMPONENTS="" add_excl() { EXCLUDED_COMPONENTS="${EXCLUDED_COMPONENTS}\n $1" } add_incl() { INCLUDED_COMPONENTS="${INCLUDED_COMPONENTS}\n $1" } if test x$doconly = xtrue || test x$builddoc = xtrue ; then MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN doc/Makefile" add_incl "doc" else add_excl "doc (docs are already included in dist file)" fi if test x$buildlib = xtrue ; then dnl MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN libxnee/Makefile libxnee/test/Makefile libxnee/src/Makefile" MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN libxnee/Makefile libxnee/src/Makefile " dnl add_incl "libxnee" dnl else dnl add_excl "libxnee" fi if test x$buildgui = xtrue || test x$buildgapplet = xtrue ; then if test x$GTK_ERR != x0 ; then echo " ********** ERROR **********" echo " ** pnee and/or gnee can't be built ** " echo " ** " echo " ** The following program/package is missing:" echo " ** $GTK_MODULES " echo " ** " DEBS_TO_INSTALL="$GTK_MODULES" help_on_missing_progrs "pnee and gnee" "--diable-gui --disable-gnome-applet" echo " ** " echo " ********** ERROR **********" exit 1 fi fi if test x$buildcli = xtrue ; then MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN cnee/Makefile cnee/src/Makefile" add_incl "cli" else add_excl "cli" fi if test x$buildgui = xtrue ; then MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN gnee/Makefile gnee/src/Makefile" add_incl "gnee" else add_excl "gnee" fi if test x$buildgapplet = xtrue ; then # AM_GCONF_SOURCE_2 PANEL_APPLET_DIR="${libdir}/gnome-panel" PANEL_SERVER_DIR="${libdir}/bonobo/servers" AC_SUBST(PANEL_SERVER_DIR) AC_SUBST(PANEL_APPLET_DIR) # AC_PATH_PROG(GCONFTOOL, gconftool-2) PANEL_APPLET=libpanelapplet-4.0 PANEL_FLAGS=`$PKGCFG --cflags $PANEL_APPLET` PANEL_LD_FLAGS=`$PKGCFG --libs $PANEL_APPLET` $PKGCFG $PANEL_APPLET if test x$? != x0 ; then echo " ********** ERROR **********" echo " ** pnee can't be built ** " echo " ** " echo " ** The following programs/packages are missing:" echo " ** $PANEL_APPLET" echo " ** " DEBS_TO_INSTALL=" libpanel-applet-4-dev" help_on_missing_progrs pnee "--disable-gnome-applet" echo " ** " echo " ********** ERROR **********" echo exit 1 fi AC_SUBST(PANEL_FLAGS) AC_SUBST(PANEL_LD_FLAGS) # AC_OUTPUT([ pnee/Makefile pnee/src/Makefile pnee/pixmaps/Makefile ]) MAKEFILES_TO_GEN="$MAKEFILES_TO_GEN pnee/Makefile pnee/data/Makefile pnee/src/Makefile pnee/pixmaps/Makefile" add_incl "pnee" else add_excl "pnee" fi AC_SUBST(MAKEFILES_TO_GEN) echo "Making the following Makefiles:" echo " $MAKEFILES_TO_GEN" #AC_OUTPUT([ $MAKEFILES_TO_GEN ]) dnl libxnee/test/Makefile AC_OUTPUT([ Makefile libxnee/Makefile libxnee/src/Makefile examples/Makefile libxnee/test/Makefile sessions/Makefile share/Makefile doc/Makefile cnee/Makefile cnee/src/Makefile gnee/Makefile gnee/src/Makefile gnee/man/Makefile pnee/Makefile pnee/src/Makefile pnee/pics/Makefile pnee/man/Makefile pnee/data/Makefile pixmap/Makefile man/Makefile ]) # # Final words # # # echo " " echo " " echo " Configuration of Xnee finished " echo " ============================== " echo " PACKAGE $PACKAGE" echo " VERSION $VERSION" echo " " echo " Xnee Developer flags" echo " -------------------------------------" echo " VERBOSE_FLAG $VERBOSE_FLAG" echo " GCOV_FLAG $GCOV_FLAG" echo " GPROF_FLAG $GPROF_FLAG" echo " BUF_VERBOSE_FLAG $BUF_VERBOSE_FLAG" echo " PEDANTIC_FLAGS $PEDANTIC_FLAGS" echo " XNEE_XINPUT_SUPPORT_FLAGS $XNEE_XINPUT_SUPPORT_FLAGS" echo " LIBDL $LIBDL" echo " LIBSEMA $LIBSEMA" echo " X11_LIBS $X11_LIBS" echo " PANEL_SERVER_DIR $PANEL_SERVER_DIR" echo " PANEL_APPLET_DIR $PANEL_APPLET_DIR" echo " PIXMAP_DIR $PIXMAP_DIR" echo " CONVERT $CONVERT" #echo " GUI_DIR $GUI_DIR" #echo " GNOME_APPLET_DIR $GNOME_APPLET_DIR" #echo " CLI_DIR $CLI_DIR" #echo " LIB_DIR $LIB_DIR" #echo " DOC_DIR $DOC_DIR" echo " " if test x$builddoc = xtrue ; then echo " Programs used to build documentation and/or guis " echo " -----------------------------------------------------" show_doc_program "$DIA" "dia" "Can't generate pictures from dia sources" show_doc_program "$CONVERT" "convert" "Can't convert image formats" show_doc_program "$TEXI2HTML" "texi2html" "can't generate html pages" # show_doc_program "$DVI2PS" "dvi2ps" "can't generate ps " show_doc_program "$DVIPDF" "dvipdf" "can't generate pdf from dvi " show_doc_program "$PS2PDF" "ps2pdf" "can't generate pdf" show_doc_program "$EPSTOPDF" "epstopdf" "can't generate pdf" show_doc_program "$CONVERT" "convert" "can't generate convert between formats" show_doc_program "$MAKEINFO" "makeinfo" "can't make info pages" fi if test x$buildgapplet = xtrue || test x$buildgui = xtrue ; then echo " Programs used to build guis " echo " -----------------------------------------------------" show_doc_program "$PKGCFG" "pkg-config" "can't get meta info from installed packages" show_doc_program "$GTKCONF" "gtk-config" "can't check for header files..." fi echo "" echo " Building the following components " echo " -------------------------------------" printf " $INCLUDED_COMPONENTS" echo " " echo " " if test "x$EXCLUDED_COMPONENTS" != "x" ; then echo " Excluding the following components " echo " -------------------------------------" printf " $EXCLUDED_COMPONENTS" echo " " fi echo "" echo " Static or dynamic linking for programs ($makestatic)" echo " -------------------------------------" echo "BUILD_STATIC: $BUILD_STATIC" if test "x$BUILD_STATIC" != "x" ; then echo " dynamic" else echo " static" fi echo "" echo " Support for XInput2" echo " -------------------------------------" if test "x$XNEE_XINPUT_SUPPORT_FLAGS" = "x" ; then echo " disabled" else echo " enabled" fi echo " " echo " Settings ok?" echo " -------------------------------------" echo " If the settings are not ok, configure again" echo " ./configure " echo " " echo " To list all the configure options: " echo " ./configure --help" echo " " echo " Compile and install" echo " -------------------------------------" echo " If the above settings are ok, proceed with the build:" echo " make" echo " and (perhaps as root)" echo " make install" echo " " xnee-3.19/cnee/0000775000000000000000000000000012332167175010277 500000000000000xnee-3.19/cnee/src/0000775000000000000000000000000012332167175011066 500000000000000xnee-3.19/cnee/src/cnee_fake.c0000664000000000000000000001140211671474775013064 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "cnee.h" #include "cnee_fake.h" #include "cnee_strings.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_keysym.h" #include "libxnee/xnee_fake.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_session.h" static int cnee_fake_string(xnee_data *xd, char *my_string) { xnee_script_s xss ; int i ; int len ; len = (int)strlen(my_string); xnee_verbose((xd, "Faking: '%s' len=%d\n", my_string, len)); for (i=0;i xnee_type_help\n")); xnee_setup_display (xd); xnee_replay_init (xd); xnee_set_autorepeat (xd); if (!xnee_has_xtest_extension(xd)) { exit(XNEE_NO_TEST_EXT); } cnee_fake_string(xd ,"USAGE: " XNEE_CLI " [OPTIONS]\n"); cnee_fake_string(xd ,"\n"); cnee_fake_string(xd ,"DESCRIPTION\n"); for (cpp = description; *cpp; cpp++) { cnee_fake_string(xd, *cpp); cnee_fake_string(xd, "\n\n"); } cnee_fake_string(xd, "\nGENERAL OPTIONS\n\n"); xnee_type_help_sub(xd, xnee_options, XNEE_GENERAL_OPTION); cnee_fake_string(xd, "\nRECORD OPTIONS\n\n"); xnee_type_help_sub(xd, xnee_options, XNEE_RECORD_OPTION); cnee_fake_string(xd, "\nREPLAY OPTIONS\n\n"); xnee_type_help_sub(xd, xnee_options, XNEE_REPLAY_OPTION); cnee_fake_string(xd, "\nCNEE OPTIONS\n\n"); xnee_type_help_sub(xd, xnee_options, XNEE_ANY_OPTION); cnee_fake_string(xd, "\nCOMMENTS\n\n"); for (cpp = explain; *cpp; cpp++) { cnee_fake_string(xd, *cpp); cnee_fake_string(xd, "\n\n"); } cnee_fake_string (xd ,"\nEXAMPLES\n\n"); for (cpp = examples; *cpp; cpp++) { cnee_fake_string(xd, *cpp); cnee_fake_string(xd, "\n\n"); } cnee_fake_string(xd, "\nAUTHORS\n\t"); cnee_fake_string(xd, (char*)XNEE_AUTHORS); cnee_fake_string(xd, "\n\n\nREPORTING BUGS\n\tReport bugs to "); cnee_fake_string(xd, (char*)XNEE_BUG_MAIL); cnee_fake_string(xd, "\n\n"); xnee_reset_autorepeat (xd); xnee_verbose ((xd,"<--- xnee_type_help\n")); xnee_close_down(xd); exit(XNEE_OK_LEAVE); } xnee-3.19/cnee/src/Makefile.am0000664000000000000000000000502711531022442013031 00000000000000CNEE=cnee bin_PROGRAMS = $(CNEE) cnee_SOURCES = cnee_fake.c cnee_printer.c cnee_strings.c cnee_demo.c main.c parse.c ../include/cnee_fake.h ../include/cnee_demo.h ../include/cnee_printer.h ../include/cnee_strings.h ../include/parse.h ../include/cnee.h man_MANS = cnee.1 BUILT_SOURCES = cnee.texi CLEAN_FILES = cnee.info cnee.texi doc_DATA = $(CNEE_INFO) docdir = $(datadir)/info texi_TEXINFOS = cnee.texi #info_TEXINFOS = cnee.texi EXTRA_DIST=$(man_MANS) $(texi_TEXINFOS) LIBXNEE_DIR = ../../libxnee if VERBOSE VERBOSE_FLAG = -DUSE_VERBOSE else VERBOSE_FLAG = -DNO_VERBOSE endif if GCOV GCOV_FLAG = -fprofile-arcs -ftest-coverage -g else GCOV_FLAG = endif if GPROF GPROF_FLAG = -pg -g else GPROF_FLAG = endif if XOSD XOSD_FLAGS = -DHAVE_XOSD else XOSD_FLAGS = -DNO_XOSD endif if BUF_VERBOSE BUF_VERBOSE_FLAG = -DUSE_BUF_VERBOSE else BUF_VERBOSE_FLAG = -DNO_BUF_VERBOSE endif if PEDANTIC PEDANTIC_FLAGS = -W -Wall -pedantic -pedantic-errors -Werror -Wno-format else PEDANTIC_FLAGS = endif if XNEE_XINPUT_SUPPORT XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT else XNEE_XINPUT_SUPPORT_FLAGS = endif AM_CFLAGS = -I../include -I${LIBXNEE_DIR}/include ${PEDANTIC_FLAGS} ${X_CFLAGS} -g ${VERBOSE_FLAG} ${BUF_VERBOSE_FLAG} ${USER_CFLAGS} ${GCOV_FLAG} ${GPROF_FLAG} ${XNEE_XINPUT_SUPPORT_FLAGS} ${XNEE_XINPUT_SUPPORT_FLAGS} cnee_LDADD = -L${LIBXNEE_DIR}/src -lxnee ${X_LIBS} ${X11_LIBS} ${LIBDL} ${LIBXI} if BUILD_STATIC STATIC_FLAGS = -static else STATIC_FLAGS = endif cnee_LDFLAGS = ${GCOV_FLAG} ${GPROF_FLAG} $(STATIC_FLAGS) cnee_DEPENDENCIES = verify-cli: ./cnee --version && echo "cnee seems to be ok" test-cli: (cd test ; ./test_all.sh) #.info.texi: # makeinfo info: $(CNEE_INFO) man: ./$(CNEE)$(EXEEXT) @echo "Generating man page file from: $(CNEE)$(EXEEXT)" ./$(CNEE)$(EXEEXT) --manpage > cnee.1 @echo "Generating texi file from: $(CNEE)$(EXEEXT)" ./$(CNEE)$(EXEEXT) --texipage > cnee.texinfo @echo "Generating info file from cnee.texi" $(MAKEINFO) cnee.info cnee.1: $(CNEE)$(EXEEXT) ./$(CNEE)$(EXEEXT) --manpage > $@ cnee.texi: $(CNEE)$(EXEEXT) @echo "Generating texi file from: $(CNEE)$(EXEEXT)" ./$(CNEE)$(EXEEXT) --texipage > $@ cnee.info: $(texi_TEXINFOS) @echo "Generating info file from cnee.texi" $(MAKEINFO) $< cnee.html: $(texi_TEXINFOS) @echo "Generating html file from cnee.texi" $(TEXI2HTML) $< cnee.pdf: $(texi_TEXINFOS) @echo "Generating pdf file from cnee.texi" $(TEXI2PDF) $< cnee.txt: $(texi_TEXINFOS) @echo "Generating txt file from cnee.texi" man ./cnee.1 | col -b > $@xnee-3.19/cnee/src/cnee_demo.c0000664000000000000000000002210611715173554013073 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_alloc.h" #include "libxnee/xnee_xinput.h" #include "parse.h" #include "cnee_strings.h" #define CNEE_DEMO_DELAYED_START 3 xnee_option_t *cnee_options ; static char * cnee_get_default_filename() { char *tmp_dir = NULL; char *user_name = NULL; const char *default_tmp_dir = "/tmp/"; const char *default_user_name = "user"; const char *file_prefix = "cnee_"; const char *file_suffix = ".xns"; char *ret_str; int size = 0 ; /* set the dir */ tmp_dir = getenv("TMPIR"); if (tmp_dir==NULL) { tmp_dir= (char *) default_tmp_dir; } /* set the user name */ user_name = getlogin(); if (user_name==NULL) { user_name = (char *) default_user_name; } size = strlen (tmp_dir) + strlen (user_name) + strlen (file_prefix) + strlen (file_suffix) ; ret_str = (char*) malloc (size*sizeof(char)); if (ret_str==NULL) { return NULL; } strncpy (ret_str, tmp_dir, size); strncat (ret_str, file_prefix, size - strlen(ret_str)); strncat (ret_str, user_name, size - strlen(ret_str)); strncat (ret_str, file_suffix, size - strlen(ret_str)); return ret_str; } int cnee_demonstration (xnee_data *xd) { int ret; char *file; /* Setup for recording */ ret = xnee_set_recorder(xd); XNEE_RETURN_IF_ERR(ret); xnee_init_xinput(xd); ret = xnee_parse_range (xd, XNEE_DEVICE_EVENT, "ButtonPress-MotionNotify"); XNEE_RETURN_IF_ERR(ret); #ifdef XNEE_XINPUT_SUPPORT xnee_xinput_request_mouse(xd); #endif /* XNEE_XINPUT_SUPPORT */ ret = xnee_parse_range (xd, XNEE_DEVICE_EVENT, "KeyPress-KeyRelease"); XNEE_RETURN_IF_ERR(ret); #ifdef XNEE_XINPUT_SUPPORT xnee_xinput_request_mouse(xd); #endif /* XNEE_XINPUT_SUPPORT */ file = cnee_get_default_filename(); if (file==NULL) { return XNEE_FILE_NOT_FOUND; } ret = xnee_set_out_name(xd, file); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_interval(xd, CNEE_DEMO_DELAYED_START); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_events_max(xd, 200); XNEE_RETURN_IF_ERR(ret); /* Set the cli parameters */ xnee_set_application_parameters (xd, NULL); XNEE_RETURN_IF_ERR(ret); ret = xnee_prepare(xd); if (ret==XNEE_OK) { fprintf (stderr, "Xnee will now start recording your " "mouse and keyboard in %d seconds\n", CNEE_DEMO_DELAYED_START); /* start up the action set during parsing the commnd line */ ret = xnee_start(xd); } if ( ret != XNEE_OK) { xnee_print_error (PACKAGE " failed to start\n"); xnee_print_error (" Error number: %d\n", ret); xnee_print_error (" Error string: '%s'\n", xnee_get_err_description(ret)); xnee_print_error (" Solution string: '%s'\n", xnee_get_err_solution(ret)); exit(ret); } else { fprintf (stderr, "Reording went well....\n"); } ret = xnee_renew_xnee_data(xd); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_data_name (xd, file); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_replayer (xd); XNEE_RETURN_IF_ERR(ret); ret = xnee_prepare(xd); if (ret==XNEE_OK) { fprintf (stderr, "Xnee will now replay your recorded " "mouse and keyboard events in %d seconds\n", CNEE_DEMO_DELAYED_START); /* start up the action set during parsing the commnd line */ ret = xnee_start(xd); } if ( ret != XNEE_OK) { xnee_print_error (PACKAGE " failed to start\n"); xnee_print_error (" Error number: %d\n", ret); xnee_print_error (" Error string: '%s'\n", xnee_get_err_description(ret)); xnee_print_error (" Solution string: '%s'\n", xnee_get_err_solution(ret)); exit(ret); } else { fprintf (stderr, "Replay went well....\n"); } fprintf (stderr, "By the way, you can find the recorded file here:\n\t%s\n", file); fprintf (stderr, "To replay that file again, type the following command\n"); fprintf (stderr, "\t" XNEE_CLI " --%s --%s %s\n", xnee_key2string(xd, xnee_options, XNEE_REPLAY_OPTION_KEY), xnee_key2string(xd, cnee_options, CNEE_FILE_OPTION_KEY), file); xnee_free (file); /* hey, we are fin(n)ished .... close down */ xnee_close_down(xd); /* Since we are here, we can exit gracefully */ exit(XNEE_OK); } int cnee_record_replay (xnee_data *xd) { int ret; char *file; /* Setup for recording */ ret = xnee_set_recorder(xd); XNEE_RETURN_IF_ERR(ret); xnee_init_xinput(xd); ret = xnee_parse_range (xd, XNEE_DEVICE_EVENT, "ButtonPress-MotionNotify"); XNEE_RETURN_IF_ERR(ret); #ifdef XNEE_XINPUT_SUPPORT xnee_xinput_request_mouse(xd); #endif /* XNEE_XINPUT_SUPPORT */ ret = xnee_parse_range (xd, XNEE_DEVICE_EVENT, "KeyPress-KeyRelease"); XNEE_RETURN_IF_ERR(ret); #ifdef XNEE_XINPUT_SUPPORT xnee_xinput_request_mouse(xd); #endif /* XNEE_XINPUT_SUPPORT */ file = cnee_get_default_filename(); if (file==NULL) { return XNEE_FILE_NOT_FOUND; } ret = xnee_set_out_name(xd, file); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_interval(xd, CNEE_DEMO_DELAYED_START); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_key (xd, XNEE_GRAB_STOP, "q"); XNEE_RETURN_IF_ERR(ret); /* Set the cli parameters */ xnee_set_application_parameters (xd, NULL); XNEE_RETURN_IF_ERR(ret); ret = xnee_prepare(xd); if (ret==XNEE_OK) { fprintf (stderr, "Xnee will now start recording your " "mouse and keyboard in %d seconds\n", CNEE_DEMO_DELAYED_START); /* start up the action set during parsing the commnd line */ ret = xnee_start(xd); } if ( ret != XNEE_OK) { xnee_print_error (PACKAGE " failed to start\n"); xnee_print_error (" Error number: %d\n", ret); xnee_print_error (" Error string: '%s'\n", xnee_get_err_description(ret)); xnee_print_error (" Solution string: '%s'\n", xnee_get_err_solution(ret)); exit(ret); } else { fprintf (stderr, "Reording went well....\n"); } ret = xnee_renew_xnee_data(xd); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_data_name (xd, file); XNEE_RETURN_IF_ERR(ret); ret = xnee_set_replayer (xd); XNEE_RETURN_IF_ERR(ret); ret = xnee_prepare(xd); if (ret==XNEE_OK) { fprintf (stderr, "Xnee will now replay your recorded " "mouse and keyboard events in %d seconds\n", CNEE_DEMO_DELAYED_START); /* start up the action set during parsing the commnd line */ ret = xnee_start(xd); } if ( ret != XNEE_OK) { xnee_print_error (PACKAGE " failed to start\n"); xnee_print_error (" Error number: %d\n", ret); xnee_print_error (" Error string: '%s'\n", xnee_get_err_description(ret)); xnee_print_error (" Solution string: '%s'\n", xnee_get_err_solution(ret)); exit(ret); } else { fprintf (stderr, "Replay went well....\n"); } fprintf (stderr, "By the way, you can find the recorded file here:\n\t%s\n", file); fprintf (stderr, "To replay that file again, type the following command\n"); fprintf (stderr, "\t" XNEE_CLI " --%s --%s %s\n", xnee_key2string(xd, xnee_options, XNEE_REPLAY_OPTION_KEY), xnee_key2string(xd, cnee_options, CNEE_FILE_OPTION_KEY), file); xnee_free (file); /* hey, we are fin(n)ished .... close down */ xnee_close_down(xd); /* Since we are here, we can exit gracefully */ exit(XNEE_OK); } xnee-3.19/cnee/src/cnee_printer.c0000664000000000000000000003604212332106274013625 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2007, 2009, 2011, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "cnee.h" #include "cnee_printer.h" #include "cnee_strings.h" #include "libxnee/xnee_resource.h" #define CNEE_TEXT_LENGTH 65 #define CNEE_PRINT_INFO 1 #define CNEE_PRINT_HELP 2 #define CNEE_PRINT_MAN 3 #define xnee_manpage_sub(fd, opt, type) \ xnee_print_sub_impl(fd, opt, type, CNEE_PRINT_MAN) #define xnee_infopage_sub(fd, opt, type) \ xnee_print_sub_impl(fd, opt, type, CNEE_PRINT_INFO) #define xnee_usage_sub(fd, opt, type) \ xnee_print_sub_impl(fd, opt, type, CNEE_PRINT_HELP) /************************************************************** * * * xnee_flags * * * * * **************************************************************/ void xnee_flags (FILE *fd) { int i ; /* printf ("%s %s:%d\n", */ /* __func__, __FILE__, __LINE__); */ for (i = 0; xnee_options[i].key != XNEE_LAST_OPTION; i++) { fprintf (fd, "--%s\n",xnee_options[i].option ); } for (i = 0; cnee_options[i].key!=XNEE_LAST_OPTION; i++) { fprintf (fd, "--%s\n",cnee_options[i].option ); } } static void xnee_usage_printer(FILE *fd, int tmp_size, char *pre, char *str) { #define USAGE_PRINT_LINE_LEN 256 char line_buf[USAGE_PRINT_LINE_LEN]; int len = strlen(str); int size = tmp_size; if (tmp_size>USAGE_PRINT_LINE_LEN) { size = USAGE_PRINT_LINE_LEN; } while (len>0) { snprintf (line_buf, size, "%s", (const char*)str); fprintf (fd, " %s %s\n", pre, line_buf); len = len - size; str += size - 1; } } void xnee_print_sub_impl (FILE *fd, xnee_option_t *options, int type, int format ) { int i ; char *option_long; char *option_short; char *option_arg; char *option_descr; char *dash_str=",-"; #define USAGE_DESCR_SIZE 256 char line_buf[USAGE_DESCR_SIZE]; #define SHORT_PREFIX(a) (a?dash_str:XNEE_EMPTY_STRING) for (i = 0; options[i].key != XNEE_LAST_OPTION; i++) { if ( (options[i].type==type) || (type==XNEE_ANY_OPTION) ) { option_long = options[i].option ; option_short = options[i].short_option ; option_arg = options[i].args ; option_descr = options[i].description ; snprintf (line_buf, USAGE_DESCR_SIZE, "%s\n\n",EMPTY_IF_NULL(option_descr) ); if (format == CNEE_PRINT_INFO) { fprintf (fd, "@code{--%s%s %s %s}\n", EMPTY_IF_NULL(option_long), SHORT_PREFIX(option_short), EMPTY_IF_NULL(option_short), EMPTY_IF_NULL(option_arg) ); fprintf(fd, "%s", line_buf); } else if (format == CNEE_PRINT_HELP) { fprintf (fd, "\t--%s%s%s %s\n", EMPTY_IF_NULL(option_long), SHORT_PREFIX(option_short), EMPTY_IF_NULL(option_short), EMPTY_IF_NULL(option_arg) ); snprintf (line_buf, USAGE_DESCR_SIZE, "%s\n",EMPTY_IF_NULL(option_descr) ); xnee_usage_printer(fd, CNEE_TEXT_LENGTH, "\t", line_buf); } else if (format == CNEE_PRINT_MAN) { fprintf (fd, ".TP\n.B \"--%s%s %s %s\"", EMPTY_IF_NULL(option_long), SHORT_PREFIX(option_short), EMPTY_IF_NULL(option_short), EMPTY_IF_NULL(option_arg) ); fprintf (fd, "\n%s\n",EMPTY_IF_NULL(option_descr) ); } } } } /************************************************************** * * * xnee_usage * * * * * **************************************************************/ void xnee_usage (FILE *fd) { char **cpp; char *command; char *descr; fprintf (fd ,"USAGE: %s [OPTIONS]\n", XNEE_CLI ); fprintf (fd ,"\n"); fprintf (fd ,"DESCRIPTION\n"); for (cpp = description; *cpp; cpp++) { fprintf (fd, "%s\n", *cpp); } fprintf (fd ,"GENERAL OPTIONS\n\n"); xnee_usage_sub(fd, xnee_options, XNEE_GENERAL_OPTION); fprintf (fd ,"RECORD OPTIONS\n\n"); xnee_usage_sub(fd, xnee_options, XNEE_RECORD_OPTION); fprintf (fd ,"REPLAY OPTIONS\n\n"); xnee_usage_sub(fd, xnee_options, XNEE_REPLAY_OPTION); fprintf (fd ,"RETYPE OPTIONS\n\n"); xnee_usage_sub(fd, xnee_options, XNEE_RETYPE_OPTION); fprintf (fd ,"GRAB OPTIONS\n\n"); xnee_usage_sub(fd, xnee_options, XNEE_GRAB_OPTION); fprintf (fd ,"CNEE OPTIONS\n\n"); xnee_usage_sub(fd, cnee_options, XNEE_ANY_OPTION); fprintf (fd ,"COMMENTS\n"); for (cpp = explain; *cpp; cpp++) { xnee_usage_printer(fd, CNEE_TEXT_LENGTH, "\t", *cpp++); xnee_usage_printer(fd, CNEE_TEXT_LENGTH, "\t ", *cpp); /* fprintf (fd, "\t%s\n", *cpp++); */ /* fprintf (fd, "\t %s\n", *cpp); */ } fprintf (fd ,"\n"); fprintf (fd ,"EXAMPLES\n"); fprintf (fd ,"\n"); for (cpp = examples; *cpp; cpp++) { command=*cpp++; descr=*cpp; if (command != NULL ) { if (descr != NULL ) { xnee_usage_printer(fd, CNEE_TEXT_LENGTH, "\t", command); } else { xnee_usage_printer(fd, CNEE_TEXT_LENGTH, "\t", command); break; } if (descr!=NULL) { xnee_usage_printer(fd, CNEE_TEXT_LENGTH, "\t ", *cpp); fprintf (fd, "\n\n"); } } } fprintf (fd, "\nAUTHORS\n"); fprintf (fd, "\t%s\n\n", XNEE_AUTHORS); fprintf (fd, "\nREPORTING BUGS\n"); fprintf (fd, "\tReport bugs to %s\n\n", XNEE_BUG_MAIL); } /************************************************************** * * * xnee_manpage * * * * * **************************************************************/ void xnee_manpage (FILE *fd) { char **cpp; char *command; char *descr; fprintf (fd ,".\\\" Copyright Henrik Sandklef 2002, 2003, 2004, 2005, 2006, 2007\n"); fprintf (fd ,".\\\" \n"); fprintf (fd, ".\\\" This file is part of GNU Xnee.\n"); fprintf (fd, ".\\\"\n"); fprintf (fd, ".\\\" GNU Xnee is free software; you can redistribute it and/or modify\n"); fprintf (fd, ".\\\" it under the terms of the GNU General Public License as published by\n"); fprintf (fd, ".\\\" the Free Software Foundation; either version 3, or (at your option)\n"); fprintf (fd, ".\\\" any later version.\n"); fprintf (fd, ".\\\"\n"); fprintf (fd, ".\\\" GNU Xnee is distributed in the hope that it will be useful,\n"); fprintf (fd, ".\\\" but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); fprintf (fd, ".\\\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); fprintf (fd, ".\\\" GNU General Public License for more details.\n"); fprintf (fd, ".\\\"\n"); fprintf (fd, ".\\\" You should have received a copy of the GNU General Public License\n"); fprintf (fd, ".\\\" along with GNU Emacs; see the file COPYING. If not, write to the\n"); fprintf (fd, ".\\\" Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"); fprintf (fd, ".\\\" Boston, MA 02111-1307, USA.\n"); fprintf (fd, ".\\\"\n"); fprintf (fd ,".\\\" \n"); fprintf (fd ,".TH \"" XNEE_CLI_UC "\" 1 2007 \"" PACKAGE"\" \n"); fprintf (fd ,".SH \"NAME\" \n"); fprintf (fd ,"%s record, replays or distributes X11 data \n", XNEE_CLI); fprintf (fd ,".SH \"SYNOPSIS\" \n"); fprintf (fd ,".BI \"%s [\" options \"] \n", XNEE_CLI); fprintf (fd ,".sp \n"); fprintf (fd ,".SH \"DESCRIPTION\" \n"); fprintf (fd ,"The program \n"); fprintf (fd ,".B %s \n", XNEE_CLI); fprintf (fd ,"can record and replay an X session. %s also has the ability to distribute events to multiple displays. \n", XNEE_CLI); fprintf (fd ,".B %s \n", XNEE_CLI); fprintf (fd ,"gets copies of X protocol data from the X server. These are either printed to file ( \n"); fprintf (fd ,".I record \n"); fprintf (fd ,"mode) or replayed and synchronised ( \n"); fprintf (fd ,".I replay \n"); fprintf (fd ,"mode). \n"); fprintf (fd ,"During record and replay %s can distribute the record/replayed events to multiple displays. \n", XNEE_CLI); fprintf (fd ,".SH \"GENERAL OPTIONS\" \n"); xnee_manpage_sub(fd, xnee_options, XNEE_GENERAL_OPTION); fprintf (fd ,".SH \"RECORD OPTIONS\" \n"); xnee_manpage_sub(fd, xnee_options, XNEE_RECORD_OPTION); fprintf (fd ,".SH \"REPLAY OPTIONS\" \n"); xnee_manpage_sub(fd, xnee_options, XNEE_REPLAY_OPTION); fprintf (fd ,".SH \"CNEE OPTIONS\" \n"); xnee_manpage_sub(fd, cnee_options, XNEE_ANY_OPTION); /* for (cpp = help; *cpp; cpp++) { fprintf (fd, ".TP\n.B \"%s\"\n", *cpp++); fprintf (fd, "%s\n", *cpp); } */ fprintf (fd ,".SH \"COMMENTS\"\n"); for (cpp = explain; *cpp; cpp++) { fprintf (fd, ".TP\n.B \"%s\"\n", *cpp++); fprintf (fd, "%s\n", *cpp); } fprintf (fd ,"\n"); fprintf (fd, ".SH \"EXAMPLES\"\n"); for (cpp = examples; *cpp; cpp++) { command=*cpp++; descr=*cpp; if (command != NULL ) { if (descr != NULL ) fprintf (fd, ".TP\n.B %s\n", command); else { fprintf (fd, ".TP\n.B %s\n", command); break; } if (descr!=NULL) fprintf (fd, "\n%s\n", *cpp); } } fprintf (fd ,".SH \"AUTHOR\" \n"); fprintf (fd ,"Henrik Sandklef.\n"); fprintf (fd ,".SH \"REPORTING BUGS\"\n"); fprintf (fd ,"Report bugs in the program to %s. \n", XNEE_BUG_MAIL); fprintf (fd ,".SH \"COPYRIGHT\"\n"); fprintf (fd ,"Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Henrik Sandklef.\n"); fprintf (fd ,"This is free software; see the source for copying conditions. "); fprintf (fd ,"There is NO warranty;"); fprintf (fd ,"not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); fprintf (fd ,".SH \"SEE ALSO\"\n"); fprintf (fd , ".BR %s(info), %s(info), xev (1)\n", XNEE_CLI, PACKAGE); fprintf (fd ,".SH \"VERSION\"\n"); fprintf (fd ,PACKAGE " man page, version " VERSION "\n"); fprintf (fd ,".SH \"NOTES\"\n"); fprintf (fd ,"This page describes\n"); fprintf (fd ,".B %s.\n", XNEE_CLI); fprintf (fd ,"Mail corrections and additions to %s\n", XNEE_BUG_MAIL ); } /************************************************************** * * * xnee_infopage * * * * * **************************************************************/ void xnee_infopage (FILE *fd) { char **cpp; char *command; char *descr; fprintf (fd ,"\\input texinfo @c -*- Texinfo -*-\n"); /* Thanks Peter for you remark on %% */ fprintf (fd ,"@c %%**start of header\n"); fprintf (fd ,"@setfilename "XNEE_CLI".info\n"); fprintf (fd ,"@set EDITION %s\n", VERSION); fprintf (fd ,"@set VERSION %s\n", VERSION); fprintf (fd ,"@settitle " XNEE_CLI " Manual \n"); fprintf (fd ,"@setchapternewpage off\n"); fprintf (fd ,"@c %%**end o\n"); fprintf (fd, "@ifinfo\n"); fprintf (fd, "@node Top, Options,, (dir)\n"); fprintf (fd, "@top \n"); /* fprintf (fd, "@include xnee_copying\n"); */ fprintf (fd, "@end ifinfo\n"); for (cpp = description; *cpp; cpp++) { fprintf (fd, "%s\n", *cpp); } fprintf (fd, "Current version of " PACKAGE " is " VERSION "\n"); fprintf (fd, "@menu\n"); fprintf (fd, "* Options:: Options\n"); fprintf (fd, "* Examples:: Examples\n"); fprintf (fd, "* Bugs:: Bugs\n"); fprintf (fd, "* See also:: See also\n"); fprintf (fd, "@end menu\n"); fprintf (fd, "@contents\n"); fprintf (fd, "\n"); fprintf (fd ,"Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Henrik Sandklef.\n"); fprintf (fd, "@*\n"); fprintf (fd, "@*\n"); fprintf (fd ,"This is free software; see the source for copying conditions. "); fprintf (fd ,"There is NO warranty;"); fprintf (fd ,"not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"); fprintf (fd, "@node Options, Examples, top, top \n"); xnee_infopage_sub(fd, xnee_options, XNEE_GENERAL_OPTION); xnee_infopage_sub(fd, xnee_options, XNEE_RECORD_OPTION); xnee_infopage_sub(fd, xnee_options, XNEE_REPLAY_OPTION); xnee_infopage_sub(fd, cnee_options, XNEE_ANY_OPTION); for (cpp = explain; *cpp; cpp++) { fprintf (fd, "%s\n", *cpp++); fprintf (fd, "\t%s\n", *cpp); } fprintf (fd, "@node Examples, Bugs, Options, top \n"); for (cpp = examples; *cpp; cpp++) { command=*cpp++; descr=*cpp; if (command != NULL ) { if (descr != NULL ) fprintf (fd, " %s\n", command); else { fprintf (fd, " %s\n", command); break; } if (descr!=NULL) fprintf (fd, "\t%s\n\n", *cpp); } } fprintf (fd ,"\n"); fprintf (fd, "@node Bugs, See also, Examples,top \n"); fprintf (fd, "If you encounter a bug, report it to "); fprintf (fd, "@indent @ @ @ @email{xnee-bug@@gnu.org}\n@ \n"); fprintf (fd, "@indent or go to the Xnee site:\n"); fprintf (fd, "@indent @ @ @ @url{http://svannah.gnu.org}\n@\n"); fprintf (fd, "@indent Before reporting the bug, make sure it is not already reported\n"); fprintf (fd, "@node See also, (dir), Bugs,top \n"); fprintf (fd ,"There are some other interesting programs out there\n@*\n@*\n"); fprintf (fd ,"Look at xev (1)\n@*\n"); fprintf (fd ,"Also make sure to read the Xnee manual or info page\n"); fprintf (fd, "@bye\n"); return; } xnee-3.19/cnee/src/cnee_strings.c0000664000000000000000000000507111607021520013623 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "cnee.h" char *explain[] = { "file_name" , "Name of a file (e.g /tmp/my_file.xns)" , "display_name" , "Name of a display (e.g 192.168.1.12:0" , "secs" , "Seconds (e.g 10)" , "n" , "Integer number (e.g 100)" , "LIST" , "Comma separated list of display (e.g 192.168.1.12:0,129.12.23.0:0) ", "X_LIST" , "Comma separated list of integers (e.g 12-23,35,45-56) " , NULL }; char *examples[] = { ""XNEE_CLI " --record --events-to-record 1000 --mouse --keyboard -o /tmp/xnee.xns -e /tmp/xnee.log -v", "Records 1000 events (keyboard and mouse) to file /tmp/xnee.xns and dumps the verbose printout to /tmp/xnee.log", ""XNEE_CLI " --replay -f /tmp/xnee.xns -v -e /tmp/xnee.log -ns", "Read data from /tmp/xnee.xns, replay it and verbose print to file /tmp/xnee.log", "For more examples, read the Xnee manual", NULL }; char *description[] = { " " XNEE_CLI " (part of the " PACKAGE " project) can record and replay an X session. " XNEE_CLI " also has the ability to distribute events to multiple displays.\n", NULL }; xnee-3.19/cnee/src/cnee.texi0000664000000000000000000001714312332167151012613 00000000000000\input texinfo @c -*- Texinfo -*- @c %**start of header @setfilename cnee.info @set EDITION 3.19 @set VERSION 3.19 @settitle cnee Manual @setchapternewpage off @c %**end o @ifinfo @node Top, Options,, (dir) @top @end ifinfo cnee (part of the xnee project) can record and replay an X session. cnee also has the ability to distribute events to multiple displays. Current version of xnee is 3.19 @menu * Options:: Options * Examples:: Examples * Bugs:: Bugs * See also:: See also @end menu @contents Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Henrik Sandklef. @* @* This is free software; see the source for copying conditions. There is NO warranty;not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @node Options, Examples, top, top @code{--err-file,- e } Redirect all Xnee verbose output file_name(default is stderr) @code{--out-file,- o } Redirect all Xnee data to file_name(default is stdout) @code{--display,- d } X server to contact (default is localhost) @code{--all-clients,- ac } Record all client's data (default) @code{--future-clients } Record future client's data @code{--data-to-record,- dtr } Intercept n numbers of data ( n<0 means forever) @code{--time,- t } Delay start of application for seconds. Can be used to prevent recording of KeyRelease when starting Xnee from terminal @code{--record,- rec } Set recording mode @code{--replay,- rep } Set replaying mode @code{--distribute,- di } Distribute recorded or replayed events to LIST where LIST is comma separated list of displays @code{--future-clients,- fc } Record future client's data (default) @code{--plugin,- p } Set device event range to X_LIST @code{--keep-autorepeat,- ka } Keep autorepeat during record/replay @code{--no-reparent-recording,- nrr } Prevent explicit recording of ReparentNotify event @code{--first-last } Print only first and last of multiple successive MotionEvent @code{--all-events } Intercept all events @code{--events-to-record,- etr } Intercept n numbers of events ( n<0 means forever) @code{--seconds-to-record,- str } Intercept for n seconds ( n<0 means forever) @code{--recorded-resolution } Resolution to use when recording is set to res @code{--human-printout,- hp } Prints human readable @code{--store-mouse-position,- smp } Store the initial position of the mouse @code{--request-range,- reqra } Set request range to X_LIST @code{--reply-range,- repra } Set reply range to X_LIST @code{--delivered-event-range,- devra } Set delivered event range to X_LIST @code{--error-range,- erra } Set error range to X_LIST @code{--extension-request-major-range,- erqmar } Set extension request major range to X_LIST @code{--extension-request-minor-range,- erqmir } Set extension request minor range to X_LIST @code{--extension-reply-major-range,- erpmar } Set extension reply major range to X_LIST @code{--extension-reply-minor-range,- erpmir } Set extension reply minor range to X_LIST @code{--record-from-data-display,- rfdd } Record from data display. This option is experimental. @code{--record-from-control-display,- rfcd } Record from control display. This option is experimental. @code{--speed-percent,- sp } Set replaying speed percentage is set to speed @code{--replay-resolution } Resolution to use when replaying is set to res @code{--resolution-adjustment } Use resolution adjustment @code{--synchronised-replay } Synchronise during replay @code{--no-synchronise,- ns } Don't use synchornisation during replay @code{--recall-window-position,- rwp } Recall the recorded window position to be used during replay @code{--force-replay,- fp } Keep replaying even if we are out of sync .... dangerous @code{--buffer-verbose,- bv } Enable verbose printout of replay buffer @code{--max-threshold,- mat } Set the maximum threshold for sync to nr @code{--min-threshold,- mit } Set the minimum threshold for sync to tnr @code{--tot-threshold,- tot } Set the total threshold for sync to nr @code{--replay-offset,- ro } Set the replay offset to (x,y) @code{--max-window-moves,- mwm } Maximum times Xnee will try to move a window to the position it was in when recorded @code{--file,- f } Read data from file file_name (default is stdin) @code{--help,- h } Print this message @code{--flags } Prints all flags/options xnee accepts @code{--project,- pr } Use project file file_name @code{--version,- V } Print product information @code{--retype-file } Types (faking user) the contents of the specified file @code{--write-settings } Writes settings to a resource file @code{--print-settings,- ps } Prints Xnee settings and waits (for ) @code{--print-event-names,- pens } Prints X11 event number and name @code{--print-event-name,- pen } Prints X11 event number or name coresponding to ev @code{--print-error-names,- perns } Prints X11 error number and name @code{--print-error-name,- pern } Prints X11 error number or name coresponding to er @code{--print-reply-names,- pren } Prints X11 reply number and name @code{--print-request-names,- prns } Prints X11 request number and name @code{--print-request-name,- prn } Prints X11 request number or name coresponding to req @code{--keyboard } Record the keyboard @code{--mouse } Record mouse events @code{--print-data-names,- pdn } Prints X11 data number and name @code{--manpage } Prints Xnee help text in format as used when generating man page @code{--texipage } Prints Xnee help text in format as used when generating info page @code{--type-help } Type this help message using faked keys (used to test xnee itself) @code{--demonstration,- demo } Let Xnee take you on a demonstration ride @code{--check-syntax,- cs } Check syntax of the command line and/or project file (no exec) @code{--get-xinput-event-base,- gxeb } Get the event base for Xinput Extension @code{--disable-xinput-events,- dxe } Disable recording of XInput events @code{--replay-backend,- rb } @code{--force-core-replay,- fcr } Discard record X Input device data, use recorded core device data @code{--record-replay,- rr } Record and replay a session (press q to stop recording) file_name Name of a file (e.g /tmp/my_file.xns) display_name Name of a display (e.g 192.168.1.12:0 secs Seconds (e.g 10) n Integer number (e.g 100) LIST Comma separated list of display (e.g 192.168.1.12:0,129.12.23.0:0) X_LIST Comma separated list of integers (e.g 12-23,35,45-56) @node Examples, Bugs, Options, top cnee --record --events-to-record 1000 --mouse --keyboard -o /tmp/xnee.xns -e /tmp/xnee.log -v Records 1000 events (keyboard and mouse) to file /tmp/xnee.xns and dumps the verbose printout to /tmp/xnee.log cnee --replay -f /tmp/xnee.xns -v -e /tmp/xnee.log -ns Read data from /tmp/xnee.xns, replay it and verbose print to file /tmp/xnee.log For more examples, read the Xnee manual @node Bugs, See also, Examples,top If you encounter a bug, report it to @indent @ @ @ @email{xnee-bug@@gnu.org} @ @indent or go to the Xnee site: @indent @ @ @ @url{http://svannah.gnu.org} @ @indent Before reporting the bug, make sure it is not already reported @node See also, (dir), Bugs,top There are some other interesting programs out there @* @* Look at xev (1) @* Also make sure to read the Xnee manual or info page @bye xnee-3.19/cnee/src/parse.c0000664000000000000000000004457212332106473012272 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2007, 2010, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_setget.h" #include "libxnee/print.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_session.h" #ifdef XNEE_XINPUT_SUPPORT #include "libxnee/xnee_xinput.h" #endif /* XNEE_XINPUT_SUPPORT */ #include "cnee_fake.h" #include "cnee_demo.h" #include "parse.h" /* #include "cnee_fake.h" */ /* #include "cnee_strings.h" */ #include "cnee_printer.h" #include "parse.h" static int cnee_write_settings_to_file(xnee_data *xd, char *file_name); static xnee_option_t cnee_options_impl[] = { /* * Key * long option * short option * arg description * description * type of option (record/replay,general ... */ { CNEE_FILE_OPTION_KEY, "file", "f", "", "Read data from file file_name (default is stdin)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE, }, { CNEE_HELP_OPTION_KEY, "help", "h", NULL, "Print this message", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_FLAGS_OPTION_KEY, "flags", NULL, NULL, "Prints all flags/options xnee accepts", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PROJECT_OPTION_KEY, "project", "pr", "", "Use project file file_name", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_VERSION_OPTION_KEY, "version", "V", NULL, "Print product information", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_RETYPE_FILE_OPTION_KEY, "retype-file", NULL, "", "Types (faking user) the contents of the specified file" , XNEE_MISC_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_WRITE_SETTINGS_OPTION_KEY, "write-settings", NULL, "", "Writes settings to a resource file", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_SETTINGS_OPTION_KEY, "print-settings", "ps", NULL, "Prints Xnee settings and waits (for )", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_E_NAMES_OPTION_KEY, "print-event-names", "pens", NULL, "Prints X11 event number and name ", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_E_NAME_OPTION_KEY, "print-event-name", "pen", "", "Prints X11 event number or name coresponding to ev", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_ERR_NAMES_OPTION_KEY, "print-error-names", "perns", NULL, "Prints X11 error number and name ", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_ERR_NAME_OPTION_KEY, "print-error-name", "pern", "", "Prints X11 error number or name coresponding to er ", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_REP_NAMES_OPTION_KEY, "print-reply-names", "pren", NULL, "Prints X11 reply number and name ", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_REQ_NAMES_OPTION_KEY, "print-request-names", "prns", NULL, "Prints X11 request number and name ", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_REQ_NAME_OPTION_KEY, "print-request-name", "prn", "", "Prints X11 request number or name coresponding to req", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_KEYBOARD_OPTION_KEY, "keyboard", NULL, NULL, "Record the keyboard", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE, }, { XNEE_MOUSE_OPTION_KEY, "mouse", NULL, NULL, "Record mouse events", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_PRINT_DATA_NAMES_OPTION_KEY, "print-data-names", "pdn", NULL, "Prints X11 data number and name ", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_GEN_MANPAGE_OPTION_KEY, "manpage", NULL, NULL, "Prints Xnee help text in format as used when generating man page", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_GEN_TEXIPAGE_OPTION_KEY, "texipage", NULL, NULL, "Prints Xnee help text in format as used when generating info page", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_TYPE_HELP_OPTION_KEY, "type-help", NULL, NULL, "Type this help message using faked keys (used to test xnee itself)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_DEMONSTRATION_OPTION_KEY, "demonstration", "demo", NULL, "Let Xnee take you on a demonstration ride", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_SYNTAX_CHECKER_KEY, "check-syntax", "cs", NULL, "Check syntax of the command line and/or project file (no exec)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, #ifdef XNEE_XINPUT_SUPPORT { CNEE_GET_XINPUT_EVENT_BASE, "get-xinput-event-base", "gxeb", NULL, "Get the event base for Xinput Extension", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_DISABLE_XINPUT_EVENTS, "disable-xinput-events", "dxe", NULL, "Disable recording of XInput events", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, #endif /* XNEE_XINPUT_SUPPORT*/ { CNEE_REPLAY_BACKEND, "replay-backend", "rb", NULL, "", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_FORCE_CORE_REPLAY, "force-core-replay", "fcr", NULL, "Discard record X Input device data, use recorded core device data ", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { CNEE_RECORD_REPLAY_OPTION_KEY, "record-replay", "rr", NULL, "Record and replay a session (press q to stop recording)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_LAST_OPTION, NULL, NULL, NULL, NULL, XNEE_LAST_OPTION, XNEE_LAST_OPTION } }; xnee_option_t *cnee_options = &cnee_options_impl[0]; #define xnee_cli_key2string(key) \ xnee_key2string(xd, cnee_options, key) int xnee_parse_cnee_option(xnee_data *xd, char **opt_and_args, int *args_used) { int ret = XNEE_OK; int entry ; int key; if ( ( opt_and_args == NULL) || ( opt_and_args[0] == NULL)) { return -1; } /* By default we set used nr of arguments to 0 */ *args_used = 0; entry = xnee_find_cli_option_entry(xd, cnee_options, opt_and_args[0]); if ( entry == XNEE_OPTION_NOT_FOUND ) { return -1; } key = cnee_options[entry].key; xnee_verbose((xd, "Found cli entry for '%s' at position: %d\n", opt_and_args[0], entry)); xnee_verbose((xd, "\tlong option: '%s'\n", EMPTY_IF_NULL(cnee_options[entry].option))); xnee_verbose((xd, "\tshort option:'%s'\n", EMPTY_IF_NULL(cnee_options[entry].short_option))); xnee_verbose((xd, "\tlong option: '%s'\n", cnee_options[entry].option)); xnee_verbose((xd, "\tshort option:'%s'\n", cnee_options[entry].short_option)); #define verbose_option(a) \ xnee_verbose((xd,"%s:%d-->%s() Handling: '%s' \n", \ __FILE__ , __LINE__, __func__, a )); switch (key) { case XNEE_NO_OPTION_KEY: ret = XNEE_SYNTAX_ERROR; break; case CNEE_FILE_OPTION_KEY: verbose_option("CNEE_FILE_OPTION_KEY"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret = xnee_set_data_name (xd,opt_and_args[1] ); *args_used = 1; break; case CNEE_HELP_OPTION_KEY: verbose_option("CNEE_HELP_OPTION_KEY"); xnee_usage (stdout); ret = XNEE_OK_LEAVE; break; case CNEE_FLAGS_OPTION_KEY: verbose_option("CNEE_FLAGS_OPTION_KEY"); xnee_flags(stdout); ret = XNEE_OK_LEAVE; break; case CNEE_PROJECT_OPTION_KEY: verbose_option("CNEE_PROJECT_OPTION_KEY"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret = xnee_set_project_file(xd, opt_and_args[1]); *args_used = 1; if (ret==XNEE_SYNTAX_ERROR) { ret = XNEE_PROJECT_SYNTAX_ERROR; } break; case CNEE_VERSION_OPTION_KEY: verbose_option("CNEE_VERSION_OPTION_KEY"); xnee_version(xd); return XNEE_OK_LEAVE; break; case CNEE_TYPE_HELP_OPTION_KEY: verbose_option("CNEE_TYPE_HELP_OPTION_KEY"); ret = xnee_type_help(xd); break; case CNEE_GEN_MANPAGE_OPTION_KEY: xnee_manpage (stdout); verbose_option("CNEE_GEN_MANPAGE_OPTION_KEY"); return XNEE_OK_LEAVE; break; case CNEE_GEN_TEXIPAGE_OPTION_KEY: verbose_option("CNEE_GEN_TEXIPAGE_OPTION_KEY"); xnee_infopage (stdout); return XNEE_OK_LEAVE; break; case CNEE_WRITE_SETTINGS_OPTION_KEY: verbose_option("CNEE_WRITE_SETTINGS_OPTION_KEY"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret = cnee_write_settings_to_file(xd, opt_and_args[1]); if (ret==XNEE_OK) ret = XNEE_OK_LEAVE; *args_used = 1; break; case CNEE_PRINT_SETTINGS_OPTION_KEY: verbose_option("CNEE_PRINT_SETTINGS_OPTION_KEY"); ret = xnee_write_settings_to_file(xd, stdout); if (ret==XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_PRINT_E_NAMES_OPTION_KEY: verbose_option("CNEE_PRINT_E_NAMES_OPTION_KEY"); ret = xnee_print_event_info(xd); if (ret==XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_PRINT_E_NAME_OPTION_KEY: verbose_option("CNEE_PRINT_E_NAME_OPTION_KEY"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret = xnee_print_data_str(xd, opt_and_args[1], XNEE_EVENT); if (ret==XNEE_OK) ret = XNEE_OK_LEAVE; *args_used = 1; break; case CNEE_PRINT_ERR_NAMES_OPTION_KEY: verbose_option("CNEE_PRINT_ERR_NAMES_OPTION_KEY"); ret = xnee_print_error_info(xd); if (ret == XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_PRINT_ERR_NAME_OPTION_KEY: verbose_option("CNEE_PRINT_ERR_NAME_OPTION_KEY"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret = xnee_print_data_str(xd, opt_and_args[1], XNEE_ERROR); if (ret == XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_PRINT_REP_NAMES_OPTION_KEY: verbose_option("CNEE_PRINT_REP_NAMES_OPTION_KEY"); ret = xnee_print_reply_info(xd); if (ret == XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_PRINT_REQ_NAMES_OPTION_KEY: verbose_option("CNEE_PRINT_REQ_NAMES_OPTION_KEY"); ret = xnee_print_request_info(xd); if (ret == XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_PRINT_REQ_NAME_OPTION_KEY: verbose_option("CNEE_PRINT_REQ_NAME_OPTION_KEY"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret = xnee_print_data_str(xd, opt_and_args[1], XNEE_REQUEST); if (ret == XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_PRINT_DATA_NAMES_OPTION_KEY: verbose_option("CNEE_PRINT_DATA_NAMES_OPTION_KEY"); ret = xnee_print_data_info (xd) ; if (ret == XNEE_OK) ret = XNEE_OK_LEAVE; break; case CNEE_RETYPE_FILE_OPTION_KEY: verbose_option("CNEE_RETYPE_FILE_OPTION_KEY"); xnee_set_retyper(xd); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret = xnee_set_rt_name (xd, opt_and_args[1]); *args_used = 1; break; case CNEE_SYNTAX_CHECKER_KEY: verbose_option("CNEE_CHECK_SYNTAX_KEY"); xnee_set_syntax_checker(xd); ret = xnee_set_syntax_checker (xd); break; case CNEE_REMOVE_EVENT_OPTION_KEY: verbose_option("CNEE_REMOVE_EVENT_OPTION_KEY"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; ret=xnee_rem_data_from_range_str (xd, XNEE_DEVICE_EVENT, opt_and_args[1]) ; *args_used = 1; break; case CNEE_DEMONSTRATION_OPTION_KEY: verbose_option("CNEE_DEMONSTRATION_OPTION_KEY"); cnee_demonstration (xd); ret = XNEE_OK_LEAVE; break; case XNEE_KEYBOARD_OPTION_KEY: verbose_option("XNEE_KEYBOARD_OPTION_KEY"); ret=xnee_parse_range (xd, XNEE_DEVICE_EVENT, "KeyPress-KeyRelease"); #ifdef XNEE_XINPUT_SUPPORT if ( ret != XNEE_OK ) { break; } xnee_xinput_request_keyboard(xd); #endif /* XNEE_XINPUT_SUPPORT */ break; case XNEE_MOUSE_OPTION_KEY: verbose_option("XNEE_MOUSE_OPTION_KEY"); ret=xnee_parse_range (xd, XNEE_DEVICE_EVENT, "ButtonPress-MotionNotify"); #ifdef XNEE_XINPUT_SUPPORT if ( ret != XNEE_OK ) { break; } xnee_xinput_request_mouse(xd); #endif /* XNEE_XINPUT_SUPPORT */ break; #ifdef XNEE_XINPUT_SUPPORT case CNEE_GET_XINPUT_EVENT_BASE: verbose_option("CNEE_GET_XINPUT_EVENT_BASE"); ret=xnee_get_xinput_event_base(NULL); if ( ret != -1 ) { fprintf(stdout, "%d\n",ret); ret = XNEE_OK_LEAVE; } else { fprintf(stderr, "Could not find event base for %s\n", XNEE_XINPUT_EXTENSION_NAME); ret = XNEE_CLI_ERROR; } break; case CNEE_DISABLE_XINPUT_EVENTS: verbose_option("CNEE_DISABLE_XINPUT_EVENTS"); xnee_disable_xinput(xd) ; ret = XNEE_OK; break; #endif /* XNEE_XINPUT_SUPPORT */ case CNEE_REPLAY_BACKEND: verbose_option("CNEE_REPLAY_BACKEND"); if (opt_and_args[1]==NULL) return XNEE_MISSING_ARG; xnee_set_replay_backend_name(xd, opt_and_args[1]) ; *args_used = 1; ret = XNEE_OK; break; #ifdef XNEE_XINPUT_SUPPORT case CNEE_FORCE_CORE_REPLAY: verbose_option("CNEE_FORCE_CORE_REPLAY"); xnee_set_forced_core_device_events (xd) ; *args_used = 0; ret = XNEE_OK; break; #endif /* XNEE_XINPUT_SUPPORT */ case CNEE_RECORD_REPLAY_OPTION_KEY: verbose_option("CNEE_RECORD_REPLAY_OPTION_KEY"); cnee_record_replay(xd); ret = XNEE_OK_LEAVE; break; default: ret = XNEE_NO_OPTION_KEY; } return ret; } /************************************************************** * * * xnee_parse_args * * * * * **************************************************************/ int xnee_parse_args (xnee_data* xd , int argc, char **argv ) { int i ; int ret = XNEE_WRONG_PARAMS; const char *descr; const char *err; char *saved_arg = "(NO ARG)"; int args_used; for (i=1; i < argc; i++) { ret = xnee_parse_cnee_option(xd, &argv[i], &args_used); if ( ret == XNEE_OK) { i = i + args_used ; continue; } else if ( ret == XNEE_OK_LEAVE) { return ret; } else if ( ret == XNEE_WRONG_PARAMS) { return ret; } else if ( ret == XNEE_PROJECT_SYNTAX_ERROR) { return XNEE_PROJECT_SYNTAX_ERROR; } else if ( ret == XNEE_CLI_ERROR) { return XNEE_CLI_ERROR; } ret = xnee_parse_cli_option(xd, &argv[i], &args_used); if ( ret == XNEE_OK ) { i = i + args_used; continue; } else if ( ret == XNEE_OK_LEAVE) { return ret; } else { saved_arg = argv[i]; /* Leave loop on error */ break; } } if (ret != XNEE_OK) { /* if parser(s) have returned -1, it means parsing failed, set ret to XNEE_WRONG_PARAMS */ if (ret==-1) { ret = XNEE_WRONG_PARAMS; } err = xnee_get_err_description(ret); descr = xnee_get_err_solution(ret); fprintf (stderr, "Error number: %d\n", ret); fprintf (stderr, " Error: %s\n", err); fprintf (stderr, " Description: %s\n", descr); /* if wrong arg or param, print it put to help the user*/ if ( ( ret == XNEE_WRONG_PARAMS ) && (saved_arg!=NULL) ) { fprintf (stderr, " Argument: %s\n", saved_arg); } xnee_close_down(xd); exit(XNEE_WRONG_PARAMS); } return ret; } static int cnee_write_settings_to_file(xnee_data *xd, char *file_name) { int ret ; int f_ret; FILE *fd; if ( (xd==NULL) || (file_name==NULL) ) { return XNEE_MISSING_ARG; } XNEE_VERBOSE_ENTER_FUNCTION(); fd = fopen (file_name, "w"); if (fd==NULL) { return XNEE_FILE_NOT_FOUND; } ret = xnee_write_settings_to_file(xd, fd); f_ret = fclose(fd); XNEE_VERBOSE_LEAVE_FUNCTION(); return (f_ret||ret); } xnee-3.19/cnee/src/Makefile.in0000664000000000000000000006476712332167123013070 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 = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = $(am__EXEEXT_1) subdir = cnee/src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/./autotools/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = cnee$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(docdir)" PROGRAMS = $(bin_PROGRAMS) am_cnee_OBJECTS = cnee_fake.$(OBJEXT) cnee_printer.$(OBJEXT) \ cnee_strings.$(OBJEXT) cnee_demo.$(OBJEXT) main.$(OBJEXT) \ parse.$(OBJEXT) cnee_OBJECTS = $(am_cnee_OBJECTS) am__DEPENDENCIES_1 = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = cnee_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(cnee_LDFLAGS) $(LDFLAGS) -o $@ 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) depcomp = $(SHELL) $(top_srcdir)/./autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(cnee_SOURCES) DIST_SOURCES = $(cnee_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DATA = $(doc_DATA) 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 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/info dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ CNEE = cnee cnee_SOURCES = cnee_fake.c cnee_printer.c cnee_strings.c cnee_demo.c main.c parse.c ../include/cnee_fake.h ../include/cnee_demo.h ../include/cnee_printer.h ../include/cnee_strings.h ../include/parse.h ../include/cnee.h man_MANS = cnee.1 BUILT_SOURCES = cnee.texi CLEAN_FILES = cnee.info cnee.texi doc_DATA = $(CNEE_INFO) texi_TEXINFOS = cnee.texi #info_TEXINFOS = cnee.texi EXTRA_DIST = $(man_MANS) $(texi_TEXINFOS) LIBXNEE_DIR = ../../libxnee @VERBOSE_FALSE@VERBOSE_FLAG = -DNO_VERBOSE @VERBOSE_TRUE@VERBOSE_FLAG = -DUSE_VERBOSE @GCOV_FALSE@GCOV_FLAG = @GCOV_TRUE@GCOV_FLAG = -fprofile-arcs -ftest-coverage -g @GPROF_FALSE@GPROF_FLAG = @GPROF_TRUE@GPROF_FLAG = -pg -g @XOSD_FALSE@XOSD_FLAGS = -DNO_XOSD @XOSD_TRUE@XOSD_FLAGS = -DHAVE_XOSD @BUF_VERBOSE_FALSE@BUF_VERBOSE_FLAG = -DNO_BUF_VERBOSE @BUF_VERBOSE_TRUE@BUF_VERBOSE_FLAG = -DUSE_BUF_VERBOSE @PEDANTIC_FALSE@PEDANTIC_FLAGS = @PEDANTIC_TRUE@PEDANTIC_FLAGS = -W -Wall -pedantic -pedantic-errors -Werror -Wno-format @XNEE_XINPUT_SUPPORT_FALSE@XNEE_XINPUT_SUPPORT_FLAGS = @XNEE_XINPUT_SUPPORT_TRUE@XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT AM_CFLAGS = -I../include -I${LIBXNEE_DIR}/include ${PEDANTIC_FLAGS} ${X_CFLAGS} -g ${VERBOSE_FLAG} ${BUF_VERBOSE_FLAG} ${USER_CFLAGS} ${GCOV_FLAG} ${GPROF_FLAG} ${XNEE_XINPUT_SUPPORT_FLAGS} ${XNEE_XINPUT_SUPPORT_FLAGS} cnee_LDADD = -L${LIBXNEE_DIR}/src -lxnee ${X_LIBS} ${X11_LIBS} ${LIBDL} ${LIBXI} @BUILD_STATIC_FALSE@STATIC_FLAGS = @BUILD_STATIC_TRUE@STATIC_FLAGS = -static cnee_LDFLAGS = ${GCOV_FLAG} ${GPROF_FLAG} $(STATIC_FLAGS) cnee_DEPENDENCIES = all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cnee/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu cnee/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): 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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cnee$(EXEEXT): $(cnee_OBJECTS) $(cnee_DEPENDENCIES) $(EXTRA_cnee_DEPENDENCIES) @rm -f cnee$(EXEEXT) $(AM_V_CCLD)$(cnee_LINK) $(cnee_OBJECTS) $(cnee_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnee_demo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnee_fake.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnee_printer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cnee_strings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info-am: install-data-am: install-docDATA install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-docDATA uninstall-man uninstall-man: uninstall-man1 .MAKE: all check install install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-docDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-docDATA \ uninstall-man uninstall-man1 verify-cli: ./cnee --version && echo "cnee seems to be ok" test-cli: (cd test ; ./test_all.sh) #.info.texi: # makeinfo info: $(CNEE_INFO) man: ./$(CNEE)$(EXEEXT) @echo "Generating man page file from: $(CNEE)$(EXEEXT)" ./$(CNEE)$(EXEEXT) --manpage > cnee.1 @echo "Generating texi file from: $(CNEE)$(EXEEXT)" ./$(CNEE)$(EXEEXT) --texipage > cnee.texinfo @echo "Generating info file from cnee.texi" $(MAKEINFO) cnee.info cnee.1: $(CNEE)$(EXEEXT) ./$(CNEE)$(EXEEXT) --manpage > $@ cnee.texi: $(CNEE)$(EXEEXT) @echo "Generating texi file from: $(CNEE)$(EXEEXT)" ./$(CNEE)$(EXEEXT) --texipage > $@ cnee.info: $(texi_TEXINFOS) @echo "Generating info file from cnee.texi" $(MAKEINFO) $< cnee.html: $(texi_TEXINFOS) @echo "Generating html file from cnee.texi" $(TEXI2HTML) $< cnee.pdf: $(texi_TEXINFOS) @echo "Generating pdf file from cnee.texi" $(TEXI2PDF) $< cnee.txt: $(texi_TEXINFOS) @echo "Generating txt file from cnee.texi" man ./cnee.1 | col -b > $@ # 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: xnee-3.19/cnee/src/cnee.10000664000000000000000000002076112332167151012002 00000000000000.\" Copyright Henrik Sandklef 2002, 2003, 2004, 2005, 2006, 2007 .\" .\" This file is part of GNU Xnee. .\" .\" GNU Xnee 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, or (at your option) .\" any later version. .\" .\" GNU Xnee is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with GNU Emacs; see the file COPYING. If not, write to the .\" Free Software Foundation, Inc., 59 Temple Place - Suite 330, .\" Boston, MA 02111-1307, USA. .\" .\" .TH "CNEE" 1 2007 "xnee" .SH "NAME" cnee record, replays or distributes X11 data .SH "SYNOPSIS" .BI "cnee [" options "] .sp .SH "DESCRIPTION" The program .B cnee can record and replay an X session. cnee also has the ability to distribute events to multiple displays. .B cnee gets copies of X protocol data from the X server. These are either printed to file ( .I record mode) or replayed and synchronised ( .I replay mode). During record and replay cnee can distribute the record/replayed events to multiple displays. .SH "GENERAL OPTIONS" .TP .B "--err-file,- e " Redirect all Xnee verbose output file_name(default is stderr) .TP .B "--out-file,- o " Redirect all Xnee data to file_name(default is stdout) .TP .B "--display,- d " X server to contact (default is localhost) .TP .B "--all-clients,- ac " Record all client's data (default) .TP .B "--future-clients " Record future client's data .TP .B "--data-to-record,- dtr " Intercept n numbers of data ( n<0 means forever) .TP .B "--time,- t " Delay start of application for seconds. Can be used to prevent recording of KeyRelease when starting Xnee from terminal .TP .B "--record,- rec " Set recording mode .TP .B "--replay,- rep " Set replaying mode .TP .B "--distribute,- di " Distribute recorded or replayed events to LIST where LIST is comma separated list of displays .TP .B "--future-clients,- fc " Record future client's data (default) .TP .B "--plugin,- p " Set device event range to X_LIST .TP .B "--keep-autorepeat,- ka " Keep autorepeat during record/replay .TP .B "--no-reparent-recording,- nrr " Prevent explicit recording of ReparentNotify event .SH "RECORD OPTIONS" .TP .B "--first-last " Print only first and last of multiple successive MotionEvent .TP .B "--all-events " Intercept all events .TP .B "--events-to-record,- etr " Intercept n numbers of events ( n<0 means forever) .TP .B "--seconds-to-record,- str " Intercept for n seconds ( n<0 means forever) .TP .B "--recorded-resolution " Resolution to use when recording is set to res .TP .B "--human-printout,- hp " Prints human readable .TP .B "--store-mouse-position,- smp " Store the initial position of the mouse .TP .B "--request-range,- reqra " Set request range to X_LIST .TP .B "--reply-range,- repra " Set reply range to X_LIST .TP .B "--delivered-event-range,- devra " Set delivered event range to X_LIST .TP .B "--error-range,- erra " Set error range to X_LIST .TP .B "--extension-request-major-range,- erqmar " Set extension request major range to X_LIST .TP .B "--extension-request-minor-range,- erqmir " Set extension request minor range to X_LIST .TP .B "--extension-reply-major-range,- erpmar " Set extension reply major range to X_LIST .TP .B "--extension-reply-minor-range,- erpmir " Set extension reply minor range to X_LIST .TP .B "--record-from-data-display,- rfdd " Record from data display. This option is experimental. .TP .B "--record-from-control-display,- rfcd " Record from control display. This option is experimental. .SH "REPLAY OPTIONS" .TP .B "--speed-percent,- sp " Set replaying speed percentage is set to speed .TP .B "--replay-resolution " Resolution to use when replaying is set to res .TP .B "--resolution-adjustment " Use resolution adjustment .TP .B "--synchronised-replay " Synchronise during replay .TP .B "--no-synchronise,- ns " Don't use synchornisation during replay .TP .B "--recall-window-position,- rwp " Recall the recorded window position to be used during replay .TP .B "--force-replay,- fp " Keep replaying even if we are out of sync .... dangerous .TP .B "--buffer-verbose,- bv " Enable verbose printout of replay buffer .TP .B "--max-threshold,- mat " Set the maximum threshold for sync to nr .TP .B "--min-threshold,- mit " Set the minimum threshold for sync to tnr .TP .B "--tot-threshold,- tot " Set the total threshold for sync to nr .TP .B "--replay-offset,- ro " Set the replay offset to (x,y) .TP .B "--max-window-moves,- mwm " Maximum times Xnee will try to move a window to the position it was in when recorded .SH "CNEE OPTIONS" .TP .B "--file,- f " Read data from file file_name (default is stdin) .TP .B "--help,- h " Print this message .TP .B "--flags " Prints all flags/options xnee accepts .TP .B "--project,- pr " Use project file file_name .TP .B "--version,- V " Print product information .TP .B "--retype-file " Types (faking user) the contents of the specified file .TP .B "--write-settings " Writes settings to a resource file .TP .B "--print-settings,- ps " Prints Xnee settings and waits (for ) .TP .B "--print-event-names,- pens " Prints X11 event number and name .TP .B "--print-event-name,- pen " Prints X11 event number or name coresponding to ev .TP .B "--print-error-names,- perns " Prints X11 error number and name .TP .B "--print-error-name,- pern " Prints X11 error number or name coresponding to er .TP .B "--print-reply-names,- pren " Prints X11 reply number and name .TP .B "--print-request-names,- prns " Prints X11 request number and name .TP .B "--print-request-name,- prn " Prints X11 request number or name coresponding to req .TP .B "--keyboard " Record the keyboard .TP .B "--mouse " Record mouse events .TP .B "--print-data-names,- pdn " Prints X11 data number and name .TP .B "--manpage " Prints Xnee help text in format as used when generating man page .TP .B "--texipage " Prints Xnee help text in format as used when generating info page .TP .B "--type-help " Type this help message using faked keys (used to test xnee itself) .TP .B "--demonstration,- demo " Let Xnee take you on a demonstration ride .TP .B "--check-syntax,- cs " Check syntax of the command line and/or project file (no exec) .TP .B "--get-xinput-event-base,- gxeb " Get the event base for Xinput Extension .TP .B "--disable-xinput-events,- dxe " Disable recording of XInput events .TP .B "--replay-backend,- rb " .TP .B "--force-core-replay,- fcr " Discard record X Input device data, use recorded core device data .TP .B "--record-replay,- rr " Record and replay a session (press q to stop recording) .SH "COMMENTS" .TP .B "file_name" Name of a file (e.g /tmp/my_file.xns) .TP .B "display_name" Name of a display (e.g 192.168.1.12:0 .TP .B "secs" Seconds (e.g 10) .TP .B "n" Integer number (e.g 100) .TP .B "LIST" Comma separated list of display (e.g 192.168.1.12:0,129.12.23.0:0) .TP .B "X_LIST" Comma separated list of integers (e.g 12-23,35,45-56) .SH "EXAMPLES" .TP .B cnee --record --events-to-record 1000 --mouse --keyboard -o /tmp/xnee.xns -e /tmp/xnee.log -v Records 1000 events (keyboard and mouse) to file /tmp/xnee.xns and dumps the verbose printout to /tmp/xnee.log .TP .B cnee --replay -f /tmp/xnee.xns -v -e /tmp/xnee.log -ns Read data from /tmp/xnee.xns, replay it and verbose print to file /tmp/xnee.log .TP .B For more examples, read the Xnee manual .SH "AUTHOR" Henrik Sandklef. .SH "REPORTING BUGS" Report bugs in the program to bug-xnee@gnu.org. .SH "COPYRIGHT" Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Henrik Sandklef. This is free software; see the source for copying conditions. There is NO warranty;not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. .SH "SEE ALSO" .BR cnee(info), xnee(info), xev (1) .SH "VERSION" xnee man page, version 3.19 .SH "NOTES" This page describes .B cnee. Mail corrections and additions to bug-xnee@gnu.org xnee-3.19/cnee/src/main.c0000664000000000000000000000672111715173603012101 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2009, 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_session.h" #include "parse.h" static void cnee_handle_err(int error) { const char *err; const char *descr; if ( error != XNEE_OK_LEAVE ) { err = xnee_get_err_description(error); descr = xnee_get_err_solution(error); fprintf (stderr, "Error number: %d\n", error); fprintf (stderr, " Error: %s\n", err); fprintf (stderr, " Solution: %s\n", descr); } } /************************************************************** * * * main * * * * * **************************************************************/ int main(int argc,char *argv[]) { int ret; xnee_data *xd ; /* Get a new xnee_data structure */ xd = xnee_new_xnee_data(); if (xd==NULL) { return (XNEE_NO_MAIN_DATA); } /* Set the program name */ ret = xnee_set_program_name (xd, XNEE_CLI); if ( ret != XNEE_OK) { cnee_handle_err(ret); } /* Well .... parse the args */ ret = xnee_parse_args (xd, argc, argv); if ( ret != XNEE_OK) { if (ret == XNEE_OK_LEAVE ) { exit (XNEE_OK); } else if ( ret == -1 ) { ret = XNEE_WRONG_PARAMS; } cnee_handle_err(ret); } /* Set the cli parameters */ ret = xnee_set_application_parameters (xd, argv); if ( ret != XNEE_OK) { cnee_handle_err(ret); return ret; } if (ret==XNEE_OK) { /* start up the action set during parsing the commnd line */ ret = xnee_start(xd); } if ( ret != XNEE_OK) { cnee_handle_err(ret); return ret; } /* hey, we are fin(n)ished .... close down */ xnee_close_down(xd); /* Since we are here, we can exit gracefully */ exit(ret); } xnee-3.19/cnee/Makefile.am0000664000000000000000000000164610447720664012265 00000000000000LIBSEMA=${LIBSEMA} SUBDIRS = src EXTRA_DIST = Makefile.cnee Makefile.cvs autotools/* \ test/bin/new_script.sh \ test/etc/base_funs \ test/test_all.sh \ test/check_mem.sh \ test/record/keyboard.sh \ test/record/mouse.sh \ test/scripts/options/all-events.sh \ test/scripts/options/print-error-name.sh \ test/scripts/options/print-error-names.sh \ test/scripts/options/print-event-name.sh \ test/scripts/options/print-event-names.sh \ test/scripts/options/print-request-name.sh \ test/scripts/options/print-request-names.sh \ test/scripts/options/test_all.sh \ test/scripts/record/keyboard.sh \ test/scripts/record/mouse.sh \ test/scripts/replay/keyboard.sh \ test/scripts/replay/mouse.sh \ test/scripts/retype/keyboard.sh \ test/scripts/resolution/mo-res.sh \ test/scripts/timing/mo-time.sh \ test/src/xgetter.c man: ( cd src ; make man ) xnee-3.19/cnee/README0000664000000000000000000000130307773153604011101 00000000000000Xnee / README ------------- Xnee is a GNU package. For more information about GNU, please visit http://www.gnu.org The following files contains information about Xnee Name Description --------------------------- AUTHORS List of authors, contributors etc BUGS Known bugs and limitations Changelog Log of source code changes COPYING Contains the Xnee license DESCRIPTION Obsolete* DEVELOPMENT Obsolete* EXAMPLES Obsolete* FAQ Obsolete* INSTALL Contains information about how to build and install Xnee NEWS Contains information about what is new in "this" release README This file TODO List of features, fixes, docs, ... to implement USAGE A printout of Xnee's built in doc, 'xnee --help' xnee-3.19/cnee/Makefile.cnee0000775000000000000000000000166707772677230012617 00000000000000PACKAGE=\"cnee\" VERSION=\"2.0\" XOSD_DEFINE= XOSD_PATH=/home/hesa/xosd-2.2.5/ XOSD_INC=-I${XOSD_PATH}/src -I${XOSD_PATH}/include XOSD_FLAGS=${XOSD_DEFINE} ${XOSD_INC} ${XOSD_LIB} -lxosd XNEE_PATH=../libxnee XNEE_INC=${XNEE_PATH}/include XNEE_LIB=${XNEE_PATH}/ CC=gcc CFLAGS = -W -Wall -pedantic -pedantic-errors -Werror \ -DPACKAGE=${PACKAGE} -DVERSION=${VERSION} \ -I/usr/X11R6/include -I${XNEE_INC}\ ${XOSD_FLAGS} \ -g -DHAVE_STDARG_H=1 -DXNEE_WANT_DEBUG LDFLAGS = -L/usr/X11R6/lib -L./lib -L/usr/X/lib LIBS = -lX11 -lXext -lXtst -lpthread CLI_OBJS = src/parse.o src/main.o OBJS = ${CLI_OBJS} .c.o: ${CC} -g ${CFLAGS} -c $< -o $@ XNEELIB = -L${XNEE_LIB} -lxnee XNEE_CLI= src/cnee all : ${XNEE_CLI} clean: \rm -fr ${CLI_OBJS} ${XNEE_CLI} src/*/*~ *~ src/*/*.o */a.out core bin : ${XNEE_CLI} ${XNEE_CLI}: ${CLI_OBJS} ${CC} -o ${XNEE_CLI} ${CLI_OBJS} ${LDFLAGS} ${LIBS} ${XNEELIB} ${XOSD_FLAGS} ${LIBS} xnee-3.19/cnee/autotools/0000775000000000000000000000000012332167175012330 500000000000000xnee-3.19/cnee/autotools/CVS/0000775000000000000000000000000012332167115012755 500000000000000xnee-3.19/cnee/autotools/CVS/Repository0000664000000000000000000000002412332167115014773 00000000000000xnee/cnee/autotools xnee-3.19/cnee/autotools/CVS/Entries0000664000000000000000000000000212332167115014221 00000000000000D xnee-3.19/cnee/autotools/CVS/Root0000664000000000000000000000004712332167115013544 00000000000000hesa@cvs.savannah.gnu.org/sources/xnee xnee-3.19/cnee/INSTALL0000664000000000000000000002110207772666367011267 00000000000000Basic Installation ================== These are generic installation instructions with some added Xnee specific information (Makefile.xnee) The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Another way to build Xnee is : 1. `cd' to the directory containing the package's source code and type make -f Makefile.openbsd This way might seem easier but I can not guarantee that the Makefile will work for all platforms ..... however it seems to work on Debian GNU/Linux. There is no install rule in this Makefile. You have to copy as you pleas are update various paths (e.g PATH and MANPATH). To compile the documents in the doc directory: 1. make pdf generates pdf version of the Manuals 2. make ps generates pdf version of the Manuals 3. make txt generates pdf version of the Manuals 4. make info generates info version of the Manuals 5. make html generates html version of the Manuals 5 make devel-doc generates rtf, ps, pdf versions of the APIs There is no install rule for thes files. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. xnee-3.19/cnee/Makefile.cvs0000775000000000000000000000313607773153062012462 00000000000000generate: @echo "*** Retrieving configure tests needed by configure.in" @aclocal -I ./autotools/ @ # echo "*** Scanning for include statements" @ # autoheader @echo "*** Building Makefile templates (step one)" @automake --add-missing --ignore-deps @echo "*** Building Makefile templates (step two)" @autoconf @if grep "ac_kw foo" configure &>/dev/null; then perl -p -i -e "s/ac_kw foo/ac_kw int foo/" configure; fi @perl -pi -e 'if (/\[\/\$$\]\*. INSTALL=/) { print $$_ ; $$_ = "\"\") ;;\n"; }' configure @-rm -f config.cache config.h @echo "*** Create date/time stamp" @touch stamp-h.in @echo "*** Finished" @echo " Don't forget to run ./configure" @echo " If you haven't done so in a while, run ./configure --help" cvs-clean: @if test ! -d CVS; then \ echo "you don't have a toplevel CVS directory."; \ echo "You most certainly didn't use cvs to get these sources."; \ echo "But this function depends on cvs's informations."; \ exit 1 ;\ fi;\ pwd=`pwd` ;\ dirs=`find . -type d | grep -v CVS | sed -e "s#^./##"` ;\ for i in $$dirs; do \ if test ! -d $$pwd/$$i/CVS; then \ echo "D $$i" ;\ rm -rf $$pwd/$$i; \ continue; \ fi ;\ cd $$pwd/$$i ;\ for f in * .*; do \ if test ! -d $$f; then \ if grep "^/$$f/" CVS/Entries > /dev/null; then \ a="b"; \ else \ echo "F $$i/$$f"; \ rm -f $$pwd/$$i/$$f; \ fi; \ fi ; \ done; \ done xnee-3.19/cnee/AUTHORS0000664000000000000000000000061307772666367011312 00000000000000Xnee / AUTHORS -------------------- Authors: -------- Henrik Sandklef hesa@gnu.org Jon-Erling Dahl joda@gadgeteer.nu Contributors (code fixes, comments etc): --------------------------------------- Janice Waddick Juan F. Codagnone Lars Brinkhoff Ton van Vliet Nekrasov Alexander Dr. Adrian Wrigley Conall McGleenan Bianchi Roberto Thomas Riga Stuart Guthrie Volker Stolz xnee-3.19/cnee/ChangeLog0000664000000000000000000000445007772666367012017 000000000000002003-04-15 Henrik Sandklef * src/*/*.c "plugin -> resource" * doc/*.texi "plugin -> resource" 2003-02-10 Henrik Sandklef * configure.in: vararg/stdargs * src/lib/print_varargs.c: * doc/xnee_exampl.texi (Examples): * xnee.c: memset added * AUTHORS: author added * print_varargs.h: new file 2003-01-24 Henrik Sandklef * build_web.sh: building todo.html * web/todo.bot: new file * web/todo.top: new file 2003-01-23 Henrik Sandklef * src/lib/print_varargs.c: new file 2003-01-22 Henrik Sandklef * src/cli/main.c: exit calls now uses enum ret values * src/lib/xnee_record.c: exit calls now uses enum ret values * src/lib/xnee.h: defines -> enum * configure.in: AC_FUNC_VPRINTF added * src/lib/print.h: moved all varargs functions to print_varargs.c * src/lib/print_varargs.c: new file * Makefile.xnee (CFLAGS): -DHAVE_HAVE_STDARG_H added * src/cli/parse.c: XNEE_VERBOSE removed * src/lib/xnee.c: removed longjump stuff * src/cli/main.c (main): xd not global anymore 2003-01-20 Henrik Sandklef * build_web.sh: new file * TODO: various updates * doc/xnee_usage.texi: info updates * doc/xnee_synch.texi: info updates * doc/xnee_req.texi: info updates * doc/xnee_intro.texi: info updates * doc/xnee_install.texi: info updates * doc/xnee_faq.texi: info updates * doc/xnee_exampl.texi: info updates * doc/xnee_develop.texi: info updates * doc/xnee_devel_over.texi: info updates * doc/xnee_devel_down.texi: info updates * doc/xnee_devel_build.texi: info updates * doc/xnee_copying: new file * doc/texinfo.tex: replaced file * doc/fdl.texi: new file * doc/version.texi: new version * doc/dev_version.texi: new version * doc/xnee.texi: info updates * src/lib/xnee_record.h: comment update Sun Jan 19 14:21:56 2003 * doc/xnee.texi: added GNU FDL stuff * doc/xnee_develop.texi: added GNU FDL stuff Sun Jan 19 14:21:14 2003 * build.sh: removed cp NEWS ChangeLog Sun Jan 19 14:03:41 2003 * src/cli/parse.c: changed printouts in usage and version Sun Jan 19 14:02:21 2003 * src/lib/xnee.c: changed printouts in usage and version xnee-3.19/cnee/include/0000775000000000000000000000000012332167175011722 500000000000000xnee-3.19/cnee/include/cnee_printer.h0000664000000000000000000000344710641032701014463 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef CNEE_PRINTER_H #define CNEE_PRINTER_H #include #include "libxnee/xnee.h" /** * Prints all flags/options that Xnee handles. Description of the flags is omitted. * @param fd Where to print the flags * @return void */ void xnee_flags (FILE *fd); #endif /* CNEE_PRINTER_H */ xnee-3.19/cnee/include/cnee.h0000664000000000000000000000317710641032700012717 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_CNEE_H #define XNEE_CNEE_H #include "libxnee/xnee_resource.h" extern xnee_option_t *cnee_options; #endif /* XNEE_CNEE_H */ xnee-3.19/cnee/include/parse.h0000775000000000000000000000752011715173645013137 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef CNEE_PARSE_H #define CNEE_PARSE_H #include "libxnee/xnee.h" /** * Prints all flags/options that Xnee handles. Description of the flags is omitted. * @param fd Where to print the flags * @return void */ void xnee_flags (FILE *fd); /** * Prints all flags/options (with description) that Xnee handles. * @param fd Where to print the flags * @return void */ void xnee_usage (FILE* fd); /** * Parses the arguments in argv. * @param xd xnee's main structure * @param argc number of args in argv * @param argv list arguments * @return void */ int xnee_parse_args (xnee_data* xd, int argc, char **argv) ; /** * Prints cnee's options with description with man(nroff) syntax. This is * used when generating the man page for cnee. *
Doing like this we need not update the man page for every new option. * This is done automagically by the make system att build/compile time. * @param fd Where to print * @return void */ void xnee_manpage (FILE *fd); /** * Prints Xnee's options with description with info syntax. This is * used when generating the info page for cnee. * @param fd Where to print * @return void */ void xnee_infopage (FILE *fd); enum { CNEE_FILE_OPTION_KEY = 1 , CNEE_HELP_OPTION_KEY , CNEE_FLAGS_OPTION_KEY , CNEE_PROJECT_OPTION_KEY , CNEE_VERSION_OPTION_KEY , CNEE_TYPE_HELP_OPTION_KEY , CNEE_GEN_MANPAGE_OPTION_KEY , CNEE_GEN_TEXIPAGE_OPTION_KEY , CNEE_WRITE_SETTINGS_OPTION_KEY , CNEE_PRINT_SETTINGS_OPTION_KEY , CNEE_PRINT_E_NAMES_OPTION_KEY , CNEE_PRINT_E_NAME_OPTION_KEY , CNEE_PRINT_ERR_NAMES_OPTION_KEY , CNEE_PRINT_ERR_NAME_OPTION_KEY , CNEE_PRINT_REP_NAMES_OPTION_KEY , CNEE_PRINT_REQ_NAMES_OPTION_KEY , CNEE_PRINT_REQ_NAME_OPTION_KEY , CNEE_PRINT_DATA_NAMES_OPTION_KEY , CNEE_RETYPE_FILE_OPTION_KEY , CNEE_REMOVE_EVENT_OPTION_KEY , CNEE_DEMONSTRATION_OPTION_KEY , XNEE_KEYBOARD_OPTION_KEY , XNEE_MOUSE_OPTION_KEY , CNEE_SYNTAX_CHECKER_KEY , CNEE_GET_XINPUT_EVENT_BASE , CNEE_DISABLE_XINPUT_EVENTS , CNEE_REPLAY_BACKEND , CNEE_FORCE_CORE_REPLAY , CNEE_RECORD_REPLAY_OPTION_KEY } ; #endif /* CNEE_PARSE_H */ xnee-3.19/cnee/include/cnee_strings.h0000664000000000000000000000322110641032701014457 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef CNEE_STRINGS_H #define CNEE_STRINGS_H extern char *explain[] ; extern char *examples[] ; extern char *description[] ; #endif /* CNEE_STRINGS_H */ xnee-3.19/cnee/include/cnee_demo.h0000664000000000000000000000323410641032700013715 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef CNEE_DEMO_H #define CNEE_DEMO_H #include "libxnee/xnee.h" #include "libxnee/xnee_setget.h" int cnee_demonstration (xnee_data *xd); #endif /* CNEE_DEMO_H */ xnee-3.19/cnee/include/cnee_fake.h0000664000000000000000000000323110641032701013675 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef CNEE_FAKE_H #define CNEE_FAKE_H #include "libxnee/xnee.h" #include "libxnee/xnee_setget.h" int xnee_type_help (xnee_data *xd); #endif /* CNEE_FAKE_H */ xnee-3.19/cnee/test/0000775000000000000000000000000012332167175011256 500000000000000xnee-3.19/cnee/test/src/0000775000000000000000000000000012332167175012045 500000000000000xnee-3.19/cnee/test/src/xgetter.c0000664000000000000000000001012510613065440013602 00000000000000#include #include #include #include #include enum { X = 0, Y = 2, ALL = 4, ROOT= 8, WIN = 16 } xy_mask; int xg_check( char *arg, char *long_arg , char *short_arg ) { /* returns 1 if arg was equal to any of long_arg or short_arg, else it returns 0*/ return ( ! strcmp ( arg, long_arg) || ( ! strcmp ( arg, short_arg) )) ; } #define MOUSE_POS_ROOT_X_LONG "--mouse-position-root-x" #define MOUSE_POS_ROOT_X_SHORT "-mprx" #define MOUSE_POS_ROOT_Y_LONG "--mouse-position-root-y" #define MOUSE_POS_ROOT_Y_SHORT "-mpry" #define MOUSE_POS_ROOT_ALL_LONG "--mouse-position-root-all" #define MOUSE_POS_ROOT_ALL_SHORT "-mpra" #define MOUSE_POS_WIN_X_LONG "--mouse-position-win-x" #define MOUSE_POS_WIN_X_SHORT "-mpwx" #define MOUSE_POS_WIN_Y_LONG "--mouse-position-win-y" #define MOUSE_POS_WIN_Y_SHORT "-mpwy" #define MOUSE_POS_WIN_ALL_LONG "--mouse-position-win-all" #define MOUSE_POS_WIN_ALL_SHORT "-mpwa" #define RESOLUTION_X_LONG "--resolution-x" #define RESOLUTION_Y_LONG "--resolution-y" #define RESOLUTION_XY_LONG "--resolution-xy" #define RESOLUTION_X_SHORT "-rx" #define RESOLUTION_Y_SHORT "-ry" #define RESOLUTION_XY_SHORT "-rxy" #define DISPLAY_LONG "--display" #define DISPLAY_SHORT "-d" #define SCREEN_LONG "--screen" #define SCREEN_SHORT "-s" int get_pointer_pos(Display *dpy, int all, int root_or_win); int get_resolution_pos(Display *dpy, int all); static int screen = 0; int main(int argc, char **argv) { Display *dpy; int i; dpy = XOpenDisplay(NULL); for (i=1;i/dev/null touch ${GCOV_FILE} for c_file in $( find . -name "*.c" ) ; do O_FILE=$( basename $c_file | sed 's,\.c,\.o,g' ) GCOV_O_FILE="${PREFIX}""${O_FILE}" verbose "gcoving $c_file $GCOV_O_FILE" verbose "gcov -c -f -p -b $c_file --object-file $GCOV_O_FILE" gcov -c -f -p -b "${c_file}" --object-file "${GCOV_O_FILE}" >> ${GCOV_FILE} done rm -f /tmp/${GCOV_FILE} /tmp/*.gcov mv ${GCOV_FILE} /tmp/${GCOV_FILE} mv *.gcov /tmp/ popd mv /tmp/${GCOV_FILE} ./ mv /tmp/*.gcov ./ } # gcov verbose " *** gcov ***" rm *.gcov gcov_check $LIBXNEE "libxnee_a-" gcov_check ../src "cnee-" # gcov rm gmon.sum verbose " *** gprof ***" gprof -s $XNEE gmon.out xnee-3.19/cnee/test/scripts/0000775000000000000000000000000012332167175012745 500000000000000xnee-3.19/cnee/test/scripts/retype/0000775000000000000000000000000012332167175014255 500000000000000xnee-3.19/cnee/test/scripts/retype/keyboard.sh0000775000000000000000000000215111113632146016322 00000000000000#/bin/sh # # # Filename: retype/keyboard.sh # Created: Fri Aug 8 00:04:38 CEST 2003 # # Description: # # Test the Xnee functionality # replay recorded keyboard motions # # # name of myself MYNAME=retype/keyboard.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test parse_me "$*" ####################################################################### KEYBOARD_DEVICE=/dev/swkeybd function retype_file() { RECORDED_FILE=$1 verbose "replaying file $RECORDED_FILE" launch_cat_wrapper /tmp/xnee_test.txt& sleep 4 verbose " launching cnee" run_cnee --retype-file scripts/retype/onefile.txt sleep 2 verbose " faking control-d" fake_controld sleep 1 } # main ..... I guess verify_device swkeybd retype_file $FILE DIFF_LINES=$(sdiff -s /tmp/xnee_test.txt scripts/retype/onefile.txt | wc -l) verbose "Verifying the lengths of $LEN_STRING $LEN_FAKE" verify_same $DIFF_LINES 0 result_log $MYNAME exit xnee-3.19/cnee/test/scripts/timing/0000775000000000000000000000000012332167175014234 500000000000000xnee-3.19/cnee/test/scripts/timing/mo-time.sh0000775000000000000000000000520511113632146016053 00000000000000#/bin/sh # # # Filename: replay/.sh # Generated: # # Description: # # Test the Xnee functionality # replay mouse motions with different resolution # # # name of myself MYNAME=timing/mo-time.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### # #rm m*.log NR_OF_PIX=400 HALF_WAYS=200 verify_device $MOUSE_DEVICE #get mouse in position and zero the device counter #get_in_position #zero_device $MOUSE_DEVICE #record_and_replay 40 5 6 7 #get mouse in position and zero the device counter get_in_position zero_device $MOUSE_DEVICE verbose "Storing start time" verbose "Recording a session ......" REAL_START_TIME=`date '+%s'` run_cnee --record --mouse --data-to-record 10000 --seconds-to-record 10000 --events-to-record 5000 -o rep-time.log & move_mouse r 600 move_mouse d 600 move_mouse l 600 move_mouse u 600 sleep 3 move_mouse r 400 sleep 1 move_mouse d 400 sleep 2 move_mouse l 400 sleep 2 move_mouse u 400 REAL_STOP_TIME=`date '+%s'` sleep 1 $KILLALL_1 $XNEE verbose "Storing stop time" verbose " .... finished recording a session" REAL_TIME=$(( $REAL_STOP_TIME - $REAL_START_TIME )) verbose "The mouse motions took $REAL_TIME secs" echo "Temp fix... removing 100% speed line in log file" mv rep-time.log rep-time.tmp cat rep-time.tmp | sed 's/speed-percent/#/g' > rep-time.log function timed_replay() { SPEED=$1 verbose "replaying with speed=$SPEED%" FAKE_START_TIME=`date '+%s'` run_cnee --replay -f rep-time.log --speed-percent $SPEED echo $XNEE --replay -f rep-time.log --speed-percent $SPEED FAKE_STOP_TIME=`date '+%s'` FAKE_TIME=$(( $FAKE_STOP_TIME - $FAKE_START_TIME )) EXP_TIME=$(( $REAL_TIME * $SPEED / 100 )) FAKE_SPEED=$(( $FAKE_TIME *100 / $REAL_TIME )) FAKE_SPEED_PERCENT=$(( $FAKE_SPEED *100 / $SPEED )) TIME_PERCENT=$(( $FAKE_TIME *100 / $EXP_TIME )) LIMIT__=$(( $EXP_TIME * 90 )) LIMIT_=$(( $LIMIT__ / 100 )) LIMIT=$(( $EXP_TIME - $LIMIT_ )) verbose " Speed (%) ${SPEED} $FAKE_SPEED $FAKE_SPEED_PERCENT" verbose " Time (secs) $EXP_TIME $FAKE_TIME $LIMIT" verify_pos_alm_same $EXP_TIME $FAKE_TIME $LIMIT } verbose "Variable Wanted Actual Percent" verbose "==============================================" timed_replay 10 timed_replay 25 timed_replay 75 timed_replay 100 timed_replay 200 timed_replay 500 timed_replay 1000 result_log $MYNAME xnee-3.19/cnee/test/scripts/options/0000775000000000000000000000000012332167175014440 500000000000000xnee-3.19/cnee/test/scripts/options/print-request-name.sh0000775000000000000000000001331211113632145020445 00000000000000#/bin/sh # # # This file is generated from new_script.sh # and updated by hand by hesa # # Filename: opt_scripts/print-request-name.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # Description: # # Tests the Xnee option # --print-request-name # By reading up X11 events (name and number) from # the header file X.h. These values are compared # with the output from Xnee # # # name of myself MYNAME=print-request-name.sh # Arguments to test (short and long) export LONG_ARG=--print-request-name export SHORT_ARG=-prn # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MY_NAME parse_me "$*" ####################################################################### X11_NAMES=/tmp/xnee_requests.tmp # # main .... sort of # # get the event numbers and names from the devel header file find_requests /usr/include/X11/Xproto.h $X11_NAMES LAST_REQ=`grep X_GetModifierMapping /usr/include/X11/Xproto.h | awk '{ print $3}' | sed 's,[ ]*,,g' ` # # positive tests of long args # # compare Xnee number and names with the system for i in `cat $X11_NAMES` do EV_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_EV=`run_cnee $LONG_ARG $NAME_` STATUS=$? check_retval $STATUS 0 "run_cnee $LONG_ARG $NAME_" XNEE_EV_NAME=`run_cnee $LONG_ARG $EV_` STATUS=$? check_retval $STATUS 0 "run_cnee $LONG_ARG $EV_" compare_data $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME "$MYNAME" done # compare Xnee number and names with the system # short args for i in `cat $X11_NAMES` do EV_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_EV=`run_cnee $SHORT_ARG $NAME_` STATUS=$? check_retval $STATUS 0 XNEE_EV_NAME=`run_cnee $SHORT_ARG $EV_` STATUS=$? check_retval $STATUS 0 compare_data $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME done # loop through all requests and run them in a Xnee renaming pipe # Make sure that 2 == 2 # after this has been done: 2 --xnee--> 'requestname' --xnee--> 2 # loop from to TMP=1 while [ "$TMP" != "$LAST_REQ" ]; do TOTAL_TEST=`expr $TOTAL_TEST + 1` REC=`run_cnee $LONG_ARG $TMP | xargs run_cnee $SHORT_ARG ` STATUS=$? check_retval $STATUS 0 if [ "$REC" != "$TMP" ]; then log " unexpected result: using \"run_cnee $LONG_ARG $TMP | run_cnee $SHORT_ARG $TMP\"" log " got: $REC ..... wanted: $TMP" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` REC=`run_cnee $SHORT_ARG $TMP | xargs run_cnee $LONG_ARG ` STATUS=$? check_retval $STATUS 0 if [ "$REC" != "$TMP" ]; then log " unexpected result: using \"run_cnee $SHORT_ARG $TMP | run_cnee $LONG_ARG $TMP\"" log " got: $REC ..... wanted: $TMP" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TMP=`expr $TMP + 1` done # # negative tests # for i in 0=bartok -12=bela 200=shostakovich do EV_=`echo $i | sed 's,\([-0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[-0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_EV=`run_cnee $LONG_ARG $NAME_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` XNEE_EV_NAME=`run_cnee $LONG_ARG $EV_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV_NAME" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # ### # Xnee returns no value so we can't compare # ### # compare_data_false $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME XNEE_EV=`run_cnee $SHORT_ARG $NAME_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` XNEE_EV_NAME=`run_cnee $SHORT_ARG $EV_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV_NAME" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` done # more neg tests..... #for i in 1=allan 67=pettersson 127=dimitri for i in 1=allan do EV_=`echo $i | sed 's,\([-0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[-0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_EV=`run_cnee $LONG_ARG $NAME_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` XNEE_EV_NAME=`run_cnee $LONG_ARG $EV_` STATUS=$? check_retval $STATUS 0 if [ "$XNEE_EV_NAME" == "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # ### # Xnee returns no value so we can't compare # ### # compare_data_false $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME XNEE_EV=`run_cnee $SHORT_ARG $NAME_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` XNEE_EV_NAME=`run_cnee $SHORT_ARG $EV_` STATUS=$? check_retval $STATUS 0 if [ "$XNEE_EV_NAME" == "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # ### # Xnee returns no value so we can't compare # ### # compare_data_false $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME done \rm -f $X11_NAMES result_log $MYNAME exit xnee-3.19/cnee/test/scripts/options/all-events.sh0000775000000000000000000000277011113632145016765 00000000000000#/bin/sh # # # This file is generated from new_scrip.sh # # # Filename: opt_scripts/all-events.sh # Generated: Sun Mar 16 20:17:14 CET 2003 # # echo "obsolete test case: --all-events" echo "... leaving" exit 0 # Arguments to test (short and long) export LONG_ARG=--all-events export SHORT_ARG=-ae # name of myself MYNAME=all-events.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the current dir (or one dir up) " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" # # # XNEE_STDOUT=/tmp/xnee_arg.tmp function check_arg() { FILE=$1 EXPECTED=$2 MSG=$3 verbose "testing: $1 - $2 - $3" TOTAL_TEST=`expr $TOTAL_TEST + 1` RESULT=`grep "# all-events" $FILE | awk '{ printf "%s\n", $3}' | sed 's,[ ]*,,g'` if [ "$RESULT" != "$EXPECTED" ] ; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` else verbose "success...." SUCC_TEST=`expr $SUCC_TEST + 1` fi } # positive test run_cnee $LONG_ARG --record --events-to-record 0 > $XNEE_STDOUT STATUS=$? check_retval $STATUS 0 check_arg $XNEE_STDOUT 1 "$LONG_ARG" # positive test run_cnee $SHORT_ARG --record --events-to-record 0 > $XNEE_STDOUT check_retval $STATUS 0 check_arg $XNEE_STDOUT 1 "$SHORT_ARG" # negative test run_cnee --record --device-event-range 6 --events-to-record 0 > $XNEE_STDOUT check_retval $STATUS 0 check_arg $XNEE_STDOUT 0 "$SHORT_ARG" \rm -f $XNEE_STDOUT result_log $MYNAME xnee-3.19/cnee/test/scripts/options/print-event-name.sh0000775000000000000000000001055011113632145020077 00000000000000#/bin/sh # # # This file is generated from new_script.sh # and updated by hand by hesa # # Filename: options/print-event-name.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # Description: # # Test the Xnee option # --print-event-name # By reading up X11 events (name and number) from # the header file X.h. These values are compared # with the output from Xnee # # # name of myself MYNAME=print-event-name.sh # Arguments to test (short and long) export LONG_ARG=--print-event-name export SHORT_ARG=-pen # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test parse_me "$*" ####################################################################### X11_NAMES=/tmp/xnee_events.tmp # # main .... sort of # # get the event numbers and names from the devel header file find_events /usr/include/X11/X.h $X11_NAMES LAST_EVENT=`grep LASTEvent /usr/include/X11/X.h | awk '{ print $3}' | sed 's,[ ]*,,g' ` # # positive tests # # compare Xnee number and names with the system for i in `cat $X11_NAMES` do EV_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_EV=`run_cnee $LONG_ARG $NAME_` STATUS=$? check_retval $STATUS 0 XNEE_EV_NAME=`run_cnee $LONG_ARG $EV_` STATUS=$? check_retval $STATUS 0 compare_data $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME done # compare Xnee number and names with the system for i in `cat $X11_NAMES` do EV_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_EV=`run_cnee $SHORT_ARG $NAME_` STATUS=$? check_retval $STATUS 0 XNEE_EV_NAME=`run_cnee $SHORT_ARG $EV_` STATUS=$? check_retval $STATUS 0 compare_data $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME done # loop through all events and run them in a Xnee renaming pipe # Make sure that 2 == 2 # after this has been done: 2 --xnee--> KeyPress --xnee--> 2 # loop from 2 to LASTEvent TMP=2 while [ "$TMP" != "$LAST_EVENT" ]; do TOTAL_TEST=`expr $TOTAL_TEST + 1` REC=`run_cnee $LONG_ARG $TMP | xargs run_cnee $SHORT_ARG ` STATUS=$? check_retval $STATUS 0 if [ "$REC" != "$TMP" ]; then log " unexpected result: using \"run_cnee $LONG_ARG $TMP | run_cnee $SHORT_ARG $TMP\"" log " got: $REC ..... wanted: $TMP" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` REC=`run_cnee $SHORT_ARG $TMP | xargs run_cnee $LONG_ARG ` STATUS=$? check_retval $STATUS 0 if [ "$REC" != "$TMP" ]; then log " unexpected result: using \"run_cnee $SHORT_ARG $TMP | run_cnee $LONG_ARG $TMP\"" log " got: $REC ..... wanted: $TMP" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TMP=`expr $TMP + 1` done # # negative tests # for i in 0=bartok -12=bela 1=allan 67=pettersson 127=dimitri 200=shostakovich do EV_=`echo $i | sed 's,\([-0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[-0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_EV=`run_cnee $LONG_ARG $NAME_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` XNEE_EV_NAME=`run_cnee $LONG_ARG $EV_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV_NAME" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # ### # Xnee returns no value so we can't compare # ### # compare_data_false $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME XNEE_EV=`run_cnee $SHORT_ARG $NAME_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` XNEE_EV_NAME=`run_cnee $SHORT_ARG $EV_` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_EV_NAME" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # ### # Xnee returns no value so we can't compare # ### # compare_data_false $EV_ $NAME_ $XNEE_EV $XNEE_EV_NAME done \rm -f $X11_NAMES result_log $MYNAME exit xnee-3.19/cnee/test/scripts/options/print-error-names.sh0000775000000000000000000000772511316246023020305 00000000000000#/bin/sh # # # This file is generated from new_script.sh # # # Filename: opt_scripts/print-error-names.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # # Test the Xnee option # --print-error-names # By reading up X11 errors (name and number) from # the header file X.h. These values are compared # with the output from Xnee # # name of myself MYNAME=print-error-names.sh # Arguments to test (short and long) export LONG_ARG=--print-error-names export SHORT_ARG=-pens # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### XNEE_NAMES=/tmp/xnee_arg.tmp X11_NAMES=/tmp/xnee_errors.tmp # # # compare_error # # # Compare if the the name,number pair given # as argument is the same as given by Xnee --print-error-names # # compare_error() { EXP_ERR=$1 EXP_ERR_NAME=$2 MSG=$3 TOTAL_TEST=`expr $TOTAL_TEST + 1` # Xnee's number,name pair is located in the file $XNEE_NAMES REC_ERR=`grep -w $EXP_ERR $XNEE_NAMES | awk '{ print $1}' | sed 's,[ ],,g'` REC_ERR_NAME=`grep -w $EXP_ERR_NAME $XNEE_NAMES | awk ' { print $2}' | sed 's,[ ],,g'` verbose "verifying error names and numbers" verbose " \"$EXP_ERR\"==\"$REC_ERR\"" verbose " \"$EXP_ERR_NAME\"==\"$REC_ERR_NAME\"" if [ "$REC_ERR" != "$EXP_ERR" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi if [ "$REC_ERR_NAME" != "$EXP_ERR_NAME" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi verbose "success...." SUCC_TEST=`expr $SUCC_TEST + 1` } # # # compare_error_false # # # compare_error_false() { EXP_ERR=$1 EXP_ERR_NAME=$2 MSG=$3 TOTAL_TEST=`expr $TOTAL_TEST + 1` # Xnee's number,name pair is located in the file $XNEE_NAMES REC_ERR=`grep -w $EXP_ERR $XNEE_NAMES | awk '{ print $1}' | sed 's,[ ],,g'` REC_ERR_NAME=`grep -w $EXP_ERR_NAME $XNEE_NAMES | awk ' { print $2}' | sed 's,[ ],,g'` verbose "verifying error names and numbers" verbose " \"$EXP_ERR\"==\"$REC_ERR\"" verbose " \"$EXP_ERR_NAME\"==\"$REC_ERR_NAME\"" if [ "$REC_ERR" = "$EXP_ERR" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi if [ "$REC_ERR_NAME" = "$EXP_ERR_NAME" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi verbose "success...." SUCC_TEST=`expr $SUCC_TEST + 1` } # # main .... sort of # # get the error numbers and names from the devel header file find_errors /usr/include/X11/X.h $X11_NAMES LAST_ERROR=`cat $X11_NAMES | grep -v Extension | tail -1 | awk 'BEGIN {FS="="} ; { print $1}' | sed 's,[ ]*,,g' ` # # positive test # #get the error numbers and names from Xnee run_cnee $LONG_ARG | grep -e "^[0-9]" > $XNEE_NAMES STATUS=$? # compare Xnee number and names with the system for i in `cat $X11_NAMES` do EV_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` if [ "$NAME_" = "$LAST_ERROR" ]; then verbose " -- comparing (false): \"$EV_\" \"$NAME_\" " compare_error_false $EV_ $NAME_ "$EV_ $NAME_ " else verbose " -- comparing: \"$EV_\" \"$NAME_\" " compare_error $EV_ $NAME_ "$EV_ $NAME_ " fi done check_retval $STATUS 0 result_log $MYNAME result_log $MYNAME # positive test run_cnee $SHORT_ARG | grep -e "^[0-9]" > $XNEE_NAMES.2 STATUS=$? diff $XNEE_NAMES $XNEE_NAMES.2>/dev/null 1>/dev/null TOTAL_TEST=`expr $TOTAL_TEST + 1` if [ "$?" != "0" ] ; then echo " xnee $SHORT_ARG differs from $LONG_ARG" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi check_retval $STATUS 0 "$STATUS 0" \rm -f $X11_NAMES \rm -f $XNEE_NAMES $XNEE_NAMES.2 result_log $MYNAME xnee-3.19/cnee/test/scripts/options/print-error-name.sh0000775000000000000000000001064311316246055020120 00000000000000#!/bin/bash # # # Filename: options/print-error-name.sh # Generated: # # Description: # # Test the Xnee option # --print-error-name # By reading up X11 error (name and number) from # the header file X.h. These values are compared # with the output from Xnee # # # name of myself MYNAME=print-error-name.sh # Arguments to test (short and long) export LONG_ARG=--print-error-name export SHORT_ARG=-pern # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi ##init_test parse_me "$*" ####################################################################### X11_NAMES=/tmp/xnee_errors.tmp # # main .... sort of # # get the error numbers and names from the devel header file find_errors /usr/include/X11/X.h $X11_NAMES LAST_ERROR=`cat $X11_NAMES | grep -v Extension | tail -1 | awk 'BEGIN {FS="="} ; { print $1}' | sed 's,[ ]*,,g' ` # # positive tests # # compare Xnee number and names with the system for i in `cat $X11_NAMES` do ER_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_ER=`run_cnee $LONG_ARG $NAME_` STATUS=$? check_retval $STATUS 0 XNEE_ER_NAME=`run_cnee $LONG_ARG $ER_` STATUS=$? check_retval $STATUS 0 compare_data "$ER_" "$NAME_" "$XNEE_ER" "$XNEE_ER_NAME" done # compare Xnee number and names with the system for i in `cat $X11_NAMES` do ERR_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` XNEE_ERR=`run_cnee $SHORT_ARG $NAME_` STATUS=$? check_retval $STATUS 0 XNEE_ERR_NAME=`run_cnee $SHORT_ARG $ERR_` STATUS=$? check_retval $STATUS 0 compare_data $ERR_ $NAME_ $XNEE_ERR $XNEE_ERR_NAME done # loop through all errors and run them in a Xnee renaming pipe # Make sure that 2 == 2 # after this has been done: 2 --xnee--> BadFont --xnee--> 2 # loop from 1 to BadImplementation TMP=1 while [ "$TMP" != "$LAST_ERROR" ]; do TOTAL_TEST=`expr $TOTAL_TEST + 1` REC=`run_cnee $LONG_ARG $TMP | xargs run_cnee $SHORT_ARG ` STATUS=$? check_retval $STATUS 0 if [ "$REC" != "$TMP" ]; then log " unexpected result: using \"$XNEE $LONG_ARG $TMP | $XNEE $SHORT_ARG $TMP\"" log " got: $REC ..... wanted: $TMP" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` REC=`run_cnee $SHORT_ARG $TMP | xargs run_cnee $LONG_ARG ` STATUS=$? check_retval $STATUS 0 if [ "$REC" != "$TMP" ]; then log " unexpected result: using \"$XNEE $SHORT_ARG $TMP | $XNEE $LONG_ARG $TMP\"" log " got: $REC ..... wanted: $TMP" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TMP=`expr $TMP + 1` done # # negative tests # for i in -12=bela 67=pettersson 127=dimitri 200=shostakovich do ERR_=`echo $i | sed 's,\([-0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[-0-9]*=\([a-zA-Z0-9]*\),\1,g'` # echo $XNEE $LONG_ARG $NAME_ XNEE_ERR=`run_cnee $LONG_ARG $NAME_ >/dev/null 2>&1` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_ERR" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # echo $XNEE $LONG_ARG $ERR_ XNEE_ERR_NAME=`run_cnee $LONG_ARG $ERR_ >/dev/null 2>&1` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_ERR_NAME" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # ### # Xnee returns no value so we can't compare # ### # compare_data_false $ERR_ $NAME_ $XNEE_ERR $XNEE_ERR_NAME XNEE_ERR=`run_cnee $SHORT_ARG $NAME_ >/dev/null 2>&1` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_ERR" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` XNEE_ERR_NAME=`run_cnee $SHORT_ARG $ERR_ >/dev/null 2>&1` STATUS=$? check_retval_false $STATUS 0 if [ "$XNEE_ERR_NAME" != "" ]; then ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi TOTAL_TEST=`expr $TOTAL_TEST + 1` # ### # Xnee returns no value so we can't compare # ### # compare_data_false $ERR_ $NAME_ $XNEE_ERR $XNEE_ERR_NAME done \rm -f $X11_NAMES result_log $MYNAME exit xnee-3.19/cnee/test/scripts/options/print-event-names.sh0000775000000000000000000000744411113632145020272 00000000000000#/bin/sh # # # This file is generated from new_script.sh # # # Filename: opt_scripts/print-event-names.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # # Test the Xnee option # --print-event-names # By reading up X11 events (name and number) from # the header file X.h. These values are compared # with the output from Xnee # # name of myself MYNAME=print-event-names.sh # Arguments to test (short and long) export LONG_ARG=--print-event-names export SHORT_ARG=-pens # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### XNEE_NAMES=/tmp/xnee_arg.tmp X11_NAMES=/tmp/xnee_events.tmp # # main .... sort of # # get the event numbers and names from the devel header file find_events /usr/include/X11/X.h $X11_NAMES # # # compare_event # # # Compare if the the name,number pair given # as argument is the same as given by Xnee --print-event-names # # function compare_event() { EXP_EV=$1 EXP_EV_NAME=$2 MSG=$3 TOTAL_TEST=`expr $TOTAL_TEST + 1` # Xnee's number,name pair is located in the file $XNEE_NAMES REC_EV=`grep -w $EXP_EV $XNEE_NAMES | awk '{ print $1}' | sed 's,[ ],,g'` REC_EV_NAME=`grep -w $EXP_EV_NAME $XNEE_NAMES | awk ' { print $2}' | sed 's,[ ],,g'` verbose "verifying event names and numbers" verbose " \"$EXP_EV\"==\"$REC_EV\"" verbose " \"$EXP_EV_NAME\"==\"$REC_EV_NAME\"" if [ "$REC_EV" != "$EXP_EV" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi if [ "$REC_EV_NAME" != "$EXP_EV_NAME" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi verbose "success...." SUCC_TEST=`expr $SUCC_TEST + 1` } # # # compare_event_false # # # function compare_event_false() { EXP_EV=$1 EXP_EV_NAME=$2 MSG=$3 TOTAL_TEST=`expr $TOTAL_TEST + 1` # Xnee's number,name pair is located in the file $XNEE_NAMES REC_EV=`grep -w $EXP_EV $XNEE_NAMES | awk '{ print $1}' | sed 's,[ ],,g'` REC_EV_NAME=`grep -w $EXP_EV_NAME $XNEE_NAMES | awk ' { print $2}' | sed 's,[ ],,g'` verbose "verifying event names and numbers" verbose " \"$EXP_EV\"==\"$REC_EV\"" verbose " \"$EXP_EV_NAME\"==\"$REC_EV_NAME\"" if [ "$REC_EV" == "$EXP_EV" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi if [ "$REC_EV_NAME" == "$EXP_EV_NAME" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi verbose "success...." SUCC_TEST=`expr $SUCC_TEST + 1` } # # positive test # #get the event numbers and names from Xnee run_cnee $LONG_ARG | grep -e "^[0-9]" > $XNEE_NAMES STATUS=$? # compare Xnee number and names with the system for i in `cat $X11_NAMES` do EV_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` # LASTEvent is now concidered valid # if [ "$NAME_" == "LASTEvent" ]; # then # verbose " comparing (false): \"$EV_\" \"$NAME_\" " # compare_event_false $EV_ $NAME_ "$EV_ $NAME_ " # else verbose " comparing: \"$EV_\" \"$NAME_\" " compare_event $EV_ $NAME_ "$EV_ $NAME_ " # fi done check_retval $STATUS 0 # positive test run_cnee $SHORT_ARG | grep -e "^[0-9]" > $XNEE_NAMES.2 STATUS=$? diff $XNEE_NAMES $XNEE_NAMES.2>/dev/null 1>/dev/null TOTAL_TEST=`expr $TOTAL_TEST + 1` if [ "$?" != "0" ] ; then echo " xnee $SHORT_ARG differs from $LONG_ARG" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi check_retval $STATUS 0 "$STATUS 0" \rm -f $X11_NAMES \rm -f $XNEE_NAMES $XNEE_NAMES.2 result_log $MYNAME xnee-3.19/cnee/test/scripts/options/test_all.sh0000775000000000000000000000200407772666367016545 00000000000000#!/bin/bash . etc/base_funs \rm -f $LOG $ERR_LOG init_test START=`date '+%s'` for i in `ls scripts/options/*.sh | grep -v test_all\.sh `; do $i $* done STOP=`date '+%s'` NAME=test_all.sh NEW_LOG=test_all.log rm $NEW_LOG touch $NEW_LOG echo "Script name: test_all.sh" >> $NEW_LOG echo "Results from test" >> $NEW_LOG cat $LOG | awk 'BEGIN { FS="[:]" ; TOT_T=0 ; SUC_T=0 ; ERR_T=0 ; WARN_T=0 ; RET_T=0 ; RET_E=0 ; } \ { \ TOT_T=TOT_T + $2 ;\ SUC_T=SUC_T + $3 ;\ ERR_T=ERR_T + $4 ;\ WARN_T=WARN_T + $5 ;\ RET_T=RET_T + $6 ;\ RET_E=RET_E + $7 ;\ } \ END { \ printf "Total nr of tests: %s\n", TOT_T ;\ printf " Success: %s\n", SUC_T ;\ printf " Error: %s\n", ERR_T ;\ printf " Warning: %s\n", WARN_T ;\ printf " Return (correct): %s\n", RET_T ;\ printf " Return (incorrect):%s\n", RET_E ;\ }' | tee test_all.log echo "TIME 0:`expr $STOP - $START`:$XNEE_VERSION:$X_VEND:$X_VERS:$ME:$OS" >> $NEW_LOG xnee-3.19/cnee/test/scripts/options/print-request-names.sh0000775000000000000000000000737611113632146020646 00000000000000#/bin/sh # # # This file is generated from new_script.sh # # # Filename: opt_scripts/print-request-names.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # # Test the Xnee option # --print-event-names # By reading up X11 events (name and number) from # the header file X.h. These values are compared # with the output from Xnee # # name of myself MYNAME=print-request-names.sh # Arguments to test (short and long) export LONG_ARG=--print-request-names export SHORT_ARG=-prns # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### XNEE_NAMES=/tmp/xnee_arg.tmp X11_NAMES=/tmp/xnee_requests.tmp # # main .... sort of # # get the event numbers and names from the devel header file find_requests /usr/include/X11/Xproto.h $X11_NAMES # # # compare_request # # # Compare if the the name,number pair given # as argument is the same as given by Xnee --print-event-names # # function compare_request() { EXP_EV=$1 EXP_EV_NAME=$2 MSG=$3 TOTAL_TEST=`expr $TOTAL_TEST + 1` # Xnee's number,name pair is located in the file $XNEE_NAMES REC_EV=`grep -w $EXP_EV $XNEE_NAMES | awk '{ print $1}' | sed 's,[ ],,g'` REC_EV_NAME=`grep -w $EXP_EV_NAME $XNEE_NAMES | awk ' { print $2}' | sed 's,[ ],,g'` verbose "verifying event names and numbers" verbose " \"$EXP_EV\"==\"$REC_EV\"" verbose " \"$EXP_EV_NAME\"==\"$REC_EV_NAME\"" if [ "$REC_EV" != "$EXP_EV" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi if [ "$REC_EV_NAME" != "$EXP_EV_NAME" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi verbose "success...." SUCC_TEST=`expr $SUCC_TEST + 1` } function compare_request_false() { EXP_EV=$1 EXP_EV_NAME=$2 MSG=$3 TOTAL_TEST=`expr $TOTAL_TEST + 1` # Xnee's number,name pair is located in the file $XNEE_NAMES REC_EV=`grep -w $EXP_EV $XNEE_NAMES | awk '{ print $1}' | sed 's,[ ],,g'` REC_EV_NAME=`grep -w $EXP_EV_NAME $XNEE_NAMES | awk ' { print $2}' | sed 's,[ ],,g'` verbose "verifying event names and numbers" verbose " \"$EXP_EV\"==\"$REC_EV\"" verbose " \"$EXP_EV_NAME\"==\"$REC_EV_NAME\"" if [ "$REC_EV" == "$EXP_EV" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi if [ "$REC_EV_NAME" == "$EXP_EV_NAME" ]; then log " unexpected result: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi verbose "success...." SUCC_TEST=`expr $SUCC_TEST + 1` } # # positive test # #get the event numbers and names from Xnee run_cnee $LONG_ARG | grep -e "^[0-9]" > $XNEE_NAMES STATUS=$? # compare Xnee number and names with the system for i in `cat $X11_NAMES` do EV_=`echo $i | sed 's,\([0-9]*\)=.*,\1,g'` NAME_=`echo $i | sed 's,[0-9]*=\([a-zA-Z0-9]*\),\1,g'` if [ "$NAME_" == "X_NoOperation" ]; then verbose " comparing (false): \"$EV_\" \"$NAME_\" " compare_request_false $EV_ $NAME_ "$EV_ $NAME_ " else verbose " comparing: \"$EV_\" \"$NAME_\" " compare_request $EV_ $NAME_ "$EV_ $NAME_ " fi done check_retval $STATUS 0 # positive test run_cnee $SHORT_ARG | grep -e "^[0-9]" > $XNEE_NAMES.2 STATUS=$? diff $XNEE_NAMES $XNEE_NAMES.2>/dev/null 1>/dev/null TOTAL_TEST=`expr $TOTAL_TEST + 1` if [ "$?" != "0" ] ; then echo " xnee $SHORT_ARG differs from $LONG_ARG" ERR_TEST=`expr $ERR_TEST + 1` else SUCC_TEST=`expr $SUCC_TEST + 1` fi check_retval $STATUS 0 "$STATUS 0" \rm -f $X11_NAMES \rm -f $XNEE_NAMES $XNEE_NAMES.2 result_log $MYNAME exit xnee-3.19/cnee/test/scripts/resolution/0000775000000000000000000000000012332167175015150 500000000000000xnee-3.19/cnee/test/scripts/resolution/mo-res.sh0000775000000000000000000001422111113632146016620 00000000000000#/bin/sh # # # Filename: mo-res.sh # Generated: # # Description: # # Test the Xnee functionality # replay mouse motions with different resolution # # # name of myself MYNAME=resolution/mo-res.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### function time_record() { RIGHT_PIX=$1 DOWN_PIX=$2 LEFT_PIX=$3 UP_PIX=$4 LOG_FILE=$5 LOG_FILE=rep-mouse.log SLEEP_INTERVAL=5 SUM=$(( $1 + $2 + $3 + $4 )) verbose "SUM of $1 $2 $3 $4 = $SUM" ALLOWED_DIFF_IN_PIXELS=5 # # RECORDING # verbose "Start recording ..." rm rep-mouse.log get_pointer STARTX=$XPOS STARTY=$YPOS verbose " ### start point: $XPOS $YPOS `date`" run_cnee --record --mouse --data-to-record 10000 --seconds-to-record 10000 --events-to-record $SUM -o rep-mouse.log & sleep 1 verbose "Start faking with swinput:" ## # Right # verbose " r $RIGHT_PIX" save_pointer verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse r $RIGHT_PIX TIME2=`date '+%s'` R_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$R_DELAY" verify_not_same $SAVE_XPOS $XPOS verify_same $SAVE_YPOS $YPOS verify_same $(( $XPOS - $SAVE_XPOS )) $RIGHT_PIX sleep $SLEEP_INTERVAL ## # Down # save_pointer verbose " d $DOWN_PIX" verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse d $DOWN_PIX TIME2=`date '+%s'` D_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$D_DELAY" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_same $(( $YPOS - $SAVE_YPOS )) $DOWN_PIX sleep $SLEEP_INTERVAL ## # Left # save_pointer verbose " l $LEFT_PIX" verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse l $LEFT_PIX TIME2=`date '+%s'` L_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$L_DELAY" verify_not_same $SAVE_XPOS $XPOS verify_same $SAVE_YPOS $YPOS verify_same $(( $SAVE_XPOS - $XPOS )) $LEFT_PIX sleep $SLEEP_INTERVAL ## # Up # verbose " u $UP_PIX" save_pointer verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse u $UP_PIX TIME2=`date '+%s'` U_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$U_DELAY" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_same $(( $SAVE_YPOS - $YPOS )) $UP_PIX sleep 5 $KILLALL_1 $XNEE verbose "Making sure we have a valid log file...." export NR_OF_LOGS=`grep -e "0,6" rep-mouse.log | wc -l` verbose "Nr of logs:" verbose " in file: $NR_OF_LOGS" verbose " wanted: $SUM" verify_same $NR_OF_LOGS $SUM } function time_replay() { # # REPLAYING # ... log file should be ok by now... or else errors are reported get_in_position verbose "Replay starting ....... " verbose " " verbose " " run_cnee --replay -f rep-mouse.log $REPLAY_RESOLUTION_ARG & verbose "executing: $XNEE --replay -f rep-mouse.log $REPLAY_RESOLUTION_ARG " TMP=0 # echo "$TMP `$getx` `$gety`" # while [ "$TMP" != "100" ]; # do # sleep 5 # echo "$TMP `$getx` `$gety`" # TMP=$(( $TMP + 5 )) # done #exit # sleep half the sleeping interval MYSLEEP=$(( $SLEEP_INTERVAL / 2 )) # this is almose useless..... since we don't know when # to get this value... the value received here # is not the start point .... save_pointer sleep $R_DELAY sleep $MYSLEEP get_pointer verbose " -- checking r `date`" verify_not_same $(( $(( $SAVE_XPOS * $REPLAY_RESOLUTION_X )) / $RECORD_RESOLUTION_X )) $XPOS save_pointer sleep $SLEEP_INTERVAL sleep $D_DELAY get_pointer verbose " -- checking d `date`" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_pos_alm_same $(( $YPOS - $SAVE_YPOS )) $(( $DOWN_PIX * $REPLAY_RESOLUTION_Y / $RECORD_RESOLUTION_Y)) $ALLOWED_DIFF_IN_PIXELS save_pointer sleep $SLEEP_INTERVAL sleep $L_DELAY get_pointer verbose " -- checking l `date`" verify_same $SAVE_YPOS $YPOS verify_not_same $SAVE_XPOS $XPOS verify_pos_alm_same $(( $SAVE_XPOS - $XPOS )) $(( $LEFT_PIX * $REPLAY_RESOLUTION_X / $RECORD_RESOLUTION_X)) $ALLOWED_DIFF_IN_PIXELS save_pointer sleep $SLEEP_INTERVAL sleep $U_DELAY get_pointer verbose " -- checking u `date`" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_pos_alm_same $(( $SAVE_YPOS - $YPOS )) $(( $UP_PIX * $REPLAY_RESOLUTION_Y / $RECORD_RESOLUTION_Y)) $ALLOWED_DIFF_IN_PIXELS } # main ..... I guess verify_device $MOUSE_DEVICE # #rm m*.log NR_OF_PIX=400 HALF_WAYS=200 #get mouse in position and zero the device counter #get_in_position #zero_device $MOUSE_DEVICE #record_and_replay 40 5 6 7 #get mouse in position and zero the device counter get_in_position zero_device $MOUSE_DEVICE time_record 600 400 400 200 res-mouse.log export RECORD_RESOLUTION_X=`$getresx` export RECORD_RESOLUTION_Y=`$getresy` #export RECORD_RESOLUTION_ARG= export REPLAY_RESOLUTION_X=800 export REPLAY_RESOLUTION_Y=600 export REPLAY_RESOLUTION_ARG="--replay-resolution $REPLAY_RESOLUTION_X"x"$REPLAY_RESOLUTION_Y" get_in_position zero_device $MOUSE_DEVICE sleep 2 time_replay sleep 2 export RECORD_RESOLUTION_X=`$getresx` export RECORD_RESOLUTION_Y=`$getresy` #export RECORD_RESOLUTION_ARG= export REPLAY_RESOLUTION_X=`$getresx` export REPLAY_RESOLUTION_Y=`$getresy` export REPLAY_RESOLUTION_ARG= get_in_position zero_device $MOUSE_DEVICE sleep 2 time_replay sleep 2 result_log $MYNAME xnee-3.19/cnee/test/scripts/replay/0000775000000000000000000000000012332167175014241 500000000000000xnee-3.19/cnee/test/scripts/replay/mouse.sh0000775000000000000000000001375011113632146015645 00000000000000#/bin/sh # # # Filename: replay/mouse-rec.sh # Generated: Sat Aug 9 01:29:48 CEST 2003 # # Description: # # Test the Xnee functionality # replay mouse motions # # # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi # name of myself MYNAME=replay/mouse.sh init_test $MYNAME parse_me "$*" ####################################################################### function record_and_replay() { RIGHT_PIX=$1 DOWN_PIX=$2 LEFT_PIX=$3 UP_PIX=$4 LOG_FILE=rep-mouse.log SLEEP_INTERVAL=10 SUM=$(( $1 + $2 + $3 + $4 )) verbose "SUM of $1 $2 $3 $4 = $SUM" # # RECORDING # verbose "Start recording ..." rm rep-mouse.log get_pointer STARTX=$XPOS STARTY=$YPOS verbose " ### start point: $XPOS $YPOS `date`" run_cnee --record --mouse --data-to-record 10000 --seconds-to-record 10000 --events-to-record $SUM -o rep-mouse.log & verbose " Sleeping 2 secs" sleep 2 verbose "Start faking with swinput:" verbose " r $RIGHT_PIX" save_pointer verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse r $RIGHT_PIX TIME2=`date '+%s'` R_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$R_DELAY" verify_not_same $SAVE_XPOS $XPOS verify_same $SAVE_YPOS $YPOS verify_same $(( $XPOS - $SAVE_XPOS )) $RIGHT_PIX verbose " Sleeping $SLEEP_INTERVAL secs" sleep $SLEEP_INTERVAL save_pointer verbose " d $DOWN_PIX" verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse d $DOWN_PIX TIME2=`date '+%s'` D_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$D_DELAY" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_same $(( $YPOS - $SAVE_YPOS )) $DOWN_PIX verbose " Sleeping $SLEEP_INTERVAL secs" sleep $SLEEP_INTERVAL save_pointer verbose " l $LEFT_PIX" verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse l $LEFT_PIX TIME2=`date '+%s'` L_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$L_DELAY" verify_not_same $SAVE_XPOS $XPOS verify_same $SAVE_YPOS $YPOS verify_same $(( $SAVE_XPOS - $XPOS )) $LEFT_PIX verbose " Sleeping $SLEEP_INTERVAL secs" sleep $SLEEP_INTERVAL verbose " u $UP_PIX" save_pointer verbose " ### new point: $XPOS $YPOS `date`" TIME1=`date '+%s'` move_mouse u $UP_PIX TIME2=`date '+%s'` U_DELAY=$(( $TIME2 - $TIME1 )) get_pointer verbose " new point: $XPOS $YPOS `date` DELAY=$U_DELAY" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_same $(( $SAVE_YPOS - $YPOS )) $UP_PIX verbose " Sleeping5 secs" sleep 5 $KILLALL_1 $XNEE verbose "Making sure we have a valid log file...." export NR_OF_LOGS=`grep -e "0,6" rep-mouse.log | wc -l` verbose "Nr of logs:" verbose " in file: $NR_OF_LOGS" verbose " wanted: $SUM" verify_same $NR_OF_LOGS $SUM # # REPLAYING # ... log file should be ok by now... or else errors are reported get_in_position verbose "Replay starting ....... " verbose "###############################" verbose "###############################" verbose "###############################" verbose "###############################" verbose "###############################" save_pointer verbose " -- checking start $XPOS $YPOS `date`" verify_same $STARTX $SAVE_XPOS verify_same $STARTY $SAVE_YPOS run_cnee --replay -f rep-mouse.log & TMP=0 # echo "$TMP `$getx` `$gety`" # while [ "$TMP" != "100" ]; # do # sleep 5 # echo "$TMP `$getx` `$gety`" # TMP=$(( $TMP + 5 )) # done #exit # sleep half the sleeping interval MYSLEEP=$(( $SLEEP_INTERVAL / 2 )) verbose "sleeping $MYSLEEP" verbose " Sleeping $R_DELAY + $MYSLEEP secs" sleep $R_DELAY sleep $MYSLEEP get_pointer verbose " -- checking r $XPOS $YPOS `date`" verify_not_same $SAVE_XPOS $XPOS verify_same $SAVE_YPOS $YPOS verify_same $(( $XPOS - $SAVE_XPOS )) $RIGHT_PIX save_pointer verbose " Sleeping $SLEEP_INTERVAL + more secs" sleep $SLEEP_INTERVAL sleep $D_DELAY get_pointer verbose " -- checking d $XPOS $YPOS `date`" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_same $(( $YPOS - $SAVE_YPOS )) $DOWN_PIX save_pointer verbose " Sleeping $SLEEP_INTERVAL + more secs" sleep $SLEEP_INTERVAL sleep $L_DELAY get_pointer verbose " -- checking l $XPOS $YPOS `date`" verify_not_same $SAVE_XPOS $XPOS verify_same $SAVE_YPOS $YPOS verify_same $(( $SAVE_XPOS - $XPOS )) $LEFT_PIX save_pointer verbose " Sleeping $SLEEP_INTERVAL + more secs" sleep $SLEEP_INTERVAL sleep $U_DELAY get_pointer verbose " -- checking u $XPOS $YPOS `date`" verify_same $SAVE_XPOS $XPOS verify_not_same $SAVE_YPOS $YPOS verify_same $(( $SAVE_YPOS - $YPOS )) $UP_PIX } # main ..... I guess verify_device $MOUSE_DEVICE # #rm m*.log NR_OF_PIX=400 HALF_WAYS=200 #get mouse in position and zero the device counter get_in_position zero_device $MOUSE_DEVICE record_and_replay 40 5 6 7 sleep 5 #get mouse in position and zero the device counter get_in_position zero_device $MOUSE_DEVICE record_and_replay 200 300 250 170 sleep 5 #get mouse in position and zero the device counter get_in_position zero_device $MOUSE_DEVICE record_and_replay 500 200 200 100 sleep 5 #get mouse in position and zero the device counter #get_in_position #zero_device $MOUSE_DEVICE #record_and_replay 800 600 700 500 #sleep 5 result_log $MYNAME xnee-3.19/cnee/test/scripts/replay/keyboard.sh0000775000000000000000000000465111113632146016315 00000000000000#/bin/sh # # # Filename: recplay/keyboard.sh # Created: Fri Aug 8 00:04:38 CEST 2003 # # Description: # # Test the Xnee functionality # replay recorded keyboard motions # # # name of myself MYNAME=replay/keyboard.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### KEYBOARD_DEVICE=/dev/swkeybd function replay_file() { RECORDED_FILE=$1 verbose "replaying file $RECORDED_FILE" verbose " launching xterm/cat" launch_cat_wrapper /tmp/xnee_test.txt& verbose " .... we should have an xterm up and running by now" sleep 4 verbose " launching xnee" run_cnee --replay -f $RECORDED_FILE sleep 2 verbose " faking enter" fake_enter sleep 3 verbose " faking control-d" fake_controld sleep 1 } function test_keyboard() { STR=$1 FILE=$2 LEN=${#STR} CAPS=0 TMP=0 while [ "$TMP" != "$LEN" ]; do echo ${STR:$TMP:1} | grep -e '[A-Z]' 2>/dev/null 1>/dev/null if [ "$?" == "0" ] then CAPS=$(( $CAPS + 1)) fi TMP=$(( $TMP + 1 )) done verbose "CAPS=$CAPS" verbose "LEN=$LEN" LEN=$(( $LEN + $CAPS)) TLEN=$(( $LEN * 3 )) verbose "TLEN=$TLEN" verbose "starting xnee" run_cnee --record --device-event-range 2-3 --data-to-record 10000 --seconds-to-record 100000 --events-to-record $TLEN -o $FILE & XNEE_PID=$! verbose "XNEE PID = $XNEE_PID" sleep 2 TMP=0 while [ "$TMP" != "$LEN" ]; do press_key "${STR:$TMP:1}" TMP=$(( $TMP + 1 )) done sleep 2 verbose "shoot Xnee down" $KILL_1 $XNEE_PID # press_key a sleep 3 } # main ..... I guess verify_device swkeybd FILE=k1.log rm $FILE STRING="This is a simple test string for Xnee" test_keyboard "$STRING" $FILE verbose "starting...." replay_file $FILE LEN_STRING=${#STRING} #add one for the enter LEN_STRING=$(( $LEN_STRING + 1 )) if [ -f /tmp/xnee_test.txt ] then LEN_FAKE=`wc -c /tmp/xnee_test.txt | awk '{print $1}' | sed 's, ,,g'` else LEN_FAKE=0 fi verbose "Verifying the lengths of $LEN_STRING $LEN_FAKE" verify_same $LEN_STRING $LEN_FAKE rm $FILE result_log $MYNAME fake_controlc fake_controlc exit xnee-3.19/cnee/test/scripts/record/0000775000000000000000000000000012332167175014223 500000000000000xnee-3.19/cnee/test/scripts/record/mouse.sh0000775000000000000000000000514311113632146015624 00000000000000#/bin/sh # # # Filename: record/mouse-rec.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # Description: # # Test the Xnee functionality # record mouse motions # # # name of myself MYNAME=record/mouse.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### function check_nr_of_loops() { EXPECTED=$1 LOGFILE=$2 NR=`grep -c -e '^0,6' $LOGFILE | sed 's,[ \t]*,,g'` echo "loops in file: $NR" echo "expected $EXPECTED" verify_same $EXPECTED $NR $LOGFILE } function check_intervals() { PIX=$1 DIRECTION=$2 FILE=$3 FIELD=$4 EXP_DIFF=$5 TMP=0 LAST="" TOTAL_TEST=`expr $TOTAL_TEST + 1` for i in `grep -e "^0,6" $FILE | awk -F , -v fi=$FIELD '{ print $fi }' ` do THIS=$i if [ "$LAST" != "" ] ; then DIFF=`expr $LAST - $THIS` if [ "$DIFF" != "$EXP_DIFF" ] then MSG=" Comparing intervals in file $FILE $FIELD i=$i: $DIFF" echo " Data differs: $MSG" verbose " Data differs: $MSG" error_log " Data differs: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi fi LAST=$THIS done SUCC_TEST=`expr $SUCC_TEST + 1` } function test_mouse() { DIRECTION=$1 PIX=$2 FILE=$3 FIELD=$4 EXP_DIFF=$5 TMP=-1 verbose "starting xnee" run_cnee --record --device-event-range 6 --data-to-record 10000 --seconds-to-record 10000 --events-to-record $PIX -o $FILE & sleep 2 while [ "$TMP" != "$PIX" ]; do echo "$DIRECTION" > $MOUSE_DEVICE TMP=`expr $TMP + 1 ` sleep 0 done sleep 2 echo "check loops" check_nr_of_loops $PIX $FILE sleep 1 echo "check intervals" check_intervals $PIX $DIRECTION $FILE $FIELD $EXP_DIFF } # main ..... I guess verify_device $MOUSE_DEVICE_NAME rm m*.log NR_OF_PIX=250 verbose "find a nice start position ..." #start with the mouse in such a position that in can move around enought get_in_position #zero the device counter zero_device $MOUSE_DEVICE_NAME verbose "starting...." move_mouse d $NR_OF_PIX test_mouse u $NR_OF_PIX mu.log 4 1 move_mouse r $NR_OF_PIX test_mouse l $NR_OF_PIX ml.log 3 1 move_mouse l $NR_OF_PIX test_mouse r $NR_OF_PIX mr.log 3 -1 move_mouse u $NR_OF_PIX test_mouse d $NR_OF_PIX md.log 4 -1 #rm m*.log result_log $MYNAME exit xnee-3.19/cnee/test/scripts/record/keyboard.sh0000775000000000000000000000411111113632146016266 00000000000000#/bin/sh # # # Filename: record/keyboard.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # Description: # # Test the Xnee functionality # record keyboard # # # name of myself MYNAME=record/keyboard.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test $MYNAME parse_me "$*" ####################################################################### KEYBOARD_DEVICE=/dev/swkeybd function check_nr_of_loops() { PRESS_EXPECTED=$1 RELEASE_EXPECTED=$2 LOGFILE=$3 PRESS_NR=`grep -e '^0,2' $LOGFILE | wc -l | sed 's,[ \t]*,,g'` RELEASE_NR=`grep -e '^0,2' $LOGFILE | wc -l | sed 's,[ \t]*,,g'` verify_same $PRESS_EXPECTED $PRESS_NR $LOGFILE verify_same $RELEASE_EXPECTED $RELEASE_NR $LOGFILE } function press_key() { KEY=$1 verbose "faking key $KEY" echo "$KEY" > $KEYBOARD_DEVICE sleep 0 } function test_keyboard() { STR=$1 FILE=$2 LEN=${#STR} CAPS=0 TMP=0 while [ "$TMP" != "$LEN" ]; do CAPS_ADD=$(echo ${STR:$TMP:1} | sed 's,[a-z],,g' | grep -c -e "[A-Z]") CAPS=$(( $CAPS + $CAPS_ADD )) TMP=$(( $TMP + 1 )) done verbose "CAPS=$CAPS" verbose "LEN=$LEN" LEN=$(( $LEN + $CAPS)) TLEN=$(( $LEN * 2 )) verbose "TLEN=$TLEN" verbose "starting xnee" run_cnee --record --device-event-range 2-3 --data-to-record 10000 --seconds-to-record 10000 --events-to-record $TLEN -o $FILE & XNEE_PID=$! verbose "XNEE PID = $XNEE_PID" sleep 2 TMP=0 while [ "$TMP" != "$LEN" ]; do press_key "${STR:$TMP:1}" TMP=$(( $TMP + 1 )) done sleep 2 verbose "shoot Xnee down" $KILL_1 $XNEE_PID # press_key a sleep 3 check_nr_of_loops $LEN $LEN $FILE } # main ..... I guess verify_device swkeybd rm k*.log STRING="This is a simple test string for Xnee" test_keyboard "$STRING" k1.log verbose "starting...." #rm k*.log result_log $MYNAME exit xnee-3.19/cnee/test/bin/0000775000000000000000000000000012332167175012026 500000000000000xnee-3.19/cnee/test/bin/new_script.sh0000775000000000000000000000402407772666367014505 00000000000000#!/bin/bash ARG=$1 NAME=`echo $1 | awk ' BEGIN {FS=","} { printf "%s\n", $1}' | sed 's,--,,g' | sed 's,<.*>,,g' ` SNAME=`echo $1 | awk ' BEGIN {FS=","} { printf "%s\n", $2}' | sed 's,<.*>,,g' ` SCRIPT_NAME=opt_scripts/${NAME}.sh function write_to_file() { echo "$*" >> $SCRIPT_NAME } function sh_header() { write_to_file "#/bin/sh" write_to_file "#" write_to_file "#" write_to_file "# This file is generated from new_scrip.sh" write_to_file "#" write_to_file "#" write_to_file "# Filename: $SCRIPT_NAME" write_to_file "# Generated: `date`" write_to_file "# " write_to_file "#" write_to_file " " write_to_file " " write_to_file " " write_to_file " " write_to_file " # Result counters" write_to_file " TOTAL_TEST=0" write_to_file " SUCC_TEST=0" write_to_file " ERR_TEST=0" write_to_file " WARN_TEST=0" write_to_file " RETURN_TEST=0" write_to_file " RETURN_ERR=0" write_to_file " " write_to_file " # name of myself" write_to_file " MYNAME=$SCRIPT_NAME" write_to_file " " write_to_file "# Arguments to test (short and long)" write_to_file "export LONG_ARG=--$NAME" write_to_file "export SHORT_ARG=$SNAME" } function get_funs() { write_to_file " " write_to_file "# source useful funs" write_to_file "if [ ! -f etc/base_funs ]; " write_to_file "then " write_to_file " echo \"Can't find the file: base_funs\" " write_to_file " echo \"Start me up in the xnee test dir\" " write_to_file " exit" write_to_file "else " write_to_file " . etc/base_funs" write_to_file "fi " write_to_file " " write_to_file " " write_to_file " " write_to_file "# " write_to_file "# " write_to_file "# " write_to_file "# " } if [ -f $SCRIPT_NAME ]; then echo "File $SCRIPT_NAME exists ... leaving" exit fi echo "Creating a new script from name \"$NAME\"" # make the script touch $SCRIPT_NAME sh_header $SCRIPT_NAME get_funs $SCRIPT_NAME chmod a+x $SCRIPT_NAME xnee-3.19/cnee/test/etc/0000775000000000000000000000000012332167175012031 500000000000000xnee-3.19/cnee/test/etc/base_funs0000664000000000000000000003011011316246212013623 00000000000000export XNEE=$(pwd)/../src/cnee export LIBXNEE=../../libxnee/src export VERBOSE_MODE=false export LOG=./xnee_test.log export ERR_LOG=./xnee_test.err export MOUSE_DEVICE=/dev/swmouse export KEYBOARD_DEVICE=/dev/swkeybd export KILL_1=kill_1 export KILLALL_1=kill_1 MOUSE_DEVICE_NAME=swmouse0 MOUSE_DEVICE=/dev/${MOUSE_DEVICE_NAME} MEMCHECK=valgrind MEMCHECK_ARGS="--trace-malloc=yes --log-file=xnee_val --leak-check=yes -v" HAS_X="true" xdpyinfo >/dev/null 2>&1 if [ "$?" != "0" ] then HAS_X="false" fi init_test() { SCRIPT_NAME=$1 CNEE_BASE_DIR=$(dirname $0)/../../../ PATH=$PATH:$(pwd) # Result counters TOTAL_TEST=0 SUCC_TEST=0 ERR_TEST=0 WARN_TEST=0 RETURN_TEST=0 RETURN_ERR=0 UNTESTED=0 START=`date '+%s'` XNEE_VERSION=`run_cnee --version 2>&1 | grep xnee | grep -v opyrigh | grep -v WARRAN | grep -v http | awk '{ print $2}' | sed 's,[ ],,'` if [ "$HAS_X" != "false" ] then X_VEND=`xdpyinfo | grep "vendor string" | awk 'BEGIN {FS="[:]"} { print $2}' | sed 's,^[ ]*\(.*\)[ ]*$,\1,g'` X_VERS=`xdpyinfo | grep "vendor release" | awk 'BEGIN {FS="[:]"} { print $2}' | sed 's,^[ ]*\(.*\)[ ]*$,\1,g'` else X_VEND="none" X_VERS="-1" fi ME=`whoami` uname -o > /dev/null 2>/dev/null if [ "$?" != "0" ]; then OS="`uname -s`:`uname -r`:`uname -n`" else OS="`uname -o`:`uname -s`:`uname -r`:`uname -n`" fi } log() { echo "$*" >> $LOG echo "$*" } error_log() { echo "$*" >> $ERR_LOG } move_cursor() { DELAY=$1 run_cnee --replay -f rc/one_cursor.xnr --time $DELAY } result_log_xml() { NAME=$1 log "" log " " log " $TOTAL_TEST" log " " log " " log " $SUCC_TEST" log " " log " " log " $ERR_TEST" log " " log " " log " $WARN_TEST" log " " log " " log " $RETURN_TEST" log " " log " " log " $RETURN_ERR" log " " log " " log " $UNTESTED" log " " log "" } result_log_simple() { NAME=$1 log "Script name=\"$NAME\"" log "=============================" log " " log " Functionality test" log " ------------------" log " Test total: $TOTAL_TEST" log " Success: $SUCC_TEST" log " Error: $ERR_TEST" log " Warnings: $WARN_TEST" log " " log " Return value test" log " ------------------" log " Correct: $RETURN_TEST" log " Wrong $RETURN_ERR" log " " log " Untested" log " ------------------" log " Nr of scripts $UNTESTED" } result_log_() { NAME=$1 log "$NAME:$TOTAL_TEST:$SUCC_TEST:$ERR_TEST:$WARN_TEST:$RETURN_TEST:$RETURN_ERR:$UNTESTED:$START:$STOP:$XNEE_VERSION:$X_VEND:$X_VERS:$ME:$OS" } result_log() { STOP=`date '+%s'` result_log_ $* result_log_simple $* } killall_1() { PROG=cnee killall -SIGINT $PROG sleep 1 killall -TERM $PROG sleep 1 killall -kill $PROG } >/dev/null 2>&1 do_kill_1() { PID=$1 SIG=$2 kill -${SIG} ${PID} } kill_1() { PID=$1 if [ $(ps auxww | grep -v grep | grep $PID | wc -l) -gt 0 ] then kill -SIGINT $PID sleep 1 fi if [ $(ps auxww | grep -v grep | grep $PID | wc -l) -gt 0 ] then kill -TERM $PID sleep 1 fi if [ $(ps auxww | grep -v grep | grep $PID | wc -l) -gt 0 ] then kill -9 $PID fi } verbose() { if [ "$VERBOSE_MODE" == "true" ]; then echo " $MYNAME: $*" 1>&2 fi } check_retval() { RESULT=$1 EXPECTED=$2 MSG="$SCRIPT_NAME checking return value $RESULT == $EXPECTED " RESULT_TEST=$(( $RESULT_TEST + 1 )) verbose "Checking return val for:$MSG" if [ "$RESULT" != "$EXPECTED" ] ; then verbose " Unexpected return val: $MSG" error_log " Unexpected return val: $MSG" RETURN_ERR=$(( $RETURN_ERR + 1)) else verbose " return val OK" RETURN_TEST=$(( $RETURN_TEST + 1)) fi } check_retval_false() { RESULT=$1 UN_EXPECTED=$2 MSG="$SCRIPT_NAME checking return value (false) $RESULT == $EXPECTED " RESULT_TEST=$(( $RESULT_TEST + 1)) if [ "$RESULT" == "$UN_EXPECTED" ] ; then verbose " Unexpected return val: $MSG" error_log " Unexpected return val: $MSG" RETURN_ERR=$(($RETURN_ERR + 1)) else verbose " return val OK" RETURN_TEST=$(( $RETURN_TEST + 1)) fi } parse_me() { for arg in $1 do verbose "Parsing : \"$arg\" " case "$arg" in "--verbose") VERBOSE_MODE=true ;; "--memcheck") XNEE="${MEMCHECK} ${MEMCHECK_ARGS} ${XNEE}" shift echo "XNEE=$XNEE" ;; *) verbose "faulty argument: $arg" ;; esac shift done } find_events() { FILE=$1 OUT=$2 rm -f $OUT cat $FILE | \ awk 'BEGIN { found=0; } \ /#define KeyPress[ \t]+/ { found=1;} \ { if (found) { printf "%.2d=%s\n", $3, $2 } } \ /#define LASTEvent/ { found=0;} \ ' > $OUT } find_requests() { FILE=$1 OUT=$2 rm -f $OUT cat $FILE | \ awk 'BEGIN { found=0; } \ /#define X_CreateWindow[ \t]+/ { found=1;} \ { if (found) { printf "%.2d=%s\n", $3, $2 } } \ /#define X_NoOperation/ { found=0;} \ ' > $OUT } find_errors() { FILE=$1 OUT=$2 rm -f $OUT cat $FILE | \ awk 'BEGIN { found=0; } \ /#define Success[ \t]+/ { found=1;} \ { if (found) { printf "%.2d=%s\n", $3, $2 } } \ /#define BadAccess/ { found=0;} \ ' > $OUT } # # # compare_data # # # Compare if the the name,number pair given # as argument is the same as given by Xnee --print-xxxx-name # # compare_data() { EXP_EV=`echo $1 | sed 's,^[0]*\([0-9][0-9]*\),\1,g'` EXP_EV_NAME=$2 REC_EV=$3 REC_EV_NAME=$4 MSG="$SCRIPT_NAME comparing: \"$EXP_EV == $EXP_EV_NAME\" and \"$REC_EV == $REC_EV_NAME\"" TOTAL_TEST=$(($TOTAL_TEST + 1)) verbose "Comparing: " verbose " expected: \"$EXP_EV == $EXP_EV_NAME\"" verbose " xnee: \"$REC_EV == $REC_EV_NAME\"" if [ "$REC_EV" != "$EXP_EV" ]; then error_log " Data differs: $MSG" ERR_TEST=$(($ERR_TEST + 1)) return 1 fi if [ "$REC_EV_NAME" != "$EXP_EV_NAME" ]; then error_log " Data differs: $MSG" ERR_TEST=$(($ERR_TEST + 1)) return 1 fi verbose " .... OK" SUCC_TEST=$(($SUCC_TEST + 1)) } compare_data_false() { EXP_EV=`echo $1 | sed 's,^[0]*,,g'` EXP_EV_NAME=$2 REC_EV=$3 REC_EV_NAME=$4 MSG="$SCRIPT_NAME comparing (false): \"$EXP_EV == $EXP_EV_NAME\" and \"$REC_EV == $REC_EV_NAME\"" TOTAL_TEST=$(($TOTAL_TEST + 1)) verbose "Comparing (false): \"$REC_EV/$REC_EV_NAME\" \"$EXP_EV/$EXP_EV_NAME\" " if [ "$REC_EV" == "$EXP_EV" ]; then error_log " Data doesn't differ: $MSG" ERR_TEST=$(($ERR_TEST + 1)) return 1 fi if [ "$REC_EV_NAME" == "$EXP_EV_NAME" ]; then error_log " Data doesn't differ: $MSG" ERR_TEST=$(($ERR_TEST + 1)) return 1 fi verbose " ...OK " SUCC_TEST=$(($SUCC_TEST + 1)) } verify_device() { DEV=$1 cat /proc/misc | grep $DEV 2>/dev/null 1>/dev/null if [ "$?" != "0" ]; then echo "$SCRIPT_NAME: Could not find device $DEV ...leaving" UNTESTED=$(( $UNTESTED + 1)) result_log $MYNAME exit 1 fi } zero_device() { DEV=$1 echo "0" > /dev/$DEV } verify_same() { EXP_VAL=$1 REAL_VAL=$2 MSG="$SCRIPT_NAME comparing : \"$EXP_VAL == $REAL_VAL\" $3" TOTAL_TEST=$(($TOTAL_TEST + 1)) verbose "Comparing : \"$EXP_VAL\" \"$REAL_VAL\"" if [ "$EXP_VAL" != "$REAL_VAL" ]; then verbose " ERROR Data differs: $MSG" error_log " ERROR Data differs: $MSG" ERR_TEST=$(($ERR_TEST + 1)) return 1 fi verbose "OK" SUCC_TEST=$(( $SUCC_TEST + 1 )) } verify_not_same() { EXP_VAL=$1 REAL_VAL=$2 MSG="$SCRIPT_NAME un comparing : \"$EXP_VAL != $REAL_VAL\" $3" TOTAL_TEST=$(( $TOTAL_TEST + 1 )) verbose "Uncomparing : \"$EXP_VAL\" \"$REAL_VAL\"" if [ "$EXP_VAL" == "$REAL_VAL" ]; then verbose " ERROR Data is same: $MSG" error_log " ERROR Data is same : $MSG" ERR_TEST=$(( $ERR_TEST + 1 )) return 1 fi verbose "OK" SUCC_TEST=$(( $SUCC_TEST + 1 )) } verify_pos_alm_same() { EXP_VAL=$1 REAL_VAL=$2 LIMIT=$3 MSG="$SCRIPT_NAME verify_pos_alm_same : \"$EXP_VAL == $REAL_VAL\" and within range of $3" TOTAL_TEST=$(( $TOTAL_TEST + 1 )) LOW_VAL=$(( $EXP_VAL - $LIMIT )) HIGH_VAL=$(( $EXP_VAL + $LIMIT )) verbose "verify_pos_alm_same: $LOW_VAL < \"$EXP_VAL\" , \"$REAL_VAL\" < $HIGH_VAL" if [ "$REAL_VAL" -gt "$HIGH_VAL" ]; then verbose " ERROR Data too big: $MSG" error_log " ERROR Data too big: $MSG" ERR_TEST=$(( $ERR_TEST + 1 )) return 1 elif [ "$REAL_VAL" -lt "$LOW_VAL" ]; then verbose " ERROR Data too small: $MSG" error_log " ERROR Data too small: $MSG" ERR_TEST=$(($ERR_TEST + 1 )) return 1 fi verbose "OK" SUCC_TEST=$(($SUCC_TEST + 1 )) } check_xgetter() { if [ ! -f ./src/xgetter ] then pushd ./src/ make all popd fi } export getresx="./src/xgetter --resolution-x" export getresy="./src/xgetter --resolution-y" export getx="./src/xgetter --mouse-position-root-x" export gety="./src/xgetter --mouse-position-root-y" export getxy="./src/xgetter --mouse-position-root-all" get_pointer() { check_xgetter XPOS=`$getx` YPOS=`$gety` } save_pointer() { check_xgetter SAVE_XPOS=`$getx` SAVE_YPOS=`$gety` } press_key() { KEY=$1 verbose "faking key $KEY" echo "$KEY" > $KEYBOARD_DEVICE sleep 0 } press_key_from_string() { _STRING=$1 _LEN=${#_STRING} TMP=0 while [ "$TMP" != "$_LEN" ]; do press_key "${_STRING:$TMP:1}" TMP=$(( $TMP + 1 )) done } fake_controld() { sleep 1 echo "[CONTROL_DOWN]" > $KEYBOARD_DEVICE sleep 1 echo "d" > $KEYBOARD_DEVICE sleep 1 echo "[CONTROL_UP]" > $KEYBOARD_DEVICE } fake_control_() { KEY=$1 sleep 1 echo "[CONTROL_DOWN]" > $KEYBOARD_DEVICE sleep 1 echo "$1" > $KEYBOARD_DEVICE sleep 1 echo "[CONTROL_UP]" > $KEYBOARD_DEVICE } fake_alt_() { KEY=$1 sleep 1 echo "[ALT_DOWN]" > $KEYBOARD_DEVICE sleep 1 echo "$1" > $KEYBOARD_DEVICE sleep 1 echo "[ALT_UP]" > $KEYBOARD_DEVICE sleep 1 } fake_control_press() { sleep 0 echo "[CONTROL_DOWN]" > $KEYBOARD_DEVICE sleep 0 } fake_control_release() { sleep 0 echo "[CONTROL_UP]" > $KEYBOARD_DEVICE sleep 0 } fake_controlc() { sleep 1 echo "[CONTROL_DOWN]" > $KEYBOARD_DEVICE sleep 1 echo "c" > $KEYBOARD_DEVICE sleep 1 echo "[CONTROL_UP]" > $KEYBOARD_DEVICE sleep 1 } fake_enter() { echo "[ENTER]" > $KEYBOARD_DEVICE } move_mouse() { TMP=0 PIX=$2 DIR=$1 while [ "$TMP" != "$PIX" ]; do echo "$DIR 1" > $MOUSE_DEVICE TMP=`expr $TMP + 1 ` sleep 0 done } #start with the mouse in such a position that in can move around enough get_in_position() { fast_move_mouse u 500 fast_move_mouse l 500 sleep 0 fast_move_mouse u 500 fast_move_mouse l 500 sleep 0 fast_move_mouse u 500 fast_move_mouse l 500 sleep 0 move_mouse d 300 move_mouse r 300 sleep 1 } slow_move_mouse() { TMP=0 PIX=$2 DIR=$1 while [ "$TMP" != "$PIX" ]; do echo "$DIR" > $MOUSE_DEVICE TMP=`expr $TMP + 1 ` # echo "TMP=$TMP" sleep 1 done } fast_move_mouse() { DIR=$1 PIX=$2 echo "$DIR $PIX" > $MOUSE_DEVICE } zero_mouse() { echo "0" > $MOUSE_DEVICE } remove_gcov_gprof_file() { verbose "Removing gcov and gprof files....." # gcov rm -f ${LIBXNEE}/*.bb rm -f ${LIBXNEE}/*.bbg rm -f ${LIBXNEE}/*.da #gprof rm -f gmon.out } launch_cat_wrapper() { export FILE=$1 pwd OLDPATH=$PATH export PATH=${PATH}:$(pwd)/etc echo "xterm -fn fixed -e cat_wrapper $FILE" xterm -fn fixed -e cat_wrapper $FILE } xnee-3.19/cnee/test/record/0000775000000000000000000000000012332167175012534 500000000000000xnee-3.19/cnee/test/record/mouse.sh0000775000000000000000000000552411067164066014151 00000000000000#/bin/sh # # # Filename: record/mouse-rec.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # Description: # # Test the Xnee functionality # record mouse motions # # # name of myself MYNAME=mouse-rec.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test parse_me "$*" ####################################################################### function check_nr_of_loops() { EXPECTED=$1 LOGFILE=$2 NR=`grep -e '^0,6' $LOGFILE | wc -l | sed 's,[ \t]*,,g'` verify_same $EXPECTED $NR $LOGFILE } function check_intervals() { PIX=$1 DIRECTION=$2 FILE=$3 FIELD=$4 EXP_DIFF=$5 TMP=0 LAST="" TOTAL_TEST=`expr $TOTAL_TEST + 1` for i in `grep -e "^0,6" $FILE | awk -F , -v fi=$FIELD '{ print $fi }' ` do THIS=$i if [ "$LAST" != "" ] ; then DIFF=`expr $LAST - $THIS` if [ "$DIFF" != "$EXP_DIFF" ] then MSG=" Comparing intervals in file $FILE $FIELD i=$i: $DIFF" verbose " Data differs: $MSG" error_log " Data differs: $MSG" ERR_TEST=`expr $ERR_TEST + 1` return 1 fi fi LAST=$THIS done SUCC_TEST=`expr $SUCC_TEST + 1` } function move_mouse() { TMP=0 PIX=$2 DIR=$1 while [ "$TMP" != "$PIX" ]; do echo "$DIR" > $MOUSE_DEVICE TMP=`expr $TMP + 1 ` done } function test_mouse() { DIRECTION=$1 PIX=$2 FILE=$3 FIELD=$4 EXP_DIFF=$5 TMP=-1 verbose "starting xnee" $XNEE --record --device-event-range 6 --events-to-record $PIX -o $FILE & sleep 2 while [ "$TMP" != "$PIX" ]; do echo "$DIRECTION" > $MOUSE_DEVICE TMP=`expr $TMP + 1 ` done sleep 2 check_nr_of_loops $PIX $FILE check_intervals $PIX $DIRECTION $FILE $FIELD $EXP_DIFF } # main ..... I guess verify_device $MOUSE_DEVICE_NAME rm m*.log NR_OF_PIX=400 HALF_WAYS=200 #start with the mouse in such a position that in can move around enought move_mouse u $NR_OF_PIX move_mouse u $NR_OF_PIX move_mouse u $NR_OF_PIX move_mouse u $NR_OF_PIX move_mouse l $NR_OF_PIX move_mouse l $NR_OF_PIX move_mouse l $NR_OF_PIX move_mouse l $NR_OF_PIX move_mouse d $NR_OF_PIX move_mouse d $HALF_WAYS move_mouse r $NR_OF_PIX move_mouse r $HALF_WAYS #zero the device counter zero_device $MOUSE_DEVICE verbose "starting...." move_mouse d $NR_OF_PIX test_mouse u $NR_OF_PIX mu.log 4 1 move_mouse r $NR_OF_PIX test_mouse l $NR_OF_PIX ml.log 3 1 move_mouse l $NR_OF_PIX test_mouse r $NR_OF_PIX mr.log 3 -1 move_mouse u $NR_OF_PIX test_mouse d $NR_OF_PIX md.log 4 -1 #rm m*.log result_log $MYNAME exit xnee-3.19/cnee/test/record/keyboard.sh0000775000000000000000000000466011113632145014607 00000000000000#/bin/bash # # # Filename: record/keyboard-rec.sh # Generated: Sun Mar 16 21:57:36 CET 2003 # # Description: # # Test the Xnee functionality # record keyboard motions # # # name of myself MYNAME=keyboard-rec.sh # source useful funs if [ ! -f etc/base_funs ]; then echo "Can't find the file: base_funs" echo "Start me up in the xnee test dir " exit else . etc/base_funs fi init_test parse_me "$*" ####################################################################### KEYBOARD_DEVICE=/dev/swkeybd function check_nr_of_loops() { PRESS_EXPECTED=$1 RELEASE_EXPECTED=$2 LOGFILE=$3 PRESS_NR=`grep -e '^0,2' $LOGFILE | wc -l | sed 's,[ \t]*,,g'` RELEASE_NR=`grep -e '^0,2' $LOGFILE | wc -l | sed 's,[ \t]*,,g'` verify_same $PRESS_EXPECTED $PRESS_NR $LOGFILE verify_same $RELEASE_EXPECTED $RELEASE_NR $LOGFILE } function press_key() { KEY=$1 verbose "faking key $KEY" echo "FAKE $KEY" $KEYBOARD_DEVICE printf "$KEY\n" >> $KEYBOARD_DEVICE sleep 0 } fake_string() { STR=$1 echo "For thos about to fake...." sleep 5 echo "we salute you" TMP=0 while [ "$TMP" != "$LEN" ]; do press_key "${STR:$TMP:1}" TMP=$(( $TMP + 1 )) sleep 1 done } function test_keyboard() { STR=$1 FILE=$2 LEN=${#STR} CAPS=0 TMP=0 while [ "$TMP" != "$LEN" ]; do echo ${STR:$TMP:1} | grep -e '[A-Z]' 2>/dev/null 1>/dev/null if [ "$?" == "0" ] then CAPS=$(( $CAPS + 1)) fi TMP=$(( $TMP + 1 )) done verbose "CAPS=$CAPS" verbose "LEN=$LEN" LEN=$(( $LEN + $CAPS)) TLEN=$(( $LEN * 2 )) verbose "TLEN=$TLEN" fake_string $STR & verbose "starting xnee" echo "XNEE Start" $XNEE --record --device-event-range 2-3 --events-to-record $TLEN -o $FILE # $XNEE --record --keyboard -sk q XNEE_PID=$! verbose "XNEE PID = $XNEE_PID" sleep 2 sleep 2 verbose "shoot Xnee down" # press_key "q" sleep 2 $KILL_1 $XNEE_PID # press_key a sleep 3 check_nr_of_loops $LEN $LEN $FILE } # main ..... I guess verify_device swkeybd rm k*.log # make sure to exclude the char/letter q, which we use to stop Xnee export STRING="This is a simple test string for Xnee" export STRING="ThisIsXnee" test_keyboard "$STRING" k1.log verbose "starting...." #rm k*.log result_log $MYNAME exit xnee-3.19/cnee/test/test_all.sh0000775000000000000000000000760611553131152013343 00000000000000#!/usr/bin/env bash . etc/base_funs init_test sighandler() { echo "Signal received in test_all.sh" echo " while executig $CMD" } trap sighandler 2 trap sighandler 15 retype_keyboard() { CMD="scripts/retype/keyboard.sh $*" echo "executing $CMD" scripts/retype/keyboard.sh $* } option_scripts() { for i in `ls scripts/options/*.sh | grep -v test_all\.sh `; do echo "exec $i" CMD="$i $*" $i $* sleep 2 done } function_scripts() { CMD="scripts/record/keyboard.sh $* " echo "executing $CMD" scripts/record/keyboard.sh $* CMD="scripts/record/mouse.sh $*" echo "executing $CMD" scripts/record/mouse.sh $* CMD="scripts/replay/keyboard.sh $*" echo "executing $CMD" scripts/replay/keyboard.sh $* CMD="scripts/replay/mouse.sh $*" echo "executing $CMD" scripts/replay/mouse.sh $* CMD="scripts/resolution/mo-res.sh $*" echo "executing $CMD" scripts/resolution/mo-res.sh $* CMD="scripts/timing/mo-time.sh $*" echo "executing $CMD" scripts/timing/mo-time.sh $* CMD="scripts/timing/mo-time.sh $*" echo "executing $CMD" scripts/timing/mo-time.sh $* # CMD="scripts/retype/keyboard.sh $*" # echo "executing $CMD" # scripts/retype/keyboard.sh $* } scan_logs() { NEW_LOG=test_all.log rm $NEW_LOG touch $NEW_LOG echo "Script name: test_all.sh" >> $NEW_LOG echo "Results from test" >> $NEW_LOG cat $LOG | awk 'BEGIN { FS="[:]" ; TOT_T=0 ; SUC_T=0 ; ERR_T=0 ; WARN_T=0 ; RET_T=0 ; RET_E=0 ; UNT=0 ; } \ { \ TOT_T=TOT_T + $2 ;\ SUC_T=SUC_T + $3 ;\ ERR_T=ERR_T + $4 ;\ WARN_T=WARN_T + $5 ;\ RET_T=RET_T + $6 ;\ RET_E=RET_E + $7 ;\ UNT=UNT + $8 ;\ } \ END { printf "\n" ;\ printf "Functionality test:\n" ;\ printf "===================\n" ;\ printf " Tested scripts: %s\n", TOT_T ;\ printf " Untested scripts: %s\n", UNT ;\ printf " ------------------------\n" ;\ printf " Success: %s\n", SUC_T ;\ printf " Error: %s\n", ERR_T ;\ printf " Warning: %s\n", WARN_T ;\ printf "\n" ;\ printf "Return values test:\n" ;\ printf "===================\n" ;\ printf " Correct: %s\n", RET_T ;\ printf " Incorrect: %s\n", RET_E ;\ printf "\n" ;\ if (ERR_T > 0) { printf "\n\n*** %d error(s) found ***\n" , ERR_T} ;\ if (WARN_T > 0) { printf "\n\n*** %d warning(s) found ***\n" , WARN_T } ;\ }' | tee $NEW_LOG echo "TIME 0:"$(( $STOP - $START ))":$XNEE_VERSION:$X_VEND:$X_VERS:$ME:$OS" >> $NEW_LOG echo "... perhaps we should add analysis of gcov, valgrind and gprof files....." } NAME=test_all.sh remove_gcov_gprof_file if [ "$1" == "--no-run" ]; then scan_logs elif [ "$1" == "--help" ]; then echo "OPTIONS:" echo " --clean removes all generated files" echo " --function test cnee functionality only" echo " --option test cnee options only" echo " --no-run Dont exec cnee. Scan logs" elif [ "$1" == "--build" ]; then cd src make all cd .. elif [ "$1" == "--clean" ]; then remove_gcov_gprof_file rm -f *.log rm -f *.tmp rm -fr gmon*.* rm -fr gcov*.* rm -fr xnee_val.* rm -fr rep-*.log rm -fr src/xgetter.o src/xgetter elif [ "$1" == "--function" ]; then START=`date '+%s'` \rm -f $LOG $ERR_LOG shift function_scripts "$*" STOP=`date '+%s'` scan_logs elif [ "$1" == "--option" ]; then START=`date '+%s'` \rm -f $LOG $ERR_LOG option_scripts "$*" STOP=`date '+%s'` scan_logs elif [ "$1" == "--kbd" ]; then START=`date '+%s'` \rm -f $LOG $ERR_LOG retype_keyboard "$*" STOP=`date '+%s'` scan_logs else $0 --clean $0 --build # $0 --option fi xnee-3.19/cnee/Makefile.in0000664000000000000000000004661612332167123012272 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 = : build_triplet = @build@ host_triplet = @host@ subdir = cnee DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am AUTHORS \ ChangeLog INSTALL NEWS README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = ${LIBSEMA} LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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 = src EXTRA_DIST = Makefile.cnee Makefile.cvs autotools/* \ test/bin/new_script.sh \ test/etc/base_funs \ test/test_all.sh \ test/check_mem.sh \ test/record/keyboard.sh \ test/record/mouse.sh \ test/scripts/options/all-events.sh \ test/scripts/options/print-error-name.sh \ test/scripts/options/print-error-names.sh \ test/scripts/options/print-event-name.sh \ test/scripts/options/print-event-names.sh \ test/scripts/options/print-request-name.sh \ test/scripts/options/print-request-names.sh \ test/scripts/options/test_all.sh \ test/scripts/record/keyboard.sh \ test/scripts/record/mouse.sh \ test/scripts/replay/keyboard.sh \ test/scripts/replay/mouse.sh \ test/scripts/retype/keyboard.sh \ test/scripts/resolution/mo-res.sh \ test/scripts/timing/mo-time.sh \ test/src/xgetter.c all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cnee/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu cnee/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am man: ( cd src ; make man ) # 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: xnee-3.19/cnee/NEWS0000664000000000000000000000000010040573116010672 00000000000000xnee-3.19/ChangeLog0000664000000000000000000025310112332106706011052 000000000000002014-05-06 Henrik Sandklef * cnee/src/cnee_printer.c * cnee/src/parse.c * libxnee/include/libxnee/xnee.h * libxnee/include/libxnee/xnee_resource.h * libxnee/include/libxnee/xnee_setget.h * libxnee/include/libxnee/xnee_utils.h * libxnee/src/xnee.c * libxnee/src/xnee_error.c * libxnee/src/xnee_record.c * libxnee/src/xnee_resource.c * libxnee/src/xnee_session.c * libxnee/src/xnee_setget.c * libxnee/src/xnee_utils.c Added feature to manually set display to record from. 2014-05-05 Henrik Sandklef * libxnee/src/xnee_fake.c * libxnee/src/xnee_grab.c * libxnee/src/xnee_km.c Added support for pause/resume/quit when retyping file. Fixed unseen bug when removing events twice from queue (prob always worked since press was followed by release) 2013-06-05 Henrik Sandklef * gnee/src/main.c: * gnee/src/callbacks.c: * gnee/src/recordables.c: Adding support for pre defined event sets * libxnee/include/libxnee/xnee_internal.h (_): Added XNEE_PREDEF_EVENTS for pre defined event sets * libxnee/include/libxnee/xnee_xinput.h (xnee_xinput_unrequest_*): macro for unrequesting recording of XI events 2012-10-09 Henrik Sandklef * pnee/Makefile.am: * gnee/Makefile.am: * Makefile.am: * configure.in: "Restructuerd incl/excl of builds, as a preparation for obsoleting gui and applet." 2012-06-28 Henrik Sandklef * libxnee/src/xnee_xinput.c: * libxnee/src/xnee_record.c: Don't record non XI events if XI is in use * libxnee/src/xnee_resource.c: correct handling of --all-events 2012-04-19 Henrik Sandklef * libxnee/src/xnee_xinput.c (xnee_xinput_add_devices): Not recording mouse event when wanting to record kbd only 2012-04-17 Henrik Sandklef * libxnee/src/xnee_xinput.c: Added (c) year 2012 Ok if minor differs when querying XI extension 2012-03-24 Henrik Sandklef * configure.in: Fixed faulty printout in xosd option (configure script) 2012-02-10 Henrik Sandklef * libxnee/src/xnee_record.c (xnee_record_handle_event_printer): Corrected faulty print statement (too few arguments) * configure.in: Bumped version * cnee/src/parse.c: * cnee/include/parse.h: * cnee/src/main.c: * cnee/src/cnee_demo.c: Added option: record-replay * cnee/src/main.c (main): Returning from main with the last return value 2012-01-05 Henrik Sandklef * configure.in (libgnomeui_LIBS): Changed the printout when not finding gtk-config 2011-12-13 Henrik Sandklef * libxnee/src/xnee_display.c (xnee_add_display_str): Fixed mem error in realloc Replaced alloc+realloc with only realloc 2011-12-12 Henrik Sandklef * gnee/src/gnee_xnee.h: Added inclusion of xnee_utils.h * gnee/src/gnee_xnee.c: Removed unused variables * gnee/src/main.c: Corrected faulty version printout * gnee/src/recordables.c: Removed unused variable Added 2011 to (c) year * gnee/src/callbacks.c (on_ok_button1_clicked): Removed unused variable * gnee/src/gnee_xnee.h: Added proto for gnee_set_xosd_feedback * cnee/src/cnee_printer.c: Added 2011 to (c) year Removed unused variable (xnee_usage_printer): Removed unused variable * cnee/src/cnee_fake.c (xnee_type_help_sub): Removed unused variable: option_descr * libxnee/include/libxnee/xnee_setget.h: Added proto for : xnee_is_future_clients xnee_set_new_window_pos_value * libxnee/include/libxnee/xnee_xinput.h: Added proto for xnee_xinput_add_devices * libxnee/src/xnee_display.c: * libxnee/src/xnee_expr.c: * libxnee/src/xnee_grab.c: Removed unused variables * libxnee/src/xnee_plugin.c: Removed unused handling of sync callback * libxnee/src/xnee_record.c: Removed new_window_pos * libxnee/src/xnee_utils.c: Removed unused printout code * libxnee/src/xnee_time.c: Added type (unsigned long) for stored_recordFirst_diff * libxnee/src/xnee_xinput.c (xnee_xinput_add_devices): Removed unused and/or obsolete code Added inclusion of xnee_range.h (xnee_init_xinput): return XNEE_OK * libxnee/src/xnee_display.c: Added inclusion of xnee_xinput.h * libxnee/src/xnee_session.c (handle_xerr): Removed unused and/or obsolete code * libxnee/src/xnee_buffer.c: Added inclusion of xnee_xinput.h Added 2011 to (c) years * libxnee/src/xnee_grab.c (xnee_save_or_print): Removed obsolete and/or unused code * libxnee/src/xnee_fake.c (xnee_fake_key_event_impl): Moved declaration of XDevice* * libxnee/src/xnee_replay.c: Printout of replayable added Added inclusion of xnee_xinput.h * libxnee/include/libxnee/xnee_setget.h: Added prototype for int xnee_is_forced_core_device_events * libxnee/src/print.c (xnee_store_mouse_pos): Bool bo removed, since not used * configure.in: Bumping version to 3.10.92 * gnee/src/gnee_xnee.c (gx_start_recording): Removed printout (stderr) * libxnee/src/xnee.c (xnee_start): Returning (XNEE_NO_PROT_CHOOSEN) if nothing to record * libxnee/src/xnee_range.c (xnee_get_nr_of_data): Not counting reparentnotify among data to record * libxnee/src/xnee.c (xnee_start): Removing debug printouts * configure.in: Bumb version * libxnee/src/xnee.c (xnee_start): Init data counter to 0 2011-11-28 Henrik Sandklef * libxnee/src/xnee_plugin.c: Removed code already commented away * libxnee/src/xnee_session.c: Replacing remaining exit with setting interrupt flag * libxnee/src/xnee_xinput.c (xnee_handle_xinput_event): Removed faulty printout * gnee/src/callbacks.c: Removed calls to set verbose mode * gnee/src/main.c (main): Forcing gnee to replay only core events 2011-11-21 Henrik Sandklef * libxnee/src/xnee_resource.c (]): Type fixed 2011-11-17 Henrik Sandklef * pnee/src/callbacks.c: Added copyright notice (thanks ams) * configure.in: Bumping version Debian => Debian based distros 2011-11-17 Henrik Sandklef * build/ftp-upload.sh: Fix for upload directive syntax * libxnee/src/xnee_utils.c (xnee_record_from_data_display): context display fix now works on Xorg <= 1.12 2011-09-10 Henrik Sandklef * libxnee/src/xnee.c (xnee_start): * libxnee/src/xnee_display.c (xnee_add_display_str): * libxnee/src/xnee_fake.c (xnee_type_file): * libxnee/src/xnee_plugin.c (xnee_use_plugin): * libxnee/src/xnee_setget.c: Replaced exit with return 2011-08-25 Henrik Sandklef * configure.in: Replaced "can not" with "can't" Removed duplicate entry of texi2html Removed comment about missing programs when not needed 2011-08-08 Henrik Sandklef * build/build-cvstag.sh (DATE): Better error messages * configure.in: Bumping version to 3.10 * build/test-dist.sh (XNEE_DIR): Fix for allowing dir path in dist to test 2011-07-12 Henrik Sandklef * configure.in: Bumping to 3.09.91 * doc/version.texi: Bumped date * libxnee/src/xnee_setget.c (xnee_set_unsync_mode): Added verbose printout on synd mode set/unset * doc/xnee_intern.texi: Replaced "--no-sync" with -ns * cnee/src/cnee_strings.c: Replaced "--no-sync" with -ns * libxnee/include/libxnee/xnee_utils.h: Changed print format on 64 bit platform * libxnee/src/xnee_expr.c: Added xnee session line which caused the error to err printout * libxnee/src/xnee_record.c: Fixed format error 2011-07-10 Henrik Sandklef * cnee/test/src/Makefile (X11_LIB): Added missing -I and -L to include path * libxnee/src/xnee_session.c (xnee_close_down): Setting displays to NULL after closing them * libxnee/src/xnee_fake.c (xnee_fake_motion_event_impl): Slightly altered threshold for usleep wrapper (xnee_fake_sleep) * libxnee/src/xnee_time.c (xnee_calc_sleep_amount_fast): Rewrote time diff calculator Removed printf statements * libxnee/src/xnee_xinput.c (xnee_handle_xinput_event): Printing data from stored x event instead of frmo deviceevaluator Replaced 100 as buf size with a macro (XI_BUF_SIZE) spnrintf instead of sprintf 2011-05-05 Henrik Sandklef * libxnee/src/xnee_utils.c (xnee_record_from_data_display): Added support for X.org >= 7 to xnee_record_from_data_display() bug #33237, Xnee fails to record on RedHat (xnee_record_from_data_display): Adding support for X.org > 1 10 2011-04-18 Henrik Sandklef * cnee/test/src/Makefile (X11_INC): Added -I/usr/local/include to compile test code on freebsd * cnee/test/test_all.sh: * cnee/test/check_mem.sh: Updated to use "env" to invoke bash script 2011-03-28 Henrik Sandklef * doc/xnee_copying: Added 2011 to (c) year 2011-03-25 Henrik Sandklef * libxnee/src/xnee_xinput.c (xnee_xinput_add_devices): Increased size of xinput device name (to 100) 2011-03-13 Henrik Sandklef * doc/xnee_intro.texi: Typos fixed * AUTHORS (Authors): Added Scott Kostyshak to contributors * doc/xnee_intern.texi: Typo fix (exists -> exist, doesn't -> don't) * doc/xnee_prot.texi: Typo 2011-03-12 Henrik Sandklef * doc/xnee_intern.texi: Language fixes 2011-03-01 Henrik Sandklef * NEWS: Boiler template for coming version 3.10 2011-02-26 Henrik Sandklef * libxnee/src/xnee_range.c (xnee_device_as_delivered): Not recording device as delivered if X.org > 1.9 2011-03-01 Henrik Sandklef * libxnee/src/xnee_range.c (xnee_device_as_delivered): Typo (<6 => <9) when checking X.org version 2011-02-23 Henrik Sandklef * configure.in: Prepared for 3.0.9 * NEWS: Prepared for 3.0.9 2011-02-22 Henrik Sandklef * libxnee/src/xnee_fake.c (xnee_fake_motion_event_impl): Removed unused (and somewhat stupid) test code * cnee/src/Makefile.am (cnee_SOURCES): Adding LIBXI (possibly containing libxi) to ld flags * libxnee/src/Makefile.am (LIB_XNEE_SOURCE_FILES): Used "#" for commenting out stuff * NEWS: Added link to debian bug 2011-02-20 Henrik Sandklef * configure.in: Removed faulty extra call to AC_INIT * gnee/src/Makefile.am (gnee_LDADD): * pnee/src/Makefile.am (pnee_LDADD): Added LIBXI to d flags (via LIBXI) * configure.in: Bumped version (to 3.08.90) to start preps for 3.09 Removed debug printout Altered check for XI slightly * libxnee/src/xnee_xinput.c: Added (c) year * libxnee/src/xnee_replay.c: Removed call to xnee_init_xinput * libxnee/src/xnee_fake.c (xnee_fake_key_event_impl): Replaced warning print with verbose (was nothing to warn about) * libxnee/include/libxnee/xnee_utils.h: Updated (c) year Added macros for print format * libxnee/src/xnee_display.c: Updated (c) year Minor verbose statements changed * libxnee/src/xnee_record.c: Changed print format Updated (c) year * libxnee/src/xnee_replay.c (xnee_replay_synchronize): Minor tweaks Added init of XI devices * libxnee/src/xnee_fake.c (xnee_replay_event_handler): Fixes for XI * libxnee/src/xnee_xinput.c (xnee_handle_xinput_event): Fixes for XI support (num_valuators reworked) 2011-02-19 Henrik Sandklef * cnee/src/parse.c (xnee_parse_cnee_option): Adding recording of XI keyboard events if XI support * cnee/src/cnee_demo.c (cnee_demonstration): Added XI support. Savannah: bug #31231: Replay in demo mode malfunctions * cnee/src/cnee_printer.c (xnee_usage_printer): Removed "===" from help printout 2011-01-25 Henrik Sandklef * xnee/configure.in: Bumped version to 3.08 2011-01-23 Henrik Sandklef * pnee/src/Makefile.am: Adding libs (for Fedora) 2011-01-21 Henrik Sandklef * configure.in: Bumping to version 3.07.92 2011-01-13 Henrik Sandklef * libxnee/src/xnee_utils.c (xnee_record_from_data_display): Added support to handle X server from Fedora 13, 14 & NoMachine * pnee/src/pnee_impl.c (pnee_start_replaying): Removed unused variables 2010-10-27 Henrik Sandklef * libxnee/src/xnee_expr.c: #ifdef:ed away an unused var: tmp_time * libxnee/include/libxnee/xnee_session.h: Added prototype for: xnee_set_x_server_version(xnee_data *xd); * libxnee/include/libxnee/xnee_xinput.h: Added prototype for: xnee_handle_xinput_event_human * libxnee/include/libxnee/xnee_utils.h: Added prototype for: xnee_is_screen_ok 2010-10-26 Henrik Sandklef * libxnee/include/libxnee/xnee_setget.h: Added prototypes for: xnee_set_no_reparent_recording xnee_unset_no_reparent_recording xnee_is_no_reparent_recording * libxnee/include/libxnee/xnee_xinput.h: Added prototype for: xnee_set_x_server_version * libxnee/src/xnee_alloc.c: #ifdef:ed (the very odd) NULL pointer check * libxnee/src/print.c: fprintf pointers with "%p" instead of "%d" or "%u" Added inclusion of xnee_xinput.h * libxnee/src/xnee_xinput.c: Added server_time to args when xinput2 disabled * libxnee/src/xnee_utils.c: Removed old crappy commented out code * libxnee/src/xnee_setget.c: * libxnee/src/xnee_session.c: * libxnee/src/xnee_resource.c: * libxnee/src/xnee_replay.c: * libxnee/src/xnee_record.c: * libxnee/src/xnee_range.c: * libxnee/src/xnee_keysym.c: fprintf pointers with "%p" instead of "%d" or "%u" * libxnee/src/xnee_window.c: * libxnee/src/xnee_plugin.c: * libxnee/src/xnee_grab.c: * libxnee/src/xnee_fileop.c: Added 2010 to (c) year fprintf pointers with "%p" instead of "%d" or "%u" * libxnee/src/xnee_fake.c: #ifdef:ed away code fprintf pointers with "%p" instead of "%d" or "%u" * libxnee/src/xnee_expr.c: #ifdef:ed away code Removed unused variables * libxnee/src/xnee_display.c: fprintf pointers with "%p" instead of "%d" or "%u" * libxnee/src/xnee_buffer.c: #ifdef:ed away code Added 2010 to (c) year * libxnee/src/xnee_xinput.c: fprintf pointers with "%p" instead of "%d" or "%u" * libxnee/src/Makefile.am (PEDANTIC_FLAGS): Added -fno-strict-aliasing -Wno-unused-parameter 2010-10-25 hesa * libxnee/src/print.c (xnee_print_distr_list): Printing display(s) as unsigned ints instead of ints * libxnee/src/xnee_record.c: Setting rContext to 0 (instead of NULL) Fixed some fprintf arg type casts * libxnee/src/xnee_utils.c (xnee_record_from_data_display): Extending fix for RECORD to be valid for newer Xorg servers * libxnee/src/xnee_xinput.c (xnee_handle_xinput_event_human): Corrected faulty number of args to print function Switched to using stored function (instead of fprintf directly) * libxnee/include/libxnee/xnee.h: Changed type of time variable (saved_xinput_event) to Time 2010-10-23 Henrik Sandklef * configure.in: Bumped version to 3.07.90 (preps for 3.08) Fixes for dvi to pdf program Check for XI stuff only when XI is enabled * cnee/src/Makefile.am: Cleaned up Makefile * libxnee/include/libxnee/xnee.h: * libxnee/src/xnee_session.c: Removed disabling of xinput device by default Added recording_enabled to xnee_data struct * libxnee/src/xnee_xinput.c: Fixes for --disable-xinput-events 2010-10-15 Henrik Sandklef * gnee/src/Makefile.am: * pnee/src/Makefile.am: XNEE_XINPUT_SUPPORT_FLAGS is a flag for the compiler (not a linker), changing accordingly * configure.in: Updated version number to 3.07 Minor fixes when looking for gtk-config, dvipdf * gnee/src/Makefile.am (gnee_LDADD): * pnee/src/Makefile.am (pnee_LDADD): Added ${XNEE_XINPUT_SUPPORT_FLAGS} to linker args * libxnee/src/print.c (xnee_version): Added 2010 to (c) year 2010-10-02 Henrik Sandklef * configure.in: Adding "-ldl" to linker arg if needed Adding check for XI functions 2010-09-26 Henrik Sandklef * configure.in: Bumping version to 3.06.96 (in preps for 3.07) * libxnee/src/xnee_fake.c: Removed printfs * libxnee/src/xnee_xinput.c (xnee_get_xinput_event_base): Preventing more than XQueryExtension call caching value * libxnee/src/xnee_buffer.c (xnee_replay_buffer_handler): Fixed bug in sync buffer * configure.in: Bumping version to 3.06.95 (in preps for 3.07) * doc/xnee_prot.texi: Added notes on how XI events are stored in session file * libxnee/src/xnee_utils.c (xnee_is_screen_ok): Screen nr=0, should of course be an ok screen * libxnee/src/xnee_expr.c (xnee_expression_handle_project): Better support to handle strangely recorded screen nr More fixes to ifdef away xi (N900) * libxnee/src/xnee_fake.c: More fixes to ifdef away xi (N900) * libxnee/src/xnee_utils.c (xnee_is_screen_ok): New fun to handle strangely recorded screen nr * libxnee/src/xnee_xinput.c: Added empty stub for xi human print, if xi disabled 2010-09-25 Henrik Sandklef * libxnee/src/xnee_replay.c (xnee_replay_main_loop): * libxnee/src/xnee_fake.c (xnee_replay_event_handler_sleep_amt): Removed printf statements (used during devel) 2010-09-25 Henrik Sandklef * libxnee/src/xnee_fake.c: Removed set/unset of verbose mode 2010-09-24 Henrik Sandklef * NEWS: Notes from ChangeLog turned into (not yet properly) commented notes * libxnee/include/libxnee/xnee_fake.h: Changed fake key fun to macro Added fun to fake xi key * libxnee/src/xnee_fake.c: Added support for replaying XI key event * libxnee/src/xnee_expr.c (xnee_expression_handle_prim_sub): Storing of time altered to work with xi and forced core replay Discard xi events if forced core replay * libxnee/src/xnee_fake.c (xnee_fake_button_event_impl): Storing last motion event's X and Y coords for use in coming calls to xi fake button * libxnee/src/xnee_xinput.c (xnee_get_xinput_device): Using fake display when listing and setting up xi devices * libxnee/test/libtest.c: Added (c) notice * cnee/include/parse.h: * cnee/src/parse.c: Added options to handle: forced core replay replay backend * libxnee/src/print.c: Basic functionality of printing xi events for humans added * libxnee/src/xnee_error.c: Added: XNEE_XINPUT_EXTENSION_FAILURE, XNEE_REPLAY_BACKEND_FAILURE * libxnee/src/xnee_fake.c: Added support for xi buttton Moved calc of time to sleep to separate fun (xnee_replay_event_handler_sleep_amt) Added code to find replay session's device id (only rudimentary support, based on # instead of name) * libxnee/src/xnee_record.c: Removed "#" in front of core event printout Temp. disabling check for screen * libxnee/src/xnee_replay.c: Restructured duplicate code (new static fun xnee_replay_update_dev_ctr) Added support for xi buttons * libxnee/src/xnee_session.c: Added call to xi init and to set replay backend * libxnee/src/xnee_setget.c (xnee_unset_forced_core_device_events): Added funs to (un)set forced code device replay * libxnee/src/xnee_xinput.c: Human printout of xi events New function to init Xnee's XInput stuff (no device init) Added code to find replay session's device id (only rudimentary support, based on # instead of name) * libxnee/include/libxnee/xnee.h: Added vars for replay to xi structs * libxnee/include/libxnee/xnee_fake.h: Changed fake button fun to macro Added fun to fake xi buttons * libxnee/include/libxnee/xnee_xinput.h: Added funs to init Xnee's XInput stuff (no device init) * libxnee/include/libxnee/xnee_setget.h: Added funs to (un)set forced code device replay 2010-09-23 Henrik Sandklef * libxnee/src/xnee_strings.c: * libxnee/include/libxnee/xnee_strings.h: Added string for replay backend * libxnee/include/libxnee/xnee_setget.h: Added funs to handle replay backend * libxnee/include/libxnee/xnee.h: Added enum and variable for replay backend * libxnee/src/xnee_setget.c (xnee_set_replay_backend): Removed faulty fprintf statement * configure.in: Bumping version to 3.06.91 (in preps for 3.07) * libxnee/src/xnee_fake.c (xnee_fake_motion_event_impl): Removed crappy printf statement * libxnee/src/xnee_expr.c (xnee_expression_handle_replay): Storing time for XI events * libxnee/include/libxnee/xnee_xinput.h: * libxnee/src/xnee_xinput.c (xnee_handle_xinput_event): Added server time as argument since we need the time source * libxnee/src/xnee_fake.c: Making sure XI motions events are faked as absolute Improved handling of XI events * libxnee/src/xnee_replay.c (xnee_replay_main_loop): Changed to replaying/faking XInput Slave events instead of master * libxnee/src/xnee_record.c (xnee_record_handle_event_printer): Printing a "#" in front of every "normal" motion event (devel fix) v * doc/xnee_copying: Updated (c) year * doc/version.texi: Updated (c) year 2010-09-22 Henrik Sandklef * libxnee/src/xnee_xinput.c (xnee_handle_xinput_event): Changed exit to print a warning (stderr) and return with errorr code * configure.in: Updated version to 3.06.90 to prepare for 3.07 * libxnee/src/xnee_fake.c (xnee_replay_event_handler): Indentation fix * libxnee/src/xnee_range.c: Changed "WARNING" to "NOTIFICATION" in warning text * libxnee/src/xnee_session.c (xnee_rep_prepare): Added extra call (for second call of fun :( ) to xnee_setup_display Continuing if XNEE_OK returned from xnee_replay_main_loop * libxnee/src/xnee_record.c: Enabled recording even if screen < 0 Added print of xnee_data and control dpy in fprintf statement * libxnee/src/xnee_replay.c: Removed printf statements changed a printf into a fprintf(stderr, * libxnee/src/xnee_session.c: xnee_setup_display called earlier (N900 fix) * libxnee/src/xnee_xinput.c: Updated (c) year changed a printf into a fprintf 2010-09-18 Henrik Sandklef * xswine/main.c: Major rewrite, fprintf and flush to swmouse devs 2010-09-14 Henrik Sandklef * build/maemo.sh: Removed unused old settings Re-enabled clean target 2010-09-13 Henrik Sandklef * build/maemo.sh: New file to build Xnee for N900, (very specific settings) * libxnee/src/xnee_utils.c (xnee_record_from_data_display): Added support for handling N900 X servers 2010-09-09 Henrik Sandklef * libxnee/include/libxnee/xnee.h: Removed hard coded #define of XNEE_XINPUT_SUPPORT * libxnee/include/libxnee/xnee_xinput.h: Modified (c) year (only 2010) Include libxnee/xnee.h alwas done 2010-09-08 Henrik Sandklef * libxnee/include/libxnee/xnee_xinput.h: Moved function prototypes outside xinput ifdef * libxnee/src/xnee_alloc.c (xnee_free_recordext_setup): free code placed inside NULL checks instead of separate NULL checks * libxnee/src/xnee_record.c (xnee_record_handle_event_printer): Discarding motion event if no screen presented * libxnee/src/xnee_xinput.c: Stub code for Xinput2 if xinput disabled * libxnee/src/Makefile.am: * cnee/src/Makefile.am: Added xinput enable/disable support * configure.in: --disable-xinput2 (and enable) added 2010-09-07 Henrik Sandklef * libxnee/include/libxnee/xnee_strings.h: merge * libxnee/src/xnee_alloc.c: Updated (c) year 2010-09-07 Henrik Sandklef * libxnee/include/libxnee/xnee_settings.h (XNEE_NR_OF_XINPUT_DEVICES): Adding XNEE_NR_OF_XINPUT_DEVICES as the max number of xinput devices handled 2010-09-01 Henrik Sandklef * libxnee/test/print.c (test_printfuns): Typo fix: reurn => return (main): printf typo and formatting * libxnee/include/libxnee/xnee.h: Including xnee_settings.h to get the nr of xinput devices 2010-08-31 Henrik Sandklef * AUTHORS (Authors): Added Tuukka Pasanen to contributors * libxnee/test/print.c: Added return 0 at the end of some function body Added (c) and license notice * libxnee/test/test_feedback.c (test_setfeedback): Added return 0 at the end of the function body * libxnee/test/test_all.c (test_all): Added return 0 at the end of the function body * libxnee/test/libtest.c (test_xnee_data): Added return XNEE_OK at the end Added (c) and license notice * gnee/src/gnee_xnee.c (gnee_get_grab): Added missing return values * cnee/src/main.c (cnee_handle_err): function now returns void we will discard any errors in the function anyway * devel-scripts/setup-xi2.sh: Script to setup and unsetup (-d) xinput devices * libxnee/src/Makefile.am: Merged xinput-2 branch * libxnee/src/xnee.c: Removed funs: xnee_check_true, xnee_check_false * libxnee/src/xnee_display.c: Merged xinput-2 branch * libxnee/src/xnee_error.c: Updated (c) years to include 2010 New error code: XNEE_CLI_ERROR * libxnee/src/xnee_expr.c: Merged xinput-2 branch * libxnee/src/xnee_fake.c: Merged xinput-2 branch * libxnee/src/xnee_range.c: Merged xinput-2 branch * libxnee/src/xnee_replay.c: Merged xinput-2 branch * libxnee/src/xnee_session.c: Merged xinput-2 branch * libxnee/src/xnee_utils.c (xnee_check_true): New funs: xnee_check_true, xnee_check_false * libxnee/src/xnee_strings.c: Updated (c) years to include 2010 Added string containing name of xinput extension * libxnee/src/xnee_record.c (xnee_unsetup_recording): Merged xinput-2 branch * libxnee/include/libxnee/xnee.h (struct): Merged xinput-2 branch 2010-08-31 Henrik Sandklef BRANCH: xinput-2 branch * cnee/src/parse.c: * cnee/include/parse.h: Updated (c) years to include 2010 Added option "--disable-xinput-events" * libxnee/src/Makefile.am: Added files: src/xnee_xinput.c include/libxnee/xnee_xinput.c * libxnee/src/xnee_expr.c: Added support for managing xinput events Updated (c) years to include 2010 * libxnee/src/xnee_fake.c: Added support for faking xinput events Updated (c) years to include 2010 * libxnee/src/xnee_range.c: Add static to add_to_list2 Updated (c) years to include 2010 * libxnee/src/xnee_record.c: Moved xinput funationality to file: xnee_xinput * libxnee/src/xnee_replay.c: Skeleton code for replaying XInput device events * libxnee/src/xnee_session.c: Using Xnee's Xinput API to disable Xinput by default * libxnee/src/xnee_setget.c: Moved xinput funationality to file: xnee_xinput * libxnee/src/xnee_utils.c: Moved xinput funationality to file: xnee_xinput * libxnee/include/libxnee/xnee.h: Added variables to keep info on whether to record xi mouse/kbd or not * libxnee/include/libxnee/xnee_fake.h: Added support for faking xinput events * libxnee/src/xnee_xinput.c: New file * libxnee/include/libxnee/xnee_xinput.h: New file 2010-08-30 Henrik Sandklef * AUTHORS (Authors): Added Fabian Keil to contributors (thanks!) Made more explicit who of the AUTHORS made what 2010-08-26 Henrik Sandklef * libxnee/src/xnee_session.c (xnee_rep_prepare): After reading meta data, we're now looking at the ret variable and make sure the called fun has finished with a return value that allows us to continue 2010-08-25 Henrik Sandklef * libxnee/src/xnee_expr.c (xnee_expression_handle_comment): Removed unused variable len Updated copyright year * libxnee/src/xnee_session.c (xnee_rep_prepare): Return from xnee_rep_prepare() if reading of meta data fails * libxnee/src/print.c (xnee_human_print_event): Removed useless assignment wasting "storage" (xnee_human_print_request): Removed useless assignment of request_name (wasting "storage") * libxnee/src/xnee_range.c: Updated copyright year Removed unused variable "len" * libxnee/src/xnee_setget.c: Better null handling (xnee_set_project_file) * libxnee/src/xnee.c: Removed unhandled check of return value Added copyright year 2010-07-30 Henrik Sandklef * configure.in (libgnomeui_LIBS): check for gtk-config try our best to look for gnome.h file * pnee/src/pnee_impl.h: Removed inclusion of gnome.h 2010-06-17 Henrik Sandklef * doc/Makefile.am (install): Installation of docs is now depending on BUILDOC * configure.in: Added new option: --enable-man Checks for makeinfo once, uses result many times Can build guis and manual without all doc stuff 2010-05-27 Henrik Sandklef * libxnee/src/xnee_record.c: Removed debug/printf printout when closing context * libxnee/src/xnee_session.c: Re-enabling closing of displays * cnee/src/main.c (main): Removing set_verbose in main (huah!!) * libxnee/src/xnee_keysym.c (xnee_token_to_km): Checking if keycode/modifier is valid before using it 2010-05-26 Henrik Sandklef * configure.in: Bumping version to 3.06 * libxnee/src/xnee_resource.c: Replace "forced-reparent-recording" with "no-reparent-recording" * libxnee/src/xnee_record.c (xnee_record_handle_event_printer): Don't print reparent event if no-reparent * libxnee/src/print.c (xnee_print_xnee_settings): If no-reparent-recording used, print option to file * libxnee/src/xnee_session.c (xnee_init): no-reparent turned OFF default * libxnee/src/xnee_setget.c (xnee_set_no_reparent_recording): set, get and is functions for no-reparent functionality * libxnee/include/libxnee/xnee_resource.h (enum XNEE_OPTION_KEYS): Replace XNEE_FORCED_REPARENT_RECORD with XNEE_NO_REPARENT_RECORD * libxnee/include/libxnee/xnee.h (struct): forced_reparent_recording turned into no_reparent_recording 2010-05-24 Henrik Sandklef * libxnee/include/libxnee/xnee.h: Adding structs: saved_xinput_event, xinput_device Adding enum: XNEE_PROTO_XINPUT_EVENT_MASTER, XNEE_PROTO_XINPUT_EVENT_SLAVE, To handle XI2 * libxnee/include/libxnee/xnee_setget.h: New function prototype: xnee_has_xinput2 * libxnee/include/libxnee/xnee_settings.h: Macro XNEE_NR_OF_XINPUT_DEVICES to set the nu,ber of XI2 devies Xnee can manage * libxnee/src/xnee_utils.c (xnee_init_xinput_devices): Function to retrieve and store XI2 info * libxnee/src/xnee_record.c (xnee_record_handle_event_printer): Recording Button press/release (not working) Motion implemented * cnee/include/parse.h: Adding enum member CNEE_GET_XINPUT_EVENT_BASE * cnee/src/parse.c (]): Adding option: --get-xinput-event-base / -gxbe * libxnee/src/xnee.c: Moved util funs to xnee_utils.c * libxnee/src/xnee_error.c: Adding generic error in CLI 2010-05-23 Henrik Sandklef * libxnee/src/xnee_display.c (xnee_setup_display): Setting event base for x input extension if XI is available otherwise setting it to < 0 * libxnee/src/xnee_record.c (xnee_record_handle_event_printer): More structured xinput event handling Filtering out the "incorrect events" * libxnee/src/xnee_session.c (xnee_init): X Input extension event base initialised to -1 * libxnee/src/xnee_utils.c: Added new function: xnee_get_xinput_event_base Moved two funs here: xnee_check_true, xnee_check_false * libxnee/src/xnee_strings.c: * libxnee/include/libxnee/xnee_strings.h: New string: XNEE_XINPUT_EXTENSION_NAME to store the name of the X Input Extension * libxnee/include/libxnee/xnee.h: Adding support for Xinput Event internally Return value: XNEE_XINPUT_EXTENSION_FAILURE , All protocol formatting numbers now have a enum value: enum: xnee_protocol_data_numbers Adding struct: xnee_xinput_event which is used in: xnee_intercept_data; xnee_data now has a member: xinput_event_base; xnee_script_s now has a member: xinput_deviceid ; * libxnee/include/libxnee/xnee_utils.h: Added new function: xnee_get_xinput_event_base Moved two funs here: xnee_check_true, xnee_check_false 2010-05-12 Henrik Sandklef * libxnee/src/xnee_fileop.c (xnee_free_file): Checking if file is null before printing (only debug print) * libxnee/src/xnee_utils.c (xnee_record_from_data_display): Adding code to prepare for new XLIB fixes * libxnee/src/xnee_record.c: * libxnee/src/xnee_replay.c: Using functions in xnee_utils to find which display to use for sending control data Removed unused code * libxnee/src/xnee_session.c (xnee_close_down): Added some debug printouts Removed clsoing of data display (don't know what's wrong :( ) * libxnee/include/libxnee/xnee_utils.h: * libxnee/src/xnee_utils.c: Added functions: xnee_record_from_data_display(xnee_data *xd); xnee_get_display_for_recordcontext(xnee_data *xd); to handle workaround for Xorg server in 2009-2010 2010-05-11 Henrik Sandklef * libxnee/src/xnee_record.c (xnee_record_handle_event_printer): Removed debug printout Check if string is NULL before strcmp * cnee/src/main.c: Removed sleep workaround * libxnee/src/xnee_record.c: Removed debug printouts * libxnee/src/print.c: Added printing of forced reparent mode when writing to sessions file * libxnee/src/xnee_error.c: Fixed typo (filure => failure) * libxnee/src/xnee_record.c: Only recording all ReparentNotify when forced reparent mode * libxnee/src/xnee_resource.c: Added parser functions for new forced reparent functionality * libxnee/include/libxnee/xnee.h: Added variable for new forced reparent functionality * libxnee/src/xnee_session.c: Set forced reparent flag to 0 during init. * libxnee/src/xnee_setget.c: Added helper functions (is, set, get) for new forced reparent functionality * libxnee/include/libxnee/xnee_resource.h: Added new enum (XNEE_FORCE_REPARENT_RECORD) 2010-02-06 Henrik Sandklef * libxnee/test/callback.c (main): Casting xd to XPointer to silent warning 2010-01-24 Henrik Sandklef * pixmap/512x512/xnee-new.png New file (logo) from Luis Santander 2010-01-21 Henrik Sandklef * libxnee/src/xnee_resource.c: * libxnee/src/xnee_record.c: Updated (c) year * libxnee/src/xnee_resource.c (xnee_key2string): Not crashing due to options[-1] indexing 2010-01-02 Henrik Sandklef * libxnee/src/xnee_record.c (xnee_record_from_data_display): Checking if x_vendor_name is NULL before use 2009-12-31 Henrik Sandklef * Makefile.am (EXTRA_DIST): Adding build/autobuild.sh to dist file * configure.in: Added AB_INIT Preparing for 3.06 * build/autobuild.sh: New file: Autobuild wrapper 2009-12-30 Henrik Sandklef * libxnee/test/test-wrapper.sh: exit instead of return * libxnee/test/Makefile.am (TEST_WRAPPER): Adding "./" to test-wrapper.sh since we don't want to add . to PATH 2009-12-29 Henrik Sandklef * Makefile.am (check): Cleaner calls to test targets in libxnee and cnee target check will (soon) not rely on X target xcheck will need X * libxnee/test/Makefile.am: Put test-wrapper in a var Made separate test when requesting to test with X * libxnee/test/test_setget.h: Casts to int before print * libxnee/test/Makefile.am: Calling test programs through test-wrapper.sh * cnee/test/test_all.sh: No args is handled better * cnee/test/etc/base_funs: Added handling of no X up Function decl./def now in bourne shell syntax * cnee/test/scripts/options/print-error-name.sh: * cnee/test/scripts/options/print-error-names.sh: Redirect misleading (from negative tests) error messages * cnee/test/scripts/options/print-event-name-human.sh: Removed test of non existing event 2009-12-26 Henrik Sandklef * configure.in: gtk/gnomeui cflags/ldflags fixes * configure.in: More fixes to get get rid of pkg-config deps, when not needing it 2009-12-22 Henrik Sandklef * Makefile.cvs (generate): Creating autotools dir before generating configure script Works better with buildbot 2009-12-21 Henrik Sandklef * Makefile.cvs (generate): Telling user to run configure with --enable-doc option set 2009-12-20 Henrik Sandklef * README.cvs: New file: "Information on where to find info on building from CVS" * README: More info about GNU Xnee Added info on building from CVS * BUGS: Better info on bug reporting * configure.in: Better support for finding libgnomeui, gtk+ Fixed bug: "Bug report: No package 'libgnomeui-2.0' found" as reported on the bug-xnee Fixed faulty usage of pkg-config and gtk and libgnomeui Removed gnomedesktop from deps in pkg-config Minor adjustments to search for panelapplet Workaround for a strange pkg-config/autotools problem 2009-12-16 Henrik Sandklef * cnee/src/cnee_strings.c (examples): Added a blank to make example printout ok 2009-12-09 Henrik Sandklef * Makefile.cvs (generate): Fixing faulty comment after generating configure script 2009-12-08 Henrik Sandklef * libxnee/src/xnee_record.c (xnee_record_from_data_display): Removed debug printout 2009-12-08 Henrik Sandklef * libxnee/src/xnee_record.c (xnee_record_from_data_display): Adding support for old Xorg (Debian): vendor string: The X.Org Foundation vendor release number: 10402000 2009-12-07 Henrik Sandklef * libxnee/src/xnee_record.c (xnee_record_from_data_display): Adding checks for X server checks (how to record) on Open Solaris 2009-12-07 Henrik Sandklef * libxnee/include/libxnee/xnee.h (struct): More fine grained storage of X version number added: x_version_minor_sub * libxnee/src/xnee_record.c (xnee_record_async): Flushing and syncing displays after record contect creation Checking if X > Xorg 1.6.0 to choose display to use in EnableAsync call Recording is now done with XRecordEnableContextAsync * libxnee/src/xnee_session.c (xnee_set_x_server_version): More fine grained storage of X version number 2009-11-23 Henrik Sandklef * libxnee/test/print.c: Removing adding of non default displays to distribution test to let nightly test work better with Xvfb * libxnee/test/Makefile.am Removing shared lib for bins (Xvfb): Adding sleep to make Xvfb starts up before proceeding * configure.in: Removing debug sleep 2009-11-22 Henrik Sandklef * libxnee/src/xnee_session.c (xnee_set_x_server_version): Added check for display Needed for nightly builds without X server up 2009-11-01 Henrik Sandklef * libxnee/src/xnee_resource.c (xnee_parse_option_impl): Added check if NULL ptr when verbose printing (xnee_key2string): Added check if NULL ptr when verbose printing * libxnee/src/xnee_record.c (xnee_has_record_extension): Adding note that missing RECORD extension is not an Xnee error 2009-06-17 Henrik Sandklef * libxnee/src/print.c (xnee_print_xnee_settings): Fixed seg fault 2009-05-27 Henrik Sandklef * libxnee/src/xnee_range.c: call xnee_set_x_server_version if info not there * libxnee/src/xnee_record.c: Creating record context on control display * libxnee/src/xnee_session.c: Added some logic debugging code * libxnee/test/libtest.c (test_xnee_data): Test updates * libxnee/include/libxnee/xnee.h: Added variables (to xnee_data) to store x server info from the display Updated (c) year * libxnee/src/xnee_range.c: * libxnee/src/xnee_record.c: * libxnee/src/xnee_alloc.c: Added checks and work around for faults that appears to happen only in Xorg 1.6 * libxnee/src/xnee_session.c: Added fun (xnee_set_x_server_version) to get and store x server info from the display * doc/version.texi: * configure.in: Version set to 3.04 (and updated date) Checking for ps2pdf14 as well as ps2pdf * libxnee/src/print.c (xnee_print_xnee_settings): Removed ugly merge leftover 2009-05-23 Henrik Sandklef * doc/Makefile.am (docdir): Added @ before commands in Makefile (less verbose) * configure.in: Print out commands to build also when building gui+applet * libxnee/src/print.c (xnee_human_print_request_verbose): Not printing if NULL pointer. Removed seg fault crash on solaris Updated (c) year * libxnee/src/feedback.c: Remove va_list init to NULL 2009-05-22 Henrik Sandklef * libxnee/src/xnee_session.c (xnee_close_down): Checking grab_keys is not NULL before free * libxnee/src/xnee_grab.c (xnee_new_grab_keys): Minor coding standard update (added {}) Free old grabs before setting new * libxnee/src/xnee_alloc.c (xnee_new_xnee_data): Setting grab_keys to NULL as init value * configure.in: * gnee/src/Makefile.am (INCLUDES): * pnee/src/Makefile.am (INCLUDES): Better depencency handling (libgnomeui, gtk) * libxnee/test/Makefile.am (testcallback_SOURCES): Moved defs before use * libxnee/src/print.c (xnee_print_xnee_settings): Fixed ugly typo 2009-05-20 Henrik Sandklef * libxnee/src/print.c (xnee_print_xnee_settings): Fixed seg fault on solaris, faulty if statement fixed 2009-05-09 Henrik Sandklef * doc/xnee.texi (Top): Moved Top node outside of ifinfo statment * doc/Makefile.am: Falling back to one rule for ps and pdf 2009-04-27 Henrik Sandklef * libxnee/src/xnee_replay.c (xnee_setup_rep_recording): (c) year updated * configure.in: Finally, Version set to 3.03 * src/xnee_plugin.c: * include/libxnee/xnee_plugin.h: (c) year updated 2009-04-22 Henrik Sandklef * libxnee/src/print.c (xnee_version): (c) years updated * cnee/src/cnee_printer.c: Minor indentation fixes Removed unused variables * libxnee/src/xnee_session.c: Type casting to int (to remove compiler warnings) (c) year updated * libxnee/src/feedback.c: (c) year updated Fixed pedantic warnings (function pointer) * libxnee/src/xnee_alloc.c: obsoleted function: xnee_reset_retype_info (c) year updated * libxnee/src/xnee_callback.c: (c) year updated Fixed pedantic warnings * libxnee/src/xnee_display.c: Added missing return statement (c) year updated Type casting to int (to remove compiler warnings) * libxnee/src/xnee_expr.c: Removed unused vars Chceking return value of system Safer pointer arithmetics when using stat. buffers (c) year updated * libxnee/src/xnee_range.c: Better check for X.org server (c) year updated * libxnee/src/xnee_record.c: Better screen nr handling Removed dangerious call to XRecordFreeData * libxnee/src/xnee_resource.c: Adding mode in call to xnee_set_plugin_name * libxnee/src/xnee_strings.c: Added strings to handle name of external dl-loaded funs * libxnee/src/xnee_utils.c: Added verbose printout Setting variable leave to 0 on decl. * libxnee/src/xnee_window.c: Setting variable win_name to NULL before use * libxnee/include/libxnee/xnee_setget.h: * libxnee/src/xnee_setget.c: Added (c) years Added prototype for xnee_set_project_file * libxnee/src/xnee_plugin.c: Added variable to know where to search for (dl-loaded) functions (c) year updated * libxnee/include/libxnee/xnee_strings.h: Added names for external callback functions (c) year updated * libxnee/include/libxnee/xnee_plugin.h: Added variable to know where to search for (dl-loaded) functions (c) year updated * libxnee/include/libxnee/xnee_expr.h: Added missing xnee_is_script prototype (c) year updated * libxnee/include/libxnee/xnee_callback.h: added name of arg (dest) as in c file (c) year updated 2009-04-21 Henrik Sandklef * libxnee/test/callback.c: * libxnee/test/callback_so.c: * libxnee/test/Makefile.am: Added test file for dynamic lib (plugin) * libxnee/src/xnee_plugin.c: Removed (using macros) unnecassary code * libxnee/src/xnee_callback.c: Removed compilation warnings * libxnee/src/xnee_record.c: Checking for NULL args in correct order * libxnee/src/xnee_resource.c: Removed compilation warnings * libxnee/include/libxnee/xnee_setget.h: Removed compilation warnings by adding some prototypes 2009-04-21 Henrik Sandklef * libxnee/src/xnee_grab.c: Added typedef for X error handlers Removed compilation warnings * libxnee/src/xnee_km.c: Cleaned up code Removed compilation warnings Removed obsoleted code Removed extra arg to get_modifier_from_mapping_sub * libxnee/src/xnee_setget.c (xnee_set_xnee_data): Added return XNEE_OK * libxnee/include/libxnee/xnee_utils.h: Added prototype for: str2int * cnee/src/parse.c: Removed unused variable (need_init) * libxnee/include/libxnee/xnee_resource.h: Added prototype for: xnee_find_option_entry_impl * libxnee/include/libxnee/print.h: Added prototype for: xnee_print_data_str * libxnee/include/libxnee/xnee_setget.h: Added prototype for xnee_set_project_file * cnee/src/main.c (cnee_handle_err): Removed unused argument * cnee/src/main.c: Cleaned up code from compiler warnings * cnee/src/cnee_demo.c: Removed compiler warnings * cnee/src/Makefile.am (PEDANTIC_FLAGS): Added -Wno-format to pedantic mode flags, since we are using non static formats. 2009-04-20 Henrik Sandklef * cnee/src/cnee_fake.c (xnee_type_help_sub): Removed compiler warnings More modular printing (using opts as argument) * libxnee/src/xnee_setget.c: removed function: int xnee_set_first_list_str(xnee_data *xd, char *str); Compiler warnings removed * libxnee/src/xnee_replay.c: * libxnee/src/xnee_record.c: Compiler warnings removed * libxnee/src/print.c (xnee_human_print_event_verbose): Removed unused variable i 2009-04-19 Henrik Sandklef * libxnee/src/xnee_resource.c: Adjusted parsing type of the xns file 2009-02-23 Henrik Sandklef * doc/xnee_exampl.texi: Removing docs on obsoleted reqs * share/xnee.sh.in1: Obsoleting fif/file functionality Using one cnee instance per bash function call 2009-02-17 Henrik Sandklef * libxnee/src/xnee_display.c (xnee_add_display): Better cleaning up * libxnee/src/xnee_session.c (xnee_record_update_time_left): New function to calculate time left to record 2009-01-06 Henrik Sandklef * cnee/src/Makefile.am (cnee.txt): Adding rules to build cnee manuals (html, text, pdf) * configure.in: Fixed uc/lc typo in dvipdf Removed dvi2ps check (not used anymore) 2008-12-17 Henrik Sandklef * build/profile.sh (FMT): Defaulting to ps format instead of pdf * Makefile.am (check): Test file to exec is testdisplay (not testdisp) * libxnee/test/disp.c: * libxnee/test/print.c: Removing dependency to display :0 reading DISPLAY environmanet variable instead * libxnee/src/xnee_range.c (is_dangerous_xserver): Checking if display name string is of zero length, then using NULL * libxnee/src/xnee_display.c (xnee_add_display): Fixed faulty return of memory fault 2008-12-17 Henrik Sandklef * build/coverage.sh: XVFB display number adjustable 2008-12-11 Henrik Sandklef * build/profile.sh: * build/coverage.sh: Adding support for ppc 2008-12-10 Henrik Sandklef * libxnee/test/print.c: More test code * libxnee/test/test_setget.h: Added XNEE_PRINT_ERROR to assert macro * libxnee/test/print.c (test_rangefuns): More test cases: ranges, distribution lists, requests, replies * libxnee/test/test_setget.h (XNEE_PRINT_ERROR): Added macro (XNEE_PRINT_ERROR) for printing return values more nicely in test programs * libxnee/include/libxnee/print.h: Commented out function: xnee_rec_print_sys_info * libxnee/src/xnee_display.c: Made buffer for display name bigger (now 256 bytes) Added copyright year 2008 * libxnee/src/print.c: Added return XNEE_OK when nothing to print * libxnee/src/xnee_window.c: Removed warnings in verbose print functions Added copyright year 2008 * Makefile.am: Removed old merge leftovers * libxnee/include/libxnee/print.h: Added (c) year 2008 * libxnee/src/print.c: Checking for NULL when human printing requests * libxnee/test/Makefile.am: Added print test file to make targets * libxnee/test/print.c: More test cases for request/event human printing 2008-12-09 Henrik Sandklef * cnee/test/scripts/options/print-request-name-human.sh: File for testing request name printing in human format * cnee/test/scripts/options/print-even-name-human.sh: File for testing event name printing in human format * libxnee/test/print.c: New file Some print tests * libxnee/test/test_feedback.c: Change name of xnee app to feedbacker * Makefile.am (check): Adding testfeedback to test * libxnee/src/feedback.c: Feedback with no feedback set gives no error Added some verbose printout Fixed faulty feedback checks * libxnee/test/test_setget.c: Setting name correctly * libxnee/test/Makefile.am: Added testfeedback and simplified LD flags a bit * libxnee/test/test_feedback.c: New file for testing feedback funs 2008-12-08 Henrik Sandklef * build/profile.sh (DATE): Stepping beck in dir tree doesn't now depend on successful command * libxnee/test/Makefile.am: Added statis ld flags to testsetget bin 2008-12-06 Henrik Sandklef * build/coverage.sh: Fixed faulty directory (coverage instead of profile) 2008-12-04 Henrik Sandklef * build/profile.sh: * build/coverage.sh: exporting DISPLAY variable * maint.mk: Adding quoutes to C/CC flags 2008-12-03 Henrik Sandklef * libxnee/src/print.c (xnee_print_xnee_data): Fixed printf formating, casted pointers int 2008-11-29 Henrik Sandklef * build/coverage.sh: * build/profile.sh: Xvfb used to test Work around for Xvfb (freecolormap) bug? xterm, xwininfo, xdpyinfo, xset used to generate x11 data 2008-11-27 Henrik Sandklef * build/profile.sh: * GNUmakefile: * maint.mk: * cfg.mk: New files for GNU testing 2008-11-19 Henrik Sandklef * cnee/src/Makefile.am: verify-cli: a small rule to test the binary 2008-11-09 Henrik Sandklef * build/maint-test.sh: Script to ease up cov testing etc * doc/xnee_prot.texi: Adding info on retype-[press|release]-delay option * cnee/test/test_all.sh: Adding option (--build) to build help program * Makefile.am: Adding test scripts to check rule * maint.mk: * GNUMakefile: * cfg.mk Files to enable coverage (and more) tests with gnulib 2008-11-06 Henrik Sandklef * configure.in: Using dvi->pdf and pdf->ps instead * doc/Makefile.am: Using eps->pdf rule again Adjusting doc building rules to build machine Using dvi->pdf and pdf->ps instead 2008-10-12 Henrik Sandklef * configure.in: * doc/Makefile.am: Using texito* tools * libxnee/src/xnee_resource.c (xnee_options_impl): Added info that we're dealing with milli seconds to help text * cnee/src/cnee_printer.c: Added code to print out retype options help * cnee/src/cnee_demo.c (cnee_demonstration): Added call to xnee_renew_xnee_data, to use the new API * libxnee/xnee_setget.h: * libxnee/xnee_resource.h: * libxnee/xnee.h: Added code the handle new retype delay struct * libxnee/src/xnee_alloc.c: Added code the handle new retype delay struct Typecasted void* to int before comparions of mem pointers * libxnee/src/xnee_setget.c: * libxnee/src/xnee_session.c: Adding function(s) to handle sleep period after faking key press/release (--retype-press-delay --retype-release-delay) * libxnee/src/xnee_resource.c (xnee_parse_option_impl): Adding options to change sleep period after faking key press/release (--retype-press-delay --retype-release-delay) * libxnee/src/xnee_fake.c (xnee_type_file): Changing sleep period after faking key press/release to use user adjustable delays 2008-10-11 Henrik Sandklef * libxnee/src/xnee_fake.c (xnee_type_file): Added short delay after key release when faking, since words have been reported to be typed too fast 2008-09-30 Henrik Sandklef * libxnee/src/xnee_range.c (xnee_free_ranges): Setting index to 0 when clearing the array 2008-09-26 Henrik Sandklef * cnee/test: Switching to latest swinput * libxnee/src/xnee_prot.texi: Faulty protocol specs corrected * configure.in Building libxnee/test/Makefile 2008-08-07 Henrik Sandklef * cnee/src/parse.c (xnee_parse_args): Fixed bug #23965: Uninitialized variable in cnee * libxnee/include/libxnee/print.h: Added func headers for printout cases for X11 data * libxnee/src/print.c (xnee_print_xnee_settings): Added more printout cases for X11 data 2008-05-15 Henrik Sandklef * doc/Makefile.am: Added DESTDIR to install target 2008-05-14 Henrik Sandklef * libxnee/src/print.c (xnee_human_print_request_verbose): Started work on verbnose human printout for requests 2008-05-09 Henrik Sandklef * libxnee/src/print.c (xnee_human_print_event_verbose): more human printout implementations 2008-05-05 Henrik Sandklef * libxnee/src/print.c (xnee_human_print_event_verbose): Added function to make human printout more informative 2008-04-14 Henrik Sandklef * doc/xnee_prot.texi: Resuest printout info corrected. 2008-01-01 Henrik Sandklef * cnee/src/cnee_printer.c (xnee_usage): Added XNEE_GRAB_OPTION to the option printout * libxnee/src/xnee_resource.c (xnee_parse_option_impl): * libxnee/src/xnee_km.c (xnee_parse_option_impl): Fixed a bug when reading/using exec-program 2008-01-15 Henrik Sandklef * include/libxnee/print.h * include/libxnee/xnee.h * include/libxnee/xnee_resource.h * include/libxnee/xnee_setget.h * src/xnee_expr.c * src/xnee_replay.c * src/xnee_resource.c * src/xnee_session.c * src/xnee_setget.c Adding keep-autorepeat option 2007-11-05 Henrik Sandklef * doc/xnee_faq.texi: xnee-bug => bug-xnee 2007-10-31 Henrik Sandklef * doc/xnee_install.texi: Added note on how to configure after CVS checkout xnee-3.02 used in examples instead of Xnee-1.0 * build/cvs_build.sh (LOG_FILE): Added configure options to enable build form CVS * cnee/src/Makefile.am (cnee.info): Reintroduced rules for generating .texinfo, .1, .info * configure.in: Version set to 3.02.80 * Makefile.cvs (generate): Added note on how to configure after CVS checkout 2007-10-30 Henrik Sandklef * configure.in: Not using libxnee/test anymore * cnee/src/Makefile.am: cnee.1, infopage, textinfo page not generated by default * libxnee/Makefile.am: Removing test dir from SUBDIRS * libxnee/src/Makefile.am: Removing .a lib, switch to libtool completed * libxnee/Makefile.am (SUBDIRS): excluding test dir temporarily 2007-10-29 Henrik Sandklef * doc/Makefile.am (docdir): DOC_DEP is used for dependency doc code DOC_DEP and doc_DATA depends on build type (BUILDDOC) install rule added to override default * libxnee/src/xnee_replay.c (xnee_replay_main_loop): insert break in replay loop if type in event is zero * configure.in: updated version to 3.02 DOC_DIR always set add printout to show if dynamic or static linking will be made * doc/xnee_faq.texi: changed question email address to xnee-devel@gnu.org 2007-10-29 Henrik Sandklef * configure.in: builddoc=false by default 2007-09-24 Henrik Sandklef * libxnee/src/print.c (xnee_print_xnee_settings): #-printing synchronised replay option in session file 2007-09-15 Henrik Sandklef * cnee/src/Makefile.am: * libxnee/test/Makefile.am: Removed dependency to static lib 2007-09-12 Henrik Sandklef * configure.in: Docs not built by default Exluding AM_INIT_AUTOMAKE * libxnee/src/xnee_buffer.c (xnee_replay_buffer_handler): Removed faulty check * libxnee/src/xnee_expr.c: * libxnee/src/xnee_session.c: Skipping refreshing of ranges since already done elsewhere Corrected faulty strcnmp (added ==0) * libxnee/src/xnee_record.c: Added helper function: xnee_record_handle_event_printer used in xnee_record_handle_event * libxnee/src/xnee_replay.c: Disabled parts of the recording setup * libxnee/src/xnee_resource.c: Updated copyrighted years * libxnee/src/xnee_setget.c: Disregards argument to first-last * libxnee/src/xnee_window.c: Raised move window tries limit to 10 2007-09-11 Henrik Sandklef * gnee/src/main.c (main): Added new pixmap dir * gnee/gnee.glade: Changed icon name to xnee.xpm * configure.in: Rules for excluding library install, libtool stuff added * Makefile.cvs (generate): Added libtool stuff * libxnee/src/Makefile.am (install-exec-local): Rules for excluding library install * libxnee/src/xnee_buffer.c (xnee_replay_buffer_handler): Changed the verbose printout information slightly * libxnee/test/Makefile.am (libtest_LDADD): * cnee/src/Makefile.am (libtest_LDADD): * gnee/src/Makefile.am (libtest_LDADD): * pnee/src/Makefile.am (libtest_LDADD): Adding -static to linker to force static linking * libxnee/src/xnee_error.c (xnee_free_err_name): Changed name of fun: xnee_free_err_string ==> xnee_free_err_name * libxnee/src/print.c: Printout of XNEE_NO_SYNC_MODE_KEY, XNEE_SYNC_MODE_KEY XNEE_FIRST_LAST_KEY doesn't print value, uses # instead 2007-09-11 Henrik Sandklef * libxnee/src/xnee_resource.c (xnee_parse_option_impl): made parsing of XNEE_NO_SYNC_MODE_KEY, XNEE_SYNC_MODE_KEY XNEE_FIRST_LAST_KEY disregard arguments 2007-08-13 Henrik Sandklef * pnee/Makefile.am (install-exec-local): * pnee/src/Makefile.am (install-exec-local): target now respects DESTDIR 2007-08-13 Henrik Sandklef * libxnee/src/xnee_resource.c (xnee_parse_option_impl): typo fixed 2007-08-07 Henrik Sandklef * libxnee/src/xnee_resource.c (xnee_parse_option_impl): xnee_replay_offset ==> replay-offset 2007-07-30 Henrik Sandklef * libxnee/src/xnee_range.c (is_dangerous_xserver): Fix for X.org releases, recording of deliv events seem need a work around 2007-07-09 Henrik Sandklef * libxnee/src/print.c: Updated version printout according to new GNU standards. 2007-07-03 Henrik Sandklef * pnee/src/callbacks.c (PNEE_CHECK_CHAR_PTR): * gnee/src/gnee_xnee.c (GNEE_CHECK_CHAR_PTR): Added (and used) macro to check mem size to alloc 2007-07-02 Henrik Sandklef * gnee/src/callbacks.h: * gnee/src/callbacks.c: * gnee/src/interface.c: * pnee/src/callbacks.h: * pnee/src/callbacks.c: * pnee/src/interface.c: GPLv3 fixes, About->close works * configure.in: Defines function check_doc_program before usage 2007-06-30 Henrik Sandklef * : Upgrade to GPLv3 2007-06-18 Henrik Sandklef * Makefile.am (SUBDIRS): Added man dir to SUBDIRS * doc/Makefile.am: Adding xnee.pdf|ps|gtml|txt to EXTRA_DIST * configure.in: Docs are not built by default (Docs are shipped with the dist file instead) * cnee/src/cnee_printer.c: Updated copyright info printout * libxnee/src/xnee_range.c: Searching for X server verion fix * gnee/src/interface.c: * gnee/src/main.c: * gnee/src/callbacks.c: various picture fixes * pnee/man/pnee.1.in: * gnee/man/gnee.1.in: Updated copyright info * pnee/man/Makefile.am: * gnee/man/Makefile.am: Added CLEAN_FILES * man/Makefile.am: Building man page instead of static * man/xnee.1: Removed file 2007-06-15 Henrik Sandklef * configure.in: * man/Makefile.am: * man/xnee.1: Added basic man page for GNU Xnee for Debian distr. 2007-05-11 Henrik Sandklef * doc/xnee_faq.texi: Added more notes on xmodmap etc in FAQ 2007-05-05 Henrik Sandklef * configure.in: Added note on which deb makeinfo is located in for Ubuntu users 2007-04-16 * src/xnee_session.c Doing range adding later on, to include RECORD extension fix on correct display * src/xnee_utils.c Printing verbose printout to file instead of stderr" * src/xnee_record.c some debug stuff added and kept as non-in-use * src/xnee_range.c RECORD extension fix * src/xnee_expr.c * include/libxnee/xnee_utils.h moved to debug check to correct place * doc/xnee_faq.texi Note about remote replaying to different keyboard mapping 2007-04-12 * libxnee/src/xnee_keysym.c Fixes for strage Mode_switch ISO_Level3_Shift problem * libxnee/src/xnee_km.c Changed args to get_modifier_sub * libxnee/src/xnee_expr.c Added a memset * libxnee/src/xnee_fake.c added verbose printout 2006-11-25 * doc/xnee_intro.texi Added note on Xnee as a sniffer tool 2006-11-24 * doc/xnee_progs.texi Added info on intended users for the various programs 2006-11-24 * libxnee/src/xnee.c * libxnee/src/xnee_record.c Removed some debugging fprintf * gnee/man/Makefile.am * gnee/man/gnee.1.in * pnee/man/Makefile.am * pnee/man/gnee.1.in New files * pnee/Makefile.am * gnee/Makefile.am Including man dir in dist * configure.in Make Makefile in dir: pnee/man gnee/man * Makefile.am Added making of pnee and gnee man page when make man 2006-11-23 * doc/xnee.texi Fixed bad nodes * doc/Makefile.am Added xnee_progs.texi for inclusion in dist * libxnee/src/Makefile.am Added x11_files.h for inclusion in dist * libxnee/test/* Corrected tests for unsigned char instead of int * libxnee/include/libxnee/x11_files.h New file (for including X11 headers) * libxnee/include/libxnee/datastrings.h * libxnee/include/libxnee/xnee.h * libxnee/include/libxnee/xnee_buffer.h * libxnee/include/libxnee/xnee_fake.h * libxnee/include/libxnee/xnee_keysym.h * libxnee/include/libxnee/xnee_range.h * libxnee/include/libxnee/xnee_record.h * libxnee/include/libxnee/xnee_replay.h * libxnee/include/libxnee/xnee_resource.h * libxnee/include/libxnee/xnee_setget.h * libxnee/src/datastrings.c * libxnee/src/xnee.c * libxnee/src/xnee_buffer.c * libxnee/src/xnee_callback.c * libxnee/src/xnee_fake.c * libxnee/src/xnee_grab.c * libxnee/src/xnee_keysym.c * libxnee/src/xnee_range.c * libxnee/src/xnee_replay.c * libxnee/src/xnee_resource.c * libxnee/src/xnee_setget.c * libxnee/src/xnee_threshold.c * libxnee/src/xnee_time.c * libxnee/src/xnee_window.c Using 1 xnee file for X11 inclusion. set/get mode uses unsigned char 2006-11-22 * libxnee/src/xnee_fileop.c: * libxnee/include/libxnee/xnee_fileop.h: Added function, xnee_open_err_file, to open verbose file * doc/xnee_intro.texi: * doc/xnee_faq.texi: Added notes on gnee, pnee * doc/xnee.texi: Added chapter on Xnee programs 2006-11-21 * pnee/src/pnee_impl.c * pnee/src/pnee_impl.h: * pnee/src/pnee_types.h: Added code to handle reset on multiple stop presses 2006-11-21 * pnee/src/pnee_impl.[hc] Various fixes to make recording work again * libxnee/src/xnee.c Checking for XNEE_OK_LEAVE in loop * libxnee/src/xnee_record.c Making sure ret is set to XNEE_OK 2006-11-20 * pnee/pics/Makefile.am: Removed rules for files * doc/xnee_general.texi Note on stoping with Control-c added * src/xnee_utils.c * src/xnee_replay.c Parser error fixed * libxnee/src/print.c (xnee_store_mouse_pos): Fixed fprintf arguments in wrong order *libxnee/include/libxnee/datastrings.h *libxnee/include/libxnee/xnee.h *libxnee/include/libxnee/xnee_range.h *libxnee/include/libxnee/xnee_record.h *libxnee/include/libxnee/xnee_resource.h *libxnee/src/datastrings.c *libxnee/src/xnee.c *libxnee/src/xnee_range.c *libxnee/src/xnee_resource.c Added define NEED_REPLIES NEED_EVENTS before inclusion of Xproto.h 2006-11-19 Henrik Sandkklef * src/xnee_setget.c * src/xnee.c * include/libxnee/xnee_setget.h * include/libxnee/xnee.h * include/libxnee/xnee_internal.h Added code for syntax check * src/xnee_utils.c * src/xnee_resource.c * src/xnee_replay.c * src/xnee_range.c * src/xnee_expr.c Corrected fault when parsing files * src/xnee_error.c Corrected fault when parsing files * src/print.c Commented away things in recorded file that may break replay * include/libxnee/xnee_resource.h Corrected fault when parsing files * src/parse.c * src/cnee_demo.c Corrected fault when parsing files * include/parse.h Added code for syntax check 2006-11-09 * doc/xnee_exampl.texi: --out changed to --out-file 2006-11-08 * doc/gen_faq.sh: New file to generate FAQ from Manual * cnee/src/cnee_printer.c: Changed Xnee to cnee in cnee man/info pages * doc/xnee_start.texi: Replaced "--loops" with "--events-to-record" * libxnee/src/xnee_resource.c: --time is now a general option (not a record) minor text adjustment * cnee/src/main.c * cnee/src/parse.c Better handling of failed parsing 2006-10-07 Henrik Sandkklef * doc/xnee_faq.texi Minor change (better English) 2006-08-20 Henrik Sandkklef * src/print.c Added printout of delayed start time * src/interface.c * gnee.glade Added copyright notices, and temporary icon * pixmap/xnee.xpm Temp icon * src/interface.c * gnee.glade New logo name * pnee.glade * src/interface.c Copyright notices, logo added + various other stuff * src/pnee_impl.c * src/main.c * src/callbacks.c Copyright notices, logo added + various other stuff 2006-08-11 Henrik Sandkklef * src/xnee_expr.c Better handling of NEW-WINDOW mark * xnee_exampl.texi * xnee_faq.texi * xnee_install.texi * xnee_intro.texi * xnee_prot.texi * xnee.texi Adjusted faulty table layout. Added: gnee info. Updated FAQ. Replaced xkeymouse with xrebind 2006-06-29 Henrik Sandkklef * libxnee/src/xnee_setget.c Added function to save one xnee_data ptr * libxnee/src/xnee_setget.c Removed faulty code in X err handler * libxnee/src/xnee_session.c Removed faulty code in X err handler * libxnee/src/xnee_record.c Added handling of interrupt var * libxnee/src/xnee_grab.c Added X err handler to handle failed grabs * libxnee/src/xnee_error.c Added fault when Xnee is confused over grabs * libxnee/src/xnee_alloc.c Remembers newly allocated xd. Used in new funs in xnee_setget.c * libxnee/include/libxnee/xnee_setget.h Adjusted macros for handling interrupt var. Fun for reading stored xnee_data ptr * libxnee/include/libxnee/xnee_internal.h Added macro for silently checking err, and exit if nec. * libxnee/include/libxnee/xnee.h Added error when Xnee is confused over grabs * cnee/src/main.c using cnee's X err handler * pnee/* "Grab and ungrab works. Thread doesn't deadlock :) " 2006-06-27 * libxnee/src/print.c Adjusted printout * libxnee/src/Makefile.am Better installation handling * cnee/src/Makefile.am Better installation handling * src/cnee_strings.c Fixed help strings * pnee/src/Makefile.am Fixed sem lib while linking * sessions/Makefile.am * share/Makefile.am * examples/Makefile.am Adjusted install path * doc/Makefile.am Better installation handling * configure.in Better installation handling. Exits after failure.... 2006-06-26 * README.debian Build instructions for Debian 2006-06-25 * src/xnee_replay.c Added support to stop action using a variable * src/xnee_record.c Added support to stop action using a variable * include/libxnee/xnee_setget.h Added support to stop action using a variable * include/libxnee/xnee.h Added support to stop action using a variable * include/libxnee/xnee_grab.h Changed macro XNEE_VERBOSE_MARK to take no arg * pnee/ Splash before record/replay start 2006-06-21 * pnee/ A lot, still under heavy devel phase..... * libxnee/src/xnee_expr.c 0 --> XNEE_OK, when returning from fun * libxnee/include/libxnee/print.h New macro for printf debugging: XNEE_VERBOSE_MARK * libxnee/include/libxnee/xnee.h variable (replayed_events) to set/get nr of recorded/replayed events * libxnee/src/xnee_fake.c Using new macros to set/get nr of recorded/replayed events * libxnee/include/libxnee/xnee_setget.h New macros to set/get nr of recorded/replayed events * libxnee/src/xnee_grab.c * libxnee/include/libxnee/xnee_grab.h Added fun to read out grabbed keys * libxnee/src/xnee_record.c Preparing for reading of replayed events during replay * libxnee/src/xnee_setget.c * libxnee/src/xnee_session.c "Setting replayed events to 0" 2006-06-17 * build/test-dist.sh New file * libxnee/src/xnee_expr.c 0 replaced with XNEE_OK * configure.in: Preventing multiple generation of Makefiles Fixed errors in test exprs Updated version number to 2.05.90 * libxnee/test/libtest.c Recording more data 2006-06-17 Henrik Sandklef * pnee/* * configure.in Various changes to build pnee 2006-06-16 Henrik Sandklef * libxnee/src/xnee_grab.c Removed obsoleted code * libxnee/src/print_varargs.c Flush after verbose printout * pnee/src/callbacks.c * pnee/src/main.c Setting err printout file 2006-06-14 Henrik Sandklef * configure.in * Makefile.am * Makefile.cvs Support for Gnome Panel Applet * gnee/src/support.h * gnee/src/interface.h * gnee/src/interface.c * gnee/src/callbacks.c * gnee/gnee.glade Replace About window with new one 2006-05-30 Henrik Sandklef * README Corrected build documentation * gnee/src/callbacks.c * src/xnee_utils.c All decls after defs * doc/xnee_proto.texi * doc/xnee_example.texi Added doc for recall window position 2006-05-04 Henrik Sandklef * configure.in Added libxnee/test/Makefile for generation * doc/Makefile.am Better handling of various manual formats * cnee/src/cnee_demo.c Made printout look more nice * libxnee/Makefile.am Excluded libxnee.a from dist * Makefile.am Added libxnee/test to dist Added ChangeLog to dist Altered manual rule * libxnee/src/xnee_resource.c Deleted obsoleted code * libxnee/src/print.c Handles faulty input values * libxnee/src/xnee_replay.c Reintroduced calls to XSync * cnee/src/main.c Error handle handles correct error * cnee/src/parse.c Leaving cnee efter printed data (using --print-xxx) * cnee/test Various test script fixes 2006-04-07 Henrik Sandklef * cnee/src/cnee_printer.c Removed strings * pnee/Makefile.am Not building po dir * button share/xnee.sh.in1 Typo fix: buton -> * libxnee/src/xnee_display.c Copying returned str from getenv * libxnee/src/xnee_fileop.c Making sure not to close stdout/stderr * libxnee/src/xnee_grab.c Removed xnee_new_grab_keys(). Setting new grab keys in init * libxnee/src/xnee_record.c Removed call to XSynchronize * libxnee/src/xnee_resolution.c Moved funs to xnee_setget.c * libxnee/src/xnee_session.c Making sure not to close stdout/stderr * libxnee/src/xnee_setget.c some new funs. moved some funs to this file * libxnee/test/libtest.c Removed comments * libxnee/test/test_setget.c Restructured comments * libxnee/src/xnee_alloc.c Added checks when freeing mem * libxnee/src/print.c: Added null ptr check * libxnee/src/feedback.c: Minor updates * libxnee/include/libxnee/xnee_setget.h: Added new set/get funs Moved some funs to this file. * libxnee/include/libxnee/xnee_grab.h: Added xnee_data to: xnee_new_grab_keys * libxnee/include/libxnee/xnee_alloc.h: Removed header for xnee_new_data from here * libxnee/include/libxnee/xnee.h: Added header for xnee_new_data * cnee/src/parse.c: Implemented last unimplemented options with new xnee_option struct * cnee/src/cnee_printer.c: Removed strings : explain, examples description * cnee/src/cnee_fake.c: Added functions: xnee_type_help_sub, cnee_fake_string * cnee/src/Makefile.am (bin_PROGRAMS): Added cnee_demo.h * cnee/include/parse.h: Added option key contants (enum) * cnee/include/cnee_strings.h: * cnee/src/cnee_strings.c: Added strings : explain, examples description * Makefile.am: Added test rule 2006-03-01 * libxnee/src/xnee_session.c Removing verbose printouts * libxnee/src/xnee_resource.c Adding space in printout * libxnee/src/xnee_fileop.c Removing verbose printout * libxnee/src/print_varargs.c Make sure fd is OK before printing * cnee/src/parse.c Added body to cnee options: --texipage, --manpage * cnee/src/main.c Handling XNEE_OK_LEAVE after parse * cnee/src/Makefile.a texi_TEXINFOS * libxnee/include/libxnee/xnee_range.h Added xne_data as arg to xnee_rem_from_list * libxnee/include/libxnee/xnee_utils.h New funs: xnee_str2int xnee_boolstr2int xnee_free_strptr xnee_print_strptr xnee_str2strptr New macro: XNEE_ATOI_FUNCTION * libxnee/include/libxnee/xnee_threshold.h Moved set/get funs to xnee_setget.[hc] * libxnee/include/libxnee/xnee_strings.h New strings: XNEE_EMPTY_STRING XNEE_AUTHORS XNEE_XOSD_FONT * libxnee/include/libxnee/xnee_setget.h setget funs moved to this file * libxnee/include/libxnee/xnee_resource.h Removed obsoleted code. Rewrote code to fit new xnee_option_t struct. Moved setget funs to xnee_setget files * cnee/include/cnee_printer.h Removed includes. Added: xnee_flags * libxnee/src/xnee_utils.c New funs: xnee_str2int xnee_boolstr2int xnee_free_strptr xnee_print_strptr xnee_str2strptr * libxnee/src/xnee_threshold.c Minor indent fix * libxnee/src/xnee_strings.c Removed obsoleted strings. Minor adjustments * libxnee/src/xnee_setget.c setget funs moved to this file * libxnee/src/xnee_session.c Rewrote code to fit new xnee_option_t struct. * libxnee/src/xnee_resource.c * libxnee/src/xnee_replay.c Removed obsoleted code. Rewrote code to fit new xnee_option_t struct. Moved setget funs to xnee_setget files * libxnee/src/xnee_replay.c Removed obsoleted code * libxnee/src/xnee_record.c Added more info on CreatNotify printout * libxnee/src/xnee_range.c Rewrote to code fit new xnee_option struct * libxnee/src/xnee_expr.c Rewrote expr handling code to fit new xnee_option struct * libxnee/src/xnee_error.c new error: XNEE_OK_LEAVE * libxnee/src/xnee_display.c Added null ptr check * libxnee/src/xnee_alloc.c Added error/signal handlers to init xnee_dtaa code * libxnee/include/libxnee/xnee.h new enum bool_string_values. Added new xnee_options code * libxnee/src/feedback.c new fun: xnee_get_xosd_font_impl xnee_set_xosd_font_impl * libxnee/src/print.c New fun: xnee_print_xnee_data. Adjusted code to new xnee_option struct * libxnee/include/libxnee/print.h New fun: xnee_print_xnee_data * libxnee/include/libxnee/print.h New fun: xnee_get_xosd_font_impl * libxnee/include/libxnee/feedback.h New fun: xnee_get_xosd_font_impl * cnee/src/parse.h Added keys for cnee options * cnee/src/parse.c Changed print functions to new xnee_options struct * cnee/src/main.c Removed signal/error handlers to libxnee. * cnee/src/cnee_printer.c Changed print functions to new xnee_options struct * cnee/include/cnee_fake.h Removed includes. Added fun xnee_flags * cnee/include/cnee_strings.h Removed string constants 2006-03-06 * examples/Makefile.am: Bug fixes for handling generated example file * share/Makefile.am: Bug fixes for handling generated sample file * cnee/src/Makefile.am: Bug fixes for handling generated texinfo file 2006-03-02 Henrik Sandklef * gnee/src/callbacks.c: Added timeout to make the gnee window get iconified before replaying. 2006-02-28 Henrik Sandklef * libxnee/src/xnee_range.c: return XNEE_OK, instead of 0 * libxnee/src/xnee_alloc.c: Memory leak fixed * libxnee/src/xnee_fileop.c: Add verbose printout 2006-02-28 Henrik Sandklef * xnee/gnee/gnee.glade * xnee/gnee/src/callbacks.c * xnee/gnee/src/callbacks.h * xnee/gnee/src/gnee_xnee.c * xnee/gnee/src/gnee_xnee.h * xnee/gnee/src/interface.c * xnee/gnee/src/support.h Added support for 'window position adjustment' and 'x,y offset' 2006-02-27 Henrik Sandklef * libxnee/src/xnee_session.c: Reordered closing/freeing of file/mem due to mem leaks. * libxnee/src/xnee_replay.c: * libxnee/src/xnee_record.c: Removed XRecordGetContext check * libxnee/src/xnee_fileop.c (xnee_free_file): Rewrote closing of file and freeing og char * * libxnee/src/xnee_alloc.c: Added xnee_data when calling xnee_free_ranges * libxnee/src/xnee_range.c (xnee_free_ranges): * libxnee/include/libxnee/xnee_range.h: Added xnee_data as argument to xnee_free_ranges 2006-02-26 Henrik Sandklef * cnee/src/parse.c: Added new option: --recall-window-position, -rwp Removed option: --record-window-position, -rwp * libxnee/src/xnee_window.c: Rewrote parts of the new window pos code * libxnee/src/xnee_setget.c (xnee_unset_recall_window_pos): Added new functions: xnee_set_recall_window_pos (xnee_data *xd) xnee_unset_recall_window_pos (xnee_data *xd) * libxnee/src/xnee_resource.c (xnee_get_creat_date): Removed debug printouts * libxnee/src/xnee_replay.c: Added code to handle new window adjustment (or not). * libxnee/src/xnee_record.c: Removed faulty code, renamed get_screen_nr to xnee_get_screen_nr. Handling of ReparentNotify rewritten to fit this feature being moved to replay * libxnee/src/xnee_range.c: Handling of ReparentNotify rewritten to fit this feature being moved to replay * libxnee/src/xnee_expr.c: Added handling of new variables in: xnee_win_pos * libxnee/include/libxnee/xnee_window.h: Added: rel_y rel_x border_w border_h event parent name to xnee_win_pos * libxnee/include/libxnee/xnee_setget.h: Added functions: xnee_unset_recall_window_pos xnee_set_recall_window_pos (xnee_data *xd); * libxnee/include/libxnee/xnee.h (struct): Added variable recall_recorded_win_pos to xnee_data 2006-02-14 Henrik Sandklef * libxnee/src/xnee_strings.c: Added: XNEE_NEW_WINDOW_MARK, XNEE_NEW_WINDOW * libxnee/src/xnee_session.c (xnee_init): Store window pos (xd->xnee_info.store_window_pos) defaults to 0 * cnee/src/parse.c: Added new option: --record-window-position (-rwp) * libxnee/include/libxnee/xnee_window.h: New file * libxnee/include/libxnee/xnee_strings.h: Added: XNEE_NEW_WINDOW_MARK, XNEE_NEW_WINDOW * libxnee/include/libxnee/xnee_setget.h: Added functions: xnee_set_new_window_pos, xnee_unset_new_window_pos * libxnee/include/libxnee/xnee_range.h: Added function: xnee_is_type_nr_set * libxnee/include/libxnee/xnee_internal.h (XNEE_RETURN_VOID_IF_ERR): Macro now prints out err description * libxnee/include/libxnee/xnee.h: Added store_window_pos to xnee_record_init_data * libxnee/src/Makefile.am: Added: xnee_window.c ../include/libxnee/xnee_window.h * libxnee/src/xnee_window.c: New file * libxnee/src/xnee_resource.c: * libxnee/src/xnee_setget.c: * libxnee/src/xnee_replay.c: * libxnee/src/xnee_record.c: Added functions and code for new window pos. * libxnee/src/xnee_range.c (xnee_add_range_str): Added functions and code for new window pos. * libxnee/src/xnee_km.c: Corrected code for EXEC functionality. * libxnee/src/xnee_grab.c: Added inclusion of * libxnee/src/xnee_expr.c: Added functions and code for new window pos. Corrected code for EXEC functionality. * libxnee/src/xnee_error.c: Type fixed, Added error XNEE_WINDOW_POS_ADJ_ERROR * libxnee/src/print.c: Added window pos printout Re-added printout of exec-str 2006-01-21 * libxnee/src/xnee_expr.c: * libxnee/src/xnee_km.c (xnee_handle_rec_key): Added nr of execution to program executed by Xnee 2006-01-19 * cnee/src/Makefile.am (cnee.texi): Adding $(EXEEXT) to cnee (fix fow cygwin) 2006-01-17 Henrik Sandklef * libxnee/src/print.c: Prevent grabbing when replaying * doc/xnee_prot.texi: * doc/xnee_exampl.texi: Added text for replay offset * libxnee/include/libxnee/xnee.h: Added return value: XNEE_BAD_OFFSET * libxnee/src/xnee_error.c: Added error text on replay offset (x,y) * cnee/src/parse.c (xnee_parse_args): Removed faulty help text on grabbing keys Parsing of "--replay-offset" * libxnee/src/print.c (xnee_print_sys_info): Added program name (if any) printout to recorded file * libxnee/include/libxnee/print.h: New macros for verbose on function entry/inside/exit * libxnee/src/xnee_fake.c (xnee_fake_motion_event): Add support for X and Y offset during replay * libxnee/src/xnee_setget.c: New functions: xnee_set_replay_offset_str xnee_set_replay_offset_x xnee_set_replay_offset_y xnee_get_replay_offset_x xnee_get_replay_offset_y 2006-01-09 * Makefile.am (SUBDIRS): * configure.in: Added building of examples/Makefile sessions/Makefile * libxnee/src/Makefile.am: Added note on noinst_LIBRARIES that does NOT work * share/Makefile.am (XNEE_DATA_FILES): Moved examples and sessions dir to seperate Makefiles * examples/Makefile.am (simple_bash.sh): Added default paths to simple_bash.sh * session/Makefile.am: All files installs in share * examples/Makefile.am: All files installs in share * share/Makefile.am: Autogenerating xnee.sh with correct version number * configure.in: Adding finding of AWK and BASH 2006-01-08 Henrik Sandklef * doc/xnee_faq.texi: Changed faulty email addresses * cnee/src/Makefile.am : * cnee/src/parse.c: Added support for generating info page for cnee 2006-01-07 Henrik Sandklef * libxnee/include/libxnee/xnee.h: Added in_use to xnee_data * libxnee/src/xnee.c (xnee_start): Using in_use variable * libxnee/src/xnee_grab.c: Grabbing on ->grab instead of ->control Removed obsoleted code Added some { } * libxnee/src/xnee_record.c: removed obsoleted code * libxnee/src/xnee_record.c (xnee_record_dispatch): Using in_use variable 2006-01-07 Henrik Sandklef * libxnee/src/xnee_session.c (xnee_init): Using in_use variable * cnee/test/etc/base_funs: Added press_key_from_string * cnee/src/Makefile.am (cnee.1): Added (built from cnee) man page to man1_MANS 2005-12-31 Henrik Sandklef * doc/xnee_example.texi: Added info and example on how to use shell functions * xneetest/src: Added utils.c and utils.h 2005-12-30 Henrik Sandklef * share/xnee.sh: Added shell functions for button press/release 2005-12-29 Henrik Sandklef * configure.in, Makefile.am, share/Makefile.am: Added Examples and handy shell scripts added to dist share/xnee.sh examples/ * Makefile.xnee: updated to build gnee (not only libxnee and cnee) * libxnee/test/libtest.c: Rewrote some test code... sorry no more comments. * libxnee/test/Makefile: Removed xosd, altered include path * libxnee/include/libxnee/xnee_internal.h: Removed cast to (void) from XNEE_FREE macro * libxnee/Makefile.am : Removed Makefile.libxnee Makefile.cvs * include/libxnee/xnee_range.h: Renamed xnee_free_lists to xnee_free_ranges * libxnee/src/xnee_session.c: Added closing of displays * libxnee/src/xnee_range.c: Renamed xnee_free_lists to xnee_free_ranges Freed memory allocated for ranges * libxnee/src/xnee_alloc.c: Replaced xnee_free with XNEE_FREE_AND_NULL * libxnee/src/xnee_grab.c: Replaced xnee_free with XNEE_FREE_AND_NULL * libxnee/src/xnee_plugin.c: Replaced xnee_free with XNEE_FREE_AND_NULL * libxnee/src/xnee_display.c: Freed allocated modifier mapping * libxnee/src/Makefile.am: Added support for "-g" option to configure command * gnee/src/Makefile.am: Removed INTLLIBS * gnee/src/gnee_xnee.c: Added reading of grabbed key boxes and adding those keys to xnee_data 2005-12-08 Henrik Sandklef * gnee/src/interfaces.c * gnee/gnee.glade Changed info about gnee and Xnee in about box libxnee/src/print.c * Added year 2005 in printout 2005-12-06 Henrik Sandklef * gnee/src/main.c * gnee/src/gnee_xnee.c Added macro for program name (gnee) 2005-10-11 Henrik Sandklef * libxnee/src/xnee_buffer.c (xnee_replay_buffer_handler): Excluding device events from buffer handling in synchronisation * libxnee/src/xnee_fake.c (xnee_fake_motion_event): removed recalculation of screen resolution when distributiing events * libxnee/src/xnee_record.c (xnee_setup_recordext): Calling set_ranges before recording... * libxnee/src/xnee_display.c (xnee_add_display_list): Changed == to <= in if (disp_len <= 0) * gnee/src/main.c (main): program name set to XNEE_GUI * gnee/src/gnee_xnee.h: Added macro XNEE_GUI "gnee" * doc/xnee_exampl.texi: "--loops" replaced by "--events-to-record" 2005-09-15 Henrik Sandklef <> * libxnee/src/xnee_fileop.c (xnee_open_files): "Corrected parse error on "--err-file" 2005-09-14 Henrik Sandklef <> * configure.in (DOC_TARGETS, DOC_TARGETS): "Added checks for various binaries used when building manuals" "Added X_LIBS to LIBS" "Warns if progrs need by doc isn't found" 2005-09-13 Henrik Sandklef <> * gnee/src/*.[hc]: "Made sure copyright notice was present" 2005-08-18 Henrik Sandklef * libxnee/src/xnee_replay.c (xnee_replay_synchronize): "return;" replaced with "return ret;" xnee-3.19/build/0000775000000000000000000000000012332167175010464 500000000000000xnee-3.19/build/autobuild.sh0000775000000000000000000000072711316756756012753 00000000000000#!/bin/sh XNEE_OUTPUT_FILE=-xnee.txt XNEE_OUTPUT_FILE_H=xnee.html rm $XNEE_OUTPUT_FILE # make sure we're in the correct dir # ... well, it's not bullet proof if [ ! -f Makefile.cvs ] then echo "Make sure you're in the root dir" exit fi make clean ./configure --disable-gui --disable-gnome-applet > ${XNEE_OUTPUT_FILE} make check >> ${XNEE_OUTPUT_FILE} htmlize ${XNEE_OUTPUT_FILE}.html autobuild --verbose ${XNEE_OUTPUT_FILE}.html > ${XNEE_OUTPUT_FILE_H} xnee-3.19/Makefile.xnee0000775000000000000000000001107511715172360011706 00000000000000# # This is an unmaintained Makefile for the Xnee project # # ...... if you do not wish to use configure you can use # this one instead. You are on your own though :) # PACKAGE=\"\" VERSION=\"\" # # gnee uses config.h (copied from config.xnee) # CC=gcc #-Werror PEDANTIC_FLAGS = -W -Wall -pedantic \ -Wpointer-arith -Wcast-qual \ -Wstrict-prototypes -Wmissing-prototypes \ -Wmissing-declarations -Wmissing-noreturn \ -Wformat=2 -Wimplicit -Wmain \ -Wcomment -Wformat-nonliteral \ -Wmissing-braces -Wparentheses -Wreturn-type \ -Wswitch -Wunused -Wundef \ -Wbad-function-cast -Wcast-qual -Wcast-align \ -Wredundant-decls -Wnested-externs # -Wswitch-default -Wswitch-enum -Wendif-labels # -Werror LINT=splint LINT_TAR=Xnee-lint.tar ##XOSD_LIB=-lxosd XOSD_LIB= # These flags seem to break compilation due to cygwin # use on non-cygwin platform only #SEMI_FLAGS = \ # -pedantic-errors GUI_C_FLAGS= -I. -Ilibxnee/include -Ignee/src -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -g -DPACKAGE_DATA_DIR=\""/usr/local/share"\" -DPACKAGE_LOCALE_DIR=\""/usr/local//locale"\" -DXTHREADS -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/X11R6/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include GUI_LD_FLAGS= -L/usr/X11R6/lib -L. -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lfontconfig -lXrandr -lXext -lXcursor -lpango-1.0 -lXrender -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lxnee CFLAGS = -DPACKAGE=${PACKAGE} -DVERSION=${VERSION} -DHAVE_STDARG_H=1 \ -I/usr/X11R6/include -I./libxnee/include/ -Icnee/include -g \ ${PEDANTIC_FLAGS} LINTFLAGS = -DPACKAGE=${PACKAGE} -DVERSION=${VERSION} -DHAVE_STDARG_H=1 \ -I/usr/X11R6/include -I./libxnee/include/ -Ixnee/src \ -D__GNUC__ \ -warnposix -mustfreefresh -temptrans -compdef -mustfreeonly LDFLAGS = -L/usr/X11R6/lib -L./lib -L/usr/X/lib LIBS = -lX11 -lXext -lXtst -lpthread ${XOSD_LIB} CLI_SRC = cnee/src/parse.c cnee/src/main.c cnee/src/cnee_strings.c cnee/src/cnee_printer.c cnee/src/cnee_fake.c cnee/src/cnee_demo.c GUI_SRC = gnee/src/callbacks.c gnee/src/gnee_xnee.c gnee/src/interface.c gnee/src/main.c gnee/src/recordables.c gnee/src/support.c COMM_SRC = libxnee/src/datastrings.c \ libxnee/src/feedback.c \ libxnee/src/print.c \ libxnee/src/print_varargs.c \ libxnee/src/xnee.c \ libxnee/src/xnee_buffer.c \ libxnee/src/xnee_callback.c \ libxnee/src/xnee_dl.c \ libxnee/src/xnee_error.c \ libxnee/src/xnee_expr.c \ libxnee/src/xnee_fake.c \ libxnee/src/xnee_grab.c \ libxnee/src/xnee_km.c \ libxnee/src/xnee_range.c \ libxnee/src/xnee_record.c \ libxnee/src/xnee_replay.c \ libxnee/src/xnee_resolution.c \ libxnee/src/xnee_resource.c \ libxnee/src/xnee_sem.c \ libxnee/src/xnee_setget.c \ libxnee/src/xnee_threshold.c \ libxnee/src/xnee_time.c \ libxnee/src/xnee_utils.c \ libxnee/src/xnee_keysym.c \ libxnee/src/xnee_strings.c \ libxnee/src/xnee_display.c \ libxnee/src/xnee_alloc.c \ libxnee/src/xnee_session.c \ libxnee/src/xnee_fileop.c \ libxnee/src/xnee_plugin.c \ libxnee/src/xnee_settings.c \ libxnee/src/xnee_window.c CLI_OBJS := $(CLI_SRC:%.c=%.o) #GUI_OBJS := $(GUI_SRC:%.c=%.o) COMM_OBJS := $(COMM_SRC:%.c=%.o) CLI_LINT := $(CLI_SRC:%.c=%.lint) COMM_LINT := $(COMM_SRC:%.c=%.lint) ${COMM_OBJS}: Makefile.xnee OBJS = ${COMM_OBJS} .c.o: ${CC} -g ${CFLAGS} -c $< -o $@ .c.lint: @echo "Doing lint...: ${LINT} $< to $@" -${LINT} ${LINTFLAGS} $< > $@ XNEELIB = libxnee.a XNEE_CLI= cnee/src/cnee XNEE_GUI= gnee/src/gnee all: config ${XNEE_CLI} ${XNEE_GUI} rm config.h clean: \rm -fr ${OBJS} ${CLI_OBJS} ${GUI_OBJS} ${XNEE_CLI} ${XNEE_GUI} ${XNEELIB} src/*/*~ *~ src/*/*.o */a.out core lib : ${XNEELIB} ${XNEELIB}: ${OBJS} ${COMM_OBJS} ar -rv ${XNEELIB} ${OBJS} cli : ${XNEE_CLI} gui : ${XNEE_GUI} bin : cli gui bin2 : ${XNEE_CLI} ${XNEE_GUI} ${XNEE_CLI}: ${XNEELIB} ${CLI_OBJS} ${CC} -o ${XNEE_CLI} ${CLI_OBJS} ${LDFLAGS} ${LIBS} -L./ -lxnee ${LIBS} config: cp config.xnee config.h #${XNEE_GUI}: ${XNEELIB} ${GUI_OBJS} ${XNEE_GUI}: ${GUI_OBJS} config.h ${CC} -o ${XNEE_GUI} ${GUI_C_FLAGS} ${GUI_SRC} ${GUI_LD_FLAGS} ${LIBS} lintsave: ${COMM_LINT} ${CLI_LINT} tar cvf ${LINT_TAR} ${COMM_LINT} ${CLI_LINT} gzip ${LINT_TAR} @echo "Created ${LINT_TAR}.gz" lint: ${COMM_SRC} ${CLI_SRC} @echo " ${LINT} $< " -${LINT} ${LINTFLAGS} $< xnee-3.19/README.debian0000664000000000000000000000034110447720664011407 00000000000000To compile for Debian (Debian based distros (e.g Ubuntu)) don't forget to set the prefix during configure. Otherwise pnee (Gnome Panel Applet) will not be started. Example: ./configure --enable-gnome-applet --prefix=/usr xnee-3.19/sessions/0000775000000000000000000000000012332167177011235 500000000000000xnee-3.19/sessions/Makefile.am0000664000000000000000000000021510450243006013170 00000000000000XNEE_DATA_FILES = example1.xns EXTRA_DIST = $(XNEE_DATA_FILES) pkgdata_DATA = $(XNEE_DATA_FILES) pkgdatadir=$(datadir)/xnee/ example1.xns: xnee-3.19/sessions/example1.xns0000664000000000000000000001624407725443576013444 00000000000000##### Xnee ######## # # # This file is generated by Xnee and for use by Xnee # If you know what you do.... edit it ;) # # # Date: 2002:11:26 # Time: 01:05:24 # Xnee version: 0.9 # Xnee home: http://xnee.sourceforge.net/ # Xnee mail: xnee@sandklef.com # X version: 11 # X revision: 0 # X vendor: The XFree86 Project, Inc # X vendor release: 40201000 # Record version major: 1 # Record version minor: 13 # OS name: Linux # OS Release: 2.2.20-idepci # OS Version: #1 Sat Apr 20 12:45:19 EST 2002 # Machine: i686 # Nodename: laphroaig # Display name: :0.0 # Dimension: 1600x1200 # Xnee settings # ------------- # all_events: 0 # everything: 0 # loops_left: 300 # no_expose: 0 # stop_key: 0,0 # last_motion: 0 # first_last: 0 # out_file: first.xnr # err_file: stderr # ProgramName: xnee # Version: 0.9 # DisplayName: :0.0 # Nr of recorded data: 300 # Record Setting # data_flags 7 # rState 134584744 # xids[0] 20971520 # xids[1] 23068672 # Number of Ranges 1 # RecordRange[0] # core_requests: 0-0 # reply: 0-0 # ext_requests.ext_major: 0-0 # ext_requests.ext_minor: 0-0 # ext_replies.ext_major: 0-0 # ext_replies.ext_minor: 0-0 # delivered_event: 0-0 # device_event: 2-3 # error: 0-0 0,3,0,0,0,36,0,3182006056 0,2,0,0,0,54,0,3182007210 0,2,0,0,0,38,0,3182007319 0,3,0,0,0,54,0,3182007421 0,2,0,0,0,28,0,3182007427 0,2,0,0,0,65,0,3182007526 0,3,0,0,0,38,0,3182007536 0,3,0,0,0,28,0,3182007573 0,3,0,0,0,65,0,3182007645 0,2,0,0,0,50,0,3182007685 0,2,0,0,0,94,0,3182007795 0,2,0,0,0,65,0,3182007925 0,3,0,0,0,94,0,3182007965 0,3,0,0,0,65,0,3182008026 0,3,0,0,0,50,0,3182008646 0,2,0,0,0,28,0,3182009705 0,3,0,0,0,28,0,3182009792 0,2,0,0,0,26,0,3182009815 0,3,0,0,0,26,0,3182009916 0,2,0,0,0,39,0,3182010018 0,2,0,0,0,28,0,3182010104 0,3,0,0,0,39,0,3182010140 0,3,0,0,0,28,0,3182010166 0,2,0,0,0,41,0,3182010325 0,3,0,0,0,41,0,3182010435 0,2,0,0,0,31,0,3182010449 0,2,0,0,0,46,0,3182010494 0,3,0,0,0,31,0,3182010551 0,2,0,0,0,26,0,3182010602 0,3,0,0,0,46,0,3182010611 0,3,0,0,0,26,0,3182010697 0,2,0,0,0,60,0,3182010812 0,3,0,0,0,60,0,3182010936 0,2,0,0,0,28,0,3182011351 0,3,0,0,0,28,0,3182011433 0,2,0,0,0,53,0,3182011443 0,2,0,0,0,28,0,3182011525 0,3,0,0,0,53,0,3182011572 0,3,0,0,0,28,0,3182011607 0,2,0,0,0,36,0,3182011913 0,3,0,0,0,36,0,3182012023 0,2,0,0,0,50,0,3182012364 0,2,0,0,0,43,0,3182012699 0,2,0,0,0,31,0,3182012791 0,3,0,0,0,43,0,3182012840 0,3,0,0,0,31,0,3182012877 0,2,0,0,0,10,0,3182013111 0,3,0,0,0,10,0,3182013228 0,3,0,0,0,50,0,3182013300 0,2,0,0,0,36,0,3182013384 0,3,0,0,0,36,0,3182013475 0,2,0,0,0,36,0,3182013560 0,3,0,0,0,36,0,3182013674 0,2,0,0,0,50,0,3182013815 0,2,0,0,0,28,0,3182014203 0,3,0,0,0,28,0,3182014270 0,3,0,0,0,50,0,3182014365 0,2,0,0,0,43,0,3182014467 0,2,0,0,0,31,0,3182014548 0,3,0,0,0,43,0,3182014615 0,2,0,0,0,39,0,3182014649 0,3,0,0,0,31,0,3182014667 0,3,0,0,0,39,0,3182014777 0,2,0,0,0,65,0,3182014783 0,3,0,0,0,65,0,3182014864 0,2,0,0,0,26,0,3182015127 0,3,0,0,0,26,0,3182015232 0,2,0,0,0,22,0,3182015826 0,3,0,0,0,22,0,3182015917 0,2,0,0,0,58,0,3182016224 0,3,0,0,0,58,0,3182016329 0,2,0,0,0,26,0,3182016344 0,3,0,0,0,26,0,3182016421 0,2,0,0,0,39,0,3182016549 0,3,0,0,0,39,0,3182016621 0,2,0,0,0,39,0,3182016706 0,3,0,0,0,39,0,3182016806 0,2,0,0,0,38,0,3182016886 0,3,0,0,0,38,0,3182017010 0,2,0,0,0,42,0,3182017020 0,3,0,0,0,42,0,3182017107 0,2,0,0,0,26,0,3182017157 0,2,0,0,0,65,0,3182017247 0,3,0,0,0,26,0,3182017279 0,3,0,0,0,65,0,3182017342 0,2,0,0,0,25,0,3182017496 0,2,0,0,0,31,0,3182017623 0,3,0,0,0,25,0,3182017642 0,3,0,0,0,31,0,3182017695 0,2,0,0,0,46,0,3182017832 0,3,0,0,0,46,0,3182017904 0,2,0,0,0,46,0,3182017989 0,2,0,0,0,65,0,3182018047 0,3,0,0,0,46,0,3182018094 0,3,0,0,0,65,0,3182018152 0,2,0,0,0,56,0,3182018311 0,2,0,0,0,26,0,3182018382 0,3,0,0,0,56,0,3182018410 0,3,0,0,0,26,0,3182018477 0,2,0,0,0,65,0,3182018505 0,3,0,0,0,65,0,3182018592 0,2,0,0,0,39,0,3182018676 0,3,0,0,0,39,0,3182018791 0,2,0,0,0,28,0,3182018910 0,3,0,0,0,28,0,3182019024 0,2,0,0,0,32,0,3182019052 0,3,0,0,0,32,0,3182019153 0,2,0,0,0,27,0,3182019237 0,3,0,0,0,27,0,3182019351 0,2,0,0,0,26,0,3182019501 0,2,0,0,0,40,0,3182019619 0,3,0,0,0,26,0,3182019708 0,2,0,0,0,65,0,3182019778 0,3,0,0,0,40,0,3182019792 0,3,0,0,0,65,0,3182019901 0,2,0,0,0,31,0,3182020125 0,2,0,0,0,57,0,3182020229 0,3,0,0,0,31,0,3182020311 0,3,0,0,0,57,0,3182020355 0,2,0,0,0,65,0,3182020575 0,3,0,0,0,65,0,3182020684 0,2,0,0,0,28,0,3182020730 0,3,0,0,0,28,0,3182020816 0,2,0,0,0,43,0,3182020857 0,3,0,0,0,43,0,3182020939 0,2,0,0,0,26,0,3182020980 0,2,0,0,0,65,0,3182021075 0,3,0,0,0,26,0,3182021107 0,3,0,0,0,65,0,3182021175 0,2,0,0,0,41,0,3182021281 0,2,0,0,0,31,0,3182021352 0,3,0,0,0,41,0,3182021366 0,2,0,0,0,46,0,3182021409 0,3,0,0,0,31,0,3182021476 0,3,0,0,0,46,0,3182021539 0,2,0,0,0,26,0,3182021545 0,3,0,0,0,26,0,3182021664 0,2,0,0,0,65,0,3182021679 0,3,0,0,0,65,0,3182021784 0,2,0,0,0,28,0,3182022796 0,3,0,0,0,28,0,3182022887 0,2,0,0,0,26,0,3182022897 0,3,0,0,0,26,0,3182022979 0,2,0,0,0,39,0,3182023090 0,2,0,0,0,28,0,3182023162 0,3,0,0,0,39,0,3182023199 0,3,0,0,0,28,0,3182023243 0,2,0,0,0,41,0,3182023354 0,3,0,0,0,41,0,3182023440 0,2,0,0,0,31,0,3182023481 0,2,0,0,0,46,0,3182023539 0,3,0,0,0,31,0,3182023596 0,2,0,0,0,26,0,3182023643 0,3,0,0,0,46,0,3182023657 0,3,0,0,0,26,0,3182023748 0,2,0,0,0,60,0,3182023828 0,3,0,0,0,60,0,3182023928 0,2,0,0,0,28,0,3182024235 0,3,0,0,0,28,0,3182024321 0,2,0,0,0,53,0,3182024375 0,2,0,0,0,28,0,3182024443 0,3,0,0,0,53,0,3182024485 0,3,0,0,0,28,0,3182024524 0,2,0,0,0,36,0,3182024766 0,3,0,0,0,36,0,3182024875 0,2,0,0,0,36,0,3182024951 0,3,0,0,0,36,0,3182025047 0,2,0,0,0,36,0,3182025123 0,3,0,0,0,36,0,3182025228 0,2,0,0,0,50,0,3182025730 0,2,0,0,0,56,0,3182026015 0,3,0,0,0,56,0,3182026116 0,3,0,0,0,50,0,3182026147 0,2,0,0,0,26,0,3182026288 0,3,0,0,0,26,0,3182026421 0,2,0,0,0,39,0,3182026536 0,2,0,0,0,28,0,3182026630 0,3,0,0,0,39,0,3182026653 0,3,0,0,0,28,0,3182026730 0,2,0,0,0,65,0,3182026802 0,3,0,0,0,65,0,3182026906 0,2,0,0,0,27,0,3182027074 0,2,0,0,0,26,0,3182027155 0,3,0,0,0,27,0,3182027197 0,3,0,0,0,26,0,3182027232 0,2,0,0,0,42,0,3182027382 0,3,0,0,0,42,0,3182027468 0,2,0,0,0,38,0,3182027518 0,3,0,0,0,38,0,3182027628 0,2,0,0,0,27,0,3182027638 0,2,0,0,0,40,0,3182027678 0,3,0,0,0,27,0,3182027735 0,3,0,0,0,40,0,3182027774 0,2,0,0,0,39,0,3182027828 0,3,0,0,0,39,0,3182027933 0,2,0,0,0,59,0,3182028392 0,2,0,0,0,65,0,3182028487 0,3,0,0,0,59,0,3182028549 0,3,0,0,0,65,0,3182028607 0,2,0,0,0,50,0,3182028635 0,2,0,0,0,43,0,3182028809 0,3,0,0,0,43,0,3182028899 0,3,0,0,0,50,0,3182028912 0,2,0,0,0,26,0,3182028988 0,2,0,0,0,57,0,3182029060 0,3,0,0,0,26,0,3182029092 0,3,0,0,0,57,0,3182029155 0,2,0,0,0,27,0,3182029209 0,3,0,0,0,27,0,3182029301 0,2,0,0,0,31,0,3182029307 0,3,0,0,0,31,0,3182029384 0,2,0,0,0,45,0,3182029503 0,3,0,0,0,45,0,3182029580 0,2,0,0,0,36,0,3182030662 0,3,0,0,0,36,0,3182030762 0,2,0,0,0,36,0,3182030986 0,3,0,0,0,36,0,3182031110 0,2,0,0,0,37,0,3182031172 0,2,0,0,0,40,0,3182031590 0,3,0,0,0,40,0,3182031692 xnee-3.19/sessions/Makefile.in0000664000000000000000000003503712332167124013222 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)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = sessions DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = $(datadir)/xnee/ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ XNEE_DATA_FILES = example1.xns EXTRA_DIST = $(XNEE_DATA_FILES) pkgdata_DATA = $(XNEE_DATA_FILES) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sessions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu sessions/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgdataDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-pkgdataDATA example1.xns: # 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: xnee-3.19/aclocal.m40000664000000000000000000126263712332167122011156 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'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # 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])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # 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_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # 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 ]) # -*- Autoconf -*- # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # # 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. AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl AC_CONFIG_HEADERS($@)]) AC_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should simply use the 'AC][_PROG_CC' macro instead. Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', but upon 'ac_cv_prog_cc_stdc'.])]) AC_DEFUN([AM_C_PROTOTYPES], [AC_FATAL([automatic de-ANSI-fication support has been removed])]) AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # 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 xnee-3.19/libxnee/0000775000000000000000000000000012332167175011013 500000000000000xnee-3.19/libxnee/src/0000775000000000000000000000000012332167175011602 500000000000000xnee-3.19/libxnee/src/Makefile.am0000664000000000000000000000744211531022346013553 00000000000000AUTOMAKE_OPTIONS = gnu LIBXNEE_H_FILES=../include/libxnee/xnee.h \ ../include/libxnee/print.h \ ../include/libxnee/xnee_error.h \ ../include/libxnee/print_varargs.h \ ../include/libxnee/xnee_record.h \ ../include/libxnee/xnee_replay.h \ ../include/libxnee/datastrings.h \ ../include/libxnee/xnee_sem.h \ ../include/libxnee/xnee_dl.h \ ../include/libxnee/xnee_setget.h \ ../include/libxnee/xnee_resolution.h \ ../include/libxnee/xnee_resource.h \ ../include/libxnee/xnee_time.h \ ../include/libxnee/xnee_km.h \ ../include/libxnee/xnee_callback.h \ ../include/libxnee/xnee_buffer.h \ ../include/libxnee/xnee_fake.h \ ../include/libxnee/xnee_grab.h \ ../include/libxnee/xnee_threshold.h \ ../include/libxnee/xnee_range.h \ ../include/libxnee/xnee_expr.h \ ../include/libxnee/xnee_keysym.h \ ../include/libxnee/xnee_strings.h \ ../include/libxnee/xnee_session.h \ ../include/libxnee/xnee_utils.h \ ../include/libxnee/xnee_alloc.h \ ../include/libxnee/xnee_fileop.h \ ../include/libxnee/xnee_display.h \ ../include/libxnee/xnee_settings.h \ ../include/libxnee/xnee_plugin.h \ ../include/libxnee/xnee_internal.h \ ../include/libxnee/xnee_window.h \ ../include/libxnee/x11_files.h \ ../include/libxnee/feedback.h \ ../include/libxnee/xnee_xinput.h LIB_XNEE_SOURCE_FILES = xnee.c \ print.c \ print_varargs.c \ xnee_record.c \ xnee_replay.c \ datastrings.c \ xnee_sem.c \ xnee_dl.c \ xnee_setget.c \ xnee_resolution.c \ xnee_fake.c \ xnee_km.c \ xnee_grab.c \ xnee_resource.c \ xnee_time.c \ xnee_callback.c \ xnee_buffer.c \ xnee_threshold.c \ xnee_range.c \ xnee_expr.c \ xnee_error.c \ xnee_keysym.c \ xnee_strings.c \ xnee_session.c \ xnee_utils.c \ xnee_alloc.c \ xnee_fileop.c \ xnee_display.c \ xnee_settings.c \ xnee_plugin.c \ xnee_window.c \ feedback.c \ xnee_xinput.c \ $(LIBXNEE_H_FILES) libxnee_la_SOURCES = $(LIB_XNEE_SOURCE_FILES) EXTRA_LTLIBRARIES = libxnee.la lib_LTLIBRARIES = $(WANTED_LIBXNEE) libxnee_la_LDFLAGS = -rpath '$(libdir)' #dnl libxnee_la_SOURCES = $(LIB_XNEE_SOURCE_FILES) libxnee_a_CFLAGS = $(AM_CFLAGS) #noinst_LIBRARIES = libxnee.a noinst_LTLIBRARIES = $(WANTED_LIBXNEE) if VERBOSE VERBOSE_FLAG = -DUSE_VERBOSE else VERBOSE_FLAG = -DNO_VERBOSE endif if GCOV GCOV_FLAG = -fprofile-arcs -ftest-coverage -g else GCOV_FLAG = endif if GPROF GPROF_FLAG = -pg -g else GPROF_FLAG = endif if XOSD XOSD_FLAGS = -DHAVE_XOSD else XOSD_FLAGS = -DNO_XOSD endif if BUF_VERBOSE BUF_VERBOSE_FLAG = -DUSE_BUF_VERBOSE else BUF_VERBOSE_FLAG = -DNO_BUF_VERBOSE endif if PEDANTIC PEDANTIC_FLAGS = -W -Wall -pedantic -pedantic-errors -Werror -fno-strict-aliasing -Wno-unused-parameter else PEDANTIC_FLAGS = endif if XNEE_XINPUT_SUPPORT XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT else XNEE_XINPUT_SUPPORT_FLAGS = endif if NOT_INSTALL_LIBS install-exec-local: echo " ... not installing libs" install: else install-exec-local: echo " ... installing libs" endif AM_CFLAGS = -I../include ${X_CFLAGS} ${PEDANTIC_FLAGS} -g ${VERBOSE_FLAG} ${GCOV_FLAG} ${GPROF_FLAG} ${BUF_VERBOSE_FLAG} ${XOSD_FLAGS} ${DEBUG_FLAGS} ${XNEE_XINPUT_SUPPORT_FLAGS} HTML_SRC_FILES = $(libxnee_a_SOURCES:%.c=%.c.html) HTML_INC_FILES = $(LIBXNEE_H_FILES:%.h=%.h.html) %.c.html:%.c $(SRC_HIGHLIGHT) -f html -n --line-number-ref -d -t "$<" -H header.html $< %.h.html:%.h $(SRC_HIGHLIGHT) -f html -n --line-number-ref -d -t "$<" -H header.html $< #${HTML_SRC_FILES}: # $(SRC_HIGHLIGHT) -f html -n --line-number-ref -d -t "$<" -H header.html $< devel-doc-inc: ${HTML_INC_FILES} cp ${HTML_INC_FILES} ../../src-html/libxnee/include/libxnee devel-doc-src: ${HTML_SRC_FILES} cp ${HTML_SRC_FILES} ../../src-html/libxnee/src testnames: echo "HTML_INC_FILES=${HTML_INC_FILES}" devel-doc: devel-doc-src devel-doc-inc xnee-3.19/libxnee/src/xnee_resource.c0000664000000000000000000011171312332105711014524 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000-2010, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #include #include #include #include #include #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_range.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_expr.h" #include "libxnee/xnee_alloc.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_display.h" #include "libxnee/print.h" #define INC_ARGS_USED(a, str) if(str!=NULL) a=1; else a=0; int xnee_option2id(xnee_data *xd, xnee_option_t *options, const char *str, int syntax_type); static xnee_option_t xnee_options_impl[] = { /* * Key * long option * short option * arg description * description * type of option (record/replay,general ... */ { XNEE_ERR_FILE_KEY, "err-file", "e", "", "Redirect all Xnee verbose output file_name" "(default is stderr)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_OUT_FILE_KEY, "out-file", "o", "", "Redirect all Xnee data to file_name" "(default is stdout)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_DISPLAY_KEY, "display", "d", "", "X server to contact (default is localhost)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_DIMENSION_KEY, "Dimension", NULL, "", "Dimension when recorded", XNEE_INTERNAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_LOOPS_KEY, "loops-left", NULL, "", "Nr of events to record (obsolete)", XNEE_OBSOLETE_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_FIRST_LAST_KEY, "first-last", NULL, NULL, "Print only first and last of multiple successive" " MotionEvent", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_ALL_EVENTS_KEY, "all-events", NULL, NULL, "Intercept all events", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_ALL_CLIENTS_KEY, "all-clients", "ac", NULL, "Record all client's data (default)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_FUTURE_CLIENTS_KEY, "future-clients", NULL, NULL, "Record future client's data", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_EVENT_MAX_KEY, "events-to-record", "etr", "", "Intercept n numbers of events ( n<0 means forever)", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_DATA_MAX_KEY, "data-to-record", "dtr", "", "Intercept n numbers of data ( n<0 means forever)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_TIME_MAX_KEY, "seconds-to-record", "str", "", "Intercept for n seconds ( n<0 means forever)" , XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_STOP_KEY_KEY, "stop-key", "sk", "", "When pressing key Xnee exits", XNEE_GRAB_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_PAUSE_KEY_KEY, "pause-key", "pk", "", "When pressing key Xnee pauses its current action", XNEE_GRAB_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RESUME_KEY_KEY, "resume-key", "rk", "", "When pressing key Xnee resumes its paused action", XNEE_GRAB_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_INSERT_KEY_KEY, "insert-key", "ik", "", "When pressing key Xnee inserts a META mark" "in the session file" , XNEE_GRAB_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_EXEC_KEY_KEY, "exec-key", "ek", "", "When pressing modifier mod and key key Xnee inserts " "an exec mark into the session file" , XNEE_GRAB_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_EXEC_PROGRAM_KEY, "exec-program-key", "ep", "", "Program to start when pressing the grabbed exec key", XNEE_GRAB_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_DELAY_TIME_KEY, "time", "t", "", "Delay start of application for seconds. Can be " "used to prevent recording of KeyRelease when starting " "Xnee from terminal", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_SPEED_PERCENT_KEY, "speed-percent", "sp", "", "Set replaying speed percentage is set to speed", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RECORDED_RESOLUTION_KEY, "recorded-resolution", NULL, "", "Resolution to use when recording is set to res", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_REPLAY_RESOLUTION_KEY, "replay-resolution", NULL, "", "Resolution to use when replaying is set to res", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_ADJUST_RESOLUTION_KEY, "resolution-adjustment", NULL, NULL, "Use resolution adjustment", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RECORD_OPTION_KEY, "record", "rec", NULL, "Set recording mode" , XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_REPLAY_OPTION_KEY, "replay", "rep", NULL, "Set replaying mode" , XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_DISTRIBUTE_KEY, "distribute", "di", "", "Distribute recorded or replayed events to LIST where" " LIST is comma separated list of displays", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_SYNC_MODE_KEY, "synchronised-replay", NULL, NULL, "Synchronise during replay", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_NO_SYNC_MODE_KEY, "no-synchronise", "ns", NULL, "Don't use synchornisation during replay", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_FUTURE_CLIENTS_KEY, "future-clients", "fc", NULL, "Record future client's data (default)", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RECALL_WINDOW_POS_KEY, "recall-window-position", "rwp", NULL, "Recall the recorded window position to be used" " during replay", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_HUMAN_PRINTOUT_KEY, "human-printout", "hp", NULL, "Prints human readable", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_FORCE_REPLAY_KEY, "force-replay", "fp", NULL, "Keep replaying even if we are out of sync" " .... dangerous", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_PLUGIN_KEY, "plugin", "p", "", "Set request range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_REPLY_STR_KEY, "reply-range", "repra", "", "Set reply range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_DEVICE_EVENT_STR_KEY, "device-event-range", "devera", "", "Set device event range to X_LIST", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_DELIVERED_EVENT_STR_KEY, "delivered-event-range", "devra", "", "Set delivered event range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_ERROR_STR_KEY, "error-range", "erra", "", "Set error range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_EXT_REQ_MAJ_STR_KEY, "extension-request-major-range", "erqmar", "", "Set extension request major range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_EXT_REQ_MIN_STR_KEY, "extension-request-minor-range", "erqmir", "", "Set extension request minor range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_EXT_REP_MAJ_STR_KEY, "extension-reply-major-range", "erpmar", "", "Set extension reply major range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_EXT_REP_MIN_STR_KEY, "extension-reply-minor-range", "erpmir", "", "Set extension reply minor range to X_LIST", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_MAX_THRESHOLD_KEY, "max-threshold", "mat", "", "Set the maximum threshold for sync to nr", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_MIN_THRESHOLD_KEY, "min-threshold", "mit", "", "Set the minimum threshold for sync to tnr", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_TOT_THRESHOLD_KEY, "tot-threshold", "tot", "", "Set the total threshold for sync to nr", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_REPLAY_OFFSET_KEY, "replay-offset", "ro", "", "Set the replay offset to (x,y)", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_KEEP_AUTOREPEAT, "keep-autorepeat", "ka", NULL, "Keep autorepeat during record/replay", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RETYPE_PRESS_DELAY, "retype-press-delay", "rpd", NULL, "Delay (in milli seconds) after faked key press when retyping file ", XNEE_RETYPE_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RETYPE_RELEASE_DELAY, "retype-release-delay", "rrd", NULL, "Delay (in milli seconds) after faked key release when retyping file ", XNEE_RETYPE_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_NO_REPARENT_RECORD, "no-reparent-recording", "nrr", NULL, "Prevent explicit recording of ReparentNotify event", XNEE_GENERAL_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_MAX_WINDOW_MOVES, "max-window-moves", "mwm", NULL, "Maximum times Xnee will try to move a window to the position it was in when recorded", XNEE_REPLAY_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RECORD_FROM_DATA_DISPLAY, "record-from-data-display", "rfdd", NULL, "Record from data display. This option is experimental.", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_RECORD_FROM_CONTROL_DISPLAY, "record-from-control-display", "rfcd", NULL, "Record from control display. This option is experimental.", XNEE_RECORD_OPTION, XNEE_OPTION_VISIBLE }, { XNEE_LAST_OPTION, NULL, NULL, NULL, NULL, XNEE_LAST_OPTION, XNEE_LAST_OPTION } } ; xnee_option_t *xnee_options = xnee_options_impl; int xnee_free_xnee_resource_meta(xnee_resource_meta* xrm) { xrm->new_project = 0; XNEE_FREE_AND_NULL (xrm->project_name); XNEE_FREE_AND_NULL (xrm->project_descr); XNEE_FREE_AND_NULL (xrm->creat_date); XNEE_FREE_AND_NULL (xrm->creat_prog); XNEE_FREE_AND_NULL (xrm->creat_prog_vers); XNEE_FREE_AND_NULL (xrm->last_date); XNEE_FREE_AND_NULL (xrm->last_prog); XNEE_FREE_AND_NULL (xrm->last_prog_vers); XNEE_FREE_AND_NULL (xrm->author_name); XNEE_FREE_AND_NULL (xrm->author_email); return XNEE_OK; } /************************************************************** * * * xnee_handle_resource_meta * * * * * **************************************************************/ int xnee_handle_resource_meta (xnee_data *xd, char *meta_str) { char *tmp = meta_str; char *value; int len; len = strlen (tmp); if ( len <= 2) { xnee_verbose ((xd,"skipping meta data: \"%s\" \n", tmp)); return XNEE_OK; } else tmp++; if (len>0) XNEE_REMOVE_BEGINING_BLANKS(tmp); value=strstr (tmp, ":"); if (value==NULL) return XNEE_OK; value += 1 ; if (strlen(value)>2) { XNEE_REMOVE_BEGINING_BLANKS(value); } XNEE_REMOVE_TRAILING_CRAP(value); if (!XNEE_RESOURCE_CHECK(XNEE_RES_PROJECT,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_PROJECT "=\"%s\" \n", value)); xnee_set_project_name(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_DESCRIPTION,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_DESCRIPTION "=\"%s\" \n", value)); xnee_set_project_descr(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_CREAT_DATE,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_CREAT_DATE"=\"%s\" \n", value)); xnee_set_creat_date(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_CREAT_PROGRAM,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_CREAT_PROGRAM"=\"%s\" \n", value)); xnee_set_creat_program(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_CREAT_PROG_VER,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_CREAT_PROG_VER "=\"%s\" \n", value)); xnee_set_creat_prog_vers(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_LASTCHANGE_DATE,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_LASTCHANGE_DATE "=\"%s\" \n", value)); xnee_set_last_date(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_LASTCHANGE_PROGRAM,tmp)) { xnee_verbose ((xd, "adding to xd: "XNEE_RES_LASTCHANGE_PROGRAM "=\"%s\" \n", value)); xnee_set_last_program(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_LASTCHANGE_PROG_VER,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_LASTCHANGE_PROG_VER"=\"%s\" \n", value)); xnee_set_last_prog_vers(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_AUTHOR_NAME,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_AUTHOR_NAME "=\"%s\" \n", value)); xnee_set_author_name(xd, value); } else if (!XNEE_RESOURCE_CHECK(XNEE_RES_AUTHOR_EMAIL,tmp)) { xnee_verbose ((xd, "adding to xd: " XNEE_RES_AUTHOR_EMAIL"=\"%s\" \n", value)); xnee_set_author_email(xd, value); } else { xnee_verbose ((xd, "Could not add to xd: \"%s\" \n", value)); } return XNEE_OK; } /************************************************************** * * * xnee_add_resource * * * * * **************************************************************/ int xnee_add_resource(xnee_data *xd) { #define TMP_BUF_SIZE 256 static char tmp[TMP_BUF_SIZE] ; int read_more = 1 ; int i ; int len; int ret; strncpy(tmp,"",TMP_BUF_SIZE); while (read_more!=0) { if ( fgets(tmp, 256, xd->rc_file) == NULL) { return XNEE_OK; } if ( tmp == NULL) { return XNEE_SYNTAX_ERROR; } /* remove trailing blanks and newlines|tab... */ len = strlen(tmp); i=len; while ( (i>0) && ( tmp[i] != ' ' ) && ( tmp[i] != '\t' ) && ( tmp[i] != '\n' ) ) i--; tmp[i]='\0'; /* * Hey, I __know__ we'll keep the char array.... * as long as we need... */ /* read_more=xnee_add_resource_syntax(xd, tmp); */ ret=xnee_expression_handle_project(xd, tmp); if ( (ret==XNEE_BLANK_LINE) || (ret==XNEE_META_DATA) || (ret==XNEE_SETTINGS_DATA) ) { ret = XNEE_OK; } if (ret != XNEE_OK) { read_more = 0; } xnee_verbose((xd," adding : \"%s\" \t-----------------returned %d\n", tmp, read_more)); if (ret==XNEE_SYNTAX_ERROR) { return ret; } } return read_more; } int xnee_key2id(xnee_data *xd, xnee_option_t *options, int key) { int i ; xnee_verbose((xd, "xnee_key2id key=%d\n", key)); for (i=0;options[i].key!=XNEE_LAST_OPTION;i++) { if ( options[i].key == key ) { return i; } } return XNEE_OPTION_NOT_FOUND; } int xnee_is_resource_option(xnee_data *xd, const char *str, int syntax_type) { int id ; /* printf ("'%s' %s:%d (%s) str=%s (%lu)\n", */ /* str, __FILE__, __LINE__, __func__, str, str); */ id = xnee_option2id(xd, xnee_options, str, syntax_type); if (id==XNEE_OPTION_NOT_FOUND) { return 0; } return id; } const char * xnee_key2string(xnee_data *xd, xnee_option_t *options, int key) { int id ; id = xnee_key2id(xd, options, key); xnee_verbose((xd, "Looking for %d ===> %d \n", key, id)); if ( id == XNEE_OPTION_NOT_FOUND ) { return XNEE_EMPTY_STRING; } return options[id].option; } int xnee_option2id(xnee_data *xd, xnee_option_t *options, const char *str, int syntax_type) { int i =0; char *tmp; if (str==NULL) { return XNEE_SYNTAX_ERROR; } xnee_verbose((xd, "xnee_option2id '%s'\n", str)); tmp=(char*)str; if (syntax_type==XNEE_CLI_SYNTAX) { if (tmp[0]=='-') { tmp++; } if (tmp[0]=='-') { tmp++; } } for (i=0;options[i].key!=XNEE_LAST_OPTION;i++) { /* printf ("\t opt=%d %s %s %s\n", i, tmp, options[i].option, options[i].short_option); */ if (xnee_check(tmp, options[i].option, options[i].short_option)) { return i; } } return XNEE_OPTION_NOT_FOUND; } int xnee_option2key(xnee_data *xd, const char *str) { int id ; id = xnee_option2id(xd, xnee_options, str, XNEE_XNS_SYNTAX); if ( id == XNEE_OPTION_NOT_FOUND ) { return XNEE_NO_OPTION_KEY; } return xnee_options[id].key; } int xnee_find_option_entry_impl (xnee_data *xd, xnee_option_t *options, const char *option, int syntax_type) { int i ; int long_match = 0; int short_match = 0; XNEE_VERBOSE_ENTER_FUNCTION(); XNEE_VERBOSE_IN_FUNCTION(option); if (options==NULL) { xnee_verbose((xd, "\toption == NULL\n")); return XNEE_MEMORY_FAULT; } /* printf ("[option: %s] ", option); */ if (syntax_type==XNEE_CLI_SYNTAX) /* || (syntax_type==XNEE_XNS_SYNTAX) )*/ { if (option[0]=='-') { option++; } else { return XNEE_OPTION_NOT_FOUND; } if (option[0]=='-') { option++; } } /* printf (" -- [option: %s] 2222 ", option); */ for (i=0;options[i].key!=XNEE_LAST_OPTION;i++) { /* printf ("\tCompare '%s' '%s'\n", options[i].option, option); */ xnee_verbose((xd, "\tCompare '%s' '%s'\n", options[i].option, option)); long_match = (!strncmp(option, options[i].option, strlen(options[i].option))) && (strlen(options[i].option)==strlen(option)); if ( options[i].short_option != NULL ) { short_match = (!strncmp(option, options[i].short_option, strlen(options[i].short_option))) && (strlen(options[i].short_option)==strlen(option)); } if (long_match || short_match ) { xnee_verbose((xd,"** Found key: %d for option %s " "at %d in option array (%s)\n", options[i].key, option, i, options[i].option)); return i; } } XNEE_VERBOSE_LEAVE_FUNCTION(); return XNEE_OPTION_NOT_FOUND; } int xnee_parse_option_impl(xnee_data *xd, char **opt_and_args, int *args_used, int syntax_mode) { int ret = XNEE_OK; int key; int entry = XNEE_OPTION_NOT_FOUND; int opt_int; if (opt_and_args==NULL) { return -1; } if (syntax_mode == XNEE_CLI_SYNTAX) { entry = xnee_find_cli_option_entry(xd, xnee_options, opt_and_args[0]); } else if (syntax_mode == XNEE_XNS_SYNTAX) { /* xnee_set_verbose(xd); */ entry = xnee_find_resource_option_entry(xd, xnee_options, opt_and_args[0]); /* xnee_unset_verbose(xd); */ } else { fprintf (stderr, "Type of parse unspecified.... internal error. Report this\n"); } if ( entry == XNEE_OPTION_NOT_FOUND ) { return -1 ; } key = xnee_options[entry].key; xnee_verbose((xd, "Found xns entry for '%s' '%s' at position: %d\n", EMPTY_IF_NULL(opt_and_args[0]), EMPTY_IF_NULL(opt_and_args[1]), entry)); xnee_verbose((xd, "\tlong option: '%s'\n", EMPTY_IF_NULL(xnee_options[entry].option))); xnee_verbose((xd, "\tshort option:'%s'\n", EMPTY_IF_NULL(xnee_options[entry].short_option))); /* #define verbose_option(a) \ xnee_verbose((xd, "%s:%d %s Handling: '%s' \n", \ __FILE__ , __LINE__, __func__, a )); */ #define verbose_option(a) \ xnee_verbose((xd,"%s:%d-->%s() Handling: '%s' \n", \ __FILE__ , __LINE__, __func__, a )); ret = XNEE_SYNTAX_ERROR; switch (key) { case XNEE_NO_OPTION_KEY: ret = XNEE_SYNTAX_ERROR; break; case XNEE_ERR_FILE_KEY: verbose_option("XNEE_ERR_FILE_KEY"); ret = xnee_set_err_name (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_OUT_FILE_KEY: verbose_option("XNEE_OUT_FILE_KEY"); ret = xnee_set_out_name (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_DISPLAY_KEY: verbose_option("XNEE_DISPLAY_KEY"); ret = xnee_set_display_name (xd, opt_and_args[1]) ; *args_used = 1; break; case XNEE_FIRST_LAST_KEY: verbose_option("XNEE_FIRST_LAST_KEY"); ret = xnee_set_first_last(xd); *args_used = 0; /* ret = xnee_set_first_list_str(xd, opt_and_args[1]); */ /* *args_used = 1; */ break; case XNEE_ALL_EVENTS_KEY: verbose_option("XNEE_ALL_EVENTS_KEY"); ret = xnee_parse_range(xd, XNEE_EVENT, "7-31"); break; case XNEE_ALL_CLIENTS_KEY: verbose_option("XNEE_ALL_CLIENTS_KEY"); ret = xnee_set_all_clients(xd); break; case XNEE_FUTURE_CLIENTS_KEY: verbose_option("XNEE_FUTURE_CLIENTS_KEY"); ret = xnee_set_future_clients_str(xd, opt_and_args[1]); INC_ARGS_USED(*args_used, opt_and_args[1]); break; case XNEE_DIMENSION_KEY: verbose_option("XNEE_DIMENSION_KEY"); ret = xnee_set_rec_resolution (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_EVENT_MAX_KEY: verbose_option("XNEE_EVENT_MAX_KEY"); ret = xnee_set_events_max_str (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_DATA_MAX_KEY: verbose_option("XNEE_DATA_MAX_KEY"); ret = xnee_set_data_max_str (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_TIME_MAX_KEY: verbose_option("XNEE_TIME_MAX_KEY"); ret = xnee_set_time_max_str (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_STOP_KEY_KEY: verbose_option("XNEE_STOP_KEY_KEY"); ret = xnee_set_key (xd, XNEE_GRAB_STOP, opt_and_args[1]); *args_used = 1; break; case XNEE_PAUSE_KEY_KEY: verbose_option("XNEE_PAUSE_KEY_KEY"); ret = xnee_set_key (xd, XNEE_GRAB_PAUSE, opt_and_args[1]); *args_used = 1; break; case XNEE_RESUME_KEY_KEY: verbose_option("XNEE_RESUME_KEY_KEY"); ret = xnee_set_key (xd, XNEE_GRAB_RESUME, opt_and_args[1]); *args_used = 1; break; case XNEE_INSERT_KEY_KEY: verbose_option("XNEE_INSERT_KEY_KEY"); ret = xnee_set_key (xd, XNEE_GRAB_INSERT, opt_and_args[1]); *args_used = 1; break; case XNEE_EXEC_KEY_KEY: verbose_option("XNEE_EXEC_KEY_KEY"); ret = xnee_set_key (xd, XNEE_GRAB_EXEC, opt_and_args[1]); *args_used = 1; break; case XNEE_EXEC_PROGRAM_KEY: verbose_option("XNEE_EXEC_PROGRAM_KEY"); ret = xnee_set_exec_prog (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_DELAY_TIME_KEY: verbose_option("XNEE_DELAY_TIME_KEY"); XNEE_ATOI_FUNCTION(xnee_set_interval, xd, opt_and_args[1], ret); *args_used = 1; break; case XNEE_SPEED_PERCENT_KEY: verbose_option("XNEE_SPEED_PERCENT_KEY"); ret = xnee_set_replay_speed_str (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_RECORDED_RESOLUTION_KEY: verbose_option("XNEE_RECORDED_RESOLUTION_KEY"); ret = xnee_set_rec_resolution (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_REPLAY_RESOLUTION_KEY: verbose_option("XNEE_REPLAY_RESOLUTION_KEY"); ret = xnee_set_rep_resolution (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_ADJUST_RESOLUTION_KEY: verbose_option("XNEE_ADJUST_RESOLUTION_KEY"); ret = xnee_set_resolution_str (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_DISTRIBUTE_KEY: verbose_option("XNEE_DISTRIBUTE_KEY"); ret = xnee_add_display_list (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_RECORD_OPTION_KEY: verbose_option("XNEE_RECORD_OPTION_KEY"); ret = xnee_set_recorder(xd); break; case XNEE_REPLAY_OPTION_KEY: verbose_option("XNEE_REPLAY_OPTION_KEY"); ret = xnee_set_replayer(xd); break; case XNEE_NO_SYNC_MODE_KEY: verbose_option("XNEE_NO_SYNC_MODE_KEY"); ret = xnee_unset_sync_mode (xd); /* ret = xnee_unset_sync_mode_str (xd, opt_and_args[1]); */ /* INC_ARGS_USED(*args_used, opt_and_args[1]); */ break; case XNEE_SYNC_MODE_KEY: verbose_option("XNEE_SYNC_MODE_KEY"); ret = xnee_set_sync_mode (xd); /* ret = xnee_set_sync_mode_str (xd, opt_and_args[1]); */ /* INC_ARGS_USED(*args_used, opt_and_args[1]); */ break; case XNEE_RECALL_WINDOW_POS_KEY: verbose_option("XNEE_RECALL_WINDOW_POS_KEY"); ret = xnee_set_recall_window_pos(xd); *args_used = 0; break; case XNEE_REPLAY_OFFSET_KEY: verbose_option("XNEE_REPLAY_OFFSET_KEY"); ret = xnee_set_replay_offset_str (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_KEEP_AUTOREPEAT: verbose_option("XNEE_KEEP_AUTOREPEAT"); ret = xnee_set_keep_autorepeat (xd); *args_used = 0; break; case XNEE_HUMAN_PRINTOUT_KEY: verbose_option("XNEE_HUMAN_PRINTOUT_KEY"); ret = xnee_set_human_printout(xd); *args_used = 0; break; case XNEE_LOOPS_KEY: verbose_option("XNEE_LOOPS_KEY"); ret = xnee_set_events_max_str (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_FORCE_REPLAY_KEY: verbose_option("XNEE_FORCE_REPLAY_KEY"); ret = xnee_set_force_replay(xd); *args_used = 0; break; case XNEE_RESOURCE_KEY: verbose_option("XNEE_RESOURCE_KEY"); ret = xnee_set_project_name(xd, opt_and_args[1]); *args_used = 1; break; case XNEE_PLUGIN_KEY: verbose_option("XNEE_PLUGIN_KEY"); ret = xnee_set_plugin_name(xd, opt_and_args[1], 1); *args_used = 1; break; case XNEE_ERROR_FD_KEY: verbose_option("XNEE_ERROR_FD_KEY"); ret = xnee_set_err_name (xd, opt_and_args[1]); *args_used = 1; break; case XNEE_VERBOSE_KEY: verbose_option("XNEE_VERBOSE_KEY"); ret = xnee_set_verbose(xd); *args_used = 0; break; case XNEE_BUFFER_VERBOSE_KEY: verbose_option("XNEE_BUFFER_VERBOSE_KEY"); ret = xnee_set_buf_verbose(xd); *args_used = 0; break; case XNEE_STORE_MOUSE_POS_KEY: verbose_option("XNEE_STORE_MOUSE_POS_KEY"); ret = xnee_set_store_mouse_pos(xd); *args_used = 0; break; case XNEE_XOSD_FONT_KEY: verbose_option("XNEE_XOSD_FONT_KEY"); ret = xnee_set_xosd_font(xd, opt_and_args[1]); *args_used = 1; break; case XNEE_FEEDBACK_XOSD_KEY: verbose_option("XNEE_FEEDBACK_XOSD_KEY"); ret = xnee_set_xosd_feedback(xd); *args_used = 0; break; case XNEE_FEEDBACK_STDERR_KEY: verbose_option("XNEE_FEEDBACK_STDERR_KEY"); ret = xnee_set_stderr_feedback(xd); *args_used = 0; break; case XNEE_FEEDBACK_NONE_KEY: verbose_option("XNEE_FEEDBACK_NONE_KEY"); ret = xnee_set_no_feedback(xd); *args_used = 1; break; case XNEE_MAX_THRESHOLD_KEY: verbose_option("XNEE_MAX_THRESHOLD_KEY"); ret = xnee_set_max_threshold_str(xd, opt_and_args[1]); *args_used = 1; break; case XNEE_MIN_THRESHOLD_KEY: verbose_option("XNEE_MIN_THRESHOLD_KEY"); ret = xnee_set_min_threshold_str(xd, opt_and_args[1]); *args_used = 1; break; case XNEE_TOT_THRESHOLD_KEY: verbose_option("XNEE_TOT_THRESHOLD_KEY"); ret = xnee_set_tot_threshold_str(xd, opt_and_args[1]); *args_used = 1; break; case XNEE_REQUEST_STR_KEY: verbose_option("XNEE_REQUEST_STR_KEY"); ret = xnee_parse_range(xd, XNEE_REQUEST, opt_and_args[1]); *args_used = 1; break; case XNEE_REPLY_STR_KEY: verbose_option("XNEE_REPLY_STR_KEY"); ret = xnee_parse_range(xd, XNEE_REPLY, opt_and_args[1]); *args_used = 1; break; case XNEE_DEVICE_EVENT_STR_KEY: verbose_option("XNEE_DEVICE_EVENT_STR_KEY"); ret = xnee_parse_range(xd, XNEE_DEVICE_EVENT, opt_and_args[1]); *args_used = 1; break; case XNEE_DELIVERED_EVENT_STR_KEY: verbose_option("XNEE_DELIVERED_EVENT_STR_KEY"); ret = xnee_parse_range(xd, XNEE_DELIVERED_EVENT, opt_and_args[1]); *args_used = 1; break; case XNEE_ERROR_STR_KEY: verbose_option("XNEE_ERROR_STR_KEY"); ret = xnee_parse_range(xd, XNEE_ERROR, opt_and_args[1]); *args_used = 1; break; case XNEE_EXT_REQ_MAJ_STR_KEY: verbose_option("XNEE_EXT_REQ_MAJ_STR_KEY"); ret = xnee_parse_range ( xd, XNEE_EXT_REQUEST_MAJOR, opt_and_args[1]); *args_used = 1; break; case XNEE_EXT_REQ_MIN_STR_KEY: verbose_option("XNEE_EXT_REQ_MIN_STR_KEY"); ret = xnee_parse_range ( xd, XNEE_EXT_REQUEST_MINOR, opt_and_args[1]); *args_used = 1; break; case XNEE_EXT_REP_MAJ_STR_KEY: verbose_option("XNEE_EXT_REP_MAJ_STR_KEY"); ret = xnee_parse_range ( xd, XNEE_EXT_REPLY_MAJOR, opt_and_args[1]); *args_used = 1; break; case XNEE_EXT_REP_MIN_STR_KEY: verbose_option("XNEE_EXT_REP_MIN_STR_KEY"); ret = xnee_parse_range ( xd, XNEE_EXT_REPLY_MINOR, opt_and_args[1]); *args_used = 1; break; case XNEE_RETYPE_PRESS_DELAY: verbose_option("XNEE_RETYPE_PRESS_DELAY"); opt_int = xnee_str2int(xd, opt_and_args[1]); ret = xnee_set_retype_press_delay ( xd, opt_int); *args_used = 1; break; case XNEE_RETYPE_RELEASE_DELAY: verbose_option("XNEE_RETYPE_RELEASE_DELAY"); opt_int = xnee_str2int(xd, opt_and_args[1]); ret = xnee_set_retype_release_delay ( xd, opt_int); *args_used = 1; break; case XNEE_NO_REPARENT_RECORD: verbose_option("XNEE_NO_REPARENT_RECORD"); ret = xnee_set_no_reparent_recording (xd); *args_used = 0; break; case XNEE_MAX_WINDOW_MOVES: verbose_option("XNEE_MAX_WINDOW_MOVES"); opt_int = xnee_str2int(xd, opt_and_args[1]); ret = xnee_set_max_nr_of_moves(xd, opt_int); *args_used = 1; break; case XNEE_RECORD_FROM_DATA_DISPLAY: verbose_option("XNEE_RECORD_FROM_DATA_DISPLAY"); ret = xnee_set_override_display(xd, XNEE_OVERRIDE_DISPLAY_DATA); *args_used = 0; break; case XNEE_RECORD_FROM_CONTROL_DISPLAY: verbose_option("XNEE_RECORD_FROM_CONTROL_DISPLAY"); ret = xnee_set_override_display(xd, XNEE_OVERRIDE_DISPLAY_CONTROL); *args_used = 0; break; /* case XNEE_REPLAY_CALLBACK_NAME_KEY: verbose_option("XNEE_REPLAY_CALLBACK_NAME_KEY"); *args_used = 1; break; case XNEE_RECORD_CALLBACK_NAME_KEY: verbose_option("XNEE_RECORD_CALLBACK_NAME_KEY"); *args_used = 1; break; case XNEE_SYNC_FUNCTION_NAME_KEY: verbose_option("XNEE_SYNC_FUNCTION_NAME_KEY"); *args_used = 1; break; */ /* ********** Below you'll find ********** * * non-valid options * * ****************************************/ case XNEE_EXEC_MARK_KEY: verbose_option("XNEE_EXEC_MARK_KEY"); *args_used = 1; fprintf (stderr, "%s can not be used as a command line option\n", XNEE_EXEC_MARK); ret = XNEE_SYNTAX_ERROR; break; case XNEE_NEW_WINDOW_MARK_KEY: verbose_option("XNEE_NEW_WINDOW_MARK_KEY"); fprintf (stderr, "%s can not be used as a command line option\n", XNEE_NEW_WINDOW_MARK); ret = XNEE_SYNTAX_ERROR; *args_used = 1; break; case XNEE_EVERYTHING_KEY: verbose_option("XNEE_EVERYTHING_KEY"); fprintf (stderr, "'everyting' is an obsoleted option\n"); ret = XNEE_SYNTAX_ERROR; *args_used = 1; break; case XNEE_NO_EXPOSE_KEY: verbose_option("XNEE_NO_EXPOSE_KEY"); fprintf (stderr, "\no-expose' is an obsoleted option\n"); ret = XNEE_SYNTAX_ERROR; *args_used = 1; break; /* case XNEE_USE_SYNC_KEY: verbose_option("XNEE_USE_SYNC_KEY"); fprintf (stderr, "\invalid key' is an obsoleted option\n"); ret = XNEE_SYNTAX_ERROR; *args_used = 1; break; */ default: ret = XNEE_SYNTAX_ERROR; break; } return ret; } xnee-3.19/libxnee/src/xnee.c0000664000000000000000000001631512332106065012622 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2007, 2010-2011, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #include #include #include #include #include #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_fake.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_callback.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_alloc.h" /************************************************************** * * * xnee_check * * * * * **************************************************************/ int xnee_check ( const char *arg, const char *long_arg , const char *short_arg ) { const char *tmp_long = long_arg; const char *tmp_short = short_arg; if (tmp_short==NULL) { tmp_short = tmp_long; } /* returns 1 if arg was equal to any of long_arg or short_arg, else it returns 0*/ return (int) ( (strcmp ( arg, tmp_long) == 0 ) || (strcmp ( arg, tmp_short) == 0 ) ) ; } int xnee_start(xnee_data *xd) { int ret ; int i ; int data_to_record = 0 ; if (xd==NULL) { return XNEE_NO_MAIN_DATA; } /* If just checking syntax, return OK ..... failure should have been handled by normal parsing ..... */ if (xnee_is_syntax_checker(xd)) { return XNEE_OK; } ret = xnee_prepare(xd); XNEE_RETURN_IF_ERR(ret); xd->in_use = 1; /* grab all keys that have been specified */ ret = xnee_grab_all_keys (xd); if (ret != XNEE_OK) { xnee_verbose((xd, "grab failure \n")); return ret; } if (xnee_get_interval (xd) != 0) { xnee_delay (xnee_get_interval (xd), "xnee:" ); } /* * are we recording or are we replaying */ if ( xnee_is_recorder(xd) != 0) { /* Make sure we arerecording something */ for (i=XNEE_EVENT; isync=False;*/ ret = xnee_unset_sync (xd); XNEE_RETURN_IF_ERR (ret); } /*@ignore@*/ XTestGrabControl (xnee_get_control_display(xd), True); XTestGrabControl (xnee_get_data_display(xd), True); /*@end@*/ /* ret = xnee_rep_prepare(xd); */ /* XNEE_RETURN_IF_ERR (ret); */ xnee_record_print_record_range (xd, stderr) ; /* * At last. Time to enter the main loop * ... wait to set up recording until all META data from file is read * Thanks: Janice Waddick */ xnee_verbose((xd, "Entering main loop (replayer)\n")); ret = xnee_replay_main_loop(xd, XNEE_REPLAY_READ_REPLAY_DATA); xnee_verbose((xd,"finished replaying\n")); if (ret != XNEE_OK) { return ret; } } else if ( xnee_is_retyper(xd) != 0 ) { if ( xnee_type_file(xd) != 0 ) { xnee_print_error ("Unable to open retype file\n"); } xnee_verbose((xd,"finished reptyping\n")); } else { return XNEE_MODE_NOT_SET; } xnee_verbose((xd, "xnee_start : ungrab -----> \n")); ret = xnee_ungrab_keys (xd); XNEE_RETURN_IF_ERR (ret); xnee_verbose((xd, "xnee_start : ungrab <---- \n")); ret = xnee_reset_autorepeat (xd); XNEE_RETURN_IF_ERR (ret); ret = xnee_renew_xnee_data(xd); XNEE_RETURN_IF_ERR (ret); return (XNEE_OK); } xnee-3.19/libxnee/src/xnee_sem.c0000664000000000000000000001026610640701431013463 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #ifdef XNEE_USE_SEMAPHORES #include /************************************************************** * * * xnee_sem_init * * * * * **************************************************************/ int xnee_sem_init(xnee_data *xd, sem_t *sem, int shared, int val) { int ret = 0; ret = sem_init (sem, shared, val); return ret; } /************************************************************** * * * xnee_sem_wait * * * * * **************************************************************/ int xnee_sem_wait(xnee_data *xd, sem_t *sem) { int ret = 0; xnee_verbose ((xd, " --> WAITING for the sem\n")); ret = sem_wait (sem); xnee_verbose ((xd, " <-- WAITING for the sem\n")); return ret; } /************************************************************** * * * xnee_sem_trywait * * * * * **************************************************************/ int xnee_sem_trywait(xnee_data *xd, sem_t *sem) { int ret = 0; ret = sem_trywait (sem); return ret; } /************************************************************** * * * xnee_sem_post * * * * * **************************************************************/ int xnee_sem_post(xnee_data *xd, sem_t *sem) { int ret = 0; ret = sem_post (sem); return ret; } /************************************************************** * * * xnee_sem_destroy * * * * * **************************************************************/ int xnee_sem_destroy(xnee_data *xd, sem_t *sem) { int ret = 0; ret = sem_destroy (sem); return ret; } #else #endif /* XNEE_USE_SEMAPHORES*/ xnee-3.19/libxnee/src/xnee_record.c0000664000000000000000000007522012332105755014165 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2012, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include "libxnee/xnee.h" #include "libxnee/datastrings.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_fake.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_setget.h" #include "libxnee/feedback.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_strings.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_xinput.h" #ifdef DEBUG_DISPATCHER /************************************************************** * * * xnee_record_dispatch2 * * * * * **************************************************************/ void xnee_record_dispatch2 (XPointer xpoint_xnee_data, XRecordInterceptData *data ) { if ( (data==NULL) || (!data->data) ) { XRecordFreeData(data); XNEE_DEBUG ( (stderr ," <-- xnee_human_dispatch() \n" )); xnee_process_count(XNEE_PROCESS_RESET); return; } /*increment the process reply counter*/ xnee_process_count(XNEE_PROCESS_INC); xpoint_xnee_data=0; fflush (stdout); XRecordFreeData(data); return; } #endif int xnee_get_screen_nr(xnee_data *xd, Display *dpy, Window recorded_root); /************************************************************** * * * xnee_get_screen_nr * * * * * **************************************************************/ int xnee_get_screen_nr(xnee_data *xd, Display *dpy, Window recorded_root) { int nr_screens ; int this_screen ; int i ; int keep_looping ; Window disp_root ; nr_screens = ScreenCount(dpy); keep_looping = 1 ; this_screen = -1 ; i = 0 ; do { Screen *scr; scr = ScreenOfDisplay(dpy,i); disp_root = RootWindowOfScreen(scr); /* printf ("Loop: i=%d scr=%d dr=%d rr=%d\n", */ /* i, scr, disp_root, recorded_root); */ if ( disp_root == recorded_root ) { keep_looping = 0 ; this_screen = i; } i++; } while ( (iout_file; XNEE_DEBUG ( (stderr ," -- xnee_record_handle_event() at 3 (%d) \n" ,event_type )); /* * If XI is in use, don't print device events as core event * only print as XI event * * event_base must be set (>0) * event_type must be within event_base and event_base+5 * */ event_base = xd->xi_data.xinput_event_base ; if ( ( event_base > 0 ) && ( event_base <= event_type ) && ( (event_base + 6) > event_type ) ) { ret = xnee_handle_xinput_event(xd, event_type, xrec_data, xrecintd->server_time); /* printf ("XI <---- %d \n", ret); */ } else { /* printf ("CORE:: %d (%d)\n", event_type, event_base); */ switch(event_type) { case KeyPress: if ( event_base > 0 ) { break; } kc = xrec_data->event.u.u.detail; do_print = xnee_save_or_print(xd, kc, XNEE_GRAB_KM_PRESS); if (do_print==XNEE_GRAB_DO_PRINT) { fprintf (out,"0,%u,0,0,0,%d,0,%lu\n", event_type, kc, xrecintd->server_time ); ret = xnee_fake_key_event (xd, kc, True, CurrentTime ); XNEE_RETURN_IF_ERR (ret); } else if (do_print==XNEE_GRAB_DO_SAVE) { char buf[64]; ret = snprintf (buf, 64, "0,%u,0,0,0,%d,0,%lu\n", event_type, kc, xrecintd->server_time); if (ret<3) { return XNEE_MEMORY_FAULT ; } ret = xnee_grab_handle_buffer (xd, buf, XNEE_GRAB_BUFFER_SAVE); XNEE_RETURN_IF_ERR(ret); } else if (do_print==XNEE_GRAB_DONT_PRINT) { return XNEE_GRAB_CONFUSION; } break; case KeyRelease: if ( event_base > 0 ) { break; } kc = xrec_data->event.u.u.detail; do_print = xnee_save_or_print(xd, kc, XNEE_GRAB_KM_RELEASE); if (do_print==XNEE_GRAB_DO_PRINT) { fprintf (out,"0,%u,0,0,0,%d,0,%lu\n", event_type, xrec_data->event.u.u.detail, xrecintd->server_time ); ret = xnee_fake_key_event (xd, (int) xrec_data->event.u.u.detail , False, CurrentTime); XNEE_RETURN_IF_ERR(ret); } else if (do_print==XNEE_GRAB_DO_SAVE) { char buf[64]; ret = snprintf (buf, 64, "0,%u,0,0,0,%d,0,%lu\n", event_type, kc, xrecintd->server_time); if (ret<3) { return XNEE_MEMORY_FAULT ; } ret = xnee_grab_handle_buffer (xd, buf, XNEE_GRAB_BUFFER_SAVE); XNEE_RETURN_IF_ERR(ret); } break; case ButtonPress: if ( event_base > 0 ) { break; } fprintf (out,"0,%u,0,0,%d,0,0,%lu\n", event_type, xrec_data->event.u.u.detail, xrecintd->server_time ); ret = xnee_fake_button_event(xd, (int)xrec_data->event.u.u.detail , True, CurrentTime); XNEE_RETURN_IF_ERR(ret); break; case ButtonRelease: if ( event_base > 0 ) { break; } fprintf (out,"0,%u,0,0,%d,0,0,%lu\n", event_type, xrec_data->event.u.u.detail, xrecintd->server_time ); ret = xnee_fake_button_event(xd, (int)xrec_data->event.u.u.detail, False, CurrentTime); XNEE_RETURN_IF_ERR(ret); break; case MotionNotify: if ( event_base > 0 ) { break; } kc = 0; ret = xnee_get_screen_nr(xd, xd->data, xrec_data->event.u.keyButtonPointer.root); if (0) { /* Discarding core event that seems to have come from XI */ /* ... anyhow, it's recorded as an XI event */ ret = XNEE_OK; } else { screen = ret; do_print = xnee_save_or_print(xd, kc, XNEE_GRAB_MOUSE); fprintf (out,"0,%u,%d,%d,0,0,%u,%lu\n", event_type, xrec_data->event.u.keyButtonPointer.rootX, xrec_data->event.u.keyButtonPointer.rootY, screen, xrecintd->server_time ); xd->xnee_info.last_motion = True ; ret = xnee_fake_motion_event (xd, screen, xrec_data->event.u.keyButtonPointer.rootX, xrec_data->event.u.keyButtonPointer.rootY, CurrentTime); XNEE_RETURN_IF_ERR(ret); } break; case CreateNotify: fprintf (out,"0,%u,0,0,0,0,0," TIME_PRINTF_FMT "\n", event_type, xrecintd->server_time ); break; case DestroyNotify: fprintf (out,"0,%u,0,0,0,0,0,%lu\n", event_type, xrecintd->server_time ); break; case ReparentNotify: if ( ! xnee_is_no_reparent_recording(xd)) { fprintf (out,"0,%u,0,0,0,0,0,%lu\n", event_type, xrecintd->server_time ); } XGetWindowAttributes(xd->grab, xrec_data->event.u.reparent.window, &window_attributes_return); XTranslateCoordinates (xd->grab, xrec_data->event.u.reparent.window, window_attributes_return.root, -window_attributes_return.border_width, -window_attributes_return.border_width, &rx, &ry, &dummy_window); /* * Prevent the same window pos to be printed more than once */ if ( (last_record_window_pos_win != xrec_data->event.u.reparent.window) || (last_record_window_pos_par != xrec_data->event.u.reparent.parent) ) { XFlush(xd->grab); if (!XFetchName(xd->grab, xrec_data->event.u.reparent.window, &win_name)) { /* Get window name if any */ xnee_verbose((xd," window has has no name\n")); win_name=NULL; } else if (win_name) { xnee_verbose((xd," window has has name '%s'\n", win_name)); } fprintf (out, "%s:%d,%d:%u,%u,%u,%u,%u,%d:%dx%d+%d+%d:%d,%d:%s\n", XNEE_NEW_WINDOW_MARK, rx, ry, (unsigned int) xrec_data->event.u.reparent.event, (unsigned int) xrec_data->event.u.reparent.window, (unsigned int) xrec_data->event.u.reparent.parent, (unsigned int) xrec_data->event.u.reparent.x, (unsigned int) xrec_data->event.u.reparent.y, xrec_data->event.u.reparent.override, window_attributes_return.x, window_attributes_return.y, window_attributes_return.width, window_attributes_return.height, window_attributes_return.border_width, window_attributes_return.border_width, win_name?win_name:"" ); if (win_name) { xnee_verbose((xd," freeing window name\n")); XFree(win_name); } last_record_window_pos_win = xrec_data->event.u.reparent.window; last_record_window_pos_par = xrec_data->event.u.reparent.parent; } break; default: { fprintf (out,"0,%u,0,0,0,0,0,%lu\n", event_type, xrecintd->server_time); } } } return XNEE_OK; } /************************************************************** * * * xnee_record_handle_event * * * * * **************************************************************/ int xnee_record_handle_event ( xnee_data *xd, /*@null@*/ XRecordInterceptData *xrecintd) { XRecordDatum *xrec_data ; unsigned int event_type ; FILE *out ; if ( xrecintd==NULL ) { return XNEE_RECORD_FAILURE; } xrec_data = (XRecordDatum *) (xrecintd->data) ; event_type = (unsigned int)xrec_data->type ; out = xd->out_file; XNEE_DEBUG ( (stderr ," -->xnee_record_handle_event() \n" )); if ( (xd->xnee_info.first_last!=0) && (xd->xnee_info.last_motion > 0) && (event_type==MotionNotify)) { XNEE_DEBUG ( (stderr ," -- xnee_record_handle_event() at 0 \n" )); xd->xnee_info.x = xrec_data->event.u.keyButtonPointer.rootX ; xd->xnee_info.y = xrec_data->event.u.keyButtonPointer.rootY ; /*@ignore@*/ xd->xnee_info.server_time = xrecintd->server_time ; /*@end@*/ } else { XNEE_DEBUG ( (stderr ," -- xnee_record_handle_event() at 1 \n" )); if ( (xd->xnee_info.first_last!=0) && (xd->xnee_info.last_motion!=0) && ((event_type==KeyPress) || (event_type==KeyRelease) || (event_type==ButtonPress) || (event_type==ButtonRelease )) ) { XNEE_DEBUG ( (stderr ," -- xnee_record_handle_event() at 2 \n" )); fprintf (out,"0,%d,%d,%d,0,0,0,%lu\n", 6, xd->xnee_info.x, xd->xnee_info.y, xd->xnee_info.server_time); xnee_record_handle_event_printer(xd, event_type, xrec_data, xrecintd); } else { xnee_record_handle_event_printer(xd, event_type, xrec_data, xrecintd); } XNEE_DEBUG ( (stderr ," -- xnee_record_handle_event() at 7 \n" )); } (void)fflush (out); if (((event_type==KeyPress) || (event_type==KeyRelease) || (event_type==ButtonPress) || (event_type==ButtonRelease)) && (xd->xnee_info.last_motion!=0) ) xd->xnee_info.last_motion=0 ; XNEE_DEBUG ( (stderr ," <-- xnee_record_handle_event() \n" )); return XNEE_OK; } /************************************************************** * * * xnee_record_dispatch * * * * * **************************************************************/ void xnee_record_dispatch(XPointer xpoint_xnee_data, XRecordInterceptData *data ) { XRecordDatum *xrec_data ; xnee_data *xd ; int data_type = 0; int ret; XNEE_DEBUG ( (stderr ," --> xnee_record_dispatch() \n" )); if ( (data==NULL) || (!data->data) ) { XNEE_DEBUG ( (stderr ," <-- xnee_record_dispatch() \n" )); (void)xnee_process_count(XNEE_PROCESS_RESET); return; } else { /*increment the process reply counter*/ (void)xnee_process_count(XNEE_PROCESS_INC); } /* fix by Ton van Vliet */ xd = (xnee_data *) (xpoint_xnee_data) ; if (!xd->in_use) { return; } xrec_data = (XRecordDatum *) (data->data) ; if ( xnee_more_to_record(xd)==0 ) { XRecordFreeData(data); return ; } else { xnee_inc_data_recorded(xd); } /* if NOT XRECORDEndOffData or XRECORDClientDied set data_type */ if(data->data_len!=0) { data_type = (int) xrec_data->type; } switch(data->category) { case XRecordFromClient: xnee_record_print_request (xd, data) ; break; case XRecordFromServer: if(data_type > X_Reply ) { xnee_inc_events_recorded(xd); ret = xnee_record_handle_event (xd, data) ; /* * Nothing will happen if we get XNEE_OK and set * the interrupt var to that value. * If ret!=XNEE_OK, we must set it!!! */ xnee_set_interrupt_error(xd, ret); XNEE_SILENTLY_RETURN_VOID_IF_ERR (ret); } else { xnee_record_print_reply (xd, data) ; } break; case XRecordClientStarted: xnee_verbose((xd, "ClientStarted \n")); fprintf(stderr, "ClientStarted %lu %p \n", data->id_base, data->data); break; case XRecordClientDied: xnee_verbose((xd, "ClientDied \n")); fprintf(stderr, "ClientDied \n"); break; case XRecordEndOfData: xnee_verbose((xd, "EndOfData \n")); fprintf(stderr, "EndOfData \n"); break; default: xnee_print_error( "Case: Default reached in Dispatch (...) \n"); break; } XRecordFreeData(data); XNEE_DEBUG ( (stderr ," <-- xnee_record_dispatch() \n" )); } /************************************************************** * * * xnee_human_dispatch * * * * * **************************************************************/ void xnee_human_dispatch(XPointer xpoint_xnee_data, XRecordInterceptData *data ) { XRecordDatum *xrec_data ; xnee_data *xd ; int data_type = 0; XNEE_DEBUG ( (stderr ," --> xnee_human_dispatch() \n" )); if ( (data==NULL) || (!data->data) ) { XRecordFreeData(data); XNEE_DEBUG ( (stderr ," <-- xnee_human_dispatch() \n" )); (void)xnee_process_count(XNEE_PROCESS_RESET); return; } else { /*increment the process reply counter*/ (void)xnee_process_count(XNEE_PROCESS_INC); } /* fix by Ton van Vliet */ xd = (xnee_data *) (xpoint_xnee_data) ; xrec_data = (XRecordDatum *) (data->data) ; if ( xnee_more_to_record(xd)==0 ) { XRecordFreeData(data); return ; } else { xnee_inc_data_recorded(xd); } /* if NOT XRECORDEndOffData or XRECORDClientDied set data_type */ if(data->data_len!=0) { data_type = (int) xrec_data->type; } switch(data->category) { case XRecordFromClient: xnee_human_print_request (xd, data) ; break; case XRecordFromServer: if(data_type > X_Reply ) { xnee_inc_events_recorded(xd); xnee_human_print_event (xd, data) ; } else { xnee_human_print_reply (xd, data) ; } break; case XRecordClientStarted: xnee_verbose((xd, "ClientStarted \n")); break; case XRecordClientDied: xnee_verbose((xd, "ClientDied \n")); break; case XRecordEndOfData: xnee_verbose((xd, "EndOfData \n")); break; default: xnee_print_error( "Case: Default reached in Dispatch (...) \n"); break; } XNEE_DEBUG ( (stderr ," <-- xnee_human_dispatch() \n" )); XRecordFreeData(data); } /************************************************************** * * * xnee_record_init * * * * * **************************************************************/ void xnee_record_init (xnee_data *xd) { int i=0; XNEE_DEBUG ( (stderr ," --> xnee_record_init() \n" )); xd->xnee_info.first_last = False ; /* Intercept all MotionNotify, else only first and last */ xd->xnee_info.last_motion = False ; /* Used to record only first and last Motion in a row*/ xd->xnee_info.events_recorded = 0 ; xd->xnee_info.store_mouse_pos = 0; xd->xnee_info.data_recorded = 0 ; xd->xnee_info.time_recorded = 0 ; xd->xnee_info.events_max = -1 ; xd->xnee_info.data_max = -1 ; xd->xnee_info.time_max = -1 ; xd->xnee_info.x = 0 ; /* Need not to be set, anyhow last MotionNotify x=0*/ xd->xnee_info.y = 0 ; /* Need not to be set, anyhow last MotionNotify x=0*/ xd->xnee_info.server_time = 0 ; /* Need not to be set, anyhow last .... */ xd->xnee_info.interval = 0 ; xd->xnee_info.size = 0 ; xd->xnee_info.size = 0 ; xd->xnee_info.replayed_events = 0 ; xd->xnee_info.interrupt = 0; xnee_set_override_display(xd,XNEE_OVERRIDE_DISPLAY_NONE); for ( i=0 ; i< XNEE_NR_OF_TYPES ; i++) { xd->xnee_info.data_ranges[i] = 0 ; /* Count how many data specified */ } /* for (i=0 ; irec_range->next[0]=0; } xd->rec_range->next_record_range=0; */ XNEE_DEBUG ( (stderr ," <-- xnee_record_init() \n" )); } /************************************************************** * * * xnee_setup_recordext * * * * * **************************************************************/ int xnee_setup_recordext (xnee_data *xd) { int ret=XNEE_OK; if ( (xd == NULL) || (xd->record_setup == NULL)) { return XNEE_RECORD_FAILURE; } xnee_verbose((xd, " ---> xnee_setup_recordext\n")); xd->record_setup->data_flags = XRecordFromServerTime | XRecordFromClientTime | XRecordFromClientSequence; if ( xnee_is_recorder(xd)==False) { return XNEE_OK; } #ifdef XNEE_XINPUT_SUPPORT xnee_xinput_add_devices(xd); xnee_record_print_record_range (xd, xnee_get_out_file (xd)) ; #endif /* XNEE_XINPUT_SUPPORT */ ret = xnee_parse_range (xd, XNEE_DELIVERED_EVENT, "ReparentNotify"); XNEE_RETURN_IF_ERR (ret); ret = xnee_set_ranges(xd); XNEE_RETURN_IF_ERR (ret); /* xnee_record_print_record_range(xd, stderr); */ ret = xnee_get_max_range(xd) ; if (ret==0) { xnee_verbose((xd, " --- xnee_setup_recordext Nothing to record \n")); ret = XNEE_NO_PROT_CHOOSEN; } else { ret = XNEE_OK; } xnee_verbose((xd, " <--- xnee_setup_recordext %d\n", ret)); return (ret); } /************************************************************** * * * xnee_has_record_extension * * * * * **************************************************************/ int xnee_has_record_extension(xnee_data *xd) { int ok=XNEE_OK; if ( (xd == NULL) || (xd->control == NULL)) { fprintf(stderr, "cannot look for RECORD extension withou xnee_data or control display %p %p \n", (void*)xd, (void*)xd->control); return XNEE_RECORD_FAILURE; } if( XRecordQueryVersion(xd->control, &xd->record_setup->major_return, &xd->record_setup->minor_return) == 0 ) { xnee_print_error ("Record extension missing." " This is not an error in " PACKAGE "\n"); ok=XNEE_NO_REC_EXT; } else { xnee_verbose ((xd, "\t XRecord-\n\t Release %d.%d\n", xd->record_setup->major_return, xd->record_setup->minor_return)); } return (ok); } /************************************************************** * * * xnee_setup_recording * * * * * **************************************************************/ int xnee_setup_recording(xnee_data *xd) { int nr_of_ranges=0; Display *context_display; nr_of_ranges=xnee_get_max_range(xd); xnee_verbose((xd, "--->xnee_setup_recording\n")); if ( (xd == NULL) || (xd->control == NULL) || (xd->record_setup == NULL)) { return XNEE_RECORD_FAILURE; } XNEE_DEBUG ( (stderr ," --> xnee_setup_recording() \n" )); (void)XSynchronize(xd->control, True); if (xd->all_clients!=0) { xd->record_setup->xids[0] = XRecordAllClients; } else { xd->record_setup->xids[0] = XRecordFutureClients; } context_display = xnee_get_display_for_recordcontext(xd); xd->record_setup->rContext = XRecordCreateContext(context_display, xd->record_setup->data_flags, xd->record_setup->xids,1, xd->record_setup->range_array, nr_of_ranges); XFlush(context_display); XFlush(xd->control); XFlush(xd->data); XSync(xd->control, True); XSync(xd->data, True); xnee_verbose((xd, "<---xnee_setup_recording\n")); XNEE_DEBUG ( (stderr ," <-- xnee_setup_recording() \n" )); return (0); } /************************************************************** * * * xnee_unsetup_recording * * * * * **************************************************************/ int xnee_unsetup_recording(xnee_data *xd) { Display *context_display; if (xd==NULL) { return XNEE_RECORD_FAILURE; } if ( (xd->control == NULL) || (xd->record_setup == NULL)) { return XNEE_OK; } context_display = xnee_get_display_for_recordcontext(xd); xnee_verbose((xd, "---> xnee_unsetup_recording\n")); if (xd->record_setup->rContext != 0) { xnee_verbose((xd, "--- disabling context %p on %p \n", (void*)xd->record_setup->rContext, (void*)context_display)); (void)XRecordDisableContext(xd->control, xd->record_setup->rContext); xnee_verbose((xd, "--- freeing context \n")); (void)XRecordFreeContext(xd->control, xd->record_setup->rContext); xd->record_setup->rContext = 0; } xnee_verbose((xd, "<--- xnee_unsetup_recording\n")); return (XNEE_OK); } /************************************************************** * * * xnee_record_loop * * * * * **************************************************************/ int xnee_record_loop(xnee_data *xd) { int ret ; Display *context_display; if ( (xd==NULL) || (xd->data==NULL) || (xd->record_setup==NULL)) { return XNEE_RECORD_FAILURE; } xnee_verbose((xd, " ---> xnee_record_loop()\n")); context_display = xnee_get_display_for_recordcontext(xd); /* * In case the key pressed to invoke Xnee is not released * we wait 1/2 of a second and hopefully it is. If not * the user is holding it pressed for "TOO" long. */ /*@ ignore @*/ (void) usleep ( XNEE_DELAY_RECORDING ); /*@ end @*/ ret = XRecordEnableContextAsync(context_display, xd->record_setup->rContext, xd->rec_callback, (XPointer) (xd) /* closure passed to Dispatch */); XNEE_RETURN_IF_ERR(ret); xnee_verbose((xd, " <--- xnee_record_loop()\n")); /* while (1) { XRecordProcessReplies (xd->data); } */ return XNEE_OK; } /************************************************************** * * * xnee_record_async * * * * * **************************************************************/ int xnee_record_async(xnee_data *xd) { int ret ; Display *context_display; if ( (xd==NULL) || (xd->data==NULL) || (xd->record_setup==NULL)) { return XNEE_RECORD_FAILURE; } xnee_verbose((xd, " ---> xnee_record_async() \n")); /* * In case the key pressed to invoke Xnee is not released * we wait 1/2 of a second and hopefully it is. If not * the user is holding it pressed for "TOO" long. */ usleep ( XNEE_DELAY_RECORDING ); if ( xnee_is_store_mouse_pos(xd) != 0 ) { xnee_store_mouse_pos (xd); } context_display = xnee_get_display_for_recordcontext(xd); xnee_verbose((xd, " --- xnee_record_async() enable context\n")); ret = XRecordEnableContextAsync(context_display, xd->record_setup->rContext, xd->rec_callback, (XPointer) (xd) /* closure passed to Dispatch */); if (ret==0) { return (XNEE_RECORD_FAILURE); } /* XNEE_RETURN_IF_ERR(ret); */ for (;;) { xnee_verbose((xd, " --- xnee_record_async() loop\n")); /* Interrupt variable set? */ if (xnee_is_interrupt_action(xd)) { ret = xnee_get_interrupt_action(xd); xnee_verbose((xd, "interrupt (record) variable was set (%d)\n", ret)); xnee_unset_interrupt_action(xd); xnee_verbose((xd, "leaving loop (%d)\n", ret)); break; } xnee_verbose((xd, " --- xnee_record_async() loop 2 \n")); /* has the user pressed a modifier+key */ if (xnee_check_key (xd)==XNEE_GRAB_DATA) { ret = xnee_handle_rec_key(xd) ; if (ret == XNEE_GRAB_STOP) { xnee_verbose ((xd," breaking async loop since STOP \n")); xd->in_use=0; break; } else if (ret == XNEE_GRAB_RESUME) { xnee_verbose ((xd," starting async loop since RESUME \n")); ret = XRecordEnableContextAsync(context_display, xd->record_setup->rContext, xd->rec_callback, (XPointer) (xd) ); xnee_verbose ((xd," starting async loop since RESUME finished \n")); if(ret!=1) { return XNEE_RECORD_FAILURE; } } } xnee_verbose((xd, " --- xnee_record_async() loop 3\n")); /* handle data in the RECORD buffer */ ret = xnee_process_replies(xd); XNEE_RETURN_IF_ERR(ret); if ( xnee_more_to_record(xd) == 0 ) { xnee_verbose ((xd," closing down while loop in async loop\n")); ret=XNEE_OK; break ; } /* sleep for a little while * there might be someone wanting the CPU */ usleep (100*100); } if (ret == XNEE_OK) { ret = xnee_stop_session(xd); } else { xnee_stop_session(xd); } xnee_verbose((xd, " <--- xnee_record_async()\n")); return (ret); } /* * * Name: xnee_record_close_down * * Arguments: xnee_data * * * Description: Deallocs recording stuff * This function is obsoleted by the function xnee_free_xnee_data * * int xnee_record_close_down (xnee_data *xd) { int i=0; int max=get_max_range(xd); xnee_verbose((xd, "Freeing ranges\n")); for ( i=0 ; irecord_setup->range_array[i]); } free (xd->record_setup->range_array); return (0); } */ xnee-3.19/libxnee/src/xnee_window.c0000664000000000000000000002676712120454215014223 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2013 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_window.h" #include "libxnee/print_varargs.h" #include "libxnee/print.h" #include "libxnee/xnee_alloc.h" #include "libxnee/xnee_setget.h" /* * In this file the following two words are frequent enough * to let their usage be explained: * session - information read from session file * received - information as received during replay from RECORD */ #define XNEE_DEBUG_WINDOW_CODE 1 #ifdef XNEE_DEBUG_WINDOW_CODE #define XNEE_WINDOW_DEBUG(a) printf a #else #define XNEE_WINDOW_DEBUG(a) #endif #define XNEE_WINDOW_BUFFER_SIZE 10 static int received_index = 0; static int session_index = 0; xnee_win_pos received_windows[XNEE_WINDOW_BUFFER_SIZE]; xnee_win_pos session_windows[XNEE_WINDOW_BUFFER_SIZE]; static int xnee_window_print_lists(void) { int i ; fprintf (stderr,"---- List of stored window --- \n"); fprintf (stderr,"|\n"); fprintf (stderr,"| -- Session -- \n"); for (i=0; ( ix; xwp.y = attributes->y; xwp.width = attributes->width; xwp.height = attributes->height; xwp.window = win; xwp.parent = parent; if (where == XNEE_WINDOW_RECEIVED) { XFlush(xd->grab); if (!XFetchName(xd->grab, win, &win_name)) { /* Get window name if any */ xnee_verbose((xd," window has has no name\n")); win_name=NULL; } else if (win_name) { xnee_verbose((xd," window has has name '%s'\n", win_name)); } xwp.name = win_name; } else { xwp.name = NULL; } return xnee_window_add_impl(xd, &xwp, where); } int xnee_window_add_impl(xnee_data *xd, xnee_win_pos *xwp, int where) { xnee_win_pos *ptr; int index ; xnee_verbose((xd, "---> xnee_window_add_impl\n")); switch ( where ) { case XNEE_WINDOW_RECEIVED: index = received_index; ptr = &received_windows[received_index]; break; case XNEE_WINDOW_SESSION: index = session_index; ptr = &session_windows[session_index]; break; default: return XNEE_WINDOW_POS_ADJ_ERROR; } if ( index >= XNEE_WINDOW_BUFFER_SIZE ) { xnee_verbose ((xd, "<--- xnee_window_add_impl ... error\n")); return XNEE_WINDOW_POS_ADJ_ERROR; } memcpy(ptr, xwp, sizeof(xnee_win_pos)); if ( where == XNEE_WINDOW_RECEIVED ) { received_index++; } else { session_index++; } xnee_verbose((xd, "<--- xnee_window_add_impl\n")); return XNEE_OK; } #ifdef CRAP int xnee_window_add_read(xnee_data *xd, xnee_win_pos *xwp) { xnee_win_pos *ptr; xnee_verbose((xd, "---> xnee_window_add_read\n")); if ( session_index >= XNEE_WINDOW_BUFFER_SIZE ) { xnee_verbose((xd, "<--- xnee_window_add_read ... error\n")); return XNEE_WINDOW_POS_ADJ_ERROR; } ptr = &session_windows[session_index]; ptr->rel_x = xwp->rel_x; ptr->rel_y = xwp->rel_y; ptr->x = xwp->x; ptr->y = xwp->y; ptr->height = xwp->height; ptr->width = xwp->width; ptr->window = xwp->window; if ( where == XNEE_WINDOW_RECEIVED ) { received_index++; } else { session_index++; } xnee_verbose((xd, "<--- xnee_window_add_impl\n")); return XNEE_OK; } #endif /* CRAP? */ int xnee_window_add_read(xnee_data *xd, xnee_win_pos *xwp) { xnee_win_pos *ptr; xnee_verbose((xd, "---> xnee_window_add_read\n")); if ( session_index >= XNEE_WINDOW_BUFFER_SIZE ) { xnee_verbose((xd, "<--- xnee_window_add_read ... error\n")); return XNEE_WINDOW_POS_ADJ_ERROR; } ptr = &session_windows[session_index]; ptr->x = xwp->x; ptr->y = xwp->y; ptr->height = xwp->height; ptr->width = xwp->width; session_index++; xnee_verbose((xd, "<--- xnee_window_add_read\n")); return XNEE_OK; } static int xnee_window_remove_window(xnee_data *xd, int rec_idx, int ses_idx) { int i ; xnee_verbose((xd,"xnee_window_remove_window recorded:%d session:%d\n", rec_idx, ses_idx)); for (i=rec_idx; iwindow == 0 ) { return XNEE_WINDOW_POS_ADJ_ERROR; } XNEE_VERBOSE_MARK(); XGetWindowAttributes(xd->grab, rec_ptr->window, &win_attributes); XTranslateCoordinates (xd->grab, rec_ptr->window, win_attributes.root, win_attributes.border_width, win_attributes.border_width, &rx, &ry, &child); if ( (sess_ptr->x==rx) && (sess_ptr->y==ry) ) { XNEE_WINDOW_DEBUG(("Windows are already loacted correctly :) %d %d %d %d\n", sess_ptr->x, rx, sess_ptr->y, ry)); xnee_window_remove_window(xd, received_index-1, session_index-1); return XNEE_OK; } xnee_verbose((xd, "XMoveWindow(%p,0x%X, %u,%u)\n", (void*)xd->grab, rec_ptr->window, (unsigned int)sess_ptr->x , (unsigned int)sess_ptr->y )); XNEE_WINDOW_DEBUG(("XMoveWindow(%p,0x%X, %u,%u)\n", (void*)xd->grab, rec_ptr->window, (unsigned int)sess_ptr->x , (unsigned int)sess_ptr->y )); XMoveWindow(xd->grab, rec_ptr->window, sess_ptr->x , sess_ptr->y ); XFlush(xd->grab); usleep(50*1000); XGetWindowAttributes(xd->grab, rec_ptr->window, &win_attributes); XTranslateCoordinates (xd->grab, rec_ptr->window, win_attributes.root, win_attributes.border_width, win_attributes.border_width, &rx, &ry, &child); while ( nr_of_movesx - rx ; diff_y = sess_ptr->y - ry ; XNEE_WINDOW_DEBUG(("Requested Actual diff attrib window=0x%X (%d try)\n", rec_ptr->window, nr_of_moves)); XNEE_WINDOW_DEBUG((" %.3d %.3d %.2d %d\n", sess_ptr->x , rx , diff_x, win_attributes.x)); XNEE_WINDOW_DEBUG((" %.3d %.3d %.2d %d\n", sess_ptr->y , ry , diff_y, win_attributes.y)); XNEE_WINDOW_DEBUG(("\n")); if ( !diff_x && !diff_y ) { xnee_window_remove_window(xd, received_index-1, session_index-1); xnee_verbose((xd,"leaving ..... all (%d %d) is ok\n", diff_x, diff_y)); break; } pos_x = sess_ptr->x + diff_x ; pos_y = sess_ptr->y + diff_y ; xnee_verbose((xd, "XMoveWindow(%p,0x%X, %u,%u)\n", (void*)xd->grab, rec_ptr->window, (unsigned int)pos_x , (unsigned int)pos_y )); XNEE_WINDOW_DEBUG(("XMoveWindow(%p,0x%X, %u,%u)\n", (void*)xd->grab, rec_ptr->window, (unsigned int)pos_x , (unsigned int)pos_y )); XMoveWindow(xd->grab, rec_ptr->window, pos_x, pos_y); XFlush(xd->grab); usleep(50*1000); XGetWindowAttributes(xd->grab, rec_ptr->window, &win_attributes); XTranslateCoordinates (xd->grab, rec_ptr->window, win_attributes.root, win_attributes.border_width, win_attributes.border_width, &rx, &ry, &child); nr_of_moves++; } xnee_verbose((xd, "<--- xnee_window_try_move: moved %d times\n", nr_of_moves)); return ret; } xnee-3.19/libxnee/src/xnee_fake.c0000664000000000000000000005243412332000417013604 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, * 2010, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_time.h" #include "libxnee/xnee_fake.h" #include "libxnee/xnee_keysym.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_xinput.h" #include "libxnee/xnee_utils.h" static int loop_nr = 0; #ifdef XNEE_XINPUT_SUPPORT static int xnee_xi_last_know_pointer_pos[]={0,0}; #endif /* XNEE_XINPUT_SUPPORT */ int xnee_reset_fake( xnee_data *xd) { xnee_verbose((xd, "reset fake\n")); loop_nr = 0 ; return XNEE_OK; } static void xnee_fake_sleep(unsigned long period) { static unsigned long collected_time=0; #define SLEEP_THRESH 4 if (period>SLEEP_THRESH) { usleep ((period+collected_time)*1000); collected_time=0; } else { collected_time+=period; if (collected_time>SLEEP_THRESH) { usleep(collected_time*1000); collected_time=0; } } } static unsigned long xnee_replay_event_handler_sleep_amt(xnee_data* xd, xnee_intercept_data* xindata, long int last_elapsed, int only_update_time) { unsigned long last_diff = 0; unsigned long first_diff = 0 ; unsigned long record_last_diff = 0 ; unsigned long sleep_amt = 0; unsigned long record_first_diff =0 ; int speed ; Time saved_time = 0 ; /* used to restore time of last replayable event */ /* Get the recorded time difference. Should be from previous read X server time recorded in file*/ saved_time = xindata->oldtime ; if ( only_update_time ) { xindata->oldtime = saved_time; return 0; } /* Synchronise the time */ xnee_verbose((xd,"ev handler new %lu old %lu\n",xindata->newtime , xindata->oldtime )); record_last_diff = xnee_delta_time(xindata) ; record_first_diff = ( xindata->newtime - xd->first_read_time ) ; /* get the actual difference from last read - we may have had to wait/sleep */ last_diff = xnee_get_elapsed_time(xd, XNEE_FROM_LAST_READ ); /* get the actual elapsed time from the start of the read */ first_diff = xnee_get_elapsed_time(xd, XNEE_FROM_FIRST_READ ); if (loop_nr==0) { record_last_diff = 0 ; record_first_diff = 0 ; loop_nr=1; } else if (loop_nr==1) { record_last_diff = 0 ; record_first_diff = 0 ; loop_nr=2; } /* if the first event is also the 1st entry from recorded file - reset time - should seldom happen */ if ( (xd->first_replayed_event==XNEE_TRUE) && (last_elapsed == 0 )) { xd->first_replayed_event=XNEE_FALSE; xnee_verbose ((xd, "\txd->first_replayed_event==%d ----> dtime1=10 ; \n", XNEE_TRUE )); record_last_diff = 10 ; } speed = xnee_get_replay_speed(xd); if (speed==100) { sleep_amt = xnee_calc_sleep_amount( xd, last_diff, first_diff, record_last_diff, record_first_diff ) ; } else if (speed>100) { sleep_amt = xnee_calc_sleep_amount_fast( xd, last_diff, first_diff, record_last_diff, record_first_diff ) ; } else { sleep_amt = xnee_calc_sleep_amount_slow( xd, last_diff, first_diff, record_last_diff, record_first_diff ) ; } /* printf ("xnee_calc_sleep_amount : %lu : (%lu) : %lu : %lu ===> %d\n", last_diff, first_diff, record_last_diff, record_first_diff, sleep_amt); fflush(stdout); */ return sleep_amt; } /************************************************************** * * * xnee_replay_event_handler * * * * * **************************************************************/ int xnee_replay_event_handler( xnee_data* xd, xnee_intercept_data* xindata, long int last_elapsed) { int return_value=0; unsigned long sleep_amt = 0; int screen; int x ; int y ; xnee_verbose((xd, "--- xnee_replay_event_handler fake=%p\n ", (void*)xd->fake)); XTestGrabControl (xd->fake, True); xnee_verbose((xd, "--- xnee_replay_event_handler 0\n ")); XFlush(xd->fake); xnee_verbose((xd, "--- xnee_replay_event_handler 1\n ")); xnee_verbose((xd, "--- xnee_replay_event_handler switch on %d (assuming %d or %d )\n ", xindata->u.event.type, KeyPress, KeyRelease)); #ifdef XNEE_XINPUT_SUPPORT if ( xnee_is_forced_core_device_events(xd)) { if ( xindata->type == XNEE_PROTO_XINPUT_EVENT_MASTER ) { xnee_verbose ((xd, "ignore master event %d\n", xindata->type)); } else { #endif /* XNEE_XINPUT_SUPPORT*/ /* If we use the last args to the XTestFakexxx functions * it is harder to synchronize .... * XNEE_FAKE_SLEEP is a macro for usleep */ switch (xindata->u.event.type) { case KeyPress: sleep_amt = xnee_replay_event_handler_sleep_amt(xd, xindata, last_elapsed, 0); xnee_inc_events_replayed(xd); xnee_fake_key_event (xd, xindata->u.event.keycode, XNEE_PRESS, sleep_amt ); break; case KeyRelease: sleep_amt = xnee_replay_event_handler_sleep_amt(xd, xindata, last_elapsed, 0); xnee_inc_events_replayed(xd); xnee_fake_key_event (xd, xindata->u.event.keycode, XNEE_RELEASE, sleep_amt); break; case ButtonPress: sleep_amt = xnee_replay_event_handler_sleep_amt(xd, xindata, last_elapsed, 0); xnee_inc_events_replayed(xd); xnee_fake_button_event(xd, xindata->u.event.button, XNEE_PRESS, sleep_amt); break; case ButtonRelease: sleep_amt = xnee_replay_event_handler_sleep_amt(xd, xindata, last_elapsed, 0); xnee_inc_events_replayed(xd); xnee_fake_button_event(xd, xindata->u.event.button, XNEE_RELEASE, sleep_amt); break; case MotionNotify: xnee_inc_events_replayed(xd); screen = xindata->u.event.screen_nr ; x = (int) xindata->u.event.x ; y = (int) xindata->u.event.y ; if (xnee_is_screen_ok(xd, screen)) { /* xnee_set_verbose(xd); */ sleep_amt = xnee_replay_event_handler_sleep_amt(xd, xindata, last_elapsed, 0); /*xnee_unset_verbose(xd); */ xnee_fake_motion_event (xd, screen, x, y, sleep_amt); } else { ; } break; default: /* Do nothing */ xnee_verbose((xd, " Did NOT replay %d returning XNEE_NOT_REPLAYABLE \n", xindata->u.event.type)); /* restore time of last replayable event */ xnee_replay_event_handler_sleep_amt(xd, xindata, last_elapsed, 1); return_value= XNEE_NOT_REPLAYABLE; break; } #ifdef XNEE_XINPUT_SUPPORT } } else { if ( xindata->type == XNEE_PROTO_XINPUT_EVENT_SLAVE ) { sleep_amt = xnee_replay_event_handler_sleep_amt(xd, xindata, last_elapsed, 0); if ( ( xindata->u.xievent.type >= KeyPress ) && (xindata->u.xievent.type <= MotionNotify) ) { int screen = xindata->u.event.screen_nr ; int x = (int) xindata->u.xievent.x ; int y = (int) xindata->u.xievent.y ; int devid = (int) xindata->u.xievent.deviceid ; if ( xindata->u.xievent.type == MotionNotify) { xnee_fake_xi_motion_event (xd, screen, x, y, sleep_amt, devid); } else if (xindata->u.xievent.type == ButtonPress) { xnee_inc_events_replayed(xd); xnee_fake_xi_button_event(xd, xindata->u.event.button, XNEE_PRESS, sleep_amt, devid); } else if (xindata->u.xievent.type == ButtonRelease) { xnee_inc_events_replayed(xd); xnee_fake_xi_button_event(xd, xindata->u.event.button, XNEE_RELEASE, sleep_amt, devid); } else if (xindata->u.xievent.type == KeyPress) { xnee_inc_events_replayed(xd); xnee_fake_xi_key_event (xd, xindata->u.xievent.keycode, XNEE_PRESS, sleep_amt, devid); } else if (xindata->u.xievent.type == KeyRelease) { xnee_inc_events_replayed(xd); xnee_fake_xi_key_event (xd, xindata->u.xievent.keycode, XNEE_RELEASE, sleep_amt, devid); } } } else { xnee_verbose((xd, "Not replaying master device events\n")); } } #endif /* XNEE_XINPUT_SUPPORT*/ if (return_value==0) { ; } xnee_verbose((xd, "<--- xnee_replay_event_handler returning after handling of %d \n", xindata->u.event.type )); return return_value ; } /************************************************************** * * * xnee_fake_key_event_impl * * * * * **************************************************************/ int xnee_fake_key_event_impl (xnee_data* xd, int keycode, Bool bo, int dtime, int deviceid) { int i=0; int size= xd->distr_list_size; #ifdef XNEE_XINPUT_SUPPORT XDevice *xdevice; #endif /* XNEE_XINPUT_SUPPORT*/ if (!xnee_is_recorder (xd)) { if (xnee_is_swinput_playback(xd)) { fprintf (stdout, "fake swinput\n"); fprintf (stderr, "fake swinput\n"); } else if (deviceid != 0 ) { #ifdef XNEE_XINPUT_SUPPORT xdevice = xnee_get_xinput_device(xd, deviceid); xnee_fake_sleep (dtime); XTestFakeDeviceKeyEvent(xd->fake, xdevice, keycode, bo, NULL, 0, 1); #endif /* XNEE_XINPUT_SUPPORT*/ } else { xnee_fake_sleep (dtime); xnee_verbose((xd, "XTestFakeKeyEvent (%p, %d, %d, %d ))\n", (void*) xd->fake, (int) keycode, (int) bo, (int) dtime)); XTestFakeKeyEvent (xd->fake, keycode, bo, CurrentTime); XFlush(xd->fake); for (i=0; idistr_list[i].dpy, True); xnee_verbose((xd, "XTestFakeKeyEvent (%p, %d, %d, %d )) **\n", (void*) xd->distr_list[i].dpy, (int) keycode, (int) bo, (int) dtime)); XTestFakeKeyEvent (xd->distr_list[i].dpy, keycode, bo, dtime); XFlush (xd->distr_list[i].dpy); } } } xnee_verbose((xd,"\n\n\n")); return (XNEE_OK); } /************************************************************** * * * xnee_fake_key_mod_event * * * * * **************************************************************/ int xnee_fake_key_mod_event (xnee_data* xd, xnee_script_s *xss, Bool bo, int dtime) { int i=0; int size= xd->distr_list_size; int mods=0; if (!xnee_is_recorder (xd)) { for (mods=0;(mods<8)&&(xss->kc.mod_keycodes[mods]!=0);mods++) { xnee_fake_sleep (dtime); xnee_fake_key_event (xd, xss->kc.mod_keycodes[mods], bo, 0); } xnee_fake_sleep (dtime); xnee_verbose((xd, "XTestFakeKeyEvent (%p, %d, %d, %d ))\n", (void*) xd->fake, (int) xss->kc.kc, (int) bo, (int) dtime)); XTestFakeKeyEvent (xd->fake, xss->kc.kc, bo, CurrentTime); XFlush(xd->fake); } for (i=0; idistr_list[i].dpy, True); for (mods=0;(mods<8)&&(xss->kc.mod_keycodes[mods]!=0);mods++) { xnee_verbose((xd, "XTestFakeKeyEvent modifier \n")); xnee_fake_key_event (xd, xss->kc.mod_keycodes[mods], True, 0); } xnee_verbose((xd, "XTestFakeKeyEvent (%p, %d, %d, %d )) **\n", (void*) xd->distr_list[i].dpy, (int) xss->kc.kc, (int) bo, (int) dtime)); XTestFakeKeyEvent (xd->distr_list[i].dpy, xss->kc.kc, bo, dtime); XFlush (xd->distr_list[i].dpy); } xnee_verbose((xd,"\n\n\n")); return (XNEE_OK); } /************************************************************** * * * xnee_fake_button_event * * * * * **************************************************************/ int xnee_fake_button_event_impl (xnee_data* xd, int button, Bool bo , int dtime, int deviceid) { int i=0; int size= xd->distr_list_size; #ifdef XNEE_XINPUT_SUPPORT XDevice *xdevice; #endif /* XNEE_XINPUT_SUPPORT*/ if (!xnee_is_recorder (xd)) { if (xnee_is_swinput_playback(xd)) { fprintf (stdout, "fake swinput\n"); fprintf (stderr, "fake swinput\n"); } else if (deviceid != 0 ) { #ifdef XNEE_XINPUT_SUPPORT xdevice = xnee_get_xinput_device(xd, deviceid); xnee_fake_sleep (dtime); XTestFakeDeviceButtonEvent(xd->fake, xdevice, button, bo, xnee_xi_last_know_pointer_pos, 2, 1); #endif /* XNEE_XINPUT_SUPPORT*/ } else { xnee_fake_sleep (dtime); xnee_verbose((xd, "XTestFakeButtonEvent (%p, %d, %d, %d)) \n", (void*) xd->fake, (int) button, (int) bo, (int) dtime)); XTestFakeButtonEvent (xd->fake, button, bo, 0); } for (i=0; idistr_list[i].dpy, True); xnee_verbose((xd, "XTestFakeButtonEvent (%p, %d, %d, %d)) **\n", (void*) xd->distr_list[i].dpy, (int) button, (int) bo, (int) dtime)); XTestFakeButtonEvent (xd->distr_list[i].dpy, button, bo, dtime); XFlush (xd->distr_list[i].dpy); } XFlush(xd->fake); } return (XNEE_OK); } /************************************************************** * * * xnee_fake_motion_event * * * * * **************************************************************/ int xnee_fake_motion_event_impl (xnee_data* xd, int screen, int x, int y, unsigned long dtime, int deviceid) { int i=0; int size= xd->distr_list_size; int new_x; int new_y; #ifdef XNEE_XINPUT_SUPPORT int axes[3]; XDevice *xdevice; #endif /* XNEE_XINPUT_SUPPORT*/ xnee_verbose((xd, "---> xnee_fake_motion_event\n")); xnee_verbose((xd, "--- delay = %d\n", (int)dtime)); if (!xnee_is_recorder (xd)) { /* printf (" res: %dx%d\n", x, y); */ /* printf (" res: %dx%d\n", new_x, new_y); */ new_x = xnee_resolution_newx(xd,x) + xd->res_info.x_offset; new_y = xnee_resolution_newy(xd,y) + xd->res_info.y_offset; if (xnee_is_swinput_playback(xd)) { fprintf (stdout, "fake swinput\n"); fprintf (stderr, "fake swinput\n"); } else if (deviceid == 0 ) { xnee_fake_sleep (dtime); xnee_verbose((xd, "XTestFakeMotionEvent (%p, %d, %d, %d, %d))\n", (void*) xd->fake, (int) screen, (int) new_x, (int) new_y, 0)); XTestFakeMotionEvent(xd->fake, screen, new_x, new_y, 0); } else { #ifdef XNEE_XINPUT_SUPPORT axes[0] = new_x; axes[1] = new_y; xnee_verbose((xd, "--- xi find device\n")); xdevice = xnee_get_xinput_device(xd, deviceid); xnee_verbose((xd, "--- xi devices found? \n")); if (xdevice==NULL) { fprintf(stderr, "Couldn't find device for device id: %d\n", deviceid); return XNEE_XINPUT_EXTENSION_FAILURE; } xnee_fake_sleep (dtime); xnee_verbose((xd, "XTestFakeDeviceMotionEvent (%d, %d, %d, {%d, %d}, %d, %d))\n", (int) xd->fake, (int) xdevice, (int) False, (int) new_x, (int) new_y, 2,0)); xnee_xi_last_know_pointer_pos[0]=axes[0]; xnee_xi_last_know_pointer_pos[1]=axes[1]; XTestFakeDeviceMotionEvent(xd->fake, xdevice, False, 0, axes, 2, 0); #endif /* XNEE_XINPUT_SUPPORT*/ } for (i=0; idistr_list[i].dpy, True); */ xnee_verbose((xd, "XTestFakeMotionEvent (%p, %d, %d, %d, %d)) **\n", (void*) xd->distr_list[i].dpy, (int) 0, (int) x, (int) y, 10)); XTestFakeMotionEvent(xd->distr_list[i].dpy, 0, x, y, CurrentTime); XFlush (xd->distr_list[i].dpy); } XFlush(xd->fake); } xnee_verbose((xd, " <------- xnee_fake_motion_event\n")); return (XNEE_OK); } /************************************************************** * * * xnee_fake_relative_motion_event * * * * * **************************************************************/ int xnee_fake_relative_motion_event (xnee_data* xd, int x, int y, unsigned long dtime) { int i=0; int size= xd->distr_list_size; xnee_verbose((xd, "---> xnee_fake_relative_motion_event\n")); if (!xnee_is_recorder (xd)) { xnee_fake_sleep (dtime); xnee_verbose((xd, "XTestFakeRelativeMotionEvent (%p, %d, %d, %d))\n", (void*) xd->fake, (int) x, (int) y, 0)); XTestFakeRelativeMotionEvent(xd->fake, x, y, 0); XFlush(xd->fake); } for (i=0; idistr_list[i].dpy, True); xnee_verbose((xd, "XTestFakeRelativeMotionEvent (%p, %d, %d, %d)) **\n", (void*) xd->distr_list[i].dpy, (int) x, (int) y, 10)); XTestFakeRelativeMotionEvent(xd->distr_list[i].dpy, x, y, CurrentTime); XFlush (xd->distr_list[i].dpy); } xnee_verbose((xd, " <------- xnee_fake_relative_motion_event\n")); return (XNEE_OK); } int xnee_type_file(xnee_data *xd) { char tmp[256]="" ; int i; int mode=123; xnee_script_s xss; xnee_verbose ((xd,"---> xnee_type_file\n")); xnee_setup_display (xd); xnee_replay_init (xd); xnee_verbose ((xd,"--- xnee_type_file\n")); if (!xnee_has_xtest_extension(xd)) { return(XNEE_NO_TEST_EXT); } xnee_verbose ((xd,"--- xnee_type_file\n")); while (fgets(tmp, 256, xd->rt_file)!=NULL) { xnee_verbose ((xd," xnee_type_file loop read size=" SIZE_T_PRINTF_FMT " \"%s\"\n", strlen(tmp),tmp)); for ( i=0 ; (size_t)i #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_fake.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_callback.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_fileop.h" #include "libxnee/xnee_alloc.h" #include "libxnee/xnee_xinput.h" xnee_data *xd_global; int xnee_prepare(xnee_data *xd) { int ret; xnee_verbose((xd, "--> xnee_prepare\n")); ret = xnee_open_files(xd); if (ret == XNEE_OK) { ret = xnee_rep_prepare(xd); } xnee_verbose((xd, "<-- xnee_prepare returning %d\n", ret)); return ret; } /************************************************************** * * * xnee_get_max_range * * * * * **************************************************************/ int xnee_get_max_range (xnee_data *xd) { int i=0; int max_val=0; if (!xd->record_setup->active) { max_val = 0; } else { for ( i=0 ; ixnee_info.data_ranges[i], max_val); } xnee_verbose((xd, "Returning max_val=%d\n", max_val)); /* Returns the number of RecordRanges allocated so far */ } return max_val; } /************************************************************** * * * xnee_close_down * * * * * **************************************************************/ void xnee_close_down(xnee_data* xd) { int ret ; if (xd==NULL) { return; } XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0 \n" )); xnee_verbose((xd, "Freeing context ")); xnee_verbose((xd, "xnee_close_down : ungrab -----> \n")); ret = xnee_ungrab_keys (xd); if ( xd->grab_keys!= NULL) { xnee_free(xd->grab_keys); } xd->grab_keys = NULL ; xnee_verbose((xd, "xnee_close_down : ungrab <---- %d\n", ret)); xnee_verbose((xd, "xnee_close_down : xnee_reset_autorepeat ----> \n")); ret = xnee_reset_autorepeat (xd_global); xnee_verbose((xd, "xnee_close_down : xnee_reset_autorepeat <---- %d\n", ret)); if (xd->plugin_handle!=NULL) { xnee_verbose((xd, "Closing plugin lib ")); ret = xnee_dlclose(xd, xd->plugin_handle); xnee_verbose((xd, "Closing plugin lib <<--- %d\n", ret)); } #ifdef XNEE_USE_SEMAPHORES if (xd->buf_sem!=0) { xnee_verbose((xd, "Destroying buffer semaphore ")); ret = sem_destroy(xd->buf_sem); xnee_verbose((xd, "Destroying buffer semaphore <--- %d\n ", ret)); } #endif xnee_verbose((xd, "Freeing modifier mapping memory %p ", (void*)xd->map)); XFreeModifiermap(xd->map); xnee_verbose((xd, "Closing displays on host ")); if ( xd->display==NULL ) { XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.1 \n" )); xnee_verbose((xd, "localhost")); } else { XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.2 \n" )); xnee_verbose((xd, "%s\n", xd->display)); xnee_free(xd->display); xd->display=NULL; } if ( xd->control!=NULL) { XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.3 \n" )); xnee_verbose((xd, "Closing displays control=%p \n", (void*) xd->control)); XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.3.1 \n" )); XCloseDisplay ( xd->control ); xd->control = NULL; } if ( xd->fake!=NULL) { XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.3 \n" )); xnee_verbose((xd, "Closing displays fake=%p \n", (void*) xd->fake)); XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.3.1 \n" )); XCloseDisplay ( xd->fake ); xd->fake = NULL; } XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.4 \n" )); if ( xd->data!=NULL) { /* printf ("close data in %s ---> %d\n", __func__, xd->data); */ xnee_verbose((xd, "Closing displays data=%p \n", (void*) xd->data)); xnee_verbose((xd, "Closing displays data=%p pending:%d\n", (void*) xd->data, XPending(xd->data))); XFlush(xd->data); xnee_verbose((xd, "Closing displays data=%p flushed\n", (void*) xd->data)); usleep(1000*100); xnee_verbose((xd, "Closing displays data=%p slept\n", (void*) xd->data)); /* XCloseDisplay ( xd->data ); */ } XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.41 \n" )); if ( xd->grab!=NULL) { xnee_verbose((xd, "Closing displays grab=%p \n", (void*) xd->grab)); XFlush(xd->grab); usleep(1000*1000); XCloseDisplay ( xd->grab ); } XNEE_DEBUG ( (stderr ," --> xnee_close_down() at 0.5 \n" )); xnee_verbose((xd, "closing fds\n")); xnee_verbose((xd ," -- xnee_close_down() free data_file \n" )); ret = xnee_free_file (xd, xd->data_name, xd->data_file); xd->data_file=NULL; xnee_verbose((xd ," -- xnee_close_down() free data_file <-- %d\n", ret)); xnee_verbose((xd ," -- xnee_close_down() free rc_file \n" )); ret = xnee_free_file (xd, xd->rc_name, xd->rc_file); xd->rc_file=NULL; xnee_verbose((xd ," -- xnee_close_down() free rc_file <-- %d\n", ret)); xnee_verbose((xd ," -- xnee_close_down() free rt_file \n" )); ret = xnee_free_file (xd, xd->rt_name, xd->rt_file); xd->rt_file=NULL; xnee_verbose((xd ," -- xnee_close_down() free rt_file <-- %d\n", ret)); xnee_verbose((xd ," -- xnee_close_down() free err_file\n" )); ret = xnee_free_file (xd, xd->err_name, xd->err_file); xd->err_file=NULL; ret = xnee_free_file (xd, xd->out_name, xd->out_file); xd->out_file=NULL; ret = xnee_free_xnee_data(xd); xd=NULL; } int xnee_set_x_server_version(xnee_data *xd) { static int vendrel ; static Display *dpy; if (xd==NULL) { return XNEE_MEMORY_FAULT; } dpy = XOpenDisplay(xd->display); if (dpy==NULL) { return XNEE_NOT_OPEN_DISPLAY; } xd->x_vendor_name = ServerVendor (dpy); vendrel = VendorRelease(dpy); xd->x_version_major = vendrel / 10000000 ; xd->x_version_minor = (vendrel / 100000) % 100 ; xd->x_version_minor_sub = (vendrel / 1000) % 100 ; return XNEE_OK; } /************************************************************** * * * xnee_init * * * * * **************************************************************/ int xnee_init(xnee_data* xd) { int ret ; int i ; char *tmp; if (xd == NULL) { return XNEE_MEMORY_FAULT; } xd_global = xd ; xd->app_args = NULL; xd->data = NULL; xd->control = NULL; xd->fake = NULL; /* xd->human_print = False ; */ xd->plugin_handle = NULL; xd->rec_callback = xnee_record_dispatch ; xd->rep_callback = xnee_replay_dispatch ; xd->buffer_verbose_fp= fprintf ; xd->verbose_fp = vfprintf ; xd->data_fp = fprintf ; /* TODO xd->sync_fun = xnee_replay_dispatch ; */ xd->verbose = False ; xd->buf_verbose = False ; xd->all_clients = True ; xd->sync = True ; xd->mode = XNEE_NOMODE ; xd->xnee_info.store_window_pos = 0; /*@access FILE@*/ xd->data_file = (FILE*) stdin ; /*@access FILE@*/ xd->out_file = (FILE*) stdout ; xd->saved_out_file= (FILE*) stdout ; /*@access FILE@*/ xd->err_file = (FILE*) stderr ; xd->saved_err_file= (FILE*) stderr ; /*@access FILE@*/ xd->rc_file = NULL ; /*@access FILE@*/ xd->rt_file = (FILE*) stdin ; /*@access FILE@*/ xd->buffer_file = (FILE*) stderr ; xd->data_name = NULL ; xd->out_name = NULL ; xd->err_name = NULL ; xd->rc_name = NULL ; xd->rt_name = NULL ; tmp = getenv ((const char*)"DISPLAY"); if ( tmp != NULL ) { xd->display = strdup(tmp); } else { xd->display = NULL; } xd->distr_list = NULL ; xd->distr_list_size = 0 ; xd->cont = True ; xd->force_replay = False; xnee_unset_recall_window_pos (xd); xd->first_read_time =0; xd->speed_percent = 100 ; #ifdef XNEE_USE_SEMAPHORES xd->buf_sem = (sem_t *) malloc (sizeof(sem_t)); xnee_sem_init (xd, xd->buf_sem, 0, 1); #endif xd->autorepeat_saved = 0 ; xd->keep_autorepeat = 0 ; xd->button_pressed=0; /* Not done until needed xnee_init_names(); */ xd->no_reparent_recording = 0; xd->max_nr_of_moves = 10; for (i=0;ixnee_info.data_ranges[i]=0; } xnee_new_grab_keys(xd); xd->in_use = 1; /* * resolution */ xnee_set_default_rec_resolution (xd); /* * meta data */ xd->meta_data.sum_max = 0; xd->meta_data.sum_min = 0; xd->meta_data.total_diff = 0; xd->meta_data.cached_max = 0; xd->meta_data.cached_min = 0; xd->meta_data.sum_max_threshold = XNEE_DEFAULT_MAX_THRESHOLD; xd->meta_data.sum_min_threshold = XNEE_DEFAULT_MIN_THRESHOLD; xd->meta_data.tot_diff_threshold = XNEE_DEFAULT_TOT_THRESHOLD; xd->retype.key_press_delay = 100; xd->retype.key_release_delay = 100; xd->res_info.x_offset = 0; xd->res_info.y_offset = 0; xnee_init_xinput(xd); /* Init Recording variables * Since those are used when recording and replaying. */ xnee_record_init (xd); ret = xnee_resolution_init (xd); XNEE_RETURN_IF_ERR(ret); xnee_set_x_server_version(xd); xnee_set_replay_backend(xd, XNEE_REPLAY_XNEE); /* Set the signal handler the libxnee's built in */ (void) signal (SIGINT, signal_handler); /* Set the error handler the libxnee's built in */ (void) XSetErrorHandler (handle_xerr); xnee_verbose((xd, "<--- xnee_init\n")); return XNEE_OK; } /************************************************************** * * * xnee_stop_session * * * * * **************************************************************/ int xnee_stop_session( xnee_data* xd) { int ret ; xnee_verbose((xd, " ---> xnee_stop_session\n" )); xnee_verbose((xd, "xnee_stop_session : ungrab -----> \n")); xnee_verbose((xd, "xnee_stop_session : ungrab <---- \n")); ret = xnee_reset_autorepeat (xd); xnee_verbose((xd, " <--- xnee_stop_session %d\n", ret )); return (0); } int xnee_process_count(int mode) { static int continue_process = 0; /* if we are to use make sure xd != NULL */ if (mode == XNEE_PROCESS_RESET ) continue_process=0; else if (mode == XNEE_PROCESS_INC ) continue_process++; else if (mode == XNEE_PROCESS_DEC ) continue_process--; /* we need not care about XNEE_PROCESS_GET */ return continue_process; } int xnee_process_replies(xnee_data *xd) { int last_count; int count; if ( (xd==NULL) || (xd->data==NULL) ) { return (XNEE_MEMORY_FAULT); } last_count=xnee_process_count (XNEE_PROCESS_GET); (void) xnee_process_count (XNEE_PROCESS_RESET); /* it is more important to handle all data in the data display than to check for grabbed key+modifier */ while ( (1!=0) ) { XRecordProcessReplies (xd->data); /* XX reasons to stop calling RECORD to check buffer * 1) no data in buffer * 2) no data in buffer * 3) we have received XX data .. it is time to check if * user has presed any modifier+key * 4) number of data to record exceeded */ count=xnee_process_count (XNEE_PROCESS_GET); if ( ( count <= 0) || ( last_count==count) || ( count > 20 ) ) { break; } last_count=count; } (void)xnee_process_count (XNEE_PROCESS_RESET); return XNEE_OK; } int xnee_rep_prepare(xnee_data *xd) { int ret ; xnee_verbose((xd, "--> xnee_rep_prepare \n")); /* * Print settings * only done if verbose mode */ ret = xnee_print_distr_list(xd, NULL); XNEE_RETURN_IF_ERR (ret); /* ret = xnee_set_ranges(xd); */ /* XNEE_RETURN_IF_ERR (ret); */ xnee_set_events_replayed(xd,0); ret = xnee_setup_display (xd); if (ret!=XNEE_OK) { xnee_verbose((xd, "<-- xnee_rep_prepare returning %d\n", ret)); return ret; } if ( xnee_is_replayer(xd) != 0 ) { xnee_verbose((xd, "Entering main loop (replayer) to read META data \n")); ret = xnee_replay_main_loop(xd, XNEE_REPLAY_READ_META_DATA); if (!( ( ret == XNEE_REPLAY_READ_META_DATA ) || ( ret == XNEE_REPLAY_READ_REPLAY_DATA) || ( ret == XNEE_OK ) )) { return ret; } } /* * Setup / Test Displays and Extensions * */ xnee_verbose((xd, "-- xnee_rep_prepare - setup display\n")); ret = xnee_setup_display (xd); if (ret!=XNEE_OK) { xnee_verbose((xd, "<-- xnee_rep_prepare returning %d\n", ret)); return ret; } xnee_verbose((xd, "-- xnee_rep_prepare - setup record ext \n")); ret = xnee_setup_recordext (xd); if ( xnee_is_recorder(xd) != 0) { if (ret==XNEE_NO_PROT_CHOOSEN) { xnee_verbose((xd, "<-- xnee_rep_prepare returning %d\n", ret)); return ret; } } /* * If no recording client, init xnee_sync * */ if ( xnee_is_recorder(xd) == 0 ) { xnee_replay_init (xd); } xnee_verbose((xd, "-- xnee_rep_prepare - set auto repeat\n")); /* * Save repeat mode so we can reset it after we are done * */ ret = xnee_set_autorepeat (xd); XNEE_RETURN_IF_ERR (ret); /* ret = xnee_refresh_ranges(xd); */ /* XNEE_RETURN_IF_ERR (ret); */ xnee_verbose((xd, "<-- xnee_rep_prepare returning %d\n", XNEE_OK)); return XNEE_OK; } int handle_xerr(Display *dpy, XErrorEvent *errevent) { /*@out@*/ char tmp[100]=""; fprintf (stderr, "Error received:\n"); fprintf (stderr, "\terror type %u (0x%x)\n", errevent->type,errevent->type); fprintf (stderr, "\terror code %u (0x%x)\n", errevent->error_code,errevent->error_code); fprintf (stderr, "\terror code major %u (0x%x)\n", errevent->request_code,errevent->request_code); fprintf (stderr, "\terror code minor %u (0x%x)\n", errevent->minor_code,errevent->minor_code); fprintf (stderr, "\tdisplay %p\n", (void*)dpy); XGetErrorText (dpy, (int) errevent->error_code, tmp, 100); fprintf (stderr, " %s\n", (char *)tmp); fprintf (stderr, "This error can be ignored\n"); return XNEE_OK; } /************************************************************** * * * xnee_err_handler * * * * * **************************************************************/ int xnee_err_handler(Display* dpy, XErrorEvent* ev) { int len=100; int ret ; /*@out@*/ char tmp[100]=""; printf ("xnee - X11 error handler \n"); printf (" type %d \n", ev->type); printf (" serial %lu \n", ev->serial); printf (" error code %u \n", ev->error_code); printf (" major code %u \n", ev->request_code); printf (" minor code %u \n", ev->minor_code); ret = XGetErrorText (dpy, (int) ev->error_code, tmp, len); if (ret!=0) { fprintf (stderr, "Could not look up error string for error %d %lu %c %c %c \n", ev->type, ev->serial, ev->error_code, ev->request_code, ev->minor_code); } printf (" Message: %s\n", tmp); return ev->type; } /************************************************************** * * * signal_handler * * * * * **************************************************************/ void signal_handler(int sig) { int ret; switch (sig) { case SIGTERM: fprintf (stderr, "sighandler SIGTERM (%d)\n", sig); ret = xnee_ungrab_keys(xd_global); XNEE_PRINT_ERROR_IF_NOT_OK(ret); ret = xnee_reset_autorepeat (xd_global); XNEE_PRINT_ERROR_IF_NOT_OK(ret); xnee_set_interrupt_action(xd_global); break; case SIGINT: fprintf (stderr, "sighandler SIGINT (%d)\n", sig); ret = xnee_ungrab_keys(xd_global); XNEE_PRINT_ERROR_IF_NOT_OK(ret); ret = xnee_reset_autorepeat (xd_global); XNEE_PRINT_ERROR_IF_NOT_OK(ret); xnee_set_interrupt_action(xd_global); break; default: fprintf (stderr, "signal_handler error. Unxpected signal (%d)\n .... leaving", sig); xnee_set_interrupt_action(xd_global); break; } } static void xnee_record_update_time_left(xnee_data *xd) { static signed long time_stamp = 0 ; struct timeval cur_time; struct timezone zoneData; /* get current time */ if( gettimeofday( &cur_time, &zoneData) == 0 ) { if ( time_stamp == 0 ) { time_stamp = cur_time.tv_sec ; } else if ( cur_time.tv_sec > time_stamp ) { xd->xnee_info.time_recorded++; time_stamp = cur_time.tv_sec ; } else { ; } } else { ; } } int xnee_more_to_record(xnee_data *xd) { int evs; int dats; int tims; /* fprintf (stderr, " [ %d(%d) %d(%d) %d ] \n", xnee_get_events_left(xd), xd->xnee_info.events_recorded, xnee_get_data_left(xd), xd->xnee_info.data_recorded, xnee_get_time_left(xd)); */ evs = xnee_get_events_left(xd); if (evs<0) evs = 1; dats = xnee_get_data_left(xd); if (dats<0) dats = 1; xnee_record_update_time_left(xd); tims = xnee_get_time_left(xd); if (tims<0) tims = 1; return (int) ( (evs!=0) && (dats!=0) && (tims!=0) ); } xnee-3.19/libxnee/src/xnee_fileop.c0000664000000000000000000001166611461645376014203 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_fileop.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_alloc.h" #include "libxnee/print_varargs.h" int xnee_free_file (xnee_data *xd, /*@null@*/ char *file_name, /*@null@*/ FILE* file) { if ( file_name != NULL) { xnee_verbose((xd, "Closing file=%s fd=%p\n", file_name, (void*)file)); } /* @owned@ */ /* char *tmp = file_name ; */ if ( file_name != NULL) { /* Tell splint we REALLY want to cast FILE* to an int .... it won't believe us else */ /*@access FILE@*/ XNEE_FREE_IF_NOT_NULL (file_name); } if (file!=NULL) { XNEE_FCLOSE_IF_NOT_NULL ( file ) ; } return XNEE_OK; } int xnee_open_err_file(xnee_data *xd) { char *file_name; file_name = xnee_get_err_name(xd); if (file_name!=NULL) { xnee_verbose((xd, "--- xnee_open_files: handling err\n")); if ((xnee_check (file_name, "stderr", "STDERR") == XNEE_OK) && ((xnee_check (file_name, "-", "-") == XNEE_OK) ) ) { xnee_verbose((xd, "--- xnee_open_files: opening err: %s\n", xd->err_name)); if ( xd->err_file != xd->saved_err_file ) { XNEE_FCLOSE_IF_NOT_NULL(xd->err_file); } xd->err_file = fopen (xd->err_name,"w"); if (xd->err_file==NULL) { return XNEE_FILE_NOT_FOUND; } xnee_verbose((xd, "--- xnee_open_files: opening err: %s OK\n", xd->err_name)); } } return XNEE_OK; } int xnee_open_files(xnee_data *xd) { char *file_name; xnee_verbose((xd, "---> xnee_open_files\n")); xnee_open_err_file(xd); if ( (xnee_is_recorder(xd) != 0) ) { xnee_verbose((xd, "--- xnee_open_files: is recorder\n")); file_name = xnee_get_out_name(xd); if (file_name!=NULL) { xnee_verbose((xd, "--- xnee_open_files: handling out\n")); if ( xnee_check (file_name, "stdout", "STDOUT") == 0 ) { xnee_verbose((xd, "--- xnee_open_files: opening out: %s\n", xd->out_name)); if ( xd->out_file != xd->saved_out_file ) { XNEE_FCLOSE_IF_NOT_NULL(xd->out_file); } xd->out_file = fopen (xd->out_name,"w"); if (xd->out_file==NULL) return XNEE_FILE_NOT_FOUND; } } } else if ( xnee_is_replayer(xd) != 0 ) { xnee_verbose((xd, "--- xnee_open_files: is replayer\n")); file_name = xnee_get_data_name(xd); if (file_name!=NULL) { xnee_verbose((xd, "--- xnee_open_files: handling data (in)\n")); if ( xnee_check (file_name, "stdin", "STDIN") == 0 ) { xnee_verbose((xd, "--- xnee_open_files: opening data: %s\n", xd->data_name)); XNEE_FCLOSE_IF_NOT_NULL(xd->data_file); xd->data_file = fopen (xd->data_name,"r"); if (xd->data_file==NULL) return XNEE_FILE_NOT_FOUND; } } } else if ( xnee_is_retyper(xd) != 0 ) { xnee_verbose((xd, "--- xnee_open_files: is retyper\n")); file_name = xnee_get_rt_name(xd); xnee_verbose((xd, "--- xnee_open_files: retype file %s\n", file_name)); if (file_name!=NULL) { xnee_verbose((xd, "--- xnee_open_files: handling retype (in)\n")); if ( xnee_check (file_name, "stdin", "STDIN") == 0) { xnee_verbose((xd, "--- xnee_open_files: opening retype: %s\n", xd->rt_name)); XNEE_FCLOSE_IF_NOT_NULL(xd->rt_file); xd->rt_file = fopen (xd->rt_name,"r"); if (xd->rt_file==NULL) return XNEE_FILE_NOT_FOUND; } } } return XNEE_OK; } xnee-3.19/libxnee/src/feedback.c0000775000000000000000000002151011205723263013406 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 * 2009 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include "libxnee/xnee.h" #include "libxnee/xnee_dl.h" #include "libxnee/feedback.h" #include "libxnee/xnee_setget.h" #ifdef HAVE_STDARG_H #include #else #include #endif int xnee_xosd_close(xnee_data *xd); /* xosd fun/lib pointers */ static void *xosd_lib = NULL ; static void *osd; static int feedback_used = XNEE_UNDEFINED_FEEDBACK; static int feedback_requested = XNEE_XOSD_FEEDBACK; typedef void* (*xosd_create_fun) (int) ; typedef void* (*xosd_int_fun) (void*, int) ; typedef void* (*xosd_char_fun) (void*, char*) ; typedef void* (*xosd_print_fun) (void*, int, int, char *) ; typedef xosd_create_fun *xosd_create_fun_ptr; typedef xosd_int_fun *xosd_int_fun_ptr; typedef xosd_char_fun *xosd_char_fun_ptr; typedef xosd_print_fun *xosd_print_fun_ptr; static xosd_print_fun xosd_print ; static char *xosd_font ; static char *xosd_default_font = "-*-terminus-medium-r-*-*-*-320-*-*-*-*-*-*"; static xosd_create_fun xosd_create = NULL ; static xosd_int_fun xosd_int = NULL ; static xosd_char_fun xosd_char = NULL ; const char * xnee_get_xosd_font_impl(xnee_data *xd) { xnee_verbose((xd, "xnee_get_xosd_font_impl\n")); return xosd_font; } int xnee_set_xosd_font_impl(xnee_data *xd, char *font_str) { if ( (font_str==NULL) || strlen(font_str)<2) { return XNEE_XOSD_FAILURE; } xnee_verbose((xd, "xnee_set_xosd_font_impl\n")); XNEE_FREE_IF_NOT_NULL(xosd_font); xosd_font = strdup(font_str); if ( xosd_font == NULL) { return XNEE_XOSD_FAILURE; } return XNEE_OK; } static int xnee_setup_xosd(xnee_data *xd) { xosd_create_fun_ptr xosd_create_p ; xosd_int_fun_ptr xosd_int_p ; xosd_char_fun_ptr xosd_char_p ; xosd_print_fun_ptr xosd_print_p ; xosd_lib = xnee_dlopen (xd, "libxosd.so", RTLD_LAZY); if (xosd_lib==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; return XNEE_XOSD_FAILURE ; } xosd_create_p = &xosd_create; *(void**)(xosd_create_p) = xnee_dlsym(xd, xosd_lib, "xosd_create"); xosd_create = (xosd_create_fun) *xosd_create_p; if (xosd_create==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; return XNEE_XOSD_FAILURE ; } osd = xosd_create(2); if (osd==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; xnee_dlclose(xd, xosd_lib); return XNEE_XOSD_FAILURE ; } xosd_int_p = &xosd_int; *(void**)(xosd_int_p) = xnee_dlsym(xd, xosd_lib, "xosd_set_shadow_offset"); if (xosd_int==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; free(osd); xnee_dlclose(xd, xosd_lib); return XNEE_XOSD_FAILURE ; } xosd_int(osd, 2); *(void**)xosd_int_p = xnee_dlsym(xd, xosd_lib, "xosd_set_timeout"); xosd_int = (xosd_int_fun) *xosd_int_p; if (xosd_int==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; free(osd); xnee_dlclose(xd, xosd_lib); return XNEE_XOSD_FAILURE ; } xosd_int(osd, FEEDBACK_TIMEOUT); xosd_char_p = &xosd_char; *(void**)xosd_char_p = xnee_dlsym(xd, xosd_lib, "xosd_set_font"); if (xosd_char==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; free(osd); xnee_dlclose(xd, xosd_lib); return XNEE_XOSD_FAILURE ; } xnee_set_xosd_font(xd, xosd_default_font); xosd_char(osd, xosd_font); *(void**)xosd_char_p = xnee_dlsym(xd, xosd_lib, "xosd_set_colour"); xosd_char = (xosd_char_fun) *xosd_char_p; if (xosd_char==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; free(osd); xnee_dlclose(xd, xosd_lib); return XNEE_XOSD_FAILURE ; } xosd_char(osd, "yellow"); xosd_print_p = &xosd_print; *(void**)xosd_print_p = xnee_dlsym(xd, xosd_lib, "xosd_display"); if (xosd_print==NULL) { feedback_used=XNEE_UNDEFINED_FEEDBACK; free(osd); xnee_dlclose(xd, xosd_lib); return XNEE_XOSD_FAILURE ; } return XNEE_OK; } static int feedback_init(xnee_data *xd) { int ret ; /* this should not be the case */ if ( feedback_requested==XNEE_UNDEFINED_FEEDBACK ) { feedback_used = XNEE_NO_FEEDBACK ; return XNEE_FEEDBACK_FAILURE; } /* this happends when we already have init the requested feedback */ if ( feedback_used==feedback_requested ) { return XNEE_OK; } /* OK a new feedback is requested */ /* anything to close ? */ /* is the current XOSD? .. then close it */ if ( feedback_used==XNEE_XOSD_FEEDBACK ) { xnee_xosd_close(xd); } else if ( feedback_used==XNEE_STDERR_FEEDBACK ) { ; } if ( feedback_requested==XNEE_XOSD_FEEDBACK ) { ret = xnee_setup_xosd(xd); if (ret == XNEE_OK) { feedback_used = XNEE_XOSD_FEEDBACK; } } else if (feedback_requested==XNEE_STDERR_FEEDBACK ) { ret = XNEE_OK; feedback_used = XNEE_STDERR_FEEDBACK; } else if (feedback_requested==XNEE_NO_FEEDBACK ) { ret = XNEE_OK; feedback_used = XNEE_NO_FEEDBACK; } else { ret = XNEE_OK; feedback_used = XNEE_UNDEFINED_FEEDBACK; } return ret; } int xnee_xosd_close(xnee_data *xd) { xnee_verbose((xd, "xnee_xosd_close\n")); XNEE_FREE_IF_NOT_NULL(osd); if (xosd_lib!=NULL) { xnee_dlclose(xd, xosd_lib); } XNEE_FREE_IF_NOT_NULL(xosd_font); return XNEE_OK; } int xnee_feedback_close(xnee_data *xd) { xnee_xosd_close(xd); return XNEE_OK; } #ifdef HAVE_STDARG_H int feedback(xnee_data *xd, char *str, ... ) { va_list ap; static char buf[200]; int conv; int ret; #else int feedback(xnee_data *xd, char *str, va_dcl valist) { char *str; va_list ap; int conv; int ret; va_start(argp); str = va_arg(argp, char *); #endif if (str==NULL) return XNEE_SYNTAX_ERROR; conv = vsnprintf (buf, 200, str, ap ); if (conv>=200) conv=199; buf[conv]='\0'; feedback_init(xd); if (feedback_used==XNEE_XOSD_FEEDBACK) { xosd_print(osd, 0, XOSD_string, buf); ret = XNEE_OK; } else if (feedback_used==XNEE_STDERR_FEEDBACK) { fprintf (stderr,"%s", buf); ret = XNEE_OK; } else if (feedback_used==XNEE_NO_FEEDBACK) { ret = XNEE_OK; } else { ret = XNEE_FEEDBACK_FAILURE; } va_start(ap, str); va_end(ap); return ret; } int xnee_set_stderr_feedback(xnee_data *xd) { xnee_verbose((xd, "xnee_set_stderr_feedback\n")); feedback_requested=XNEE_STDERR_FEEDBACK; return XNEE_OK; } int xnee_get_requested_feedback(xnee_data *xd) { xnee_verbose((xd, "xnee_get_requested_feedback\n")); return feedback_requested; } int xnee_set_no_feedback(xnee_data *xd) { xnee_verbose((xd, "xnee_set_no_stderr_feedback\n")); feedback_requested=XNEE_NO_FEEDBACK; return XNEE_OK; } int xnee_set_xosd_feedback(xnee_data *xd) { xnee_verbose((xd, "xnee_set_xosd_feedback\n")); feedback_requested=XNEE_XOSD_FEEDBACK; return XNEE_OK; } int xnee_is_xosd_feedback(xnee_data *xd) { xnee_verbose((xd, "xnee_is_xosd_feedback used=%d\n", feedback_used)); return (feedback_used==XNEE_XOSD_FEEDBACK); } int xnee_is_stderr_feedback(xnee_data *xd) { xnee_verbose((xd, "xnee_is_stderr_feedback used=%d\n", feedback_used)); return (feedback_used==XNEE_STDERR_FEEDBACK); } int xnee_is_no_feedback(xnee_data *xd) { xnee_verbose((xd, "xnee_is_no_feedback used=%d\n", feedback_used)); return (feedback_used==XNEE_NO_FEEDBACK); } xnee-3.19/libxnee/src/xnee_replay.c0000664000000000000000000005537212302641303014200 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2004, 2005, 2006, 2007, 2008 * 2009, 2010, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_fake.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_time.h" #include "libxnee/xnee_buffer.h" #include "libxnee/xnee_threshold.h" #include "libxnee/xnee_expr.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_window.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_xinput.h" static int time_out_counter = 0; static int diff_counter = 0; static int last_diff; static int last_logread=1; /* * internal use only */ Time xnee_delta_time ( xnee_intercept_data * xindata) { if ( xindata->newtime > xindata->oldtime ) { return ( xindata->newtime - xindata->oldtime); } else { return 0 ; } } /************************************************************** * * * xnee_replay_synchronize * * * * * **************************************************************/ int xnee_replay_synchronize (xnee_data* xd) { int diff; xnee_verbose((xd,"---> xnee_replay_synchronize sync=%d FALSE=%d \n", xd->sync, XNEE_FALSE)); if ( xd->sync == XNEE_FALSE ) { xnee_verbose((xd, "Xnee in NO SYNC mode\n")); return XNEE_OK; } /***** * Check to see if we are in sync */ xnee_verbose ((xd, " synchronize: entering sync test loop\n")); while ( (0==0) ) { /* * Handle all pending data from Xserver/RECORD */ diff = xnee_process_replies(xd); /* * make sure that the cached values are valid */ diff = xnee_update_buffer_cache(xd); /* * check the buffer limits .... */ diff = xnee_check_buffer_limits(xd); /* * handle diff in the buffers ..... */ if (diff!=0) { if ( (xd->meta_data.cached_min > xnee_get_min_threshold(xd)) && (xd->meta_data.cached_max < xnee_get_max_threshold(xd))) break; diff_counter++; if (diff_counter >= xnee_get_tot_threshold(xd)) { time_out_counter++; /* */ diff_counter=0; /* hmmm don't about that know ..... yet! */ if (time_out_counter > MAX_SKIPPED_UNSYNC) { if (xnee_is_force_replay(xd) != 0 ) { break; } (void)fprintf (stderr, "Can't synchronize anymore .... have to leave! %d %d \n", time_out_counter , MAX_SKIPPED_UNSYNC); return XNEE_SYNCH_FAULT; } else { last_diff = diff; break; } } xnee_verbose ((xd, " ...diff => sleeping %d microsecs\n", XNEE_MISSING_DATA_DELAY )); /*@ ignore @*/ usleep (XNEE_MISSING_DATA_DELAY ); /*@ end @*/ last_diff = diff; } else { /* Thanks, Valia */ /* if (diff_counter!=0) */ /* { */ /* xd->buf_verbose=True; */ /* xnee_replay_printbuffer(xd); */ /* return XNEE_SYNCH_FAULT; */ /* } */ diff_counter=0; time_out_counter=0; break; } } xnee_replay_printbuffer(xd); xnee_verbose((xd,"<--- xnee_replay_synchronize \n")); return XNEE_OK; } static void xnee_replay_update_dev_ctr(xnee_data *xd, int type) { if ( type == ButtonPress ) { xd->button_pressed++; } else if ( type == ButtonRelease ) { xd->button_pressed--; } else if ( type == KeyPress ) { xd->key_pressed++; } else if ( type == KeyRelease ) { xd->key_pressed--; } return ; } /************************************************************** * * * xnee_replay_main_loop * * * * * **************************************************************/ int xnee_replay_main_loop(xnee_data *xd, int read_mode) { static char tmp[256] ; /*@reldef@*/ xnee_intercept_data xindata ; int logread = -1 ; int replayable ; long int last_elapsed = 0; int ret = XNEE_OK ; char *ret_str; Display *context_display; xindata.oldtime = 0 ; xindata.newtime = 0 ; xnee_reset_elapsed_time(xd); xnee_reset_fake(xd); context_display = xnee_get_display_for_recordcontext(xd); if ( xd->data_file == NULL) { xnee_verbose((xd, "Using stdin as file\n")); xd->data_file=stdin; } if ( (read_mode==XNEE_REPLAY_READ_META_DATA) || (read_mode==XNEE_REPLAY_READ_ALL_DATA) ) { while ( (logread != 0) && ( xd->cont != 0 ) ) { ret_str = fgets(tmp, 256, xd->data_file); if ( ret_str == NULL) { ret = -1; } else { ret = (int)strlen (ret_str); } if ( ret == -1 ) { return XNEE_OK; } else if ( ret == 0 ) { xnee_verbose((xd, "Empty line in data file\n")); } else { ret = xnee_expression_handle_project(xd, ret_str); /* ret = xnee_expression_handle_session(xd, ret_str, &xindata); */ if ( (ret == XNEE_REPLAY_DATA) || (ret == XNEE_PRIMITIVE_DATA) || (ret == XNEE_SYNTAX_ERROR) ) { xnee_verbose((xd, "We are finished reading settings" " etc from data file\n")); /* since NULL arg printing is done when in verbose mode */ xnee_record_print_record_range (xd, NULL); xnee_print_xnee_settings (xd, NULL); xnee_verbose((xd, "REPLAY DATA coming up .... (%d) %s \n", ret, ret_str)); /* Make sure SYNTAX ERRROR is not forgotten */ if (ret==XNEE_SYNTAX_ERROR) { return ret; XNEE_RETURN_IF_ERR (ret); } break ; } } } /* ret = xnee_set_ranges(xd); */ } /* xnee_print_ranges(xd,stdout); */ if ( (read_mode==XNEE_REPLAY_READ_REPLAY_DATA) || (read_mode==XNEE_REPLAY_READ_ALL_DATA)) { ret = xnee_set_ranges(xd); XNEE_RETURN_IF_ERR (ret); /* REMOVE ME... after testing. rep_prepare is done in xnee_prepare */ /* ret = xnee_rep_prepare(xd); */ /* if (ret!=XNEE_OK) */ /* { */ /* xnee_verbose((xd, "xnee_prepare failed (%d)....checking\n", ret)); */ /* xnee_verbose((xd, "xnee_prepare failed.... failure\n")); */ /* return ret; */ /* } */ if ( xd->sync != 0 ) { ret = xnee_setup_rep_recording(xd); XNEE_RETURN_IF_ERR(ret); } if ( xnee_is_verbose(xd) != 0) { ret = xnee_print_sys_info(xd , xd->out_file); XNEE_RETURN_IF_ERR(ret); } /* xnee_print_ranges(xd,stdout); */ ret = xnee_expression_handle_session(xd, tmp, &xindata); /* if ( ret == XNEE_PRIMITIVE_DATA ) { printf ("return XNEE_OK\n"); ret = XNEE_OK; } */ /* printf (" ===== starting \n"); */ /* xnee_print_list(); */ /** * all META DATA setting up our sessions is read ... * go on replaying * * * Think of this as the main loop */ while ( (ret!=XNEE_SYNTAX_ERROR) && ( xd->cont != 0 ) ) { if (last_logread != 0) { /* * set value for hcoming time calculations * Now replay starts off */ xnee_verbose((xd, " --> xnee_get_elapsed_time\n")); last_elapsed = xnee_get_elapsed_time(xd, XNEE_FROM_LAST_READ ); xnee_verbose((xd, " <-- xnee_get_elapsed_time\n")); } if ( ret == XNEE_META_DATA ) { xnee_verbose((xd, "META DATA read ... should be " "handled in the future... eg script ????\n")); } else if (ret!=0) { /* printf (" CC : "); */ if (xd->first_read_time==0) { /*@ ignore @*/ xd->first_read_time = xindata.newtime; /*@ end @*/ } /* Interrupt variable set? */ if (xnee_get_interrupt_action(xd)) { xnee_verbose((xd, "interrupt (replay) variable was set (%d)\n", xnee_get_interrupt_action(xd))); xnee_unset_interrupt_action(xd); xnee_verbose((xd, "leaving loop (%d)\n", xnee_get_interrupt_action(xd))); return XNEE_OK; } /* printf (" DD "); */ /* * * Do we have any grabbed key that have been pressed? * */ if (xnee_check_key (xd)==XNEE_GRAB_DATA) { ret = xnee_handle_rep_key(xd) ; if (ret == XNEE_GRAB_STOP) { xnee_verbose ((xd," breaking async loop since STOP \n")); return XNEE_OK; } else if (ret == XNEE_GRAB_RESUME) { if ( (xd == NULL) || (xd->control ==NULL) || (xd->record_setup ==NULL)) { return XNEE_RECORD_FAILURE; } xnee_verbose ((xd," starting async loop since RESUME \n")); ret = XRecordEnableContextAsync(context_display, xd->record_setup->rContext, xd->rec_callback, (XPointer) (xd) ); XNEE_RETURN_IF_ERR(ret); } } /* printf (" EE %d\n", xindata.type); */ /* * * OK, all grabbed stuffed is handled, let's fake some events * */ switch (xindata.type) { case XNEE_PROTO_EVENT: /* if type == 0, break .... BTW, why is it 0?? */ if ( xindata.u.event.type == 0 ) { break ; } /* is it a device event ? */ if ( ( xindata.u.event.type >= KeyPress ) && (xindata.u.event.type <= MotionNotify) ) { xnee_replay_update_dev_ctr(xd, xindata.u.event.type); ret = xnee_replay_synchronize (xd); if (ret != XNEE_OK) { xnee_verbose((xd, "xnee_replay_main_loop return %d\n", ret)); return ret; } /* */ /* }*/ xnee_verbose((xd," replay MAIN new %lu old %lu\n",xindata.newtime , xindata.oldtime )); replayable = xnee_replay_event_handler(xd, &xindata, last_elapsed); xnee_verbose((xd," replayable :%d\n",replayable )); } else { XNEE_SYNC_DEBUG ( (stderr, "SYNC EVENT %d\n", xindata.u.event.type ) ); xnee_replay_buffer_handler ( xd, XNEE_EVENT, xindata.u.event.type, XNEE_REPLAYED); } break; case XNEE_PROTO_REQUEST: xnee_verbose((xd, "READ A REQUEST\n")); xnee_replay_buffer_handler ( xd, XNEE_REQUEST, xindata.u.request.type, XNEE_REPLAYED); break; case XNEE_PROTO_REPLY: xnee_verbose((xd, "READ A REPLY\n")); xnee_replay_buffer_handler ( xd, XNEE_REPLY, xindata.u.reply.type, XNEE_REPLAYED); break; case XNEE_PROTO_XINPUT_EVENT_MASTER: xnee_verbose((xd, "READ A XINPUT EVENT MASTER\n")); /* break; */ case XNEE_PROTO_XINPUT_EVENT_SLAVE: xnee_verbose((xd, "READ A XINPUT EVENT SLAVE\n")); xnee_replay_update_dev_ctr(xd, xindata.u.xievent.type); ret = xnee_replay_synchronize (xd); if (ret != XNEE_OK) { xnee_verbose((xd, "xnee_replay_main_loop return %d\n", ret)); return ret; } replayable = xnee_replay_event_handler(xd, &xindata, last_elapsed); xnee_verbose((xd," replayable :%d\n",replayable )); break; default: xnee_verbose((xd, "xnee_replay_MainReplayLoop: Unknown type \n")); break; } } else { xnee_verbose((xd, "Corrupt line ... skipped \n")); break; } /* (void)XSync(xd->control, False); */ xnee_verbose((xd, "Flushing after handled event\n")); (void)XFlush(xd->control); xnee_verbose((xd, " <-- Flushed after handled event\n")); ret_str = fgets(tmp, 256, xd->data_file); if (ret_str == NULL) { break; } ret = xnee_expression_handle_session(xd, tmp, &xindata); /* printf (" and again (%d, %s)\n", ret, xnee_get_err_description(ret)); */ last_logread = 0; } } xd->cont = 1; last_logread = 1; time_out_counter = 0; diff_counter = 0; return XNEE_OK; } /************************************************************** * * * xnee_setup_rep_recording * * * * * **************************************************************/ int xnee_setup_rep_recording(xnee_data *xd) { int nr_of_ranges=0; int ret; xnee_recordext_setup *xrs = xd->record_setup; Display *context_display; if ( (xd == NULL) || (xd->control ==NULL) || (xd->record_setup ==NULL)) { return XNEE_RECORD_FAILURE; } xnee_verbose((xd, "--->xnee_setup_rep_recording :)\n")); nr_of_ranges=xnee_get_max_range(xd); if (xd->all_clients != 0) { xrs->xids[0] = XRecordAllClients; } else { xrs->xids[0] = XRecordFutureClients; } xnee_verbose((xd, "\t CreateContext nr_of_ranges=%d\n", nr_of_ranges)); context_display = xnee_get_display_for_recordcontext(xd); xnee_verbose ((xd, "creating context .... on control = %p\n", (void*)context_display)); xrs->rContext = XRecordCreateContext(context_display, xrs->data_flags, xrs->xids, 1, xrs->range_array,nr_of_ranges ); xnee_verbose((xd, "--- xnee_setup_rep_recording freeing state \n")); XRecordFreeState(xrs->rState); xnee_verbose((xd, "--- xnee_setup_rep_recording setting rstate \n")); xd->record_setup->rState=NULL; xnee_verbose((xd, "XSync()\n")); XSync (xd->control, False); xnee_verbose((xd, "XFlush()\n")); XFlush (xd->control); XSynchronize(xd->data, True); xnee_verbose((xd, "--- xnee_setup_rep_recording enabling async \n")); /* Enable context for async interception */ ret = XRecordEnableContextAsync (context_display, xrs->rContext, xnee_replay_dispatch, (XPointer) (xd) /* closure passed to Dispatch */); if (ret==0) { xnee_verbose ((xd, "Could not start recording\n")); return XNEE_RECORD_FAILURE; } xnee_verbose((xd, "finished setting up record for replaying\n")); xnee_verbose((xd, "<---xnee_setup_rep_recording\n")); return (XNEE_OK); } /************************************************************** * * * xnee_replay_dispatch * * * * * **************************************************************/ void xnee_replay_dispatch (XPointer type_ref, XRecordInterceptData *data) { static unsigned int last_record_window_pos_win = 0; static unsigned int last_record_window_pos_par = 0; XRecordDatum *xrec_data; int type; xnee_data *xd; int rec_window_pos = 0; XWindowAttributes window_attributes_return; int ret; if (data->data==NULL) { return; } xrec_data = (XRecordDatum *) (data->data) ; type = (int) xrec_data->type ; xd = (xnee_data*) (type_ref); switch(data->category) { case XRecordFromClient: XNEE_SYNC_DEBUG ( (stderr, "DISPATCH REQUEST %d \n",type ) ); xnee_verbose((xd, "GOT A REQUEST: %d \n ", type)); /* xnee_replay_buffer_handle (xd, XNEE_REQUEST, type, XNEE_RECEIVED); */ xnee_replay_buffer_handler (xd, XNEE_REQUEST, type, XNEE_RECEIVED); /* printf ("dispatch: %d (%d/%d)\n", XNEE_RECEIVED, XNEE_REQUEST,type); */ break; case XRecordFromServer: if(type > X_Reply ) { XNEE_SYNC_DEBUG ( (stderr, "DISPATCH EVENT %d \n",type ) ); xnee_verbose((xd, "GOT A EVENT: %d \n", type)); if ( type == ReparentNotify ) { rec_window_pos = xnee_get_recall_window_pos(xd); /* rec_window_pos interpretation: * 0 used to sync * 1 used to adjust window pos * 2 both of the above * * error */ if ( rec_window_pos == 0 ) { /* only sync */ xnee_replay_buffer_handler (xd, XNEE_EVENT, type, XNEE_RECEIVED); } else if ( ( rec_window_pos == 1 ) || ( rec_window_pos == 2 ) ) { XGetWindowAttributes(xd->grab, xrec_data->event.u.reparent.window, &window_attributes_return); /* * Prevent the same window pos to be used more than once */ if ( (last_record_window_pos_win != xrec_data->event.u.reparent.window) || (last_record_window_pos_par != xrec_data->event.u.reparent.parent) ) { xnee_verbose((xd, " xnee_replay adding window 0x%X\n", (unsigned int)xrec_data->event.u.reparent.window)); xnee_window_add_attribute_received(xd, &window_attributes_return, xrec_data->event.u.reparent.window, xrec_data->event.u.reparent.parent); ret = xnee_window_try_move(xd); XNEE_RETURN_VOID_IF_ERR(ret); last_record_window_pos_win = xrec_data->event.u.reparent.window; last_record_window_pos_par = xrec_data->event.u.reparent.parent; } } if ( rec_window_pos == 2 ) { xnee_replay_buffer_handler (xd, XNEE_EVENT, type, XNEE_RECEIVED); } } else { xnee_replay_buffer_handler (xd, XNEE_EVENT, type, XNEE_RECEIVED); } } else { XNEE_SYNC_DEBUG ( (stderr, "DISPATCH type=%d REPLY \n",type ) ); xnee_verbose((xd, "GOT A REPLY: %d \n", type)); /* xnee_replay_buffer_handle (xd, XNEE_REPLY, type, XNEE_RECEIVED); */ xnee_replay_buffer_handler (xd, XNEE_REPLY, type, XNEE_RECEIVED); } break; case XRecordClientStarted: xnee_verbose((xd, "ClientStarted \n")); break; case XRecordClientDied: xnee_verbose((xd, "ClientDied \n")); break; case XRecordEndOfData: xnee_verbose((xd, "EndOfData \n")); break; default: xnee_print_error( "Case: Default reached in Dispatch (...) \n"); break; } XRecordFreeData(data); } /************************************************************** * * * xnee_has_xtest_extension * * * * * **************************************************************/ int xnee_has_xtest_extension (xnee_data *xd) { int ok=1; xnee_testext_setup* xrs; if ( (xd == NULL) || (xd->control ==NULL) || (xd->replay_setup ==NULL)) { return XNEE_RECORD_FAILURE; } xrs=xd->replay_setup; if( XTestQueryExtension(xd->control, &xrs->xtest_event_basep, &xrs->xtest_error_basep, &xrs->xtest_version_major, &xrs->xtest_version_minor) == 0 ) { xnee_print_error ("XTest extension missing\n"); ok=0; } xnee_verbose ((xd, "\t XTest-\n\t Release %d.%d\n", xrs->xtest_version_major, xrs->xtest_version_minor)); return (ok); } /************************************************************** * * * xnee_replay_init * * * * * **************************************************************/ void xnee_replay_init (xnee_data* xd) { int i, j; xd->first_replayed_event=XNEE_TRUE; xnee_verbose((xd, "---> xnee_replay_init\n")); for ( i=0 ; i<4 ; i++) { for ( j=0 ; jdata_buffer[i][j]=0; /* xnee_verbose(( xd, "xnee_replay_init %d x %d =%d\n", i , j, xd->data_buffer[i][j])); */ } xd->meta_data.cached_max=0; xd->meta_data.cached_min=0; } xd->meta_data.total_diff=0; xd->meta_data.sum_max=0; xd->meta_data.sum_min=0; xd->first_read_time = 0; if ( xnee_no_rep_resolution(xd) == 0 ) { int ret ; ret = xnee_set_default_rep_resolution (xd); XNEE_RETURN_VOID_IF_ERR(ret); } xnee_init_xinput_devices(xd); xnee_verbose((xd, "<--- xnee_replay_init\n")); } xnee-3.19/libxnee/src/xnee_grab.c0000664000000000000000000004313512332000417013607 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, * 2010, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_buffer.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_alloc.h" typedef int (*x_err_handler)(Display *, XErrorEvent *); int xnee_ungrab_key (xnee_data* xd, int mode) { int window; int screen; xnee_verbose((xd, "---> xnee_ungrab_key\n")); if (xd->grab_keys==NULL) { xnee_verbose((xd, " --- xnee_ungrab_key the data seem to have been freed already\n")); return XNEE_OK; } xnee_verbose((xd, " --- xnee_ungrab_key we have a grab struct allocated\n")); /* XNEE_FREE_IF_NOT_NULL(xd->grab_keys->action_keys[mode].str); */ if (xd->grab_keys->action_keys[mode].key==0) { xnee_verbose((xd, "--- xnee_ungrab_key key==0\n")); return XNEE_OK; } if ( xd->grab != 0 ) { xnee_verbose((xd, "--- xnee_ungrab_key get screen\n")); screen = DefaultScreen (xd->grab); xnee_verbose((xd, "--- xnee_ungrab_key get window\n")); window = RootWindow(xd->grab, screen ); xnee_verbose((xd, "--- xnee_ungrab_key\n")); xnee_verbose((xd, "window %d\n", window)); xnee_verbose((xd, "screen %d\n", screen)); xnee_verbose((xd, "data %p\n", (void*)xd->grab)); xnee_verbose((xd, "stop key %d\n", xd->grab_keys->action_keys[mode].key)); xnee_verbose((xd, "stop mod %d\n", AnyModifier)); XUngrabKey (xd->grab, /* xd->grab_keys->action_keys[mode].key, */ AnyKey, AnyModifier, window); /* Force erors, if any!!!*/ XSync(xd->grab, True); XFlush(xd->grab); xd->grab_keys->grab=1; xd->grab_keys->action_keys[mode].key=0; } return XNEE_OK; } static int xnee_ungrab_err_handler(Display* dpy, XErrorEvent* ev) { if ( dpy==0 || ev==0 ) { return XNEE_WRONG_PARAMS; } xnee_set_interrupt_error(xnee_get_xnee_data(), XNEE_BAD_GRAB_DATA) ; return XNEE_OK; } /************************************************************** * * * xnee_ungrab_keys * * * * * **************************************************************/ int xnee_ungrab_keys (xnee_data* xd) { x_err_handler old_err_handler = XSetErrorHandler(xnee_ungrab_err_handler); xnee_verbose((xd, "---> xnee_ungrab_keys\n")); xnee_ungrab_key ( xd, XNEE_GRAB_STOP); xnee_ungrab_key ( xd, XNEE_GRAB_PAUSE); xnee_ungrab_key ( xd, XNEE_GRAB_RESUME); xnee_ungrab_key ( xd, XNEE_GRAB_INSERT); xnee_ungrab_key ( xd, XNEE_GRAB_EXEC); XSetErrorHandler(old_err_handler); xnee_verbose((xd, "--- xnee_ungrab_keys freeing grab struct \n")); xnee_verbose((xd, "<--- xnee_ungrab_keys\n")); return XNEE_OK; } /************************************************************** * * * xnee_grab_key * * * * * **************************************************************/ int xnee_grab_key (xnee_data* xd, int mode, char *key) { int window; int screen; xnee_action_key ak; xnee_verbose((xd, "----> xnee_grab_key\n")); if (key==NULL) { return XNEE_BAD_GRAB_DATA; } xnee_get_action_key (xd, &ak, key); xnee_verbose((xd, "---- xnee_grab_key key=%s\n", key)); xnee_verbose((xd, "---- xnee_grab_key key=%d\n", ak.key)); xnee_verbose((xd, "---- xnee_grab_key mode=%d\n", mode)); if (ak.key==0) { return XNEE_BAD_GRAB_DATA; } if ( (mode>=XNEE_GRAB_STOP) && (modegrab_keys->action_keys[mode].key=ak.key; } else { return XNEE_UNKNOWN_GRAB_MODE; } /* make sure we have a display to grab on*/ if (xd->grab==NULL) { xd->grab = XOpenDisplay (NULL); if (xd->grab==NULL) { xnee_verbose((xd, "could not open display for grab...\n")); return XNEE_NOT_OPEN_DISPLAY; } } /* grab key + modifier */ screen = DefaultScreen (xd->grab); window = RootWindow (xd->grab, screen ); xnee_verbose((xd, "grab %p\n", (void*)xd->grab)); xnee_verbose((xd, "stop key %d\n", ak.key)); xnee_verbose((xd, "stop mod %d\n", AnyModifier)); xnee_verbose((xd, "window %d\n", window)); xnee_verbose((xd, "screen %d\n", screen)); XGrabKey (xd->grab, ak.key, AnyModifier, window, False, GrabModeSync, GrabModeSync ); xnee_verbose((xd, "<---- xnee_grab_key\n")); /* Force erors, if any!!!*/ XSync(xd->grab, True); XFlush(xd->grab); return XNEE_OK; } int xnee_get_grab_mode (xnee_data *xd, int key) { int i ; for (i=XNEE_GRAB_STOP;igrab_keys->action_keys[i].key) { return i; } } return XNEE_GRAB_UNKOWN; } /************************************************************** * * * xnee_new_grab_keys * * * * * **************************************************************/ xnee_grab_keys * xnee_new_grab_keys(xnee_data *xd) { xnee_grab_keys* xgk = (xnee_grab_keys*) malloc (sizeof (xnee_grab_keys)); memset (xgk, 0, sizeof (xnee_grab_keys)); if (xgk==NULL) { return NULL; } xgk->grab = XNEE_GRAB_NODATA; xgk->grabbed_action = XNEE_GRAB_NODATA; if ( xd->grab_keys!= NULL) { xnee_free(xd->grab_keys); } xd->grab_keys = xgk; xnee_grab_keys_init(xd); return xgk; } /************************************************************** * * * xnee_free_grab_keys * * * * * **************************************************************/ /*@null@*/ int xnee_free_grab_keys(/*@null@*/ xnee_grab_keys *grab_keys) { if (grab_keys!=NULL) { XNEE_FREE_AND_NULL(grab_keys); } return XNEE_OK; } static int xnee_grab_err_handler(Display* dpy, XErrorEvent* ev) { if ( dpy==0 || ev==0 ) { return XNEE_WRONG_PARAMS; } xnee_set_interrupt_error(xnee_get_xnee_data(), XNEE_BAD_GRAB_DATA) ; return XNEE_OK; } /************************************************************** * * * xnee_grab_all_keys * * * * * **************************************************************/ int xnee_grab_all_keys (xnee_data* xd) { int window; int screen; int ret; int i ; xnee_action_key ak; x_err_handler old_err_handler = XSetErrorHandler(xnee_ungrab_err_handler); #define SET_OLD_ERR_HANDLER() \ XSetErrorHandler(old_err_handler); old_err_handler = XSetErrorHandler(xnee_grab_err_handler); xnee_verbose((xd, "----> xnee_grab_all_keys 1\n")); /* check validity on the k+m combinations */ ret = xnee_key_check(xd); if (ret != XNEE_OK) { xnee_verbose((xd, "---- xnee_grab_all_keys: " "trying to grab same key + modifier return=%d (ok=%d)\n", ret, XNEE_OK)); SET_OLD_ERR_HANDLER(); return XNEE_BAD_GRAB_DATA; } /* make sure we have a display to grab on*/ if (xd->grab==NULL) { xd->grab = XOpenDisplay (NULL); if (xd->grab==NULL) { xnee_verbose((xd, "could not open display for grab...\n")); SET_OLD_ERR_HANDLER(); return XNEE_NOT_OPEN_DISPLAY; } } screen = DefaultScreen (xd->grab); window = RootWindow (xd->grab, screen ); xnee_verbose((xd, "---- xnee_grab_all_keys 2\n")); for (i=XNEE_GRAB_STOP;igrab_keys->action_keys[i].key=0; xnee_verbose((xd, "---- xnee_grab_all_keys: i=%d\n",i )); if (xd->grab_keys->action_keys[i].str != NULL ) { xnee_verbose((xd, "---- DEBUG STARTING\n" )); xnee_verbose((xd, "---- xnee_grab_all_keys %d \n",ak.key)); xnee_verbose((xd, "---- xnee_grab_all_keys key=%d\n",xd->grab_keys->action_keys[i].key )); xnee_verbose((xd, "---- xnee_grab_all_keys \n" )); xnee_verbose((xd, "----> xnee_grab_all_keys \"%s\"\n",xd->grab_keys->action_keys[i].str )); xnee_get_action_key (xd, &ak, xd->grab_keys->action_keys[i].str); xnee_verbose((xd, "<---- xnee_grab_all_keys %s\n",xd->grab_keys->action_keys[i].str )); if (ak.key!=0) { xd->grab_keys->action_keys[i].key = ak.key; xnee_verbose((xd, "---- xnee_grab_all_keys on key=%d" "(%dth one)\n", xd->grab_keys->action_keys[i].key, i)); xd->grab_keys->grab=XNEE_GRAB_SET; xnee_verbose((xd, "--- xnee_grab_key\n")); xnee_verbose((xd, "window %d\n", window)); xnee_verbose((xd, "screen %d\n", screen)); xnee_verbose((xd, "data %p\n", (void*)xd->grab)); xnee_verbose((xd, "stop key %d\n", xd->grab_keys->action_keys[i].key)); xnee_verbose((xd, "stop mod %d\n", AnyModifier)); // printf ("aGRAB [%d]: %d \n", // i, xd->grab_keys->action_keys[i].key); XGrabKey (xd->grab, xd->grab_keys->action_keys[i].key, AnyModifier, window, True, GrabModeSync, GrabModeSync ); /* Force erors, if any!!!*/ XSync(xd->grab, True); XFlush(xd->grab); } } else { xnee_verbose((xd, "---- xnee_grab_all_keys: string is NULL\n" )); } } xnee_verbose((xd, "<---- xnee_grab_all_keys \n")); SET_OLD_ERR_HANDLER(); return XNEE_OK; } int xnee_grab_keys_init(xnee_data *xd) { int i ; xd->grab_keys->grab = 0 ; xd->grab_keys->grabbed_action = 0 ; for (i=XNEE_GRAB_STOP;igrab_keys->action_keys[i].key=0; xd->grab_keys->action_keys[i].str=NULL; xd->grab_keys->action_keys[i].extra_str=NULL; } return XNEE_OK; } static int grab_mode_used = 0 ; static int current_modifier_state = 0 ; static int last_modifier_state = 0 ; #define XNEE_GRAB_SET_OVERRIDE(xd) xnee_grab_handle_override(xd, XNEE_OVERRIDE_TRUE) ; \ xnee_grab_handle_buffer(xd , NULL , XNEE_GRAB_BUFFER_PRINT) #define XNEE_GRAB_UNSET_OVERRIDE(xd) xnee_grab_handle_override(xd, XNEE_OVERRIDE_FALSE) #define XNEE_GRAB_GET_OVERRIDE(xd) xnee_grab_handle_override(xd, XNEE_OVERRIDE_GET) #define XNEE_GRAB_IS_OVERRIDE(xd) \ ( XNEE_OVERRIDE_TRUE == xnee_grab_handle_override(xd, XNEE_OVERRIDE_GET) ) void xnee_print_grabbed_keys(xnee_data *xd) { int i ; for (i=XNEE_GRAB_STOP;igrab_keys->action_keys[i].key, xd->grab_keys->action_keys[i].str) ; } } static int xnee_key_in_use (xnee_grab_keys *xgk, KeyCode kc) { int i ; for (i=XNEE_GRAB_STOP;iaction_keys[i].key, kc); fflush(stderr); */ if (xgk->action_keys[i].key==kc) { return 1; } } return 0; } int xnee_grab_handle_buffer(xnee_data *xd, char *str, int mode) { static char saved_buf[XNEE_SAVED_LINES_BYTES]; xnee_verbose((xd, "---> xnee_grab_handle_buffer %d \n", mode)); if (mode==XNEE_GRAB_BUFFER_SAVE) { if ( (saved_buf==NULL) || (str==NULL) || (strlen(saved_buf) > (XNEE_SAVED_LINES_BYTES - 128) ) ) { xnee_verbose((xd, "<--- xnee_grab_handle_buffer %d \n", XNEE_GRAB_MEM_FAILURE)); return XNEE_GRAB_MEM_FAILURE; } strncat (saved_buf, str, XNEE_SAVED_LINES_BYTES - strlen(saved_buf) ); xnee_verbose((xd, "--- xnee_grab_handle_buffer saved '%s'\n", str)); } else if (mode==XNEE_GRAB_BUFFER_PRINT) { if (strlen(saved_buf)>0) { fprintf (xd->out_file,"%s", saved_buf); } saved_buf[0]='\0'; } else if (mode==XNEE_GRAB_BUFFER_RESET) { saved_buf[0]='\0'; } xnee_verbose((xd, "<--- xnee_grab_handle_buffer %d \n", XNEE_OK)); return XNEE_OK; } static int xnee_grab_handle_override(xnee_data *xd, int mode ) { static int current_grab_mode_override = XNEE_OVERRIDE_FALSE ; xnee_verbose((xd, "---> xnee_handle_grab_override %d \n", mode)); switch (mode) { case XNEE_OVERRIDE_TRUE: xnee_grab_handle_buffer(xd, NULL, XNEE_GRAB_BUFFER_PRINT); current_grab_mode_override = mode ; break; case XNEE_OVERRIDE_FALSE: current_grab_mode_override = mode ; break; case XNEE_OVERRIDE_GET: break ; default: xnee_verbose((xd, " --- ERROR: default mode reached in switch\n" )); break; } xnee_verbose((xd, "<--- xnee_handle_grab_override %d \n", current_grab_mode_override)); return current_grab_mode_override; } static int xnee_handle_grab_mouse(xnee_data *xd) { int ret ; xnee_verbose((xd, "---> xnee_handle_grab_mouse %d %d \n", current_modifier_state, last_modifier_state)); if ( (current_modifier_state==XNEE_GRAB_NONE_PRESSED) || (last_modifier_state==XNEE_GRAB_NONE_IN_USE) || (current_modifier_state==XNEE_GRAB_NONE_IN_USE) ) { ret = XNEE_GRAB_DO_PRINT; } else { XNEE_GRAB_SET_OVERRIDE(xd); } ret = XNEE_GRAB_DO_PRINT ; xnee_verbose((xd, "<--- xnee_handle_grab_mouse %d\n", ret)); return ret; } static int xnee_handle_grab_key(xnee_data *xd, KeyCode kc, int mode) { int ret = XNEE_OK; /* xnee_set_verbose(xd); */ xnee_verbose((xd, "---> xnee_handle_grab_key %d %d modifier_state=%d\n", kc, mode, current_modifier_state)); current_modifier_state = XNEE_GRAB_ALL_IN_USE ; if ( XNEE_GRAB_IS_OVERRIDE(xd) ) { xnee_verbose((xd, "--- xnee_handle_grab_key 1\n")); xnee_grab_handle_buffer(xd, NULL, XNEE_GRAB_BUFFER_PRINT); ret = XNEE_GRAB_DO_PRINT ; } else if ( current_modifier_state == XNEE_GRAB_NONE_PRESSED ) { xnee_verbose((xd, "--- xnee_handle_grab_key 2\n")); ret = XNEE_GRAB_DO_PRINT ; } else if ( current_modifier_state == XNEE_GRAB_NONE_IN_USE ) { xnee_verbose((xd, "--- xnee_handle_grab_key 3\n")); ret = XNEE_GRAB_DO_PRINT ; } else if ( current_modifier_state == XNEE_GRAB_SOME_IN_USE ) { xnee_verbose((xd, "--- xnee_handle_grab_key 4\n")); ret = XNEE_GRAB_DO_SAVE ; } else if ( current_modifier_state == XNEE_GRAB_ALL_IN_USE ) { xnee_verbose((xd, "--- xnee_handle_grab_key 5\n")); if (xnee_key_in_use ( xd->grab_keys , kc)) { xnee_verbose((xd, "--- xnee_handle_grab_key 5.1\n")); ret = XNEE_GRAB_DONT_PRINT ; if (grab_mode_used==0) { grab_mode_used = 1 ; } } else { xnee_verbose((xd, "--- xnee_handle_grab_key 5.2\n")); xnee_grab_handle_buffer(xd , NULL , XNEE_GRAB_BUFFER_PRINT); grab_mode_used = 2 ; ret = XNEE_GRAB_DO_PRINT ; } } else { xnee_verbose((xd, "--- xnee_handle_grab_key 6\n")); } xnee_verbose((xd, "<--- xnee_handle_grab_key %d \n", ret)); /* xnee_unset_verbose(xd); */ return ret; } int xnee_save_or_print(xnee_data *xd, KeyCode kc, int mode) { int ret; xnee_verbose((xd, "---> xnee_save_or_print %d %d\n", kc, mode)); if ( mode == XNEE_GRAB_MOUSE ) { xnee_verbose((xd, "--- xnee_save_or_print treat a mouse\n")); ret = xnee_handle_grab_mouse(xd); } else { xnee_verbose((xd, "--- xnee_save_or_print treat an ordinary key\n")); ret = xnee_handle_grab_key(xd, kc, mode); } xnee_verbose((xd, "<--- xnee_save_or_print %d\n", ret)); return ret; } xnee-3.19/libxnee/src/xnee_expr.c0000664000000000000000000005166312034627157013676 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, * 2005, 2006, 2007, 2009, 2010, 2011 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_expr.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_threshold.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_keysym.h" #include "libxnee/xnee_fake.h" #include "libxnee/feedback.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_plugin.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_window.h" /************************************************************* * internal functions * *************************************************************/ static int xnee_expression_handle_replay(xnee_data *xd, char *tmp, xnee_intercept_data * xindata); static int xnee_expression_handle_settings(xnee_data *xd, char *tmp, int synt_mode); static int xnee_expression_handle_comment(xnee_data *xd, char *tmp); static int xnee_expression_handle_action(xnee_data *xd, char *tmp); static int xnee_expression_handle_mark(xnee_data *xd, char *tmp); static int xnee_expression_handle_prim(xnee_data *xd, char *tmp, xnee_intercept_data * xindata); static int xnee_expression_handle_projinfo(xnee_data *xd, char *tmp); static int xnee_expression_handle_newwindow(xnee_data *xd, char *tmp); static int xnee_is_replayable(xnee_data *xd, char *tmp); /************************************************************* * public api *************************************************************/ int xnee_expression_handle_session(xnee_data *xd, char *tmp, xnee_intercept_data *xindata) { int do_continue = 0; /* Do we have a string at all */ if ( tmp == NULL) { /* if not, return -1 */ return -1; } /* Is it a replayable event*/ do_continue = xnee_expression_handle_replay(xd, tmp, xindata); if (do_continue==XNEE_REPLAY_DATA) { return (XNEE_REPLAY_DATA); } /* Is it a replayable script primitive */ do_continue = xnee_expression_handle_prim(xd, tmp, xindata); if (do_continue==XNEE_PRIMITIVE_DATA) { return (XNEE_PRIMITIVE_DATA); } /* Is it a meta string */ do_continue = xnee_expression_handle_comment(xd, tmp); if (do_continue==XNEE_META_DATA) { return (do_continue); } /* Is it a setting expression */ do_continue = xnee_expression_handle_settings(xd, tmp, XNEE_CLI_SYNTAX); if (do_continue==XNEE_SETTINGS_DATA) { return (do_continue); } /* Is it an action string */ do_continue = xnee_expression_handle_action(xd, tmp); if (do_continue==XNEE_ACTION_DATA) { return (do_continue); } /* Is it a mark string */ do_continue = xnee_expression_handle_mark(xd, tmp); if (do_continue==XNEE_MARK_DATA) { return (do_continue); } /* Is it a new window */ do_continue = xnee_expression_handle_newwindow(xd, tmp); if (do_continue==XNEE_NEW_WINDOW_DATA) { return (do_continue); } /* is it? ..., continue anyway */ return (do_continue); } int xnee_expression_handle_project(xnee_data *xd, char *tmp) { int do_continue = 0; int len ; /* Do we have a string at all */ if ( tmp == NULL) { /* if not, return -1 .... */ return -1; } len = strlen (tmp); /* OK the string passed the first tests */ rem_begin_blanks (tmp, len); len=strlen(tmp); if (len==0) { return XNEE_BLANK_LINE; } /* Is it a replayable data */ do_continue = xnee_is_replayable(xd, tmp); if (do_continue) { return (XNEE_REPLAY_DATA); } /* Is it a script data */ do_continue = xnee_is_script(xd, tmp); if (do_continue) { return (XNEE_PRIMITIVE_DATA); } /* Is it a meta string */ do_continue = xnee_expression_handle_comment(xd, tmp); if (do_continue==XNEE_META_DATA) { return (do_continue); } /* Is it a setting expression */ do_continue = xnee_expression_handle_settings(xd, tmp, XNEE_XNS_SYNTAX); if (do_continue==XNEE_SETTINGS_DATA) { return (do_continue); } /* Is it an action string */ do_continue = xnee_expression_handle_action(xd, tmp); if (do_continue==XNEE_ACTION_DATA) { return (do_continue); } /* Is it a mark string */ do_continue = xnee_expression_handle_mark(xd, tmp); if (do_continue==XNEE_MARK_DATA) { return (do_continue); } /* Is it a project information string */ do_continue = xnee_expression_handle_projinfo(xd, tmp); if (do_continue==XNEE_PROJECT_INFORMATION_DATA) { return (do_continue); } return (XNEE_SYNTAX_ERROR); } /************************************************************* * internal functions * *************************************************************/ static int xnee_expression_handle_replay(xnee_data *xd, char *tmp, xnee_intercept_data * xindata) { int ret = 0; #ifdef XNEE_XINPUT_SUPPORT unsigned long tmp_time; #endif /* XNEE_XINPUT_SUPPORT */ if (!strncmp("0",tmp,1)) /* EVENT */ { #ifdef XNEE_XINPUT_SUPPORT tmp_time = xindata->newtime; #else xindata->oldtime = xindata->newtime ; #endif /* XNEE_XINPUT_SUPPORT */ ret = sscanf(tmp, "%d,%d,%d,%d,%d,%d,%d,%lu", &xindata->type, &xindata->u.event.type, &xindata->u.event.x, &xindata->u.event.y, &xindata->u.event.button, &xindata->u.event.keycode, &xindata->u.event.screen_nr, &xindata->newtime); if (ret < 8) /* NUM ARGS */ { (void)xnee_print_error("Error in file %s: %s \n", xd->data_name, tmp); ret = 0 ; } #ifdef XNEE_XINPUT_SUPPORT /* If the recorded sessions file has been recorded with XI enabled, we get one extra Motion event which will ¤% up the calc sleep funs: If so: discard it */ if (xnee_is_screen_ok(xd, xindata->u.event.screen_nr)) { xindata->oldtime = tmp_time ; } else { xindata->newtime = tmp_time ; } #endif /* XNEE_XINPUT_SUPPORT */ } else if (!strncmp("1",tmp,1)) /* REQUEST */ { xindata->oldtime = xindata->newtime ; ret = sscanf(tmp, "%d,%d,%lu", &xindata->type, &xindata->u.request.type, &xindata->newtime); if (ret < 3) { (void)xnee_print_error("Error in file %s: %s \n", xd->data_name, tmp); ret = 0; } } else if (!strncmp("2",tmp,1)) /* REPLY */ { xindata->oldtime = xindata->newtime ; ret = sscanf(tmp, "%d,%d,%lu", &xindata->type, &xindata->u.reply.type, &xindata->newtime); if (ret < 3) { (void)xnee_print_error("Error in file %s: %s \n", xd->data_name, tmp); ret = 0; } } else if (!strncmp("3",tmp,1)) /* ERROR */ { xindata->oldtime = xindata->newtime ; ret = sscanf(tmp, "%d,%d,%lu", &xindata->type, &xindata->u.error.type, &xindata->newtime); if (ret < 3) { (void)xnee_print_error("Error in file %s: %s \n", xd->data_name, tmp); ret = 0; } } #ifdef XNEE_XINPUT_SUPPORT else if (!strncmp("6",tmp,1)) /* XInput Device (master) */ { if ( ! xnee_is_forced_core_device_events(xd)) { xindata->oldtime = xindata->newtime ; ret = sscanf(tmp, "%d,%d,%d,%d,%d,%d,%d,%lu,%d,%s", &xindata->type, &xindata->u.xievent.type, &xindata->u.xievent.x, &xindata->u.xievent.y, &xindata->u.xievent.button, &xindata->u.xievent.keycode, &xindata->u.xievent.screen_nr, &xindata->newtime, &xindata->u.xievent.deviceid, xindata->u.xievent.name); if (ret < 10) { (void)xnee_print_error("Error in file %s: %s \n", xd->data_name, tmp); ret = 0; } } } else if (!strncmp("7",tmp,1)) /* XInput Device (slave) */ { /* * If forced core play is set, we fill in details to be used as a core event * */ xindata->oldtime = xindata->newtime ; ret = sscanf(tmp, "%d,%d,%d,%d,%d,%d,%d,%lu,%d,%s", &xindata->type, &xindata->u.xievent.type, &xindata->u.xievent.x, &xindata->u.xievent.y, &xindata->u.xievent.button, &xindata->u.xievent.keycode, &xindata->u.xievent.screen_nr, &xindata->newtime, &xindata->u.xievent.deviceid, xindata->u.xievent.name); if (ret < 10) { (void)xnee_print_error("Error in file %s: %s \n", xd->data_name, tmp); ret = 0; } } #endif /* XNEE_XINPUT_SUPPORT */ else { ret=-1; } if (ret>0) { ret = XNEE_REPLAY_DATA; } return ret; } static int xnee_expression_handle_settings(xnee_data *xd, char *tmp, int synt_mode) { #define RANGE_BUF_SIZE 100 int ret=XNEE_SETTINGS_DATA; char **ret_strptr; char *my_tmp; int args_used ; if (tmp==NULL) { xnee_verbose ((xd, "handling settings: NULL returning\n")); return XNEE_WRONG_PARAMS; } xnee_verbose ((xd, "handling settings: '%s'\n", tmp)); if ( xnee_is_replayable(xd, tmp) == XNEE_REPLAY_DATA) { return (XNEE_REPLAY_DATA); } my_tmp = tmp; ret_strptr = xnee_str2strptr(my_tmp, synt_mode); xnee_print_strptr(xd, ret_strptr); ret = xnee_parse_xns_option(xd, ret_strptr, &args_used) ; /* option_key = xnee_option2key(xd, ret_strptr); xnee_free_strptr(ret_strptr); if (option_key==0) { ret = XNEE_OK; } */ if (ret==XNEE_OK) { ret = XNEE_SETTINGS_DATA; } return ret; } static int xnee_expression_handle_comment(xnee_data *xd, char *tmp) { xnee_verbose ((xd, "handling comment: \"%s\"\n", tmp)); if (!strncmp("#",tmp,1)) /* # META data */ { xnee_verbose ((xd, "comment data read: %s\n", tmp)); return XNEE_META_DATA; } return -1; } static int xnee_expression_handle_action(xnee_data *xd, char *tmp) { /* static int exec_counter = 0 ; */ char *exec_prog ; int ret; xnee_verbose ((xd, "handling action: %s\n", tmp)); if (strncmp(XNEE_EXEC_MARK,tmp,strlen(XNEE_EXEC_MARK))==0) { xnee_verbose ((xd, "** handling action: %s==%s\n", tmp, XNEE_EXEC_MARK)); exec_prog = xnee_get_exec_prog(xd); if (exec_prog != NULL) { ret = system (exec_prog); return XNEE_ACTION_DATA; } exec_prog = getenv("XNEE_EXEC_PROGRAM"); if (exec_prog != NULL) { ret = system (exec_prog); xnee_verbose ((xd, "System call returned %d\n", ret)); return XNEE_ACTION_DATA; } } return -1; } static int xnee_expression_handle_mark(xnee_data *xd, char *tmp) { xnee_verbose ((xd, "handling mark: %s\n", tmp)); return -1; } static int xnee_expression_handle_newwindow(xnee_data *xd, char *tmp) { xnee_win_pos xwp; int ret; int x ; int y ; int override ; char buf[256]; xnee_verbose ((xd, "---> xnee_expression_handle_newwindow: %s\n", tmp)); if (strncmp(XNEE_NEW_WINDOW_MARK,tmp,strlen(XNEE_NEW_WINDOW_MARK))==0) { tmp = tmp+strlen(XNEE_NEW_WINDOW_MARK); sscanf (tmp, ":%d,%d:%d,%d,%d,%d,%d,%d:%dx%d+%d+%d:%d,%d:%s\n", &xwp.x, &xwp.y, &xwp.event, &xwp.window, &xwp.parent, &x, &y, &override, &xwp.rel_x, &xwp.rel_y, &xwp.width, &xwp.height, &xwp.border_h, &xwp.border_w, &buf[0]); xwp.name=strdup(buf); ret = xnee_window_add_session(xd, &xwp); XNEE_RETURN_IF_ERR(ret); ret = xnee_window_try_move(xd); XNEE_RETURN_IF_ERR(ret); xnee_verbose ((xd, "<--- : xnee_expression_handle_newwindow\n")); return XNEE_NEW_WINDOW_DATA; } xnee_verbose ((xd, "<--- xnee_expression_handle_newwindow: %s\n", tmp)); return -1; } static char * xnee_expr_get_proj_value (char *var_and_val) { char *tmp; tmp = strstr(var_and_val, ":"); if (tmp==NULL) { return NULL; } tmp++; while ( (tmp!=NULL) && ( (*tmp==' ') || (*tmp=='\t') )) { tmp++; } if (tmp==NULL) { return NULL; } if (tmp==NULL) { return NULL; } if (tmp[strlen(tmp)-1]=='\n') { tmp[strlen(tmp)-1]='\0'; } return tmp; } static int xnee_expression_handle_projinfo(xnee_data *xd, char *tmp) { #define XNEE_IS_STR_SAME(a,b) \ ( strncmp(a,b, strlen(a))==0) xnee_verbose ((xd, "handling project: %s\n", tmp)); /* * creation */ if (XNEE_IS_STR_SAME(XNEE_RES_CREAT_PROGRAM,tmp)) { xnee_set_creat_program(xd, xnee_expr_get_proj_value(tmp)); return XNEE_PROJECT_INFORMATION_DATA; } else if (XNEE_IS_STR_SAME(XNEE_RES_CREAT_PROG_VER,tmp)) { xnee_set_creat_prog_vers(xd, xnee_expr_get_proj_value(tmp)); return XNEE_PROJECT_INFORMATION_DATA; } else if (XNEE_IS_STR_SAME(XNEE_RES_CREAT_DATE,tmp) ) { xnee_set_creat_date(xd, xnee_expr_get_proj_value(tmp)); return XNEE_PROJECT_INFORMATION_DATA; } /* * last change */ else if (XNEE_IS_STR_SAME(XNEE_RES_LASTCHANGE_PROGRAM,tmp)) { xnee_set_last_program(xd, xnee_expr_get_proj_value(tmp)); return XNEE_PROJECT_INFORMATION_DATA; } else if (XNEE_IS_STR_SAME(XNEE_RES_LASTCHANGE_PROG_VER,tmp)) { xnee_set_last_prog_vers(xd, xnee_expr_get_proj_value(tmp)); return XNEE_PROJECT_INFORMATION_DATA; } else if (XNEE_IS_STR_SAME(XNEE_RES_LASTCHANGE_DATE,tmp) ) { xnee_set_last_date(xd, xnee_expr_get_proj_value(tmp)); return XNEE_PROJECT_INFORMATION_DATA; } else if (strncmp("P",tmp,1)==0) /* Action data */ { return XNEE_PROJECT_INFORMATION_DATA; } return XNEE_OK; } #define CHECK_EQUALITY(a,b) ( (a!=NULL) && (b!=NULL) && (strlen(a)==strlen(b)) && (strcmp(a,b)==0) ) #define BUF_SIZE 100 static int xnee_expression_handle_prim_sub(xnee_data *xd, char *arg, xnee_script_s *xss) { char var[BUF_SIZE]; char val[BUF_SIZE]; char *str = arg; char *tmpp = NULL; char *valp = NULL; int len = 0 ; int i ; if (arg == NULL) { return XNEE_SYNTAX_ERROR; } xss->msecs = 0; while (str!=NULL) { /* skip leading blanks */ while ( str[0] == ' ' ) str++ ; /**************** * Find varaiable */ /* find '=' */ tmpp = strstr(str, "="); /* no '=' found, bail out */ if (tmpp==NULL) { return XNEE_SYNTAX_ERROR; } /* copy everything from str upto '=' into var */ len = strlen(str)-strlen(tmpp); strncpy (var,str,len); var[len]='\0'; /* remove trailing blanks ... */ i=0; while ( (ix_rel=0; if ( (val[0]=='+') ) { xss->x_rel=1; valp++; } else if ( (val[0]=='-') ) { xss->x_rel=1; } xss->valid = sscanf (valp, "%d", &xss->x); } /* y=12 etc */ else if (strncmp(var,XNEE_FAKE_Y_ARG,strlen(XNEE_FAKE_Y_ARG))==0) { valp = &val[0]; xss->y_rel=0; if ( (val[0]=='+') ) { xss->y_rel=1; valp++; } else if ( (val[0]=='-') ) { xss->y_rel=1; } xss->valid = sscanf (valp, "%d", &xss->y); } /* key=a key=shift etc */ else if (strncmp(var,XNEE_FAKE_KEY_ARG,strlen(XNEE_FAKE_KEY_ARG))==0) { if (strlen(val)==1) { valp = &val[0]; valp++; if (val[0]=='\0') { val[0]=' '; } xss->key = xnee_char2keycode (xd,val[0],&xss->kc); if ( xss->kc.kc != 0 ) { xss->valid = 1 ; } else { xss->valid = 0 ; } } else { xss->key = xnee_str2keycode (xd,val,&xss->kc); xss->valid = 1; } } /* button=12 etc */ else if (strncmp(var, XNEE_FAKE_BUTTON_ARG, strlen(XNEE_FAKE_BUTTON_ARG))==0) { valp = &val[0]; xss->valid = sscanf (valp, "%d", &xss->button); } /* msecs=12 etc */ else if (strncmp(var, XNEE_FAKE_MSEC_SLEEP, strlen(XNEE_FAKE_MSEC_SLEEP))==0) { valp = &val[0]; xss->valid = sscanf (valp, "%d", &xss->msecs); } else { fprintf (stderr, " keyword '%s' not yet handled\n", var); } /* skip leading blanks */ if (!xss->valid) { return XNEE_SYNTAX_ERROR ; } str=strstr(str," "); } return XNEE_OK; } static int xnee_expression_handle_prim(xnee_data *xd, char *str, xnee_intercept_data * xindata) { int ret= 0 ; char *prim_args; char buf[256]; int prim_len = 0 ; xnee_script_s xss ; xindata->type = 0; xindata->u.event.type = 0; xnee_verbose ((xd, "handling primitive: %s\n", str)); memset(&xss, 0, sizeof(xnee_script_s)); if (str == NULL) { return 0; } /* If NEW-WINDOW string, return */ if (strncmp(str, XNEE_NEW_WINDOW_MARK, strlen(XNEE_NEW_WINDOW_MARK)) == 0 ) { return 0; } /* Skip the leading blanks */ prim_args = strstr(str," "); if (prim_args==NULL) { return 0; } prim_len = strlen(str) - strlen(prim_args); strncpy(buf, str, prim_len); buf[prim_len]='\0'; prim_args++; xnee_expression_handle_prim_sub(xd, prim_args, &xss); if (CHECK_EQUALITY(buf, XNEE_FAKE_MOTION)) { if (xss.x_rel) { xnee_fake_relative_motion_event (xd, xss.x, xss.y, xss.msecs); } else { xnee_fake_motion_event (xd, 0, xss.x, xss.y, xss.msecs); } ret = XNEE_PRIMITIVE_DATA ; } else if (CHECK_EQUALITY(buf, XNEE_FAKE_BUTTON_PRESS)) { xnee_fake_button_event (xd, xss.button, XNEE_PRESS, xss.msecs); ret = XNEE_PRIMITIVE_DATA ; } else if (CHECK_EQUALITY(buf, XNEE_FAKE_BUTTON_RELEASE)) { xnee_fake_button_event (xd, xss.button, XNEE_RELEASE, xss.msecs); ret = XNEE_PRIMITIVE_DATA ; } else if (CHECK_EQUALITY(buf, XNEE_FAKE_BUTTON)) { xnee_fake_button_event (xd, xss.button, XNEE_PRESS, xss.msecs); usleep (100); xnee_fake_button_event (xd, xss.button, XNEE_RELEASE, xss.msecs); ret = XNEE_PRIMITIVE_DATA ; } else if (CHECK_EQUALITY(buf, XNEE_FAKE_KEY_PRESS)) { xnee_fake_key_mod_event (xd, &xss, XNEE_PRESS, xss.msecs); ret = XNEE_PRIMITIVE_DATA ; } else if (CHECK_EQUALITY(buf, XNEE_FAKE_KEY_RELEASE)) { xnee_fake_key_mod_event (xd, &xss, XNEE_RELEASE, xss.msecs); ret = XNEE_PRIMITIVE_DATA ; } else if (CHECK_EQUALITY(buf, XNEE_FAKE_KEY)) { xnee_fake_key_mod_event (xd, &xss, XNEE_PRESS, xss.msecs); xnee_fake_key_mod_event (xd, &xss, XNEE_RELEASE, xss.msecs); ret = XNEE_PRIMITIVE_DATA ; } else { xnee_verbose((xd, " else branch reached in xnee_expression_handle_prim\n")); } return ret; } static int xnee_is_replayable(xnee_data *xd, char *tmp) { char first_c ; first_c = tmp[0]; xnee_verbose((xd, " xnee_is_replayable\n")); if ( ( first_c >= '0' ) && ( first_c<='3' ) ) { return 1; } return 0; } int xnee_is_script(xnee_data *xd, char *tmp) { xnee_verbose((xd, " xnee_is_replayable\n")); if ( strncmp(tmp, "xnee-", strlen("xnee-")) == 0 ) { return 1; } return 0; } xnee-3.19/libxnee/src/xnee_setget.c0000775000000000000000000007767012332105560014212 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2004, 2009-2011, 2013, 2014 Henrik Sandklef * * This program is free software; you can redistribute it and/or * modify1 it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_alloc.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_plugin.h" #include "libxnee/feedback.h" #include "libxnee/xnee_range.h" static xnee_data *xd_saved; int xnee_set_display_name (xnee_data *xd, const char *disp) { if (disp==NULL) { return XNEE_OK; } XNEE_FREE_IF_NOT_NULL(xd->display); xd->display=strdup(disp); if (xd->display==NULL) { return XNEE_MEMORY_FAULT; } return XNEE_OK; } char* xnee_get_display_name (xnee_data *xd) { return xd->display; } Display * xnee_get_control_display(xnee_data *xd) { return xd->control; } Display * xnee_get_data_display(xnee_data *xd) { return xd->data; } Display * xnee_get_grab_display(xnee_data *xd) { return xd->grab; } int xnee_set_out_file (xnee_data *xd, FILE* out) { if ( xd->out_file != xd->saved_out_file ) { XNEE_FCLOSE_IF_NOT_NULL(xd->out_file); } xd->out_file=out; return XNEE_OK; } FILE* xnee_get_out_file (xnee_data *xd) { return xd->out_file; } int xnee_set_out_name (xnee_data *xd, char* out_name) { XNEE_FREE_IF_NOT_NULL(xd->out_name); xd->out_name=strdup(out_name); if (xd->out_name==NULL) { return XNEE_MEMORY_FAULT; } return XNEE_OK; } char * xnee_get_out_name (xnee_data *xd) { return xd->out_name; } int xnee_set_rt_file (xnee_data *xd, FILE* rt) { XNEE_FCLOSE_IF_NOT_NULL(xd->rt_file); xd->rt_file=rt; return XNEE_OK; } FILE* xnee_get_rt_file (xnee_data *xd) { return xd->rt_file; } int xnee_set_rt_name (xnee_data *xd, char* rt_name) { XNEE_FREE_IF_NOT_NULL(xd->rt_name); xd->rt_name=strdup(rt_name); if (xd->rt_name==NULL) { return XNEE_MEMORY_FAULT; } return XNEE_OK; } char * xnee_get_rt_name (xnee_data *xd) { return xd->rt_name; } int xnee_set_err_file (xnee_data *xd, FILE* err) { if ( xd->err_file != xd->saved_err_file ) { XNEE_FCLOSE_IF_NOT_NULL(xd->out_file); } xd->err_file=err; return XNEE_OK; } FILE* xnee_get_err_file (xnee_data *xd) { return xd->err_file; } int xnee_set_err_name (xnee_data *xd, char* err_name) { XNEE_FREE_IF_NOT_NULL(xd->err_name); xd->err_name=strdup(err_name); if (xd->err_name==NULL) { return XNEE_MEMORY_FAULT; } return XNEE_OK; } char * xnee_get_err_name (xnee_data *xd) { return xd->err_name; } int xnee_set_rc_file (xnee_data *xd, FILE* rc) { XNEE_FCLOSE_IF_NOT_NULL(xd->rc_file); xd->rc_file=rc; return XNEE_OK; } FILE* xnee_get_rc_file (xnee_data *xd) { return xd->rc_file; } int xnee_set_rc_name (xnee_data *xd, const char* rc_name) { XNEE_FREE_IF_NOT_NULL(xd->rc_name); xd->rc_name=strdup(rc_name); if (xd->rc_name==NULL) { return XNEE_MEMORY_FAULT; } return XNEE_OK; } char * xnee_get_rc_name (xnee_data *xd) { return xd->rc_name; } int xnee_set_rc_byname (xnee_data *xd, const char *rc_name) { struct stat buf; if (rc_name!=NULL) { xnee_set_rc_name (xd, rc_name); } else { return XNEE_OK; } if (stat(rc_name, &buf) == ENOENT) { xnee_set_new_project(xd); } XNEE_FCLOSE_IF_NOT_NULL(xd->rc_file); xd->rc_file = fopen (xd->rc_name,"r"); if (xd->rc_file ==NULL) { XNEE_FREE_IF_NOT_NULL (xd->rc_name); return XNEE_FILE_NOT_FOUND; } return XNEE_OK; } int xnee_set_data_file (xnee_data *xd, FILE* data_file) { XNEE_FCLOSE_IF_NOT_NULL(xd->data_file); xd->data_file=data_file; return XNEE_OK; } FILE* xnee_get_data_file (xnee_data *xd) { return xd->data_file; } int xnee_set_data_name (xnee_data *xd, const char* data) { XNEE_FREE_IF_NOT_NULL(xd->data_name); xd->data_name=strdup(data); return XNEE_OK; } char * xnee_get_data_name (xnee_data *xd) { return xd->data_name; } int xnee_set_verbose (xnee_data *xd) { if (xd==NULL) { return (XNEE_NO_MAIN_DATA); } xd->verbose=XNEE_TRUE; return XNEE_OK; } int xnee_unset_verbose (xnee_data *xd) { xd->verbose=XNEE_FALSE; return XNEE_OK; } int xnee_get_verbose (xnee_data *xd) { return xd->verbose; } int xnee_is_verbose (xnee_data *xd) { return (xd->verbose==XNEE_TRUE); } int xnee_set_buf_verbose (xnee_data *xd) { xd->buf_verbose=XNEE_TRUE; return XNEE_OK; } int xnee_unset_buf_verbose (xnee_data *xd) { xd->buf_verbose=XNEE_FALSE; return XNEE_OK; } int xnee_get_buf_verbose (xnee_data *xd) { return xd->buf_verbose; } int xnee_set_all_clients (xnee_data *xd) { xd->all_clients=XNEE_TRUE; return XNEE_OK; } int xnee_unset_all_clients (xnee_data *xd) { xd->all_clients=XNEE_FALSE; return XNEE_OK; } int xnee_get_all_clients (xnee_data *xd) { return xd->all_clients; } int xnee_is_future_clients (xnee_data *xd) { return !xd->all_clients; } int xnee_is_all_clients (xnee_data *xd) { return (xd->all_clients==XNEE_TRUE); } int xnee_set_sync (xnee_data *xd) { xnee_verbose((xd, "xnee_set_sync\n")); xd->sync=XNEE_TRUE; return XNEE_OK; } int xnee_unset_sync (xnee_data *xd) { xnee_verbose((xd, "xnee_unset_sync\n")); xd->sync=XNEE_FALSE; return XNEE_OK; } int xnee_get_sync (xnee_data *xd) { return xd->sync; } int xnee_is_sync (xnee_data *xd) { return (xd->sync==XNEE_TRUE); } int xnee_set_recorder (xnee_data *xd) { xd->mode=XNEE_RECORDER; return XNEE_OK; } int xnee_set_replayer (xnee_data *xd) { xd->mode=XNEE_REPLAYER; return XNEE_OK; } int xnee_set_distributor (xnee_data *xd) { xd->mode=XNEE_REPLAYER; return XNEE_OK; } int xnee_set_syntax_checker (xnee_data *xd) { xd->mode=XNEE_SYNTAX_CHECKER; return XNEE_OK; } int xnee_set_retyper (xnee_data *xd) { xd->mode=XNEE_RETYPER; return XNEE_OK; } unsigned char xnee_get_mode (xnee_data *xd) { return xd->mode; } int xnee_set_mode (xnee_data *xd, unsigned char mode) { xd->mode=mode; return XNEE_OK; } int xnee_is_recorder (xnee_data *xd) { return (xd->mode==XNEE_RECORDER); } int xnee_is_syntax_checker (xnee_data *xd) { return (xd->mode==XNEE_SYNTAX_CHECKER); } int xnee_is_replayer (xnee_data *xd) { return (xd->mode==XNEE_REPLAYER); } int xnee_is_distributor (xnee_data *xd) { return (xd->mode==XNEE_DISTRIBUTOR); } int xnee_is_retyper (xnee_data *xd) { return (xd->mode==XNEE_RETYPER); } int xnee_set_cont (xnee_data *xd) { xd->cont=XNEE_TRUE; return XNEE_OK; } int xnee_get_cont (xnee_data *xd) { return xd->cont; } int xnee_unset_cont (xnee_data *xd) { xd->cont=XNEE_FALSE; return XNEE_OK; } int xnee_is_cont (xnee_data *xd) { xd->cont=XNEE_FALSE; return XNEE_OK; } int xnee_set_key (xnee_data *xd, int mode, const char* km) { xnee_verbose((xd, "---> xnee_set_key\n")); if (km==NULL) { return XNEE_UNKNOWN_GRAB_MODE; } switch (mode) { case XNEE_GRAB_STOP: xnee_verbose((xd, " --- xnee_set_key stop to %s\n", km)); xnee_set_stop_key(xd, km); break; case XNEE_GRAB_PAUSE: xnee_verbose((xd, " --- xnee_set_key pause to %s\n", km)); xnee_set_pause_key(xd, km); break; case XNEE_GRAB_RESUME: xnee_verbose((xd, " --- xnee_set_key resume to %s\n", km)); xnee_set_resume_key(xd, km); break; case XNEE_GRAB_INSERT: xnee_verbose((xd, " --- xnee_set_key insert to %s\n", km)); xnee_set_insert_key(xd, km); break; case XNEE_GRAB_EXEC: xnee_verbose((xd, " --- xnee_set_key exec to %s\n", km)); xnee_set_exec_key(xd, km); break; default: xnee_print_error ("Unknown grab mode\n"); return XNEE_UNKNOWN_GRAB_MODE; } xnee_verbose((xd, "<--- xnee_set_key\n")); return XNEE_OK; } char* xnee_get_key (xnee_data *xd, int mode) { char *ret; xnee_verbose((xd, "---> xnee_get_key %d\n", mode)); switch (mode) { case XNEE_GRAB_STOP: xnee_verbose((xd, " --- xnee_get_key stop \n")); ret = xnee_get_stop_key(xd); break; case XNEE_GRAB_PAUSE: xnee_verbose((xd, " --- xnee_get_key pause \n")); ret = xnee_get_pause_key(xd); break; case XNEE_GRAB_RESUME: xnee_verbose((xd, " --- xnee_get_key resume \n")); ret = xnee_get_resume_key(xd); break; case XNEE_GRAB_INSERT: xnee_verbose((xd, " --- xnee_get_key insert \n")); ret = xnee_get_insert_key(xd); break; case XNEE_GRAB_EXEC: xnee_verbose((xd, " --- xnee_get_key exec \n")); ret = xnee_get_exec_key(xd); break; default: xnee_print_error ("Unknown grab mode\n"); return NULL; } xnee_verbose((xd, "<--- xnee_get_key '%s'\n", ret)); return ret; } int xnee_set_extra_str (xnee_data *xd, int idx, const char *str) { if ( (idx<0) && (idx>XNEE_GRAB_LAST) ) { return XNEE_BAD_GRAB_DATA; } if (str==NULL) { return XNEE_SYNTAX_ERROR; } if ( ( xd != NULL ) && ( xd->grab_keys!= NULL) ) { XNEE_FREE_IF_NOT_NULL(xd->grab_keys->action_keys[idx].extra_str); xd->grab_keys->action_keys[idx].extra_str = strdup(str); } else { return XNEE_BAD_GRAB_DATA; } return XNEE_OK; } int xnee_set_key_str (xnee_data *xd, int idx, const char *str) { if ( (idx<0) && (idx>XNEE_GRAB_LAST) ) return XNEE_BAD_GRAB_DATA; xnee_verbose((xd, "xnee_set_key_str (xd, %d, %s)\n", idx, str)); XNEE_FREE_IF_NOT_NULL(xd->grab_keys->action_keys[idx].str); xd->grab_keys->action_keys[idx].str = strdup(str); return XNEE_OK; } char* xnee_get_extra_str (xnee_data *xd, int idx) { if ( (idx<0) && (idx>XNEE_GRAB_LAST) ) return NULL; return xd->grab_keys->action_keys[idx].extra_str; } char* xnee_get_key_str (xnee_data *xd, int idx) { if ( (idx<0) && (idx>XNEE_GRAB_LAST) ) return NULL; return xd->grab_keys->action_keys[idx].str; } char* xnee_get_exec_prog (xnee_data *xd) { return xd->grab_keys->action_keys[XNEE_GRAB_EXEC].extra_str; } int xnee_set_exec_prog (xnee_data *xd, const char *prog) { int ret ; ret = xnee_set_extra_str (xd, XNEE_GRAB_EXEC, prog); return ret; } int xnee_set_force_replay (xnee_data *xd) { xd->force_replay=XNEE_TRUE; return XNEE_OK; } int xnee_unset_force_replay (xnee_data *xd) { xd->force_replay=XNEE_FALSE; return XNEE_OK; } int xnee_get_force_replay (xnee_data *xd) { return (xd->force_replay==XNEE_TRUE); } int xnee_is_force_replay (xnee_data *xd) { return (xd->force_replay==XNEE_TRUE); } int set_first_replayed_event (xnee_data *xd) { xd->first_replayed_event=XNEE_TRUE; return 0; } int get_first_replayed_event (xnee_data *xd) { return (xd->first_replayed_event==XNEE_TRUE); } int is_first_replayed_event (xnee_data *xd) { return xd->first_replayed_event; } int xnee_set_first_last (xnee_data *xd) { xd->xnee_info.first_last = XNEE_TRUE; return XNEE_OK; } int xnee_get_first_last (xnee_data *xd){ return xd->xnee_info.first_last; } int xnee_is_first_last (xnee_data *xd){ return (xd->xnee_info.first_last==XNEE_TRUE); } int xnee_unset_first_last (xnee_data *xd) { xd->xnee_info.first_last = XNEE_FALSE; return XNEE_OK; } int xnee_set_events_max (xnee_data *xd, int loops) { xd->xnee_info.events_max = loops; return XNEE_OK; } int xnee_get_events_max (xnee_data *xd) { return xd->xnee_info.events_max; } int xnee_get_events_left (xnee_data *xd) { return (xd->xnee_info.events_max - xd->xnee_info.events_recorded); } int xnee_set_data_max (xnee_data *xd, int loops) { xd->xnee_info.data_max = loops; return XNEE_OK; } int xnee_get_data_max (xnee_data *xd) { return xd->xnee_info.data_max; } int xnee_get_data_left (xnee_data *xd){ return (xd->xnee_info.data_max - xd->xnee_info.data_recorded); } int xnee_set_time_max (xnee_data *xd, int time) { xd->xnee_info.time_max = time; return XNEE_OK; } int xnee_get_time_max (xnee_data *xd) { return xd->xnee_info.time_max ; } int xnee_get_time_left (xnee_data *xd) { return (xd->xnee_info.time_max - xd->xnee_info.time_recorded); } int xnee_set_interval (xnee_data *xd, int interval) { xd->xnee_info.interval = interval ; return XNEE_OK; } int xnee_get_interval (xnee_data *xd) { return xd->xnee_info.interval; } int xnee_set_human_printout (xnee_data *xd) { xd->rec_callback = xnee_human_dispatch; return XNEE_OK; } int xnee_set_xnee_printout (xnee_data *xd) { xd->rec_callback = xnee_record_dispatch; return XNEE_OK; } int xnee_set_replay_speed_str (xnee_data *xd, const char *speed_str) { int speed; int ret ; if (speed_str==NULL) { return XNEE_SYNTAX_ERROR; } ret = sscanf(speed_str, "%d", &speed); if (ret == 1) { xnee_verbose ((xd, "Setting replay speed = %d (%s)\n", speed, speed_str)); xnee_set_replay_speed (xd, speed); return XNEE_OK; } else { xnee_verbose ((xd, "Failed to set replay speed\n")); return XNEE_BAD_SPEED; } } int xnee_set_replay_speed (xnee_data *xd, int speed) { xnee_verbose ((xd, "xnee_set_replay_speed = %d \n", speed)); xd->speed_percent=speed; return XNEE_OK; } int xnee_get_replay_speed(xnee_data *xd) { return xd->speed_percent; } int xnee_set_store_mouse_pos(xnee_data *xd) { xd->xnee_info.store_mouse_pos = True ; return XNEE_OK; } int xnee_unset_store_mouse_pos(xnee_data *xd) { xd->xnee_info.store_mouse_pos = False ; return XNEE_OK; } Bool xnee_is_store_mouse_pos(xnee_data *xd) { return (xd->xnee_info.store_mouse_pos); } int xnee_set_program_name(xnee_data *xd, const char* name) { XNEE_FREE_IF_NOT_NULL(xd->program_name); xd->program_name = strdup(name); if (xd->program_name==NULL) { return XNEE_MEMORY_FAULT; } return XNEE_OK; } char * xnee_get_program_name(xnee_data *xd) { return (xd->program_name); } int xnee_get_new_project(xnee_data *xd) { return (xd->xrm.new_project); } int xnee_set_new_project(xnee_data *xd) { xd->xrm.new_project = 1; return XNEE_OK; } int xnee_unset_new_project(xnee_data *xd) { xd->xrm.new_project = 0; return XNEE_OK; } int xnee_set_application_parameters(xnee_data *xd, char **argv) { xd->app_args=argv; return XNEE_OK; } char ** xnee_get_application_parameters(xnee_data *xd) { return xd->app_args; } int xnee_set_autorepeat (xnee_data *xd) { if (xd->autorepeat_saved==1) { return XNEE_OK; } if (xd->keep_autorepeat!=0) { return XNEE_OK; } if ( (xd==NULL) || (xd->fake==NULL) ) { return (XNEE_MEMORY_FAULT); } /*@ ignore @*/ XGetKeyboardControl (xd->fake, &xd->kbd_orig); /*@ end @*/ xnee_verbose ((xd," key_click_percent %d \n", xd->kbd_orig.key_click_percent)); xnee_verbose ((xd," bell_percent %d\n", xd->kbd_orig.bell_percent)); xnee_verbose ((xd," bell_pitch %d\n", xd->kbd_orig.bell_pitch)); xnee_verbose ((xd," bell_duration %d\n", xd->kbd_orig.bell_duration)); xnee_verbose ((xd," led_mask %d\n", (int)xd->kbd_orig.led_mask)); xnee_verbose ((xd," global_auto_repeat %d\n", xd->kbd_orig.global_auto_repeat)); xnee_verbose((xd,"Auto repeat:\n")); /* for (i=0;i<32;i++) { xnee_verbose((xd,"Key\t")); for (j=1;j<=8;j++) xnee_verbose((xd,"%03d ", (i*8)+j )); xnee_verbose((xd,"\nValue\t")); for (j=1;j<=8;j++) { xnee_verbose((xd," %d ", xd->kbd_orig.auto_repeats[i] && j)); } xnee_verbose((xd,"\n\n")); } */ /*@ ignore @*/ XAutoRepeatOff(xd->fake); /*@ end @*/ xd->autorepeat_saved=1; return XNEE_OK; } int xnee_reset_autorepeat (xnee_data *xd) { if (xd->autorepeat_saved==0) { return XNEE_OK; } if (xd->keep_autorepeat!=0) { return XNEE_OK; } xnee_verbose((xd,"Resetting autorepeat on (%p) to: ", (xd->fake==NULL)?0:(void*)xd->fake)); if (!xd->fake) { return XNEE_OK; } if (xd->kbd_orig.global_auto_repeat==AutoRepeatModeOn) { xnee_verbose((xd,"AutoRepeatModeOn\n")); /*@ignore@*/ XAutoRepeatOn(xd->fake); /*@end@*/ } else { xnee_verbose((xd,"AutoRepeatModeOff\n")); /*@ignore@*/ XAutoRepeatOff(xd->fake); /*@end@*/ } /* Make sure the resetting of autorepeat is handled before we close down the display */ /*@ignore@*/ XFlush (xd->fake); /*@end@*/ xd->autorepeat_saved=0; return XNEE_OK; } int xnee_set_replay_offset_str (xnee_data *xd, char *str) { int x; int y; int ret; xnee_verbose((xd, "replay offset str: %s\n", str)); if (str==NULL) { return XNEE_WRONG_PARAMS; } ret = sscanf(str, "%d,%d",&x,&y); if (ret != 2 ) { xnee_verbose((xd, "replay offset failed: %d\n", ret)); return(ret); } xd->res_info.x_offset = x; xd->res_info.y_offset = y; xnee_verbose((xd, "replay offset OK: %dx%d\n", x,y)); return XNEE_OK; } int xnee_set_replay_offset_x(xnee_data *xd, int offset) { xd->res_info.x_offset = offset; return XNEE_OK; } int xnee_set_replay_offset_y(xnee_data *xd, int offset) { xd->res_info.y_offset = offset; return XNEE_OK; } int xnee_get_replay_offset_x(xnee_data *xd) { return xd->res_info.x_offset ; } int xnee_get_replay_offset_y(xnee_data *xd) { return xd->res_info.y_offset ; } int xnee_get_new_window_pos (xnee_data *xd) { xnee_verbose((xd, "xnee_set_new_window_pos()\n")); return xd->xnee_info.store_window_pos; } int xnee_set_new_window_pos (xnee_data *xd) { xnee_verbose((xd, "xnee_set_new_window_pos()\n")); xd->xnee_info.store_window_pos=1; return XNEE_OK; } int xnee_set_new_window_pos_value (xnee_data *xd, int val) { xnee_verbose((xd, "xnee_set_new_window_pos(%d)\n", val)); xd->xnee_info.store_window_pos=val; return XNEE_OK; } int xnee_get_new_window_pos_value (xnee_data *xd) { return xd->xnee_info.store_window_pos; } int xnee_unset_new_window_pos (xnee_data *xd) { xnee_verbose((xd, "xnee_unset_new_window_pos()\n")); xd->xnee_info.store_window_pos=0; return XNEE_OK; } int xnee_get_recall_window_pos (xnee_data *xd) { xnee_verbose((xd, "xnee_get_recall_window_pos()\n")); return xd->recall_recorded_win_pos; } int xnee_set_recall_window_pos (xnee_data *xd) { xnee_verbose((xd, "xnee_set_recall_window_pos()\n")); xd->recall_recorded_win_pos=1; return xnee_parse_range (xd, XNEE_DELIVERED_EVENT, "ReparentNotify"); } int xnee_unset_recall_window_pos (xnee_data *xd) { xnee_verbose((xd, "xnee_unset_recall_window_pos()\n")); xd->recall_recorded_win_pos=0; return XNEE_OK; } int xnee_set_project_file(xnee_data *xd, char *name) { #define XNEE_PARSE_BUF 200 char buf [XNEE_PARSE_BUF]; int ret; if (name == NULL) { return XNEE_WRONG_PARAMS; } ret = xnee_set_rc_byname (xd, name); if ( ret != XNEE_OK) { xnee_verbose((xd, "Could not open project file %s\n", name)); if ( (strlen(name) + strlen (XNEE_RESOURCE_DIR) + 2 ) > 200) { xnee_verbose ((xd, "ERROR: Filename too big\n")); xnee_verbose ((xd, "... leaving.\n")); xnee_close_down(xd); return(XNEE_WRONG_PARAMS); } strncpy ( buf , XNEE_RESOURCE_DIR, XNEE_PARSE_BUF ); strncat ( buf , "/", XNEE_PARSE_BUF - strlen(buf)); strncat ( buf , name, XNEE_PARSE_BUF - strlen(buf)); xnee_verbose((xd, "\ttryingresource file %s\n", buf)); ret = xnee_set_rc_name (xd, buf); } if ( xnee_get_rc_file (xd) != NULL) { ret = xnee_add_resource (xd); if (ret!=XNEE_OK) { xnee_verbose ((xd, "project file read: return value %d\n", ret)); if (ret == XNEE_SYNTAX_ERROR) { char *tmp_str; xnee_verbose ((xd, "project file read: SYNTAX ERROR\n")); tmp_str = xnee_get_err_string(); if (tmp_str!=NULL) { fprintf (stderr,"%s", tmp_str); } XNEE_FREE_IF_NOT_NULL(tmp_str); return ret; } } } else { xnee_print_error ("Unable to open resource file\n"); xnee_verbose ((xd, "Could not open resource file\n")); xnee_verbose ((xd, "... leaving\n")); ret = XNEE_WRONG_PARAMS; } return ret; } char * xnee_get_project_name(xnee_data *xd) { if (xd->xrm.project_name!=NULL) { return xd->xrm.project_name; } else { return (char*)XNEE_EMPTY_STRING; } } char * xnee_get_project_descr(xnee_data *xd){ if (xd->xrm.project_descr!=NULL) { return xd->xrm.project_descr; } else { return (char*)XNEE_EMPTY_STRING; } } char * xnee_get_creat_date(xnee_data *xd) { time_t rawtime; struct tm * timeinfo; #define XNEE_DATE_BUF_SIZE 100 static char buf[XNEE_DATE_BUF_SIZE]; if (xd->xrm.creat_date!=NULL) { return xd->xrm.creat_date; } time ( &rawtime ); timeinfo = localtime ( &rawtime ); snprintf(buf, XNEE_DATE_BUF_SIZE, "%.4d-%.2d-%.2d", timeinfo->tm_year + 1900 , timeinfo->tm_mon + 1 , timeinfo->tm_mday ); return buf; } char * xnee_get_creat_program(xnee_data *xd) { if (xd->xrm.creat_prog!=NULL) return xd->xrm.creat_prog; else return xnee_get_program_name(xd); } char * xnee_get_creat_prog_vers(xnee_data *xd) { if (xd->xrm.creat_prog_vers!=NULL) return xd->xrm.creat_prog_vers; else return VERSION; } char * xnee_get_last_date(xnee_data *xd) { if (xd->xrm.last_date!=NULL) return xd->xrm.last_date; else return "none"; } char * xnee_get_last_program(xnee_data *xd) { if (xd->xrm.last_prog!=NULL) return xd->xrm.last_prog; else return "none"; } char * xnee_get_last_prog_vers(xnee_data *xd){ if (xd->xrm.last_prog_vers!=NULL) return xd->xrm.last_prog_vers; else return "none"; } char * xnee_get_author_name(xnee_data *xd){ if (xd->xrm.author_name!=NULL) return xd->xrm.author_name; else return "none"; } char * xnee_get_author_email(xnee_data *xd){ if (xd->xrm.author_email!=NULL) return xd->xrm.author_email; else return "none"; } int xnee_set_project_name(xnee_data *xd, char *str) { if (str==NULL) { return XNEE_NO_PROJECT_FILE; } XNEE_FREE_IF_NOT_NULL(xd->xrm.project_name); xd->xrm.project_name=strdup(str); return XNEE_OK; } int xnee_set_plugin_name(xnee_data *xd, char *str, unsigned char mode) { if (str==NULL) { return XNEE_NO_PLUGIN_FILE; } return xnee_use_plugin(xd, str, mode); } int xnee_set_project_descr(xnee_data *xd, char *str){ xd->xrm.project_descr=strdup(str); return XNEE_OK; } int xnee_set_creat_date(xnee_data *xd, char *str){ XNEE_FREE_IF_NOT_NULL(xd->xrm.creat_date); xd->xrm.creat_date=strdup(str); return XNEE_OK; } int xnee_set_creat_program(xnee_data *xd, char *str){ XNEE_FREE_IF_NOT_NULL(xd->xrm.creat_prog_vers); xd->xrm.creat_prog=strdup(str); return XNEE_OK; } int xnee_set_creat_prog_vers(xnee_data *xd, char *str){ xd->xrm.creat_prog_vers=strdup(str); return XNEE_OK; } int xnee_set_last_date(xnee_data *xd, char *str) { XNEE_FREE_IF_NOT_NULL(xd->xrm.last_date); xd->xrm.last_date=strdup(str); return XNEE_OK; } int xnee_set_last_program(xnee_data *xd, char *str){ xd->xrm.last_prog=strdup(str); return XNEE_OK; } int xnee_set_last_prog_vers(xnee_data *xd, char *str) { xd->xrm.last_prog_vers=strdup(str); return XNEE_OK; } int xnee_set_author_name(xnee_data *xd, char *str){ xd->xrm.author_name=strdup(str); return XNEE_OK; } int xnee_set_author_email(xnee_data *xd, char *str){ xd->xrm.author_email=strdup(str); return XNEE_OK; } #ifdef USE_OBSOLETE int xnee_set_first_list_str2(xnee_data *xd, char *str) { int ret = XNEE_OK; if ( str != NULL) { ret = xnee_boolstr2int(xd, str); } if (ret == XNEE_BOOL_ERROR) { ret = XNEE_SYNTAX_ERROR; } else { if (ret) { ret = xnee_set_first_last(xd); } else { ret = xnee_unset_first_last(xd); } } return ret; } #endif int xnee_set_all_clients_str(xnee_data *xd, char *str) { int ret = XNEE_OK; ret = xnee_boolstr2int(xd, str); if (ret == XNEE_BOOL_ERROR) { ret = XNEE_SYNTAX_ERROR; } else { if (ret) { ret = xnee_set_all_clients(xd); } else { ret = xnee_unset_all_clients(xd); } } return ret; } int xnee_set_future_clients_str(xnee_data *xd, char *str) { int ret = XNEE_OK; ret = xnee_boolstr2int(xd, str); if (ret == XNEE_BOOL_ERROR) { ret = XNEE_SYNTAX_ERROR; } else { if (ret) { ret = xnee_set_future_clients(xd); } else { ret = xnee_unset_future_clients(xd); } } return ret; } int xnee_set_future_clients(xnee_data *xd) { /* Setting future clients is the same as unsetting all_clients*/ return xnee_unset_all_clients(xd); } int xnee_unset_future_clients(xnee_data *xd) { /* Unsetting future clients is the same as setting all_clients*/ return xnee_set_all_clients(xd); } int xnee_set_events_max_str (xnee_data *xd, char *str) { int ret; ret = xnee_str2int (xd, str); if ( ret == INT_MAX ) { ret = XNEE_SYNTAX_ERROR ; } else { ret = xnee_set_events_max(xd, ret); } return ret; } int xnee_set_data_max_str (xnee_data *xd, char *str) { int ret; ret = xnee_str2int (xd, str); if ( ret == INT_MAX ) { ret = XNEE_SYNTAX_ERROR ; } else { ret = xnee_set_data_max(xd, ret); } return ret; } int xnee_set_time_max_str (xnee_data *xd, char *str) { int ret; ret = xnee_str2int (xd, str); if ( ret == INT_MAX ) { ret = XNEE_SYNTAX_ERROR ; } else { ret = xnee_set_time_max(xd, ret); } return ret; } int xnee_set_resolution_str (xnee_data *xd, char *str) { int ret = XNEE_OK; ret = xnee_boolstr2int(xd, str); if (ret == XNEE_BOOL_ERROR) { ret = XNEE_SYNTAX_ERROR; } else { if (ret) { ret = xnee_set_resolution_used(xd); } else { ret = xnee_unset_resolution_used(xd); } } return ret; } int xnee_set_sync_mode_str (xnee_data *xd, char *str) { int ret = XNEE_OK; ret = xnee_boolstr2int(xd, str); if (ret == XNEE_BOOL_ERROR) { ret = XNEE_SYNTAX_ERROR; } else { if (ret) { ret = xnee_set_sync_mode(xd); } else { ret = xnee_unset_sync_mode(xd); } } return ret; } int xnee_unset_sync_mode_str (xnee_data *xd, char *str) { int ret = XNEE_OK; ret = xnee_boolstr2int(xd, str); if (ret == XNEE_BOOL_ERROR) { ret = XNEE_SYNTAX_ERROR; } else { if (ret) { ret = xnee_unset_sync_mode(xd); } else { ret = xnee_set_sync_mode(xd); } } return ret; } int xnee_set_sync_mode(xnee_data *xd) { xd->sync = True; return XNEE_OK; } int xnee_get_sync_mode(xnee_data *xd) { return xd->sync ; } int xnee_unset_sync_mode(xnee_data *xd) { xnee_verbose((xd, "Setting no sync\n")); xd->sync = False; return XNEE_OK; } int xnee_set_unsync_mode(xnee_data *xd) { xnee_verbose((xd, "Setting unsync\n")); xd->sync = False; return XNEE_OK; } int xnee_get_unsync_mode(xnee_data *xd) { return xd->sync ; } const char * xnee_get_xosd_font(xnee_data *xd) { return xnee_get_xosd_font_impl(xd); } int xnee_set_xosd_font(xnee_data *xd, char *font_str) { return xnee_set_xosd_font_impl(xd, font_str); } int xnee_set_rec_resolution (xnee_data *xd, char *res_str) { return xnee_str_to_res (res_str, &xd->res_info.record); } int xnee_get_rec_resolution_x (xnee_data *xd) { return xd->res_info.record.x_res; } int xnee_get_rec_resolution_y (xnee_data *xd) { return xd->res_info.record.y_res; } int xnee_set_rec_resolution_y (xnee_data *xd, int res) { xd->res_info.record.y_res = res; return XNEE_OK; } int xnee_set_rec_resolution_x (xnee_data *xd, int res) { xd->res_info.record.x_res = res; return XNEE_OK; } int xnee_set_rep_resolution_y (xnee_data *xd, int res) { xd->res_info.replay.y_res = res; return XNEE_OK; } int xnee_set_rep_resolution_x (xnee_data *xd, int res) { xd->res_info.replay.x_res = res; return XNEE_OK; } int xnee_set_rep_resolution (xnee_data *xd, char *res_str) { int ret ; ret = xnee_str_to_res (res_str, &xd->res_info.replay); return ret; } int xnee_get_rep_resolution_x (xnee_data *xd) { return xd->res_info.replay.x_res; } int xnee_get_rep_resolution_y (xnee_data *xd) { return xd->res_info.replay.y_res; } xnee_data* xnee_get_xnee_data (void) { return xd_saved; } int xnee_set_xnee_data (xnee_data *xd) { xd_saved = xd; return XNEE_OK; } int xnee_set_keep_autorepeat (xnee_data *xd) { xd->keep_autorepeat = 1; return XNEE_OK; } int xnee_set_retype_press_delay(xnee_data *xd, unsigned int delay) { xd->retype.key_press_delay = delay; return XNEE_OK; } int xnee_set_retype_release_delay(xnee_data *xd, unsigned int delay) { xd->retype.key_release_delay = delay; return XNEE_OK; } int xnee_set_no_reparent_recording(xnee_data *xd) { xd->no_reparent_recording = 1; return XNEE_OK; } int xnee_unset_no_reparent_recording(xnee_data *xd) { xd->no_reparent_recording = 0; return XNEE_OK; } int xnee_is_no_reparent_recording(xnee_data *xd) { return xd->no_reparent_recording ; } int xnee_set_replay_backend(xnee_data *xd, int replay_backend) { if (( replay_backend < 0 ) || (replay_backend >= XNEE_REPLAY_LAST)) { return XNEE_REPLAY_BACKEND_FAILURE; } xd->replay_backend = replay_backend; return XNEE_OK; } int xnee_set_replay_backend_name(xnee_data *xd, char *replay_backend) { if (replay_backend==NULL) { return XNEE_REPLAY_BACKEND_FAILURE; } if (strncmp(replay_backend, XNEE_REPLAY_XNEE_STRING, strlen(XNEE_REPLAY_XNEE_STRING))==0) { return xnee_set_replay_backend(xd, XNEE_REPLAY_XNEE); } else if (strncmp(replay_backend, XNEE_REPLAY_SWINPUT_STRING, strlen(XNEE_REPLAY_SWINPUT_STRING))==0) { return xnee_set_replay_backend(xd, XNEE_REPLAY_SWINPUT); } return XNEE_REPLAY_BACKEND_FAILURE; } int xnee_is_forced_core_device_events(xnee_data *xd) { return (xd->xi_data.forced_core_replay != 0) ; } int xnee_set_forced_core_device_events(xnee_data *xd) { xd->xi_data.forced_core_replay = 1 ; return XNEE_OK; } int xnee_unset_forced_core_device_events(xnee_data *xd) { xd->xi_data.forced_core_replay = 0 ; return XNEE_OK; } int xnee_get_max_nr_of_moves(xnee_data *xd) { if (xd==NULL) { return -1; } return xd->max_nr_of_moves; } int xnee_set_max_nr_of_moves(xnee_data *xd, int moves) { if (xd==NULL) { return -1; } xd->max_nr_of_moves = moves ; return 0 ; } int xnee_set_override_display(xnee_data *xd, int mode) { if ( (xd==NULL) || (mode<0) || (mode > XNEE_OVERRIDE_DISPLAY_CONTROL)) { return -1; } xd->xnee_info.override_recorded_display = mode; return XNEE_OK; } int xnee_get_override_display(xnee_data *xd) { return xd->xnee_info.override_recorded_display; } xnee-3.19/libxnee/src/print.c0000664000000000000000000015121112154176463013025 00000000000000/* Xnee's Not an Event Emulator enables recording and replaying of X protocol data Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013 Henrik Sandklef 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301, USA. */ #include "libxnee/xnee.h" #include "libxnee/print_varargs.h" #include "libxnee/print.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_threshold.h" #include "libxnee/feedback.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_xinput.h" #define XNEE_HP_SEP " " #define XNEE_HP_EQUALS "=" #define XNEE_HP_CONTENT_BEGIN " { " #define XNEE_HP_CONTENT_END " } " /* * * Prints the number and name of the XEvent * */ int xnee_print_event_info (xnee_data *xd) { int i = 2 ; char *tmp = NULL; fprintf (xd->out_file," X11 Event\n\n"); fprintf (xd->out_file,"number\tname\n"); fprintf (xd->out_file,"======\t====\n"); tmp = xnee_print_event(i) ; while (tmp!=NULL) { if (tmp!=NULL) { fprintf (xd->out_file,"%.2d\t%s\n",i,tmp); } i++; tmp = xnee_print_event(i) ; } return XNEE_OK; } /* * * Prints the number and name of the X11 error * */ int xnee_print_error_info (xnee_data *xd) { int i = 0 ; char *tmp = NULL; fprintf (xd->out_file," X11 Error\n\n"); fprintf (xd->out_file,"number\tname\n"); fprintf (xd->out_file,"======\t====\n"); tmp = xnee_print_error_code(i) ; while (tmp!=NULL) { if (tmp!=NULL) { fprintf (xd->out_file,"%.2d\t%s\n",i,tmp); } i++; tmp = xnee_print_error_code(i) ; } return XNEE_OK; } /* * * Prints the number and name of the X11 error * */ int xnee_print_request_info (xnee_data *xd) { int i=1 ; char *tmp = NULL ; fprintf (xd->out_file," X11 Request\n\n"); fprintf (xd->out_file,"number\tname\n"); fprintf (xd->out_file,"======\t====\n"); tmp = xnee_print_request(i); while (tmp!=NULL) { if (tmp!=NULL) { fprintf (xd->out_file,"%.2d\t%s\n",i,tmp); } i++; tmp = xnee_print_request(i); } return XNEE_OK; } /* * * Prints the number and name of the X11 reply * */ int xnee_print_reply_info (xnee_data *xd) { (void) fprintf (xd->out_file," X11 Reply\n\n"); return XNEE_OK; } /* * * Prints the number and name of the X11 data * */ int xnee_print_data_info (xnee_data *xd) { int ret ; ret = xnee_print_event_info (xd) ; XNEE_RETURN_IF_ERR(ret); ret = xnee_print_error_info (xd) ; XNEE_RETURN_IF_ERR(ret); ret = xnee_print_request_info (xd) ; XNEE_RETURN_IF_ERR(ret); ret = xnee_print_reply_info (xd) ; XNEE_RETURN_IF_ERR(ret); return XNEE_OK; } /* * Print character representation of event if verbose mode is on. */ void xnee_verbose_event (xnee_data * xd, int ev ) { if ( xd->verbose != 0 ) { (void)xnee_print_event (ev); } } /* * * xnee_record_print_request. * */ void xnee_record_print_request (xnee_data *xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data ; int req_type ; xResourceReq *req; if ( xrecintd == NULL) { return; } xrec_data = (XRecordDatum *) xrecintd->data ; req_type = (int) xrec_data->type ; req = (xResourceReq *) &xrec_data->req ; (void) xd->data_fp (xd->out_file,"1,%d,%lu,%lu,%lu,%lu\n", req_type, req->reqType, req->length, req->id, xrecintd->server_time); } /* * * xnee_human_print_request. * */ void xnee_human_print_request (xnee_data *xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data; int request_type ; char *request_name ; char *name=" not defined " ; if ( xrecintd == NULL) { return; } xrec_data = (XRecordDatum *) (xrecintd->data) ; request_type = (int)xrec_data->type ; request_name = xnee_print_request(request_type); if ( request_name == NULL ) { request_name = name; } (void)xd->data_fp (xd->out_file,"Request" XNEE_HP_EQUALS "%s" XNEE_HP_SEP "Number" XNEE_HP_EQUALS "%d", request_name, request_type); if ( 1 ) { (void)xd->data_fp (xd->out_file,XNEE_HP_CONTENT_BEGIN); xnee_human_print_request_verbose (xd,xrecintd ); (void)xd->data_fp (xd->out_file,XNEE_HP_CONTENT_END); } (void)xd->data_fp (xd->out_file,"\n"); } /* * * xnee_human_print_request. * */ void xnee_human_print_request_verbose (xnee_data *xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data; int req_type ; xCreateWindowReq *req_create_ptr; xrec_data = (XRecordDatum *) (xrecintd->data) ; req_type = (int) xrec_data->type ; switch (req_type) { case X_CreateWindow: req_create_ptr = (xCreateWindowReq *) (xrecintd->data) ; (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "reqType" XNEE_HP_EQUALS "%c" XNEE_HP_SEP "depth" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "length" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "wid" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "parent" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "width" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "height" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "borderWidth" XNEE_HP_EQUALS "%lu" #if defined(__cplusplus) || defined(c_plusplus) XNEE_HP_SEP "c_class" XNEE_HP_EQUALS "%lu" #else XNEE_HP_SEP "class" XNEE_HP_EQUALS "%lu" #endif XNEE_HP_SEP "visual" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "mask" XNEE_HP_EQUALS "%lu", req_create_ptr->reqType, req_create_ptr->depth, req_create_ptr->length, req_create_ptr->wid, req_create_ptr->parent, req_create_ptr->width, req_create_ptr->height, req_create_ptr->borderWidth, #if defined(__cplusplus) || defined(c_plusplus) req_create_ptr->c_class, #else req_create_ptr->class, #endif req_create_ptr->visual, req_create_ptr->mask); break; case sz_xReparentWindowReq: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "length" XNEE_HP_EQUALS "%lu RE ", xrec_data->req.length); break; default: (void)xd->data_fp (xd->out_file, " NOT IMPLEMENTED REQUEST "); break; } } /* * * xnee_human_print_event. * */ void xnee_human_print_event (xnee_data *xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data ; int event_type ; char *event_name ; char *name=" not defined " ; xrec_data = (XRecordDatum *) (xrecintd->data) ; event_type = (int)xrec_data->type ; event_name = xnee_print_event(event_type); if ( event_name == NULL ) { event_name = name; } (void)xd->data_fp (xd->out_file,"Event" XNEE_HP_EQUALS "%s" XNEE_HP_SEP "Number" XNEE_HP_EQUALS "%d", event_name, event_type); xnee_handle_xinput_event_human(xd, event_type, xrec_data, xrecintd->server_time); if ( 1 ) { (void)xd->data_fp (xd->out_file,XNEE_HP_CONTENT_BEGIN); xnee_human_print_event_verbose (xd,xrecintd ); (void)xd->data_fp (xd->out_file,XNEE_HP_CONTENT_END); } (void)xd->data_fp (xd->out_file,"\n"); } /* * * xnee_human_print_event. * */ void xnee_human_print_event_verbose (xnee_data *xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data ; int event_type ; xrec_data = (XRecordDatum *) (xrecintd->data) ; event_type = (int)xrec_data->type ; (void)xd->data_fp (xd->out_file, "{ "); switch (event_type) { case KeyPress: case KeyRelease: case ButtonPress: case ButtonRelease: case MotionNotify: (void)xd->data_fp (xd->out_file, "root" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "child" XNEE_HP_EQUALS "%lu", xrec_data->event.u.keyButtonPointer.root, xrec_data->event.u.keyButtonPointer.event, xrec_data->event.u.keyButtonPointer.child ); (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "rootX" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "rootY" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "eventX" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "eventY" XNEE_HP_EQUALS "%lu", xrec_data->event.u.keyButtonPointer.rootX, xrec_data->event.u.keyButtonPointer.rootY, xrec_data->event.u.keyButtonPointer.eventX, xrec_data->event.u.keyButtonPointer.eventY ); (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "state" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "sameScreen" XNEE_HP_EQUALS "%d", xrec_data->event.u.keyButtonPointer.state, xrec_data->event.u.keyButtonPointer.sameScreen ); break; case EnterNotify: case LeaveNotify: (void)xd->data_fp (xd->out_file, "root" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "child" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "rootX" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "rootY" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "eventX" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "eventY" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "state" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "mode" XNEE_HP_EQUALS "%d", xrec_data->event.u.enterLeave.root, xrec_data->event.u.enterLeave.event, xrec_data->event.u.enterLeave.child, xrec_data->event.u.enterLeave.rootX, xrec_data->event.u.enterLeave.rootY, xrec_data->event.u.enterLeave.eventX, xrec_data->event.u.enterLeave.eventY, xrec_data->event.u.enterLeave.state, xrec_data->event.u.enterLeave.mode); break; case FocusIn: case FocusOut: (void)xd->data_fp (xd->out_file, "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "mode" XNEE_HP_EQUALS "%lu", xrec_data->event.u.focus.window, xrec_data->event.u.focus.mode); break; case Expose: (void)xd->data_fp (xd->out_file, "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "x" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "y" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "width" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "height" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "count" XNEE_HP_EQUALS "%d", xrec_data->event.u.expose.window, xrec_data->event.u.expose.x, xrec_data->event.u.expose.y, xrec_data->event.u.expose.width, xrec_data->event.u.expose.height, xrec_data->event.u.expose.count); break; case GraphicsExpose: (void)xd->data_fp (xd->out_file, "drawable" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "x" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "y" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "width" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "height" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "minorEvent" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "majorEvent" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "count" XNEE_HP_EQUALS "%d", xrec_data->event.u.graphicsExposure.drawable, xrec_data->event.u.graphicsExposure.x, xrec_data->event.u.graphicsExposure.y, xrec_data->event.u.graphicsExposure.width, xrec_data->event.u.graphicsExposure.height, xrec_data->event.u.graphicsExposure.minorEvent, xrec_data->event.u.graphicsExposure.majorEvent, xrec_data->event.u.graphicsExposure.count); break; case NoExpose: (void)xd->data_fp (xd->out_file, "drawable" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "minorEvent" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "majorEvent" XNEE_HP_EQUALS "%d" , xrec_data->event.u.noExposure.drawable, xrec_data->event.u.noExposure.minorEvent, xrec_data->event.u.noExposure.majorEvent); break; case VisibilityNotify: (void)xd->data_fp (xd->out_file, "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "state" XNEE_HP_EQUALS "%d" , xrec_data->event.u.visibility.window, xrec_data->event.u.visibility.state); break; case CreateNotify: (void)xd->data_fp (xd->out_file, "parent" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "x" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "y" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "width" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "height" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "borderWidth" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "override" XNEE_HP_EQUALS "%d" , xrec_data->event.u.createNotify.parent, xrec_data->event.u.createNotify.window, xrec_data->event.u.createNotify.x, xrec_data->event.u.createNotify.y, xrec_data->event.u.createNotify.width, xrec_data->event.u.createNotify.height, xrec_data->event.u.createNotify.borderWidth, xrec_data->event.u.createNotify.override); break; case DestroyNotify: (void)xd->data_fp (xd->out_file, "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" , xrec_data->event.u.destroyNotify.event, xrec_data->event.u.destroyNotify.window); break; case UnmapNotify: (void)xd->data_fp (xd->out_file, "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "fromConfigure" XNEE_HP_EQUALS "%d" , xrec_data->event.u.unmapNotify.event, xrec_data->event.u.unmapNotify.window, xrec_data->event.u.unmapNotify.fromConfigure); break; case MapNotify: (void)xd->data_fp (xd->out_file, "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "override" XNEE_HP_EQUALS "%d" , xrec_data->event.u.mapNotify.event, xrec_data->event.u.mapNotify.window, xrec_data->event.u.mapNotify.override); break; case MapRequest: (void)xd->data_fp (xd->out_file, "parent" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu", xrec_data->event.u.mapRequest.parent, xrec_data->event.u.mapRequest.window); break; case ReparentNotify: (void)xd->data_fp (xd->out_file, "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "parent" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "x" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "y" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "override" XNEE_HP_EQUALS "%d" , xrec_data->event.u.reparent.event, xrec_data->event.u.reparent.window, xrec_data->event.u.reparent.parent, xrec_data->event.u.reparent.x, xrec_data->event.u.reparent.y, xrec_data->event.u.reparent.override); break; case ConfigureNotify: (void)xd->data_fp (xd->out_file, "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "aboveSibling" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "parent" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "x" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "y" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "width" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "height" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "borderWidth" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "override" XNEE_HP_EQUALS "%d" , xrec_data->event.u.configureNotify.event, xrec_data->event.u.configureNotify.window, xrec_data->event.u.configureNotify.aboveSibling, xrec_data->event.u.configureNotify.x, xrec_data->event.u.configureNotify.y, xrec_data->event.u.configureNotify.width, xrec_data->event.u.configureNotify.height, xrec_data->event.u.configureNotify.borderWidth, xrec_data->event.u.configureNotify.override); break; case ConfigureRequest: (void)xd->data_fp (xd->out_file, "parent" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "sibling" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "x" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "y" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "width" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "height" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "borderWidth" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "valueMask" XNEE_HP_EQUALS "%d" , xrec_data->event.u.configureRequest.parent, xrec_data->event.u.configureRequest.window, xrec_data->event.u.configureRequest.sibling, xrec_data->event.u.configureRequest.x, xrec_data->event.u.configureRequest.y, xrec_data->event.u.configureRequest.width, xrec_data->event.u.configureRequest.height, xrec_data->event.u.configureRequest.borderWidth, xrec_data->event.u.configureRequest.valueMask); break; case GravityNotify: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "x" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "y" XNEE_HP_EQUALS "%d" , xrec_data->event.u.gravity.event, xrec_data->event.u.gravity.window, xrec_data->event.u.gravity.x, xrec_data->event.u.gravity.y); break; case ResizeRequest: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "width" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "height" XNEE_HP_EQUALS "%d" , xrec_data->event.u.resizeRequest.window, xrec_data->event.u.resizeRequest.width, xrec_data->event.u.resizeRequest.height); break; case CirculateNotify: case CirculateRequest: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "event" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "parent" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "place" XNEE_HP_EQUALS "%lu" , xrec_data->event.u.circulate.event, xrec_data->event.u.circulate.window, xrec_data->event.u.circulate.parent, xrec_data->event.u.circulate.place); break; case PropertyNotify: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "atom" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "time" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "state" XNEE_HP_EQUALS "%d" , xrec_data->event.u.property.window, xrec_data->event.u.property.atom, xrec_data->event.u.property.time, xrec_data->event.u.property.state); break; case SelectionClear: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "time" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "atom" XNEE_HP_EQUALS "%d" , xrec_data->event.u.selectionClear.time, xrec_data->event.u.selectionClear.window, xrec_data->event.u.selectionClear.atom); break; case SelectionRequest: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "time" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "owner" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "requestor" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "selection" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "target" XNEE_HP_EQUALS "%d" , XNEE_HP_SEP "property" XNEE_HP_EQUALS "%d" , xrec_data->event.u.selectionRequest.time, xrec_data->event.u.selectionRequest.owner, xrec_data->event.u.selectionRequest.requestor, xrec_data->event.u.selectionRequest.selection, xrec_data->event.u.selectionRequest.target, xrec_data->event.u.selectionRequest.property); break; case SelectionNotify: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "time" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "requestor" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "selection" XNEE_HP_EQUALS "%d" XNEE_HP_SEP "target" XNEE_HP_EQUALS "%d" , XNEE_HP_SEP "property" XNEE_HP_EQUALS "%d" , xrec_data->event.u.selectionNotify.time, xrec_data->event.u.selectionNotify.requestor, xrec_data->event.u.selectionNotify.selection, xrec_data->event.u.selectionNotify.target, xrec_data->event.u.selectionNotify.property); break; case ColormapNotify: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "colormap" XNEE_HP_EQUALS "%lu" #if defined(__cplusplus) || defined(c_plusplus) XNEE_HP_SEP "c_new" XNEE_HP_EQUALS "%d" #else XNEE_HP_SEP "new" XNEE_HP_EQUALS "%d" #endif XNEE_HP_SEP "state" XNEE_HP_EQUALS "%d" , xrec_data->event.u.colormap.window, xrec_data->event.u.colormap.colormap, #if defined(__cplusplus) || defined(c_plusplus) xrec_data->event.u.colormap.c_new, #else xrec_data->event.u.colormap.new, #endif xrec_data->event.u.colormap.state); break; case ClientMessage: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "window" XNEE_HP_EQUALS "%lu" , xrec_data->event.u.clientMessage.window ); /* (void)xd->data_fp (xd->out_file, "bytes" XNEE_HP_EQUALS " {"); for (i=0;i<20;i++) { (void)xd->data_fp (xd->out_file, "%c ", xrec_data->event.u.clientMessage.u.b.bytes[i]); } (void)xd->data_fp (xd->out_file, "} "); */ break; case MappingNotify: (void)xd->data_fp (xd->out_file, XNEE_HP_SEP "request" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "firstKeyCode" XNEE_HP_EQUALS "%lu" XNEE_HP_SEP "count" XNEE_HP_EQUALS "%d" , xrec_data->event.u.mappingNotify.request, xrec_data->event.u.mappingNotify.firstKeyCode, xrec_data->event.u.mappingNotify.count); break; default: (void)xd->data_fp (xd->out_file," NOT IMPLEMENTED "); break; } (void)xd->data_fp (xd->out_file, " }"); } /* * * xnee_record_print_reply. * */ void xnee_record_print_reply (xnee_data* xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data ; int rep_type ; xrec_data = (XRecordDatum *) (xrecintd->data) ; rep_type = (int)xrec_data->type ; (void)xd->data_fp (xd->out_file,"2,%d,%lu\n", rep_type,xrecintd->server_time); } /* * * xnee_human_print_reply. * */ void xnee_human_print_reply (xnee_data* xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data ; int rep_type ; xrec_data = (XRecordDatum *) (xrecintd->data) ; rep_type = (int)xrec_data->type ; (void)xd->data_fp (xd->out_file,"Reply %d,%lu\n", rep_type,xrecintd->server_time); } /* * * xnee_record_print_error. * */ void xnee_record_print_error (xnee_data *xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data ; int err_type ; xrec_data = (XRecordDatum *) (xrecintd->data) ; err_type = (int)xrec_data->type ; (void)xd->data_fp (xd->out_file,"3,%d,%lu\n", err_type,xrecintd->server_time); } /* * * xnee_human_print_error. * */ void xnee_human_print_error (xnee_data *xd, XRecordInterceptData *xrecintd ) { XRecordDatum *xrec_data ; int err_type ; xrec_data = (XRecordDatum *) (xrecintd->data) ; err_type = (int) xrec_data->type ; (void)xd->data_fp (xd->out_file,"Error %s\n", xnee_print_error_code(err_type)); } #ifdef USE_OBSOLETE /* * * xnee_record_print_record_range. * */ void old_xnee_record_print_record_range (xnee_data *xd, FILE* out) { int i=0; int max=xnee_get_max_range(xd); if (out == NULL) { if ( !xd->verbose ) { return ; } out=xd->err_file; } fprintf (out, " -------------> MAX = %d <---------- \n", max); fprintf (out, "\n\n- Record Information -\n\n"); fprintf (out, " Variable Value\n"); fprintf (out, "---------------------------------\n"); fprintf (out, " data_flags %d\n", xd->record_setup->data_flags); fprintf (out, " rState %d\n", (int)xd->record_setup->rState); fprintf (out, " xids[0] %ld\n", xd->record_setup->xids[0]); fprintf (out, " xids[1] %ld\n", xd->record_setup->xids[1]); fprintf (out, "\n\n - Record Ranges -\n\n"); for ( i=0 ; irecord_setup->range_array[i]->core_requests.first, xd->record_setup->range_array[i]->core_requests.last ); fprintf (out, " %s %d-%d\n", XNEE_REPLIES_STR, xd->record_setup->range_array[i]->core_replies.first , xd->record_setup->range_array[i]->core_replies.last ); fprintf (out, " %s %d-%d\n", XNEE_EXT_REQ_MAJ_STR, xd->record_setup->range_array[i]->ext_requests.ext_major.first, xd->record_setup->range_array[i]->ext_requests.ext_major.last ); fprintf (out, " %s %d-%d\n", XNEE_EXT_REQ_MIN_STR, xd->record_setup->range_array[i]->ext_requests.ext_minor.first, xd->record_setup->range_array[i]->ext_requests.ext_minor.last ); fprintf (out, " %s %d-%d\n", XNEE_EXT_REP_MAJ_STR, xd->record_setup->range_array[i]->ext_replies.ext_major.first, xd->record_setup->range_array[i]->ext_replies.ext_major.last ); fprintf (out, " %s %d-%d\n", XNEE_EXT_REP_MIN_STR, xd->record_setup->range_array[i]->ext_replies.ext_minor.first, xd->record_setup->range_array[i]->ext_replies.ext_minor.last ); fprintf (out, " %s %d-%d\n", XNEE_DELIVERED_EVENT_STR, xd->record_setup->range_array[i]->delivered_events.first, xd->record_setup->range_array[i]->delivered_events.last ); fprintf (out, " %s %d-%d\n", XNEE_DEVICE_EVENT_STR, xd->record_setup->range_array[i]->device_events.first, xd->record_setup->range_array[i]->device_events.last ); fprintf (out, " %s %d-%d\n", XNEE_ERROR_STR, xd->record_setup->range_array[i]->errors.first, xd->record_setup->range_array[i]->errors.last ); } } #endif /* * * xnee_record_print_sys_info. * */ int xnee_print_sys_info(xnee_data *xd, FILE *out) { struct utsname uname_pointer; time_t rawtime; time_t ret_time; struct tm * timeinfo; int ret ; if ( (xd==NULL) || (xd->data==NULL) ) { return XNEE_NO_MAIN_DATA; } if (xd->record_setup==NULL) { return XNEE_NO_RECORD_DATA; } ret_time = time ( &rawtime ); if ( ret_time != rawtime) { return XNEE_DATE_FAILURE; } timeinfo = localtime ( &rawtime ); if (timeinfo == NULL) { return XNEE_DATE_FAILURE; } ret = uname(&uname_pointer); if (ret == -1) { return XNEE_DATE_FAILURE; } if (( xd->out_file == NULL ) && (xd->mode==XNEE_RECORDER)) { return XNEE_OK; } if (out == NULL) { if ( xd->verbose == 0 ) { return XNEE_OK; } if ( xd->out_file == NULL ) out=xd->err_file; } fprintf (out, "####################################\n"); fprintf (out, "# System information #\n"); fprintf (out, "####################################\n"); fprintf (out, "# Date: %.4d:%.2d:%.2d \n", timeinfo->tm_year + 1900 , timeinfo->tm_mon + 1 , timeinfo->tm_mday ); fprintf (out, "# Time: %.2d:%.2d:%.2d \n", timeinfo->tm_hour, timeinfo->tm_min , timeinfo->tm_sec ); if ( xd->program_name!=NULL) { fprintf (out, "# Xnee program: %s \n", xd->program_name); } else { fprintf (out, "# Xnee program: \n"); } fprintf (out, "# Xnee version: %s \n", VERSION); fprintf (out, "# Xnee home: %s \n", XNEE_HOME_URL); fprintf (out, "# Xnee info mailing list: %s \n", XNEE_MAIL); fprintf (out, "# Xnee bug mailing list: %s \n", XNEE_BUG_MAIL); fprintf (out, "# X version: %d \n", ProtocolVersion(xd->data)); fprintf (out, "# X revision: %d \n", ProtocolRevision(xd->data)); fprintf (out, "# X vendor: %s \n", ServerVendor (xd->data)); fprintf (out, "# X vendor release: %d \n", VendorRelease (xd->data)); fprintf (out, "# Record version major: %d\n", xd->record_setup->major_return); fprintf (out, "# Record version minor: %d\n", xd->record_setup->minor_return); fprintf (out, "# OS name: %s \n", uname_pointer.sysname); fprintf (out, "# OS Release: %s \n", uname_pointer.release); fprintf (out, "# OS Version: %s \n", uname_pointer.version); fprintf (out, "# Machine: %s \n", uname_pointer.machine); fprintf (out, "# Nodename: %s \n", uname_pointer.nodename); fprintf (out, "# Display name: %s\n", xd->display); fprintf (out, "# Dimension: %dx%d\n", DisplayWidth (xd->data, 0), DisplayHeight (xd->data, 0)); return XNEE_OK; } /* * * xnee_print_distr_list. * */ int xnee_print_distr_list (xnee_data* xd, /*@null@*/ FILE *out) { int i=0; if (xd==NULL) { return XNEE_NO_MAIN_DATA; } if (xd->distr_list==NULL) { return XNEE_OK; } if (out == NULL) { if ( xd->verbose == 0 ) { return 0; } out=xd->err_file; } for (i=0 ; i<(int)xd->distr_list_size ; i++) { fprintf (out, "Distribution display[%d]=%p\n", i, (void*)xd->distr_list[i].dpy); } return (XNEE_OK); } int xnee_record_print_record_range (xnee_data *xd, /*@null@*/ FILE* out) { int max=0; int i ; if ( (xd==NULL) || (xd->record_setup==NULL) || (xd->record_setup->range_array==NULL) || (xd->record_setup->xids==NULL) ) { return XNEE_NO_MAIN_DATA; } if (out == NULL) { if ( xd->verbose == 0 ) { return XNEE_OK; } out=xd->err_file; } max=xnee_get_max_range(xd); fprintf (out, "#########################################\n"); fprintf (out, "# Record settings #\n"); fprintf (out, "#########################################\n"); fprintf (out, "# data_flags %d\n", xd->record_setup->data_flags); fprintf (out, "# rState %p\n", (void*)xd->record_setup->rState); fprintf (out, "# xids[0] %d\n", (int) xd->record_setup->xids[0]); fprintf (out, "# xids[1] %d\n", (int) xd->record_setup->xids[1]); fprintf (out, "# Number of Ranges %d\n", (int) max); for ( i=0 ; irecord_setup->range_array[i]->core_requests.first, xd->record_setup->range_array[i]->core_requests.last ); fprintf (out, "%s %u-%u \n", xnee_xns_key2string(XNEE_REPLY_STR_KEY), xd->record_setup->range_array[i]->core_replies.first, xd->record_setup->range_array[i]->core_replies.last ); fprintf (out, "%s %u-%u \n", xnee_xns_key2string(XNEE_EXT_REQ_MAJ_STR_KEY), xd->record_setup->range_array[i]->ext_requests.ext_major.first, xd->record_setup->range_array[i]->ext_requests.ext_major.last); fprintf (out, "%s %u-%u \n", xnee_xns_key2string(XNEE_EXT_REQ_MIN_STR_KEY), xd->record_setup->range_array[i]->ext_requests.ext_minor.first, xd->record_setup->range_array[i]->ext_requests.ext_minor.last); fprintf (out, "%s %u-%u\n", xnee_xns_key2string(XNEE_EXT_REP_MAJ_STR_KEY), xd->record_setup->range_array[i]->ext_replies.ext_major.first, xd->record_setup->range_array[i]->ext_replies.ext_major.last); fprintf (out, "%s %u-%u \n", xnee_xns_key2string(XNEE_EXT_REP_MIN_STR_KEY), xd->record_setup->range_array[i]->ext_replies.ext_minor.first, xd->record_setup->range_array[i]->ext_replies.ext_minor.last ); fprintf (out, "%s %u-%u \n", xnee_xns_key2string(XNEE_DELIVERED_EVENT_STR_KEY), xd->record_setup->range_array[i]->delivered_events.first, xd->record_setup->range_array[i]->delivered_events.last ); fprintf (out, "%s %u-%u \n", xnee_xns_key2string(XNEE_DEVICE_EVENT_STR_KEY), xd->record_setup->range_array[i]->device_events.first, xd->record_setup->range_array[i]->device_events.last ); fprintf (out, "%s %u-%u \n", xnee_xns_key2string(XNEE_ERROR_STR_KEY), xd->record_setup->range_array[i]->errors.first, xd->record_setup->range_array[i]->errors.last ); } return XNEE_OK; } /* * * * */ int xnee_print_ranges (xnee_data *xd, FILE *fp) { int max=0; int i ; if ( (xd==NULL) || (xd->record_setup==NULL) || (xd->record_setup->range_array==NULL) ) { return XNEE_NO_MAIN_DATA; } max=xnee_get_max_range(xd); fprintf (fp, "#########################################\n"); fprintf (fp, "# Recording ranges #\n"); fprintf (fp, "#########################################\n"); for ( i=0 ; irecord_setup->range_array[i]->core_requests.first != 0) && ( (int)xd->record_setup->range_array[i]->core_requests.last != 0)) { fprintf (fp, "%s %u-%u\n", xnee_xns_key2string(XNEE_REQUEST_STR_KEY), xd->record_setup->range_array[i]->core_requests.first, xd->record_setup->range_array[i]->core_requests.last ); } if ( ( (int)xd->record_setup->range_array[i]->core_replies.first != 0) && ( (int)xd->record_setup->range_array[i]->core_replies.last != 0)) { fprintf (fp, "%s %u-%u \n", xnee_xns_key2string(XNEE_REPLY_STR_KEY), xd->record_setup->range_array[i]->core_replies.first, xd->record_setup->range_array[i]->core_replies.last ); } if ( ( (int)xd->record_setup->range_array[i]->ext_requests.ext_major.first != 0) && ( (int)xd->record_setup->range_array[i]->ext_requests.ext_major.last != 0)) { fprintf (fp, "%s %u-%u \n", xnee_xns_key2string(XNEE_EXT_REQ_MAJ_STR_KEY), xd->record_setup->range_array[i]->ext_requests.ext_major.first, xd->record_setup->range_array[i]->ext_requests.ext_major.last); } if ( ( (int)xd->record_setup->range_array[i]->ext_requests.ext_minor.first != 0) && ( (int)xd->record_setup->range_array[i]->ext_requests.ext_minor.last != 0)) { fprintf (fp, "%s %u-%u \n", xnee_xns_key2string(XNEE_EXT_REQ_MIN_STR_KEY), xd->record_setup->range_array[i]->ext_requests.ext_minor.first, xd->record_setup->range_array[i]->ext_requests.ext_minor.last ); } if ( ( (int)xd->record_setup->range_array[i]->ext_replies.ext_major.first != 0) && ( (int)xd->record_setup->range_array[i]->ext_replies.ext_major.last != 0)) { fprintf (fp, "%s %u-%u\n", xnee_xns_key2string(XNEE_EXT_REP_MAJ_STR_KEY), xd->record_setup->range_array[i]->ext_replies.ext_major.first, xd->record_setup->range_array[i]->ext_replies.ext_major.last ); } if ( ( (int)xd->record_setup->range_array[i]->ext_replies.ext_minor.first != 0) && ( (int)xd->record_setup->range_array[i]->ext_replies.ext_minor.last != 0)) { fprintf (fp, "%s %u-%u \n", xnee_xns_key2string(XNEE_EXT_REP_MIN_STR_KEY), xd->record_setup->range_array[i]->ext_replies.ext_minor.first, xd->record_setup->range_array[i]->ext_replies.ext_minor.last); } if ( ( (int)xd->record_setup->range_array[i]->delivered_events.first != 0) && ( (int)xd->record_setup->range_array[i]->delivered_events.last != 0)) { fprintf (fp, "%s %u-%u \n", xnee_xns_key2string(XNEE_DELIVERED_EVENT_STR_KEY), xd->record_setup->range_array[i]->delivered_events.first, xd->record_setup->range_array[i]->delivered_events.last ); } if ( ( (int)xd->record_setup->range_array[i]->device_events.first != 0) && ( (int)xd->record_setup->range_array[i]->device_events.last != 0)) { fprintf (fp, "%s %u-%u \n", xnee_xns_key2string(XNEE_DEVICE_EVENT_STR_KEY), xd->record_setup->range_array[i]->device_events.first, xd->record_setup->range_array[i]->device_events.last ); } if ( ( (int) xd->record_setup->range_array[i]->errors.first != 0) && ( (int) xd->record_setup->range_array[i]->errors.last != 0)) { fprintf (fp, "%s %u-%u \n", xnee_xns_key2string(XNEE_ERROR_STR_KEY), xd->record_setup->range_array[i]->errors.first, xd->record_setup->range_array[i]->errors.last ); } } return XNEE_OK; } /* * * xnee_print_xnee_resource_settings. * */ int xnee_print_xnee_resource_settings (xnee_data* xd, FILE* out) { time_t rawtime; time_t ret_time; struct tm * timeinfo; if ( (xd==NULL) || (xd->data==NULL) ) { return XNEE_NO_MAIN_DATA; } if (xd->record_setup==NULL) { return XNEE_NO_RECORD_DATA; } ret_time = time ( &rawtime ); if ( ret_time != rawtime) { return XNEE_DATE_FAILURE; } timeinfo = localtime ( &rawtime ); if (timeinfo == NULL) { return XNEE_DATE_FAILURE; } if (out == NULL) { if ( xd->verbose == 0 ) { return XNEE_OK; } out=xd->err_file; } fprintf (out, "###############################################\n"); fprintf (out, "# #\n"); fprintf (out, "# Xnee Project file #\n"); fprintf (out, "# #\n"); fprintf (out, "# #\n"); fprintf (out, "# This file is automagically created by #\n"); fprintf (out, "# libxnee.... edit if you know what you do #\n"); fprintf (out, "# #\n"); fprintf (out, "###############################################\n"); fprintf (out, "\n"); fprintf (out, "\n"); fprintf (out, "\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Project info #\n"); fprintf (out, "##############################################\n"); fprintf (out, XNEE_RES_PROJECT": \t\t\t%s\n", xnee_get_project_name(xd)); fprintf (out, XNEE_RES_DESCRIPTION":\t\t%s\n", xnee_get_project_descr(xd)); fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Creation info #\n"); fprintf (out, "##############################################\n"); fprintf (out, XNEE_RES_CREAT_DATE": \t%s\n", xnee_get_creat_date(xd)); fprintf (out, XNEE_RES_CREAT_PROGRAM": \t%s\n", xnee_get_creat_program(xd)); fprintf (out, XNEE_RES_CREAT_PROG_VER": \t%s\n", xnee_get_creat_prog_vers(xd)); fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Last change info #\n"); fprintf (out, "##############################################\n"); fprintf (out, XNEE_RES_LASTCHANGE_DATE": \t%s\n", xnee_get_last_date(xd)); fprintf (out, XNEE_RES_LASTCHANGE_PROGRAM":\t%s\n", xnee_get_last_program(xd)); fprintf (out, XNEE_RES_LASTCHANGE_PROG_VER":\t%s\n", xnee_get_last_prog_vers(xd)); fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Current info #\n"); fprintf (out, "##############################################\n"); fprintf (out, XNEE_RES_CURRENT_CHANGE_DATE": \t%.4d-%.2d-%.2d \n", timeinfo->tm_year + 1900 , timeinfo->tm_mon + 1 , timeinfo->tm_mday ); fprintf (out, XNEE_RES_CURRENT_CHANGE_PROGRAM": \t%s\n", PACKAGE); fprintf (out, XNEE_RES_CURRENT_CHANGE_PROG_VER": \t%s\n", VERSION); return XNEE_OK; } /* * * xnee_print_xnee_settings. * */ int xnee_print_xnee_settings (xnee_data* xd, /*@null@*/ FILE* out) { int ret; int i ; if (out == NULL) { if ( xd->verbose == 0 ) { return XNEE_OK; } out=xd->err_file; } if ( (xd==NULL) || (xd->grab_keys==NULL) || (xd->grab_keys->action_keys==NULL) ) { return XNEE_NO_MAIN_DATA; } fprintf (out, "\n"); if ( xd->app_args!= NULL) { /* Xnee application argument */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Xnee application arguments #\n"); fprintf (out, "##############################################\n"); fprintf (out, "# "); for (i=0;xd->app_args[i]!=NULL;i++) { if ( xd->app_args[i] != NULL) { fprintf (out, "%s ", xd->app_args[i]); } } fprintf (out, "\n"); } /* DISPLAY */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Displays #\n"); fprintf (out, "##############################################\n"); fprintf (out, "# display %s\n", (xd->display==NULL) ? "NULL" : xd->display); fprintf (out, "# %s\n" , xnee_xns_key2string(XNEE_DISTRIBUTE_KEY)); ret = xnee_print_distr_list(xd, out); XNEE_RETURN_IF_ERR(ret); /* FILES */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Files #\n"); fprintf (out, "##############################################\n"); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_OUT_FILE_KEY), (xd->out_name==NULL) ? "stdout" : xd->out_name ); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_ERR_FILE_KEY), (xd->err_name==NULL) ? "stderr" : xd->err_name ); /* GRAB */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Key Grabs #\n"); fprintf (out, "##############################################\n"); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_STOP_KEY_KEY), (xd->grab_keys->action_keys[XNEE_GRAB_STOP].str) ? xd->grab_keys->action_keys[XNEE_GRAB_STOP].str: "0" ); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_PAUSE_KEY_KEY), (xd->grab_keys->action_keys[XNEE_GRAB_PAUSE].str) ? xd->grab_keys->action_keys[XNEE_GRAB_PAUSE].str: "0" ); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_RESUME_KEY_KEY), (xd->grab_keys->action_keys[XNEE_GRAB_RESUME].str) ? xd->grab_keys->action_keys[XNEE_GRAB_RESUME].str: "0" ); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_INSERT_KEY_KEY), (xd->grab_keys->action_keys[XNEE_GRAB_INSERT].str) ? xd->grab_keys->action_keys[XNEE_GRAB_INSERT].str: "0" ); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_EXEC_KEY_KEY), (xd->grab_keys->action_keys[XNEE_GRAB_EXEC].str) ? xd->grab_keys->action_keys[XNEE_GRAB_EXEC].str: "0" ); fprintf (out, "# %s %s\n", xnee_xns_key2string(XNEE_EXEC_PROGRAM_KEY), (xd->grab_keys->action_keys[XNEE_GRAB_EXEC].extra_str) ? xd->grab_keys->action_keys[XNEE_GRAB_EXEC].extra_str: XNEE_EXEC_NO_PROG ); /* Limits */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Recording limits etc #\n"); fprintf (out, "##############################################\n"); fprintf (out, "\n"); fprintf (out, "%s %d\n", xnee_xns_key2string(XNEE_EVENT_MAX_KEY),xnee_get_events_max(xd) ); fprintf (out, "%s %d\n", xnee_xns_key2string(XNEE_DATA_MAX_KEY),xnee_get_data_max(xd) ); fprintf (out, "%s %d\n", xnee_xns_key2string(XNEE_TIME_MAX_KEY),xnee_get_time_left(xd) ); if ( xd->xnee_info.first_last == 0 ) { fprintf (out, "# "); } fprintf (out, "first-last\n"); fprintf (out, "\n# Record all (including current) clients or only future ones\n"); if (xnee_get_all_clients(xd)==0) { fprintf (out, "# "); } fprintf (out, "%s\n", xnee_xns_key2string(XNEE_ALL_CLIENTS_KEY)); if (xnee_get_all_clients(xd)!=0) { fprintf (out, "# "); } fprintf (out, "%s\n", xnee_xns_key2string(XNEE_FUTURE_CLIENTS_KEY)); fprintf (out, "\n# Store the starting mouse position \n"); if (xnee_is_store_mouse_pos(xd)==0) { fprintf (out, "# "); } fprintf (out, "%s\n", xnee_xns_key2string(XNEE_STORE_MOUSE_POS_KEY)); /* Resolution */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Resolution #\n"); fprintf (out, "##############################################\n"); fprintf (out, "\n# Resolution\n"); fprintf (out, "#" "%s %dx%d\n", xnee_xns_key2string(XNEE_RECORDED_RESOLUTION_KEY), xnee_get_rec_resolution_x(xd), xnee_get_rec_resolution_y(xd) ); fprintf (out, "#" "%s %dx%d\n", xnee_xns_key2string(XNEE_REPLAY_RESOLUTION_KEY), xnee_get_rep_resolution_x(xd), xnee_get_rep_resolution_y(xd) ); fprintf (out, "#" "%s %d\n", xnee_xns_key2string(XNEE_ADJUST_RESOLUTION_KEY), xnee_get_resolution_used (xd)); fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Speed #\n"); fprintf (out, "##############################################\n"); fprintf (out, "\n# Speed\n"); fprintf (out, "#" "%s %d\n", xnee_xns_key2string(XNEE_SPEED_PERCENT_KEY), xnee_get_replay_speed(xd)); /* Limits */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Replaying limits etc #\n"); fprintf (out, "##############################################\n"); fprintf (out, "\n%s %d \n", xnee_xns_key2string(XNEE_MAX_THRESHOLD_KEY), xnee_get_max_threshold(xd)); fprintf (out, "%s %d \n", xnee_xns_key2string(XNEE_MIN_THRESHOLD_KEY), xnee_get_min_threshold(xd)); fprintf (out, "%s %d \n", xnee_xns_key2string(XNEE_TOT_THRESHOLD_KEY), xnee_get_tot_threshold(xd)); /* Feedback */ fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Feedback #\n"); fprintf (out, "##############################################\n"); if (!xnee_fb_no_requested(xd) ) { fprintf (out, "#"); } fprintf (out, "%s\n", xnee_xns_key2string(XNEE_FEEDBACK_NONE_KEY)); if (!xnee_fb_stderr_requested(xd)) { fprintf (out, "#"); } fprintf (out, "%s\n", xnee_xns_key2string(XNEE_FEEDBACK_STDERR_KEY)); if (!xnee_fb_xosd_requested(xd)) { fprintf (out, "#"); } fprintf (out, "%s\n", xnee_xns_key2string(XNEE_FEEDBACK_XOSD_KEY)); fprintf (out, "%s %s\n", xnee_xns_key2string(XNEE_XOSD_FONT_KEY), EMPTY_IF_NULL((char*)xnee_get_xosd_font(xd))); fprintf (out, "\n\n"); fprintf (out, "##############################################\n"); fprintf (out, "# Various #\n"); fprintf (out, "##############################################\n"); /* Plugin */ fprintf (out, "\n# Plugin file \n"); if ( (xd->plugin_name != NULL) && (xnee_xns_key2string(XNEE_PLUGIN_KEY) != NULL) ) { fprintf (out, "# "); fprintf (out, "%s %s\n", xnee_xns_key2string(XNEE_PLUGIN_KEY), xd->plugin_name ); } /* Modes */ fprintf (out, "\n# Modes (currently not used)\n"); fprintf (out, "# "); fprintf (out, "%s\n", xnee_xns_key2string(XNEE_SYNC_MODE_KEY)); /* Replay offset */ fprintf (out, "\n# Replay offset\n"); fprintf (out, "#%s %dx%d\n", xnee_xns_key2string(XNEE_REPLAY_OFFSET_KEY), xnee_get_replay_offset_x(xd), xnee_get_replay_offset_y(xd)); fprintf (out, "\n# Human printout of X11 data (instead of Xnee format)\n"); if (!xnee_is_human_printout(xd)) { fprintf (out, "# "); } fprintf (out, "%s \n", xnee_xns_key2string(XNEE_HUMAN_PRINTOUT_KEY)); fprintf (out, "\n# Delay before starting record/replay\n"); fprintf (out, "# %s %d\n", xnee_xns_key2string(XNEE_DELAY_TIME_KEY), xnee_get_interval(xd) ); fprintf (out, "\n# No recording of ReparentNotify\n"); if ( ! xnee_is_no_reparent_recording(xd) ) { fprintf (out, "# "); } fprintf (out, "%s \n", xnee_xns_key2string(XNEE_NO_REPARENT_RECORD) ); /* Various */ fprintf (out, "\n# Various\n"); return XNEE_OK; } /* * xnee_print_data_range_count * * * */ int xnee_print_data_range_count (xnee_data * xd) { int i=0; xnee_verbose((xd, "Data ranges\n-----------\n")); for ( i=0 ; i< XNEE_NR_OF_TYPES ; i++) { xnee_verbose((xd, "PROT_DATA %d=%d\n", i,xd->xnee_info.data_ranges[i])); } xnee_verbose((xd, "MAX = %d\n", xnee_get_max_range(xd))); return (0); } /************************************************************** * * * xnee_replay_printbuffer * * * * * **************************************************************/ void xnee_replay_printbuffer_impl (xnee_data *xd ) { int i; fprint_fptr fp = xd->buffer_verbose_fp ; FILE *file = xd->buffer_file ; /* int ** array= (int **)xd->data_buffer;*/ if (xd->buf_verbose!=0) { (void)fp (file,"\n --- replay buffer ---\n"); /* fp (file,"\t- means from Xserver\n\t+ means from file \n"); fp (file,"# event request reply error \n"); fp (file,"-------------------------------------\n"); */ for (i=0;idata_buffer[XNEE_EVENT][i] || xd->data_buffer[XNEE_REQUEST][i] || xd->data_buffer[XNEE_REPLY][i] || xd->data_buffer[XNEE_ERROR][i] ) fp (file, "%.3d %.3d %.3d %.3d %.3d\n", i, xd->data_buffer[XNEE_EVENT][i], xd->data_buffer[XNEE_REQUEST][i], xd->data_buffer[XNEE_REPLY][i], xd->data_buffer[XNEE_ERROR][i] ); } fp (file,"cached: max=%02d min=%02d total=%02d s_max=%02d s_min=%02d\n", xd->meta_data.cached_max, xd->meta_data.cached_min, xd->meta_data.total_diff, xd->meta_data.sum_max, xd->meta_data.sum_min ); fp (file,"\n"); } } /* * * * */ void xnee_store_mouse_pos (xnee_data* xd ) { int rx; int ry; int wx; int wy; Window root; Window child; unsigned int mask; XQueryPointer(xd->data, RootWindow(xd->data,0), &root, &child, &rx, &ry, &wx, &wy, &mask); xd->data_fp (xd->out_file, "%s " "%s=%d " "%s=%d \n" , XNEE_FAKE_MOTION, XNEE_FAKE_X_ARG, rx, XNEE_FAKE_Y_ARG, ry ); } /************************************************************** * * * xnee_version * * * * * **************************************************************/ void xnee_version(xnee_data* xd) { xnee_verbose ((xd, " --> xnee_version\n")); fprintf (stderr, "%s %s\n",PACKAGE, VERSION); fprintf (stderr, "Copyright (C) 2000-2013 Henrik Sandklef \n"); fprintf (stderr, "%s and all its included programs come with ", PACKAGE); fprintf (stderr, "NO WARRANTY,\nto the extent permitted by law.\n" ); fprintf (stderr, "This is free software, and you may redistribute\n"); fprintf (stderr, "copies of it under terms of GNU General Public License.\n"); /* fprintf (stderr, "For questions: \n\t%s \n", XNEE_MAIL); fprintf (stderr, "Xnee, Xnee's not an Event Emulator \n\t%s \n", XNEE_HOME_URL); fprintf (stderr, "GPL, GNU General Public License \n\t%s\n", GNU_HOME_URL); */ xnee_verbose ((xd, " <-- xnee_version\n")); } int xnee_print_xnee_data(xnee_data *xd) { fprintf (stderr, "xnee_data\n"); fprintf (stderr, " xd: %p\n", (void*)xd); fprintf (stderr, " xd->data: %p\n", (void*)xd->data); fprintf (stderr, " xd->control: %p\n", (void*)xd->control); fprintf (stderr, " xd->fake: %p\n", (void*)xd->fake); fprintf (stderr, " xd->grab: %p\n", (void*)xd->grab); return XNEE_OK; } int xnee_print_data_str(xnee_data *xd, char *tmp, int type) { char *data; int ret = XNEE_OK; int data_nr; XNEE_VERBOSE_ENTER_FUNCTION(); if ( (tmp[0] >= '0') && (tmp[0] <= '9') ) { /* We have data as a number */ if (sscanf(tmp, "%d", &data_nr) != 1 ) { ret = XNEE_WRONG_PARAMS; } else { data = (char*) xnee_int2data (type, data_nr); if ( data != NULL) { fprintf (stdout, "%s\n", data); } else { ret = XNEE_WRONG_PARAMS; } } } else { /* We have data as a string */ data = tmp; data_nr = xnee_data2int(type, tmp); if ( data_nr == -1) { ret = XNEE_WRONG_PARAMS; } else { fprintf (stdout, "%d\n", data_nr); } } XNEE_VERBOSE_LEAVE_FUNCTION(); return ret; } xnee-3.19/libxnee/src/xnee_threshold.c0000664000000000000000000000627410640701431014677 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_threshold.h" static int xnee_set_threshold (int thresh, int *threshold) { *threshold = thresh ; return XNEE_OK; } static int xnee_set_threshold_str (char *thresh_str, int *threshold) { int ret; if (thresh_str == NULL) { return XNEE_BAD_THRESHOLD; } ret = sscanf(thresh_str, "%d", threshold); if ( ret == 1 ) { return XNEE_OK; } return XNEE_BAD_THRESHOLD; } int xnee_set_max_threshold_str (xnee_data *xd, char *thresh_str) { return xnee_set_threshold_str (thresh_str, &xd->meta_data.sum_max_threshold); } int xnee_set_min_threshold_str (xnee_data *xd, char *thresh_str) { return xnee_set_threshold_str (thresh_str, &xd->meta_data.sum_min_threshold); } int xnee_set_tot_threshold_str (xnee_data *xd, char *thresh_str) { return xnee_set_threshold_str (thresh_str, &xd->meta_data.tot_diff_threshold); } int xnee_set_max_threshold (xnee_data *xd, int thresh) { return xnee_set_threshold (thresh, &xd->meta_data.sum_max_threshold); } int xnee_set_min_threshold (xnee_data *xd, int thresh) { return xnee_set_threshold (thresh, &xd->meta_data.sum_min_threshold); } int xnee_set_tot_threshold (xnee_data *xd, int thresh) { return xnee_set_threshold (thresh, &xd->meta_data.tot_diff_threshold); } int xnee_get_max_threshold (xnee_data *xd) { return xd->meta_data.sum_max_threshold; } int xnee_get_min_threshold (xnee_data *xd) { return xd->meta_data.sum_min_threshold; } int xnee_get_tot_threshold (xnee_data *xd) { return xd->meta_data.tot_diff_threshold; } xnee-3.19/libxnee/src/xnee_km.c0000664000000000000000000003555212332000417013307 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, * 2003, 2004, 2005, 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/print_varargs.h" #include "libxnee/print.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_km.h" #include "libxnee/feedback.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_grab.h" #include "libxnee/feedback.h" int xkm_rem_blanks (char *array); xnee_keymask get_modifier_sub(xnee_data *xd, char *mod_str) ; const char * xnee_symbolic_modifier2modifier (xnee_data *xd, const char *mod_str) { xnee_verbose((xd, "--- xnee_symbolic_modifier2modifier\n")); if (xnee_check(mod_str, XNEE_SYMBOLIC_ALT, XNEE_SYMBOLIC_ALT)) { return XNEE_REAL_ALT; } else if (xnee_check(mod_str, XNEE_SYMBOLIC_SHIFT, XNEE_SYMBOLIC_SHIFT)) { return XNEE_REAL_SHIFT; } else if (xnee_check(mod_str, XNEE_SYMBOLIC_CONTROL, XNEE_SYMBOLIC_CONTROL)) { return XNEE_REAL_CONTROL; } else if (xnee_check(mod_str, XNEE_SYMBOLIC_CAPS, XNEE_SYMBOLIC_CAPS)) { return XNEE_REAL_CAPS; } else if (xnee_check(mod_str, XNEE_SYMBOLIC_SCROLL, XNEE_SYMBOLIC_SCROLL)) { return XNEE_REAL_SCROLL; } else return NULL; } int xkm_rem_blanks (char *array) { int i=0; int j=0; int idx=-1; int size=strlen(array); for (i=0; imax_keypermod; keycode_ptr = mod_keymap->modifiermap; for (i = 0; i < 8; i++) { for (j = 0; j < max_keys; j++) { my_keysym = XKeycodeToKeysym(display, *keycode_ptr, 0); if (XKeysymToString(my_keysym)!=NULL) { if (xnee_check (mod_str, XKeysymToString(my_keysym), XKeysymToString(my_keysym))) { ret |= get_modifier_sub(NULL, mod_list[i]); return ret; } else { ; } } else { ; } keycode_ptr++; } } return ret; } int get_modifier_from_mapping(Display *display, char *mod_str) { /* XModifierKeymap *mod_keymap; KeyCode *keycode_ptr; KeySym my_keysym; int i, j, max_keys; */ int ret; if (xnee_check(mod_str, "Alt", "Alt")) { ret = get_modifier_from_mapping_sub(display, "Alt_L"); ret |= get_modifier_from_mapping_sub(display, "Alt_R"); } else if (xnee_check(mod_str, "Shift", "Shift")) { ret = get_modifier_from_mapping_sub(display, "Shift_L"); ret |= get_modifier_from_mapping_sub(display, "Shift_R"); } else if (xnee_check(mod_str, "Control", "Control")) { ret = get_modifier_from_mapping_sub(display, "Control_L"); ret |= get_modifier_from_mapping_sub(display, "Control_R"); } else if (xnee_check(mod_str, "Scroll_Lock", "Scroll")) { ret = get_modifier_from_mapping_sub(display, "Scroll_Lock"); } else if (xnee_check(mod_str, "Caps_Lock", "Caps")) { ret = get_modifier_from_mapping_sub(display, "Caps_Lock"); } else { ret = get_modifier_from_mapping_sub(display, mod_str); } return ret; } xnee_keymask get_modifier_sub(xnee_data *xd, char *mod_str) { int ret=0; if( xnee_check (mod_str, "ShiftMask", "ShiftMask" ) ) { ret = ShiftMask; } else if( xnee_check (mod_str, "LockMask", "LockMask" ) ) { ret = LockMask; } else if( xnee_check (mod_str, "ControlMask", "ControlMask" ) ) { ret = ControlMask; } else if( xnee_check (mod_str, "Mod1Mask", "Mod1Mask" ) ) { ret = Mod1Mask; } else if( xnee_check (mod_str, "Mod2Mask", "Mod2Mask" ) ) { ret = Mod2Mask; } else if( xnee_check (mod_str, "Mod3Mask", "Mod3Mask" ) ) { ret = Mod3Mask; } else if( xnee_check (mod_str, "Mod4Mask", "Mod4Mask" ) ) { ret = Mod4Mask; } else if( xnee_check (mod_str, "Mod5Mask", "Mod5Mask" ) ) { ret = Mod5Mask; } else if( xnee_check (mod_str, "AnyModifier", "any" ) ) { ret = AnyModifier; } else if( xnee_check (mod_str, "none", "0" ) ) { ret = 0; } else { /* prevent recursive disaster ... */ if (xd==NULL) { ret = 0; } else { ret = get_modifier_from_mapping( xd->grab, mod_str); } } return ret; } int xnee_check_key(xnee_data *xd) { XEvent ev; if ( (xd->grab!=NULL) && ( xd->grab_keys->grab)) { /* * Has the user pressed STOP (mod + key) */ XFlush (xd->grab); XAllowEvents (xd->grab, SyncKeyboard, CurrentTime); XFlush (xd->grab); if ( XCheckMaskEvent ( xd->grab, 0xffffffff , &ev) == True) { int tmp_code; int mode; int i ; if (ev.xkey.send_event==1) { xnee_verbose ((xd , "send_event==true\n")); } if (ev.type == KeyPress ) { XEvent my_event ; xnee_verbose ((xd , "##### KeyPress\n")); XNextEvent (xd->grab, &my_event); } else if (ev.type == KeyRelease ) { xnee_verbose ((xd , "#### KeyRelease\n")); return XNEE_GRAB_NODATA; } tmp_code=ev.xkey.keycode; xnee_verbose ((xd, "key = %d\n", tmp_code)); mode = xnee_get_grab_mode (xd, tmp_code); xnee_verbose ((xd, "mode = %d\n", mode)); for (i=XNEE_GRAB_STOP;igrab_keys->action_keys[i].key)); xnee_verbose((xd, " str: %s",xd->grab_keys->action_keys[i].str)); xnee_verbose((xd, " code: %d",tmp_code)); if ( tmp_code == xd->grab_keys->action_keys[i].key ) { xd->grab_keys->grabbed_action = i ; xnee_verbose((xd, "\n\n\tUSER PUSHED KEY ... i=%d\n\n\n",i)); return XNEE_GRAB_DATA ; } } return XNEE_GRAB_NODATA; } } else { return XNEE_GRAB_NODATA; } return XNEE_GRAB_NODATA; } int xnee_handle_rec_key(xnee_data *xd) { int ret=XNEE_OK; static int exec_ctr = 0; /* Keeps track of nr of exec grabs */ char *exec_prog ; char *tmp_ptr; int len; int exec_ret; xnee_verbose ((xd, " ---> xnee_handle_rec_km\n")); switch ( xd->grab_keys->grabbed_action ) { case XNEE_GRAB_STOP : feedback (xd, "Xnee stop received"); break; case XNEE_GRAB_PAUSE : feedback (xd, "Xnee pause received"); break; case XNEE_GRAB_RESUME : feedback (xd, "Xnee resume received"); break; case XNEE_GRAB_INSERT : feedback (xd, "Xnee insert received"); break; case XNEE_GRAB_EXEC : exec_ctr++; feedback (xd, "Xnee exec received"); break; default: ret=XNEE_NO_GRAB_DATA; break; } if (xd->grab_keys->grabbed_action==XNEE_GRAB_STOP) { xnee_verbose ((xd, " --- xnee_handle_rec_km: STOP \n")); xnee_verbose ((xd, " <--- xnee_handle_rec_km\n")); } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_PAUSE) { xnee_verbose ((xd, " --- xnee_handle_rec_km: PAUSE \n")); feedback (xd, "Xnee pause received"); xnee_unsetup_recording (xd); ret=XNEE_GRAB_PAUSE; } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_RESUME) { xnee_verbose ((xd, " --- xnee_handle_rec_km: RESUME \n")); feedback (xd, "Xnee resume received"); xnee_setup_recording (xd); ret=XNEE_GRAB_RESUME; } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_EXEC) { xnee_verbose ((xd, " --- xnee_handle_rec_km: EXEC (nr %d)\n", exec_ctr)); tmp_ptr = xnee_get_exec_prog(xd); if ( tmp_ptr == NULL ) { ret=XNEE_NO_GRAB_DATA; xnee_verbose((xd, "Xnee exec received... couldn't find valid exec program\n")); return ret; } len = strlen (tmp_ptr); len = len + 10 ; exec_prog = (char*) calloc(len, sizeof(char)); sprintf(exec_prog, "%s %d &", xnee_get_exec_prog(xd), exec_ctr); xnee_verbose ((xd, " --- xnee_handle_rec_km: EXEC \n")); feedback (xd, "Xnee exec received"); if (exec_prog==NULL) { fprintf (xd->out_file, "%s \n",XNEE_EXEC_MARK); } else { fprintf (xd->out_file, "%s %s\n", XNEE_EXEC_MARK, exec_prog); exec_ret= system (exec_prog ); if ( exec_ret != 0 ) { fprintf(stderr, "Failed to launch: %s\n", "xterm"); } free(exec_prog); ret=XNEE_GRAB_EXEC; } } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_INSERT) { time_t rawtime; struct tm * timeinfo; feedback (xd, "Xnee inserting mark in log file"); xnee_verbose ((xd, " --- xnee_handle_rec_km: MARK \n")); time ( &rawtime ); timeinfo = localtime ( &rawtime ); fprintf (xd->out_file, "M MARK:%.4d-%.2d-%.2d:%.2d.%.2d.%.2d\n", timeinfo->tm_year + 1900 , timeinfo->tm_mon + 1 , timeinfo->tm_mday , timeinfo->tm_hour, timeinfo->tm_min , timeinfo->tm_sec ); ret=XNEE_GRAB_INSERT; } else { xnee_verbose ((xd, " --- xnee_handle_rec_km: UNKNOWN \n")); } xnee_verbose ((xd, " <--- xnee_handle_rec_km\n")); return ret; } int xnee_handle_rep_key(xnee_data *xd) { int ret=XNEE_OK; int exec_ret; xnee_verbose ((xd, " ---> xnee_handle_rep_km\n")); if (xd->grab_keys->grabbed_action==XNEE_GRAB_STOP) { xnee_verbose ((xd, " --- xnee_handle_rep_km: STOP \n")); xnee_verbose ((xd, " <--- xnee_handle_rep_km\n")); feedback (xd, "Xnee stop received"); ret=XNEE_GRAB_STOP; } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_PAUSE) { xnee_verbose ((xd, " --- xnee_handle_rep_km: PAUSE \n")); feedback (xd, "Xnee pause received"); fprintf (stderr, "pause during replay is not implemented yet\n"); ret=XNEE_GRAB_PAUSE; } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_RESUME) { xnee_verbose ((xd, " --- xnee_handle_rep_km: RESUME \n")); feedback (xd, "Xnee resume received"); fprintf (stderr, "resume during replay is not implemented yet\n"); ret=XNEE_GRAB_RESUME; } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_EXEC) { xnee_verbose ((xd, " --- xnee_handle_rep_km: EXEC \n")); feedback (xd, "Xnee exec received"); exec_ret = system ("xterm&"); if ( exec_ret != 0 ) { fprintf(stderr, "Failed to launch: %s\n", "xterm"); } ret=XNEE_GRAB_EXEC; } else if (xd->grab_keys->grabbed_action==XNEE_GRAB_INSERT) { feedback (xd, "Xnee inserting mark in log file"); xnee_verbose ((xd, " --- xnee_handle_rep_km: MARK \n")); fprintf (stderr, "insert during replay is not implemented yet\n"); ret=XNEE_GRAB_INSERT; } else { xnee_verbose ((xd, " --- xnee_handle_rep_km: UNKNOWN \n")); } xnee_verbose ((xd, " <--- xnee_handle_rep_km\n")); return ret; } /************************************************************** * * * xnee_get_key * * * * * **************************************************************/ int xnee_get_action_key (xnee_data *xd, xnee_action_key *ak, char *key) { KeySym ks; if (key==NULL) { ak->key=0; } xnee_verbose((xd, " ---> xnee_get_action_key %s \n", key)); ks = XStringToKeysym (key) ; if ( ks == 0 ) { xnee_print_error ("SYNTAX ERROR\n\tCouldn't convert " "string \"%s\" to an int\n",key); return ( XNEE_SYNTAX_ERROR); } xnee_verbose((xd, " --- xnee_get_action_key %s gives us %d \n", key, (int)ks)); /* OK, it's a integer... just use it! */ ak->key = XKeysymToKeycode (xd->grab, ks); xnee_verbose((xd, " <--- xnee_get_action_key %s gives us %d \n", key, ak->key)); return XNEE_OK; } static int xnee_km_check_not_same(xnee_data *xd, char *str, int start) { int ret = 0 ; char *tmp_ptr = NULL ; if (start!=XNEE_GRAB_UNKOWN) { if (start == XNEE_GRAB_STOP) { return XNEE_OK; } else if ( (start>0) && (startgrab_keys->action_keys[start].str; } else { return XNEE_OK; } if (str==NULL) { return XNEE_OK + xnee_km_check_not_same( xd, str, start + 1); } if (tmp_ptr!=NULL) { if (strcmp ( str, tmp_ptr)==0) { ret = 1; } } xnee_verbose((xd, "--- xnee_km_check_not_same %s %s %d ret = %d\n", str, tmp_ptr, start, ret )); return ret + xnee_km_check_not_same( xd, str, start + 1); } else { xnee_verbose((xd, "--- xnee_km_check_not_same %s %s %d ret = zero\n", str, tmp_ptr, start )); return 0 ; } } int xnee_key_check(xnee_data *xd) { int ret ; xnee_verbose((xd, " ---> xnee_km_check\n")); ret = xnee_km_check_not_same(xd, xd->grab_keys->action_keys[XNEE_GRAB_STOP].str, XNEE_GRAB_STOP); xnee_verbose((xd, " --- xnee_km_check %d \n", ret)); xnee_verbose((xd, " <--- xnee_km_check\n")); return ret; } xnee-3.19/libxnee/src/xnee_utils.c0000664000000000000000000003624412332105501014037 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2004, 2009-2011, 2013, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_internal.h" #include "libxnee/xnee_error.h" #include "libxnee/print_varargs.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_settings.h" #include "libxnee/xnee_utils.h" /************************************************************** * * * xnee_write_settings_to_file * * * * * **************************************************************/ int xnee_write_settings_to_file (xnee_data *xd, FILE *fp) { int ret; ret = xnee_set_ranges(xd); XNEE_RETURN_IF_ERR(ret); xnee_print_xnee_resource_settings (xd, fp) ; xnee_print_xnee_settings (xd, fp) ; xnee_print_ranges (xd, fp); return XNEE_OK; } /************************************************************** * * * xnee_delay * * * * * **************************************************************/ void xnee_delay (int secs, char *mess) { int i; int j; int bytes_written = 0 ; int last_written = 0 ; size_t len = strlen (mess); unsigned int sleep_int = 1 ; unsigned int ret; for ( i=secs ; i>-1 ; i-- ) { if (len>0) { (void) fflush(stderr); last_written= bytes_written ; bytes_written = fprintf (stderr, "\r%s delayed start, time left: " "%d seconds left", mess, i ); (void) fflush(stderr); for ( j=0 ; j < ( last_written -bytes_written) ; j++ ) { fprintf (stderr," \b"); } (void) fflush(stderr); } ret = sleep (sleep_int); if (ret!=0) { sleep_int = sleep_int + ret; } else { sleep_int = 1 ; } } fprintf (stderr,"\r"); for ( j=0 ; j < bytes_written ; j++ ) { fprintf (stderr, " "); } /* We can typecast these to void safely, since this is not * in any way an obstacle if it fails.... */ (void) fprintf (stderr, "\r"); (void) fflush(stderr); } /************************************************************** * * * xnee_strip * * * * * **************************************************************/ int xnee_strip(xnee_data *xd, char *str) { int i; int j; int blanks=0; size_t len ; len = strlen (str); xnee_verbose ((xd," --> xnee_strip \"%s\"\n", str)); /* * how many blanks do we have */ for (i=0 ; i<=(int)len ; i++) { if (str[i]==' ' ) { blanks++; for (j=i ; j<=(int)len ; j++) { str[j]=str[j+1]; len--; } i--; } } str[len-blanks]='\0'; xnee_verbose ((xd," <-- xnee_strip \"%s\"\n", str)); return 1; } /************************************************************** * * * xnee_rem_comment_start * * * * * **************************************************************/ int xnee_rem_comment_start(xnee_data *xd, char *str) { int i ; int j ; int comms=0; size_t len ; if (str==NULL) { return 1; } xnee_verbose ((xd," --> xnee_rem_comment_start \"%s\"\n", str)); len = strlen (str); /* * how many comments do we have */ for (i=0 ; i<=(int)len ; i++) { if ( str[i]==XNEE_COMMENT_START_CHAR ) { comms++; for (j=i ; j<=(int)len ; j++) { str[j]=str[j+1]; } i--; } } str[len-comms]='\0'; xnee_verbose ((xd," <-- xnee_rem_comment_start \"%s\"\n", str)); return 0; } /************************************************************** * * * rem_blanks * * * * * **************************************************************/ int rem_blanks (char *array, int size) { int i=0; int j=0; for (i=0;iresource_base ; } char ** xnee_str2strptr (char *tmp, int fill_option) { int size=0; int str_size=0 ; char **ret ; char *blank_ptr1; char *str; ret = NULL; while (*tmp) { /* rem leading blanks */ while(tmp[0]==' ') { if (tmp[0]==' ') { tmp++; } } /* Find next blank (or newline) */ blank_ptr1 = strstr(tmp, " "); if (blank_ptr1==NULL) { blank_ptr1 = strstr(tmp, "\n"); } ret= (char**) realloc(ret,(size+2)*sizeof(char*)); if (ret == NULL ) { break; } if (blank_ptr1 != NULL) { str_size = strlen(tmp) - strlen(blank_ptr1) + 1 ; } else { str_size = strlen(tmp) + 1; } if ( (size==0) && (fill_option==XNEE_CLI_SYNTAX) ) { str = (char*) calloc(str_size, sizeof(char)+2); strcpy (str, "--"); strncat(str, tmp, str_size-1); } else { str = (char*) calloc(str_size, sizeof(char)); strncpy(str, tmp, str_size-1); } ret[size] = str; ret[size+1] = NULL; size++; tmp = blank_ptr1; if (tmp==NULL) { break; } tmp++; } return ret; } void xnee_print_strptr(xnee_data *xd, char **strptr) { int i = 0 ; if ( (xd==NULL) || ( xd->verbose == 0 ) ) { return; } if (strptr==NULL) { return; } fprintf (xd->err_file, "Option: '%s'\n", strptr[0]); for (i=1; strptr[i] != NULL ; i++) { if ( strptr[i] != NULL ) { fprintf (xd->err_file, "\targument: '%s'\n", strptr[i]); } else break; } } int xnee_free_strptr(char **strptr) { int i = 0 ; if (strptr==NULL) { return XNEE_OK; } for (i=0; strptr[i] != NULL ; i++) { if ( strptr[i] != NULL ) { free(strptr[i]); } else { break; } } free(strptr); return XNEE_OK; } int xnee_boolstr2int(xnee_data *xd, char *str) { int ret; XNEE_VERBOSE_ENTER_FUNCTION(); if (str==NULL) { ret = XNEE_BOOL_IMPLICIT_TRUE; } else if (xnee_check_true(str)) { ret = XNEE_BOOL_EXPLICIT_TRUE; } else if (xnee_check_false(str)) { ret = XNEE_BOOL_EXPLICIT_FALSE; } else { ret = XNEE_BOOL_ERROR; } XNEE_VERBOSE_LEAVE_FUNCTION(); return ret; } int xnee_str2int(xnee_data *xd, char *str) { int ret=XNEE_OK; xnee_verbose((xd, " xnee_str2int\n")); if (str==NULL) { /* Set return value to error */ ret = INT_MAX; } else { /* scan the string */ if ( !sscanf(str, "%d", &ret) == 1 ) { /* If scan failed, set return value to error */ ret = INT_MAX; } } return ret; } int xnee_record_from_data_display(xnee_data *xd) { int ret_val = 0; /* fprintf (stderr,"X info: %s %d %d %d\n", */ /* xd->x_vendor_name, */ /* xd->x_version_major, */ /* xd->x_version_minor, */ /* xd->x_version_minor_sub); */ if ( (xd != NULL) && (xd->x_vendor_name != NULL ) ) { /* * Xorg * * Fedora 13 (X.org 1.8.2), 14 (X.org 1.9.1) calls the server "Fedora project" * (thanks to William Bader, and Olf Astrand) */ if (strstr(xd->x_vendor_name, "X.Org") || strstr(xd->x_vendor_name, "Fedora Project") || strstr(xd->x_vendor_name, "Red Hat, Inc.") ) { /* * Version 1 */ if ( xd->x_version_major == 1 ) { /* * versions */ if ( xd->x_version_minor >= 3 ) { /* Old check removed. Seems as if all version follow same pattern, so let's go for all future. Let's skip: ( xd->x_version_minor <= 14 ) /* * Once the XLIB fix is in place * this should be enabled * if ( ( xd->x_version_minor == 7 ) && ( xd->x_version_minor_sub > 6 )) { ; } else { */ /* } */ ret_val=1; } else { ret_val=0; } } else if ( xd->x_version_major == 6 ) { if ( xd->x_version_minor == 9 ) { /* * NoMachine (nxserver-3.4.0-8) * returns "The X.Org Foundation" 6.9.0 */ ret_val = 1; } else { fprintf(stderr, " WARNING\n"); fprintf(stderr, "You seem to be running NoMachine X server\n"); fprintf(stderr, "with a X server version unkown to " PACKAGE " \n"); fprintf(stderr, "We will assume that it works similar to nxserver-3.4.0-8\n"); ret_val = 1; } } else if ( xd->x_version_major == 7 ) { ret_val = 1; } } else if (strstr(xd->x_vendor_name, "Sun Microsystems") ) { if ( ( xd->x_version_major == 1 ) && ( xd->x_version_minor >= 3 ) ) { ret_val = 1; } } /* N900 */ else if (strstr(xd->x_vendor_name, "Nokia") ) { if ( ( xd->x_version_major == 1 ) && ( xd->x_version_minor >= 1 ) ) { ret_val = 1; } } else { ; } } xnee_verbose((xd, " -- xnee_record_from_data_display() using the following X serv data\n")); xnee_verbose((xd, " using the following X serv data\n")); xnee_verbose((xd, "X info: %s %d %d %d\n", xd->x_vendor_name, xd->x_version_major, xd->x_version_minor, xd->x_version_minor_sub)); xnee_verbose((xd, "<-- %d \n", ret_val)); return ret_val ; } Display * xnee_get_display_for_recordcontext(xnee_data *xd) { Display *context_display; int override_mode; if (xd==NULL) { return NULL; } override_mode = xnee_get_override_display(xd); if (override_mode == XNEE_OVERRIDE_DISPLAY_DATA) { context_display = xd->data ; } else if (override_mode == XNEE_OVERRIDE_DISPLAY_CONTROL) { context_display = xd->control ; } else if ( xnee_record_from_data_display(xd)) { /* * From X.org 1.6.0 to ???? * * there seem to be something strange about * the XRecordCreateContext call * which causes the XRecordEnableContextAsync * to fail ... ugly fix, but it works * */ fprintf(stderr, "Workaround: Creating context on data display instead of control \n"); fprintf(stderr, " You can ignore this message\n"); context_display = xd->data ; } else { context_display = xd->control ; } return context_display; } int xnee_is_screen_ok(xnee_data *xd, int screen) { int ret; ret = 0 ; if ( (screen >= 0 ) && (screen < 100)) { ret = 1; } else { if ( (xd != NULL) && (xd->x_vendor_name != NULL ) ) { if (strstr(xd->x_vendor_name, "Nokia") ) { if ( ( xd->x_version_major == 1 ) && ( xd->x_version_minor >= 1 ) ) { ret = 1; } } } } return ret ; } int xnee_check_true(char *expr) { return (int) ( (strncmp(expr,XNEE_TRUE_STRING,strlen(XNEE_TRUE_STRING))==0) || (strncmp(expr,XNEE_1_STRING,strlen(XNEE_1_STRING))==0) ); } int xnee_check_false(char *expr) { return (int)( (strncmp(expr,XNEE_FALSE_STRING,strlen(XNEE_FALSE_STRING))==0) || (strncmp(expr,XNEE_0_STRING,strlen(XNEE_0_STRING))==0) ); } xnee-3.19/libxnee/src/xnee_buffer.c0000664000000000000000000003603311671466524014170 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, * 2010, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_buffer.h" #include "libxnee/xnee_threshold.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_xinput.h" /************************************************************** * * * xnee_replay_buffer_status * * * * * **************************************************************/ int xnee_replay_buffer_status (xnee_data* xd, int data_type, int nr) { return xd->data_buffer[data_type][nr]; } /************************************************************** * * * xnee_replay_buffer_max_diff * * * * * **************************************************************/ int xnee_replay_buffer_max_diff (xnee_data* xd, int type) { int max_val=0; int i ; for (i=0;idata_buffer[type][i], max_val); } return max_val; } /************************************************************** * * * xnee_replay_buffer_min_diff * * * * * **************************************************************/ int xnee_replay_buffer_min_diff (xnee_data* xd, int type) { int min_val=0; int i ; for (i=0;idata_buffer[type][i], min_val); } return min_val; } /************************************************************** * * * xnee_replay_buffer_tot_diff * * * * * **************************************************************/ int xnee_replay_buffer_tot_diff (xnee_data* xd, int type) { int i; int tot_val=0; for (i=0;idata_buffer[type][i]); } return tot_val; } /************************************************************** * * * OBSOLETE ..... all is done is synchron... function * * * * * * xnee_replay_buffer_handle * * * * * **************************************************************/ int xnee_replay_buffer_handle (xnee_data* xd, int data_type, int nr, Bool rec_or_rep) { /* * int i,j; */ int nr_of_data=0; /* * protect the buffer by waiting for the buffer semaphore */ xnee_sem_wait(xd, xd->buf_sem); /* * From where did we get the data? * * If rec_or_rep equals XNEE_RECEIVED from the Xserver .... decrement * If not (thats is if XNEE_REPLAYED ) from file ..... increment * */ if (rec_or_rep==XNEE_RECEIVED) { if (! ( ( data_type==XNEE_EVENT ) && ( nr <= ButtonRelease ) )) { xd->data_buffer[data_type][nr]--; xnee_verbose ((xd, "xnee_replay_buffer_handle decremented %d %d to %d\n", data_type,nr,xd->data_buffer[data_type][nr] )); } } else { if (! ( ( data_type==XNEE_EVENT ) && ( nr <= ButtonRelease) )) { xd->data_buffer[data_type][nr]++; xnee_verbose ((xd, "xnee_replay_buffer_handle incremented %d %d to %d\n", data_type, nr, xd->data_buffer[data_type][nr] )); } } /* * release the protecting semaphore the buffer */ xnee_sem_post (xd, xd->buf_sem); return nr_of_data; } /************************************************************** * * * xnee_replay_buffer_handler * * * * * **************************************************************/ void xnee_replay_buffer_handler (xnee_data* xd, int data_type, int data_nr, Bool rec_or_rep) { /* * We don't use device event while synching * if ( (data_type==XNEE_EVENT) && ( (data_nr>=KeyPress) || (data_nr<=MotionNotify)) ) { return; } */ xnee_verbose((xd,"---> xnee_replay_buffer_handler ")); if (rec_or_rep==XNEE_RECEIVED) { xnee_verbose((xd," XNEE_RECEIVED \n")); } else { xnee_verbose((xd," XNEE_REPLAYED \n")); } /* * protect the buffer by waiting for the buffer semaphore */ xnee_sem_wait(xd, xd->buf_sem); /* * From where did we get the data? * * If rec_or_rep equals: * XNEE_RECEIVED from the Xserver .... decrement * XNEE_REPLAYED from file ..... increment * */ if (rec_or_rep==XNEE_RECEIVED) { if (!( ( data_type == XNEE_EVENT ) && ( data_nr <= ButtonRelease ) )) { #ifdef XNEE_XINPUT_SUPPORT if (xnee_get_xinput_event_base(xd->fake) > 0) { if (( (data_nr - xnee_get_xinput_event_base(xd->fake)) >= 0 ) && ( (data_nr - xnee_get_xinput_event_base(xd->fake)) <= MotionNotify ) && xnee_is_replayer(xd)) { return; } } #endif /* XNEE_XINPUT_SUPPORT */ if ( ( data_nr >= KeyPress ) && ( data_nr <= MotionNotify ) && xnee_is_replayer(xd)) { xnee_verbose((xd,"--- xnee_replay_buffer_handler : ignonring recorded data ")); /* * release the protecting semaphore the buffer */ xnee_sem_post (xd, xd->buf_sem); return; } if (data_nr==161) { fprintf (stderr, "161 received:This is workaround for a bug in Xnee\n"); /* * release the protecting semaphore the buffer */ xnee_sem_post (xd, xd->buf_sem); return; } /* * If we get a data such that its amount of * unsynced data (xd->data_buffer[data_type][data_nr]) * is the same as the cached maximum value for * the buffer we can't assure that the cached * maximum value is valid, since we are going to * decrement the value. Set the cache to -1 */ if (xd->meta_data.cached_max == xd->data_buffer[data_type][data_nr]) { /* don't get it? .... please read the above read again */ xd->meta_data.cached_max=-1; } /* * decrement the data buffer * decrement the total buffer */ xd->data_buffer[data_type][data_nr]--; xd->meta_data.total_diff--; xd->meta_data.sum_min--; xd->meta_data.sum_max--; /* * If the value for this data is smaller than the cached * minimum value. Set this value in the cache */ if ( xd->data_buffer[data_type][data_nr] < xd->meta_data.cached_min) { xd->meta_data.cached_min = xd->data_buffer[data_type][data_nr] ; } XNEE_SYNC_DEBUG ( (stdout, "-------- [%d][%d] %d \n", data_type, nr, nr_of_data)) ; xnee_verbose ((xd, " buffer_handler %d %d to %d\n" , data_type,data_nr, xd->data_buffer[data_type][data_nr])); } } else { /* * If we get a data such that its amount of unsynced data * (xd->data_buffer[data_type][data_nr]) is the same as the * cached minimum value for the buffer we can't assure that the cached * minimum value is valid, sice we are going to decrement the value. * Set the cache to +1 */ if (xd->meta_data.cached_min == xd->data_buffer[data_type][data_nr]) { xd->meta_data.cached_min=+1; } /* * increment the data buffer * increment the total buffer */ xd->data_buffer[data_type][data_nr]++; xd->meta_data.total_diff++; xd->meta_data.sum_max++; xd->meta_data.sum_min++; /* * If the value for this data is bigger than the cached maximum value. * Set this value in the cache */ if ( xd->data_buffer[data_type][data_nr] > xd->meta_data.cached_max) { xd->meta_data.cached_max = xd->data_buffer[data_type][data_nr] ; } xnee_verbose ((xd, " buffer_handler incremented %d %d to %d \n", data_type, data_nr, xd->data_buffer[data_type][data_nr] )); } /* * release the protecting semaphore the buffer */ xnee_sem_post (xd, xd->buf_sem); xnee_replay_printbuffer(xd); xnee_verbose((xd,"<--- xnee_replay_buffer_handler \n"));; } int xnee_update_buffer_cache(xnee_data *xd) { int type ; int counter ; /* * protect the buffer by waiting for the buffer semaphore */ xnee_sem_wait(xd, xd->buf_sem); for (counter=0 ; counter < MAX_UNSYNC_LOOPS; counter++) { for ( type=0 ; type< 2 ; type++) { int real_min=0; int real_max=0; real_min=xd->meta_data.cached_min; real_max=xd->meta_data.cached_max; /* The cached values might be invalid. * If so, get fresh value and replace them */ if (real_min==1) { xnee_replay_buffer_min_diff (xd,type); real_min = xnee_replay_buffer_min_diff (xd,type); xnee_verbose ((xd, " cached min value invalid. refreshing to %d old: %d\n", real_min, xd->meta_data.cached_min)); xd->meta_data.cached_min=real_min; } if (real_max==-1) { xnee_replay_buffer_max_diff (xd,type); real_max = xnee_replay_buffer_max_diff (xd,type); xnee_verbose ((xd, " cached max value invalid. refreshing to %d old: %d\n", real_max, xd->meta_data.cached_max)); xd->meta_data.cached_max=real_max; } } } /* * release the protecting semaphore the buffer */ xnee_sem_post (xd, xd->buf_sem); return XNEE_OK; } int xnee_hard_update_buffer_cache(xnee_data *xd) { int type ; int counter ; int real_min=0; int real_max=0; /* * protect the buffer by waiting for the buffer semaphore */ xnee_sem_wait(xd, xd->buf_sem); for (counter=0 ; counter < MAX_UNSYNC_LOOPS; counter++) { for ( type=0 ; type< 2 ; type++) { real_min = xnee_replay_buffer_min_diff (xd,type); if (real_minmeta_data.cached_min) { xd->meta_data.cached_min=real_min; } real_max = xnee_replay_buffer_max_diff (xd,type); if (real_max>xd->meta_data.cached_max) { xd->meta_data.cached_max=real_max; } } } /* * release the protecting semaphore the buffer */ xnee_sem_post (xd, xd->buf_sem); return XNEE_OK; } int xnee_check_buffer_limits (xnee_data *xd) { int cached_min = 0 ; int cached_max = 0 ; int sum_max = 0 ; int sum_min = 0 ; int tot_diff = 0 ; int diff = 0 ; static int upd_ctr = -1 ; if ( ( upd_ctr == -1 ) || ( upd_ctr > 10 ) ) { xnee_verbose ((xd, " xnee_hard_update_buffer_cache\n")); xnee_hard_update_buffer_cache (xd); upd_ctr=0; } else { xnee_verbose ((xd, " xnee_update_buffer_cache\n")); xnee_update_buffer_cache (xd); } upd_ctr++; cached_max = xd->meta_data.cached_max; cached_min = xd->meta_data.cached_min; sum_max = xd->meta_data.sum_max; sum_min = xd->meta_data.sum_min; tot_diff = xd->meta_data.total_diff; xnee_verbose ((xd, "---> xnee_check_buffer_limits button %d key %d\n", xd->button_pressed, xd->key_pressed )); xnee_verbose ((xd, "--- cached: %02d/%02d sum_max=%02d sum_min=%02d sum_tot=%02d \n", cached_max , cached_min , sum_max , sum_min , tot_diff )); if ( cached_max > xnee_get_max_threshold(xd)) { xnee_verbose ((xd, "cached_max %d > xnee_get_max_threshold(xd) %d\n", cached_max , xnee_get_max_threshold(xd))); xnee_replay_printbuffer(xd); diff=cached_max; } else if ( cached_min < xnee_get_min_threshold(xd)) { xnee_verbose ((xd, "cached_min %d < xnee_get_min_threshold(xd) %d\n", cached_min , xnee_get_min_threshold(xd))); xnee_replay_printbuffer(xd); diff=cached_min; } /* else if ( sum_max > XNEE_BUFFER_SUM_MAX ) { xnee_verbose ((xd, "sum_max %d > XNEE_BUFFER_SUM_MAX %d\n", sum_max , XNEE_BUFFER_SUM_MAX)); xnee_replay_printbuffer(xd); diff=sum_max; } else if ( sum_min < XNEE_BUFFER_SUM_MIN ) { xnee_verbose ((xd, "sum_min %d < XNEE_BUFFER_SUM_MIN %d\n", sum_min , XNEE_BUFFER_SUM_MIN)); xnee_replay_printbuffer(xd); diff=sum_min; } */ else if ( tot_diff > xnee_get_tot_threshold(xd) ) { xnee_verbose ((xd, "tot_diff %d > xnee_get_tot_threshold(xd) %d\n", tot_diff , xnee_get_tot_threshold(xd))); xnee_replay_printbuffer(xd); diff=tot_diff; } else { xnee_verbose ((xd, "no diff %d %d\n", tot_diff , xnee_get_tot_threshold(xd))); xnee_replay_printbuffer(xd); diff=0; } xnee_verbose ((xd, "<--- xnee_check_buffer_limits diff=%d\n", diff)); return diff; } xnee-3.19/libxnee/src/xnee_alloc.c0000664000000000000000000002513011461647116014000 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 * 2008, 2009, 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_alloc.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_utils.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_fileop.h" #include "libxnee/print_varargs.h" int xnee_free_dyn_data(xnee_data *xd); /************************************************************** * * * xnee_new_recordext_setup * * * * * **************************************************************/ /*@null@*/ xnee_recordext_setup* xnee_new_recordext_setup() { xnee_recordext_setup* xrs ; xrs = (xnee_recordext_setup*) malloc (sizeof (xnee_recordext_setup)); XNEE_CHECK_ALLOCED_MEMORY(xrs); memset (xrs, 0, sizeof (xnee_recordext_setup)); if (xrs->xids != NULL) { XNEE_FREE_IF_NOT_NULL(xrs->xids); } /*@ignore@*/ /* we can ignore splint warning since we know we have freed it */ xrs->xids = (XRecordClientSpec*) calloc (2, sizeof(XRecordClientSpec)); /*@end@*/ XNEE_CHECK_ALLOCED_MEMORY(xrs->xids); xrs->rContext = 0; if (xrs->rState!=NULL) { XNEE_FREE_IF_NOT_NULL (xrs->rState); } /*@ignore@*/ /* we can ignore splint warning since we know we have freed it */ xrs->rState = (XRecordState*) malloc (sizeof(XRecordState)); /*@end@*/ XNEE_CHECK_ALLOCED_MEMORY(xrs->rState); memset (xrs->rState, 0, sizeof (XRecordState)); /* * Record ranges are allocated using seperate functions */ return xrs; } /************************************************************** * * * xnee_free_recordext_setup * * * * * **************************************************************/ /*@null@*/ int xnee_free_recordext_setup(xnee_data* xd) { int i; int max ; int ret ; /*@only@*/ /*@out@*/ /*@null@*/ xnee_recordext_setup *record_setup = NULL ; XNEE_DEBUG ((stderr ," -->xnee_free_recordext_data() \n" )); if ( (xd!=NULL) && (xd->record_setup!=NULL)) { record_setup = xd->record_setup; max = xnee_get_max_range(xd); ret = xnee_unsetup_recording(xd); if (ret!=XNEE_OK) { xnee_print_error ("Could not unsetup recording (%d)\n", ret); return ret; } if (max>0) { for ( i=0 ; irange_array != NULL ) && (record_setup->range_array[i] != NULL )) { ret = XNEE_FREE_AND_NULL (record_setup->range_array[i]); if (ret!=XNEE_OK) { xnee_print_error ("Could not free memory at " "record_setup->range_array[%d] (%d)\n", i, ret); return ret; } } /*@end@*/ } } XNEE_FREE_IF_NOT_NULL (record_setup->xids); XNEE_FREE_IF_NOT_NULL (record_setup->rState); XNEE_FREE_IF_NOT_NULL (xd->record_setup); XNEE_FREE_AND_NULL (record_setup->range_array); } XNEE_DEBUG ( (stderr ," <--xnee_free_recordext_setup\n" )); return XNEE_OK; /*@end@*/ } void xnee_free_replay_setup( /*@only@*/ /*@null@*/ xnee_testext_setup* xrs) { XNEE_FREE_IF_NOT_NULL (xrs); return ; } /*@null@*/ xnee_testext_setup* xnee_new_replay_setup(void) { xnee_testext_setup* xrs = (xnee_testext_setup*) malloc (sizeof (xnee_testext_setup)) ; XNEE_CHECK_ALLOCED_MEMORY(xrs); memset (xrs, 0, sizeof(xnee_testext_setup)); return xrs; } static int xnee_new_dyn_data(xnee_data *xd) { if (xd==NULL) { return XNEE_MEMORY_FAULT; } xnee_verbose((xd, "---> xnee_new_dyn_data\n")); /* * Freeing old memory */ xnee_verbose((xd, "--- xnee_new_dyn_data: freeing old memory (if found)\n")); xnee_free_dyn_data(xd); /* * Getting new memory */ xd->replay_setup = xnee_new_replay_setup(); XNEE_CHECK_ALLOCED_MEMORY_INT(xd->replay_setup); xd->record_setup = xnee_new_recordext_setup(); XNEE_CHECK_ALLOCED_MEMORY_INT(xd->record_setup); xd->grab_keys = xnee_new_grab_keys(xd); XNEE_CHECK_ALLOCED_MEMORY_INT(xd->grab_keys); return XNEE_OK; } #ifdef OBSOLETE static int xnee_reset_retype_info(/*@null@*/ xnee_data *xd) { if (xd==NULL) { return XNEE_NO_MAIN_DATA; } xnee_set_retype_press_delay(xd, 100); xnee_set_retype_release_delay(xd, 100); return XNEE_OK; } #endif /* OBSOLETE */ static int xnee_reset_xnee_info(/*@null@*/ xnee_data *xd) { int i ; if (xd==NULL) { return XNEE_NO_MAIN_DATA; } for (i=0;ixnee_info.data_ranges[i]=0; } xnee_free_ranges(xd); return XNEE_OK; } int xnee_free_dyn_data(xnee_data *xd) { int ret; int i ; xnee_verbose((xd, "---> xnee_free_dyn_data\n")); if ( xd->grab_keys && xd->grab_keys->action_keys) { for (i=0;igrab_keys->action_keys[i].str); XNEE_FREE_IF_NOT_NULL(xd->grab_keys->action_keys[i].extra_str); } } xnee_verbose((xd, " --- xnee_free_dyn_data: program name\n")); XNEE_FREE_IF_NOT_NULL(xd->program_name); xnee_verbose((xd, " --- xnee_free_dyn_data: program name\n")); XNEE_FREE_IF_NOT_NULL(xd->program_name); xnee_verbose((xd, " --- xnee_free_dyn_data: refreshing ranges\n")); ret = xnee_free_ranges(xd); XNEE_RETURN_IF_ERR(ret); xnee_verbose((xd, " --- xnee_free_dyn_data: replay_setup\n")); xnee_free_replay_setup(xd->replay_setup); xd->replay_setup = NULL; xnee_verbose((xd, " --- xnee_free_dyn_data: record_ext\n")); ret = xnee_free_recordext_setup (xd); XNEE_RETURN_IF_ERR(ret); xnee_verbose((xd, " --- xnee_free_dyn_data: grab_keys\n")); ret = xnee_free_grab_keys(xd->grab_keys); XNEE_RETURN_IF_ERR(ret); xd->grab_keys=NULL; xnee_verbose((xd, " --- xnee_free_dyn_data: resource_meta\n")); ret = xnee_free_xnee_resource_meta(&xd->xrm); XNEE_RETURN_IF_ERR(ret); xnee_verbose((xd, " --- xnee_free_dyn_data: xnee_info\n")); ret = xnee_reset_xnee_info(xd); XNEE_RETURN_IF_ERR(ret); xnee_verbose((xd, " --- xnee_free_dyn_data: x version info\n")); XNEE_FREE_IF_NOT_NULL(xd->x_vendor_name); xnee_verbose((xd, "<--- xnee_free_dyn_data\n")); return XNEE_OK; } /************************************************************** * * * xnee_new_xnee_data * * * * * **************************************************************/ /*@null@*/ xnee_data* xnee_new_xnee_data() { int ret ; xnee_data* xd = (xnee_data*) malloc (sizeof (xnee_data)); if (xd==NULL) { xnee_print_error ("Could not allocate memory ........\n"); return NULL; } memset (xd, 0, sizeof(xnee_data)); xd->grab_keys=NULL; ret = xnee_new_dyn_data(xd); XNEE_RETURN_NULL_IF_ERR(ret); ret = xnee_init(xd); XNEE_RETURN_NULL_IF_ERR(ret); /* xnee_init_strings(xd); */ /* Set the signal handler the libxnee's built in */ (void) signal (SIGINT, signal_handler); /* Set the error handler the libxnee's built in */ (void) XSetErrorHandler (handle_xerr); xnee_set_xnee_data (xd); return xd; } /************************************************************** * * * xnee_free_xnee_data * * * * * **************************************************************/ int xnee_free_xnee_data(xnee_data* xd) { int ret ; ret = xnee_free_dyn_data(xd); XNEE_RETURN_IF_ERR(ret); #ifdef XNEE_USE_SEMAPHORES free (xd->buf_sem); #endif free (xd); return XNEE_OK; } int xnee_renew_xnee_data(xnee_data *xd) { int ret ; ret = xnee_free_dyn_data(xd); XNEE_RETURN_IF_ERR (ret); ret = xnee_new_dyn_data(xd); XNEE_RETURN_IF_ERR (ret); /* * Reset counters... */ xd->first_read_time = 0; xd->meta_data.sum_max = 0; xd->meta_data.sum_min = 0; xd->meta_data.total_diff = 0; xd->meta_data.cached_max = 0; xd->meta_data.cached_min = 0; return (XNEE_OK); } int xnee_free( /*@only@*/ /*@out@*/ /*@null@*/ void *mem) { #ifdef __x86_64 if ( (mem==NULL) || ((unsigned long)mem==0x1) ) #else if ( (mem==NULL) || ((int)mem==0x1) ) #endif { return XNEE_MEMORY_FAULT; } /* fprintf(stderr, "Freeing at %lu\n", mem); */ free(mem); return XNEE_OK; } xnee-3.19/libxnee/src/xnee_plugin.c0000664000000000000000000001035411671474125014207 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, * 2008, 2009, 2010, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_alloc.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_plugin.h" #include "libxnee/xnee_callback.h" /************************************************************** * * * xnee_use_plugin * * * * * **************************************************************/ int xnee_use_plugin(xnee_data *xd, char *pl_name, unsigned char mode) { int ret=0; #define LIB_NAME_STR_SIZE 100 char lib_name[LIB_NAME_STR_SIZE]; const char *rec_cb ; const char *rep_cb ; if (mode==0) { rec_cb = XNEE_RECORD_CALLBACK_NAME; rep_cb = XNEE_REPLAY_CALLBACK_NAME; } else { rec_cb = EXT_RECORD_CALLBACK_NAME; rep_cb = EXT_REPLAY_CALLBACK_NAME; } xnee_verbose ((xd, "Using plugin file: %s\n", pl_name)); strncpy (lib_name, "lib", LIB_NAME_STR_SIZE); strncat (lib_name, pl_name, LIB_NAME_STR_SIZE - strlen(lib_name) ); if (xd->plugin_name!=NULL) { ret = XNEE_FREE_AND_NULL(xd->plugin_name); XNEE_RETURN_IF_ERR(ret); } /*@ignore@*/ xd->plugin_name=strdup(pl_name); /*@end@*/ xd->plugin_handle = (void*) xnee_dlopen (xd, lib_name, RTLD_LAZY ); if (!xd->plugin_handle) { (void)fputs (dlerror(), stderr); xnee_close_down(xd); return(XNEE_PLUGIN_FILE_ERROR); } xnee_verbose ((xd, "We've got plugin file handle %p\n", (void*)xd->plugin_handle)); ret = xnee_set_callback (xd, &xd->rec_callback, rec_cb); ret = xnee_set_callback (xd, &xd->rep_callback, rep_cb); #ifdef USE_DYNAMIC_SYNC_FUN ret = xnee_set_callback (xd, &xd->sync_fun, XNEE_SYNC_FUNCTION_NAME); #endif /* USE_DYNAMIC_SYNC_FUN */ return XNEE_OK; } /************************************************************** * * * xnee_unuse_plugin * * * * * **************************************************************/ int xnee_unuse_plugin(xnee_data *xd) { int ret; if ( xd == NULL) { return (XNEE_MEMORY_FAULT); } XNEE_FREE_IF_NOT_NULL(xd->plugin_name); if (xd->plugin_handle != NULL) { ret = xnee_dlclose (xd, xd->plugin_handle); XNEE_RETURN_IF_ERR(ret); xd->plugin_handle = NULL; } xd->rec_callback = xnee_record_dispatch ; xd->rep_callback = xnee_replay_dispatch ; return XNEE_OK; } xnee-3.19/libxnee/src/xnee_strings.c0000664000000000000000000001153611446720466014407 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, * 2004, 2009, 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print_varargs.h" const char* XNEE_HOME_URL = "http://www.gnu.org/software/xnee/"; const char* XNEE_MAIL = "info-xnee@gnu.org"; const char* XNEE_AUTHORS = "Henrik Sandklef"; const char* XNEE_BUG_MAIL = "bug-xnee@gnu.org"; const char* XNEE_DEVEL_MAIL = "xnee-devel@gnu.org"; const char* GNU_HOME_URL = "http://www.gnu.org/"; const char* FSF_HOME_URL = "http://www.fsf.org/"; const char* XNEE_PLUGIN_DIR = "/usr/local/lib/xnee/plugins" ; const char* XNEE_RESOURCE_DIR = "/usr/local/lib/xnee/resources" ; const char* XNEE_COMMENT_START_STR = "#"; const char XNEE_COMMENT_START_CHAR = '#'; const char* XNEE_EXEC_NO_PROG = "xnee-exec-no-program"; const char* XNEE_EXEC_MARK = "EXEC"; const char* XNEE_NEW_WINDOW_MARK = "NEW-WINDOW"; const char* XNEE_META_END = "META-END" /* Marks the end of the META DATA in the recorded file*/ ; const char* XNEE_REPLAY_CALLBACK_NAME = "xnee_replay_dispatch"; const char* XNEE_RECORD_CALLBACK_NAME = "xnee_record_dispatch"; const char* XNEE_SYNC_FUNCTION_NAME = "xnee_sync_fun"; const char* EXT_REPLAY_CALLBACK_NAME = "xnee_replay_dispatch_external"; const char* EXT_RECORD_CALLBACK_NAME = "xnee_record_dispatch_external"; const char* EXT_SYNC_FUNCTION_NAME = "xnee_sync_fun_external"; const char* XNEE_FAKE_MOTION = "fake-motion"; const char* XNEE_FAKE_X_ARG = "x"; const char* XNEE_FAKE_Y_ARG = "y"; const char* XNEE_FAKE_BUTTON_PRESS = "fake-button-press"; const char* XNEE_FAKE_BUTTON_RELEASE = "fake-button-release"; const char* XNEE_FAKE_BUTTON = "fake-button"; const char* XNEE_FAKE_BUTTON_ARG = "button"; const char* XNEE_FAKE_KEY_PRESS = "fake-key-press"; const char* XNEE_FAKE_KEY_RELEASE = "fake-key-release"; const char* XNEE_FAKE_KEY = "fake-key"; const char* XNEE_FAKE_KEY_ARG = "key"; const char* XNEE_FAKE_MSEC_SLEEP = "msec"; const char* XNEE_TRUE_STRING = "true"; const char* XNEE_1_STRING = "1"; const char* XNEE_FALSE_STRING = "false"; const char* XNEE_0_STRING = "0"; const char* XNEE_XK_ALT_L = "Alt_L"; const char* XNEE_XK_ALT_R = "Alt_R"; const char* XNEE_XK_RETURN = "XK_Return"; const char* XNEE_XK_SPACE = "XK_space"; const char* XNEE_XK_DOWN = "XK_Down"; const char* XNEE_XK_UP = "XK_Up"; const char* XNEE_XK_LEFT = "XK_Left"; const char* XNEE_XK_RIGHT = "XK_Right"; const char* XNEE_SYMBOLIC_ALT = "Alt"; const char* XNEE_SYMBOLIC_CONTROL = "Control"; const char* XNEE_SYMBOLIC_SCROLL = "Scroll"; const char* XNEE_SYMBOLIC_CAPS = "Caps"; const char* XNEE_SYMBOLIC_SHIFT = "Shift"; const char* XNEE_REAL_ALT = "Alt_L"; const char* XNEE_REAL_CONTROL = "Control_L"; const char* XNEE_REAL_SCROLL = "Scroll_L"; const char* XNEE_REAL_CAPS = "Caps_Lock"; const char* XNEE_REAL_SHIFT = "Shift_L"; const char* XNEE_XINPUT_EXTENSION_NAME = "XInputExtension"; const char* NULL_STRING = "NULL"; const char* XNEE_EMPTY_STRING = "" ; const char* XNEE_REPLAY_XNEE_STRING = "xnee"; const char* XNEE_REPLAY_SWINPUT_STRING = "swinput"; xnee-3.19/libxnee/src/xnee_resolution.c0000664000000000000000000001331710640701431015102 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ /* This file contains function handling different resolution during reaply than when recording ... */ #include "libxnee/xnee.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/print.h" #include "libxnee/xnee_resolution.h" int xnee_set_default_rep_resolution (xnee_data *xd) { if (xd->data != NULL) { xd->res_info.replay.x_res = DisplayWidth (xd->data, 0); xd->res_info.replay.y_res = DisplayHeight (xd->data, 0); return XNEE_OK; } return -1 ; } int xnee_set_default_rec_resolution (xnee_data *xd) { if ( (xd!=NULL) && (xd->data != NULL) ) { xd->res_info.record.x_res = DisplayWidth (xd->data, 0); xd->res_info.record.y_res = DisplayHeight (xd->data, 0); return XNEE_OK; } return -1 ; } int xnee_no_rep_resolution (xnee_data *xd) { return ( (xd->res_info.replay.x_res != 1) && ( xd->res_info.replay.y_res != 1)); } int xnee_str_to_res(char *res_str, xnee_res *xr) { int ret; if (res_str == NULL) { return XNEE_BAD_RESOLUTION; } if ( ! ( ( xr->x_res == 1 ) && ( xr->y_res == 1 ))) { return XNEE_OK; } ret = sscanf(res_str, "%dx%d", &xr->x_res, &xr->y_res); if ( ret == 2 ) { return XNEE_OK; } else if (xnee_check ("VGA", res_str, res_str)) { xr->x_res = 800 ; xr->y_res = 640 ; return XNEE_OK; } else if (xnee_check ("SVGA", res_str, res_str)) { xr->x_res = 1024 ; xr->y_res = 768 ; return XNEE_OK; } else if (xnee_check ("XGA", res_str, res_str)) { xr->x_res = 1280 ; xr->y_res = 1024 ; return XNEE_OK; } else if (xnee_check ("UXGA", res_str, res_str)) { xr->x_res = 1600 ; xr->y_res = 1440 ; return XNEE_OK; } else { ; } return XNEE_BAD_RESOLUTION; } int xnee_res_cmp(xnee_res *xr1, xnee_res *xr2) { int ret; ret = ( ( xr1->x_res == xr2->x_res) && ( xr1->y_res == xr2->y_res) ); /* 1 means same 0 means diff */ return ret; } int xnee_resolution_differs (xnee_data *xd) { if (xnee_res_cmp(&xd->res_info.record,&xd->res_info.replay)==0) { /* diff */ return 1; } else { /* no diff */ return 0; } } int xnee_resolution_newx (xnee_data *xd, int xval) { static int diff = XNEE_RESOLUTION_UNSET ; if (diff==XNEE_RESOLUTION_UNSET) { if (xnee_is_resolution_used(xd)) { if (xnee_resolution_differs(xd)) { diff = XNEE_RESOLUTION_USED; } else { diff = XNEE_RESOLUTION_UNUSED; } } else { diff = XNEE_RESOLUTION_UNUSED; } } if (diff==XNEE_RESOLUTION_USED) { return ( ( xval * xnee_get_rep_resolution_x (xd) ) / xnee_get_rec_resolution_x (xd)); } return xval; } int xnee_resolution_newy (xnee_data *xd, int yval) { static int diff = XNEE_RESOLUTION_UNSET ; if (diff==XNEE_RESOLUTION_UNSET) { if (xnee_is_resolution_used(xd)) { if (xnee_resolution_differs(xd)) { diff = XNEE_RESOLUTION_USED; } else { diff = XNEE_RESOLUTION_UNUSED; } } else { diff = XNEE_RESOLUTION_UNUSED; } } if (diff==XNEE_RESOLUTION_USED) { return ( ( yval * xnee_get_rep_resolution_y (xd) ) / xnee_get_rec_resolution_y (xd)); } return yval; } int xnee_is_resolution_used (xnee_data *xd) { if (xd==NULL) { return XNEE_MEMORY_FAULT; } return xd->res_info.is_used==XNEE_RESOLUTION_USED; } int xnee_set_resolution_used (xnee_data *xd) { if (xd==NULL) { return XNEE_MEMORY_FAULT; } xd->res_info.is_used=XNEE_RESOLUTION_USED; return XNEE_OK; } int xnee_unset_resolution_used (xnee_data *xd) { if (xd==NULL) { return XNEE_MEMORY_FAULT; } xd->res_info.is_used=XNEE_RESOLUTION_UNUSED; return XNEE_OK; } int xnee_get_resolution_used (xnee_data *xd) { if (xd==NULL) { return XNEE_MEMORY_FAULT; } return xd->res_info.is_used; } int xnee_resolution_init (xnee_data *xd) { xd->res_info.record.x_res=1; xd->res_info.record.y_res=1; xd->res_info.replay.x_res=1; xd->res_info.replay.y_res=1; /* xnee_set_resolution_used(xd); */ return XNEE_OK; } xnee-3.19/libxnee/src/xnee_settings.c0000664000000000000000000000566210640701431014543 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" const int XNEE_MAX_DELAY = 3600; const int XNEE_PRESS = True; const int XNEE_RELEASE = False; const int xnee_delay_timeout = 5000 ; const int XNEE_DELAY = 10; const int XNEE_MISSING_DATA_DELAY = (10*5); const int XNEE_MAX_SYNCH = 100 /* buffer size */; const int XNEE_MOTION_DELAY = 21 /* default value for delay during synch */; const int MAX_NOT_IN_SYNC = 2 ; const int MAX_OUT_OF_SYNC = 2 ; /* number of data allowed to be out of sync */ const int MAX_UNSYNC_LOOPS = 10 ; /* number check-loops when out of sync before exit */ const int MAX_SKIPPED_UNSYNC = 10 ; /* number of times to ignore unsync state */ const int XNEE_NOT_REPLAYABLE = 13 ; const int XNEE_DEFAULT_MAX_THRESHOLD = 20; const int XNEE_DEFAULT_MIN_THRESHOLD = 20; const int XNEE_DEFAULT_TOT_THRESHOLD = 40; const int XNEE_USEC_PER_SEC = 1000000; const int XNEE_MSEC_PER_SEC = 1000; const char XNEE_FROM_LAST_READ = 'l'; const char XNEE_FROM_FIRST_READ = 'f'; const int XNEE_TOO_FAST_ADJ_PERCENTAGE = 10; const int XNEE_DELAY_RECORDING = 1000*500; const int XNEE_RECEIVED = 1; const int XNEE_REPLAYED = 2 ; const int XNEE_TRUE = 1; const int XNEE_FALSE = 0; const int XNEE_GRAB_MODIFIER = 1; const int XNEE_GRAB_KEY = 2; const int XNEE_REPLAY_READ_META_DATA = 10; const int XNEE_REPLAY_READ_REPLAY_DATA = 20; const int XNEE_REPLAY_READ_ALL_DATA = 30; const int REPLAY_CALLBACK = 1; const int RECORD_CALLBACK = 2; const int SYNC_CALLBACK = 3; const int XNEE_NR_OF_GRABBED_MODIFIER = 8; xnee-3.19/libxnee/src/xnee_range.c0000775000000000000000000004631411671234375014016 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, * 2005, 2006, 2007, 2009, 2010 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ /* Standard includes */ #include #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_km.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_alloc.h" static struct xnee_ranges myxrs ; static int need_init = 1 ; static int added_reparent = 0 ; struct xnee_ranges *xrs = &myxrs ; static int xnee_add_to_list2(xnee_data *xd, int type, int ev); int xnee_add_range (xnee_data* xd, int type, int start, int stop); int xnee_rem_from_list(xnee_data *xd, int type, int ev); static int xnee_do_workaround(xnee_data *xd) { int ret = XNEE_OK; int active_state; if ( xnee_is_type_nr_set(xd, XNEE_DELIVERED_EVENT, ReparentNotify)) { xnee_set_new_window_pos(xd); } else { active_state = xd->record_setup->active; xnee_add_to_list2(xd, XNEE_DELIVERED_EVENT, ReparentNotify); /* Reset active state, since we don't want to record anything * if nothing specified. * We don't want to record the ReparentNotify (as added to * achieve new window pos only).... */ xd->record_setup->active = active_state ; added_reparent = 1 ; } return ret; } static int xnee_undo_workaround(xnee_data *xd) { int ret = XNEE_OK; int w_pos= xnee_get_new_window_pos(xd); if (added_reparent) { xnee_rem_from_list(xd, XNEE_DELIVERED_EVENT, ReparentNotify); added_reparent = 0 ; } if (w_pos > 0) { xnee_unset_new_window_pos(xd); } return ret; } /************************************************************** * * * xnee_null_range * * * * * **************************************************************/ void xnee_null_range ( XRecordRange *range) { memset (range, 0, sizeof(XRecordRange)); /* There seems to be something spooky about setting errors to first=last=0 This solves the X server crashes that has been around for a while */ /* range->errors.first = BadCursor; range->errors.last = BadCursor; */ } static int xnee_bsort(int *numbers, int size) { int i; int j; int temp; for (i = (size - 1); i >= 0; i--) { for (j = 1; j <= i; j++) { if (numbers[j-1] > numbers[j]) { temp = numbers[j-1]; numbers[j-1] = numbers[j]; numbers[j] = temp; } } } return XNEE_OK; } static int xnee_bsort_all(void) { int i ; for (i=0;itype[i].data, xrs->type[i].index); } return XNEE_OK; } static int xnee_init_list(struct xnee_range *xr, int size) { /* printf ("\t'%s' need=%d\n", */ /* __func__, need_init); */ xr->index = 0; xr->size = size; xr->data = (int*) malloc (xr->size*sizeof(int)); /* printf (" xr->data = %d\n", xr->data); */ return XNEE_OK; } int xnee_free_ranges(xnee_data *xd) { int i ; xnee_verbose((xd, " -- xnee_free_ranges\n")); for (i=0;itype[i].data); xrs->type[i].data = NULL; xrs->type[i].index = 0; } need_init = 1 ; return XNEE_OK; } int xnee_init_ranges() { int i ; xrs->alloc_size = 5; /* printf ("--->'%s' init ranges need=%d\n", */ /* __func__, need_init); */ for (i=0;itype[i], xrs->alloc_size); } need_init = 0 ; /* printf ("<---'%s' init ranges need=%d\n", */ /* __func__, need_init); */ return XNEE_OK; } int xnee_refresh_ranges(xnee_data *xd) { xnee_verbose((xd, "-->xnee_refresh_ranges\n")); xnee_free_ranges(xd); xnee_init_ranges(); xrs->nr_of_data = 0; xnee_verbose((xd, "<--xnee_refresh_ranges\n")); return XNEE_OK; } int xnee_print_list(void) { int i ; int j ; for (i=0;itype[i].index ;j++) { printf ("%.3d", xrs->type[i].data[j]); if (j!=xrs->type[i].index-1) printf (","); } printf ("]\n"); } printf ("\n"); return XNEE_OK; } static int xnee_add_to_list2(xnee_data *xd, int type, int ev) { int i ; struct xnee_range *xrp; /* An item is added, set recording active */ xd->record_setup->active = 1; if (type==XNEE_EVENT) { if ((ev>=KeyPress)&&(ev<=MotionNotify)) { type=XNEE_DEVICE_EVENT; } else { type=XNEE_DELIVERED_EVENT; } } xrp = &xrs->type[type]; if (need_init==1) { xnee_init_ranges(); } for (i=0;iindex;i++) { if (xrp->data[i]==ev) { return XNEE_OK; } } if (xrp->index >=(xrp->size-1) ) { xrp->size+=xrp->size; xrp->data = (int*) realloc (xrp->data, xrp->size*sizeof(int)); if (xrp->data==NULL) { fprintf (stderr, " PANIC in xnee_add_to_list2 ....\n") ; fflush(stdout); return XNEE_MEMORY_FAULT; } } xrp->data[xrp->index++]=ev; return XNEE_OK; } /************************************************************** * * * xnee_add_range_str * * * * * **************************************************************/ int xnee_add_range_str (xnee_data *xd, int type, char *range) { char start_str[XNEE_RANGE_STRING_SIZE] ; char *second; int start=0; int stop=0; int str_len=0; int ret=0; int i ; xnee_verbose((xd, " --> add_range_str (%p, %d, %s)\n", (void*)xd,type, range)); str_len=strspn(range, "1234567890-"); if ( str_len > XNEE_RANGE_STRING_SIZE ) { fprintf (stderr, "The string you wanted to add is too long\n"); fprintf (stderr, "Ranges can't be longer then %d characters\n", XNEE_RANGE_STRING_SIZE); return -1; } if (str_len==0) { str_len= strspn(range, "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"); strncpy(start_str,range,str_len); start_str[str_len]='\0'; start=xnee_data2int (type, start_str); if (start==-1) { fprintf(stderr, "Could not convert \"%s\" to an integer\nleaving", start_str); return -1; } } else { strncpy(start_str,range,str_len); start_str[str_len]='\0'; sscanf(start_str,"%d",&start); } xnee_verbose((xd, " -- add_range_str first string=\"%s\" (%d)\n", start_str, start)); second=strchr ( range, '-' ) ; if (second) { int ret; second++; ret=sscanf(second,"%d",&stop); if (ret==0) { stop=xnee_data2int (type, second); if (stop==-1) { fprintf(stderr, "Could not convert \"%s\" to an integer\nleaving", second); return -1; } } xnee_verbose((xd, " -- add_range_str second string=\"%s\" ret=%d\n", second, ret)); } xnee_verbose((xd, " -- add_range_str 1 %d %d \n" , start, stop)); if ( (start>=0) && (stop>=0) ) { if ( (start!=stop) && (startx_vendor_name != NULL ) && (strstr(xd->x_vendor_name, "X.Org") )) { if ( ( xd->x_version_major == 1 ) && ( xd->x_version_minor >= 6 ) && ( xd->x_version_minor < 9 ) ) { ret_val = 1; } } } return ret_val; } static int is_dangerous_xserver(xnee_data *xd) { int ret_val = 1; if (xd==NULL) { return XNEE_MEMORY_FAULT; } if (xd->x_vendor_name==NULL) { xnee_set_x_server_version(xd); } if (strstr(xd->x_vendor_name, "X.Org") ) { if ( ( ( xd->x_version_major == 7 ) || ( xd->x_version_major == 1 ) ) && ( xd->x_version_minor >= 1 ) ) { ret_val = 0; } } return ret_val; } /************************************************************** * * * xnee_add_range * * * * * **************************************************************/ int xnee_add_range (xnee_data* xd, int type, int start, int stop) { XRecordRange *range; int max_index=0; int alloc_nr=0; XRecordRange *r_range; xnee_verbose((xd, "---> xnee_add_range %d %d %d\n", type, start, stop)); /* increment the counter to ensure we allocate enough memory */ alloc_nr=xd->xnee_info.data_ranges[type] ; max_index=xnee_get_max_range(xd) - 1 ; xnee_verbose((xd, " MAX %d ALLOC %d\n", max_index, alloc_nr)); if (alloc_nr>max_index) { xnee_verbose((xd, " -- Allocating a new range of size %d\n", alloc_nr+1)); if ( alloc_nr == 0 ) { xd->record_setup->range_array = (XRecordRange**) Xcalloc (1, sizeof(XRecordRange*)); } else { xd->record_setup->range_array = (XRecordRange**) Xrealloc (xd->record_setup->range_array, (alloc_nr+1)*sizeof(XRecordRange*)); } r_range = XRecordAllocRange(); xnee_null_range (r_range); xd->record_setup->range_array[alloc_nr] = r_range; } /* is it single value */ if (stop==0) { stop=start; } xnee_verbose((xd, "Adding %d range %d - %d at range %d\n", type, start, stop, alloc_nr)); range = xd->record_setup->range_array[alloc_nr]; if ( type == XNEE_DELIVERED_EVENT ) { range->delivered_events.first = start; range->delivered_events.last = stop; if ( is_dangerous_xserver(xd) ) { fprintf(stderr, "Workaround: Adding some errors to recored to prevent crash\n"); fprintf(stderr, " You can ignore this message\n"); /* Workaround for problem with crashing X server */ xd->xnee_info.data_ranges[XNEE_ERROR]++; range->errors.first = BadCursor; range->errors.last = BadCursor; } } else if ( type == XNEE_REQUEST ) { range->core_requests.first = start; range->core_requests.last = stop; } else if ( type == XNEE_ERROR ) { range->errors.first = start; range->errors.last = stop; /* Workaround for problem with crashing X server*/ range->delivered_events.first =33 ; range->delivered_events.last = 33; xd->xnee_info.data_ranges[XNEE_DELIVERED_EVENT]++; } else if ( type == XNEE_REPLY ) { range->core_replies.first = start; range->core_replies.last = stop; } else if ( type == XNEE_EXT_REQUEST_MAJOR ) { range->ext_requests.ext_major.first = start; range->ext_requests.ext_major.last = stop; } else if ( type == XNEE_EXT_REQUEST_MINOR ) { range->ext_requests.ext_minor.first = start; range->ext_requests.ext_minor.last = stop; } else if ( type == XNEE_EXT_REPLY_MAJOR ) { range->ext_replies.ext_major.first = start; range->ext_replies.ext_major.last = stop; } else if ( type == XNEE_EXT_REPLY_MINOR ) { range->ext_replies.ext_minor.first = start; range->ext_replies.ext_minor.last = stop; } else if ( type == XNEE_DEVICE_EVENT ) { range->device_events.first = start; range->device_events.last = stop; /* * WORKAROUND * * xnee doesn't record on some servers * unless device evs are added as deliv. evs :( * */ if ( xnee_device_as_delivered(xd)) { fprintf(stderr, "Workaround: Adding your device events as delivered events to get them recorded.\n"); fprintf(stderr, " You can ignore this message\n"); xnee_add_range(xd, XNEE_DELIVERED_EVENT, start , stop); } else { /* the work around above should probably be removed any time ... errrh */ fprintf(stderr, "NOTIFICATION: If you have problem with Xnee and recording device events: File a bug report including this text.\n"); } } /* * Used when debugging * print_data_range_count (xnee_info, rec_range); * */ xd->xnee_info.data_ranges[type]++; xnee_verbose((xd, "<--- xnee_add_range\n")); /* xnee_record_print_record_range(xd, stderr); */ return (XNEE_OK); } /************************************************************** * * * xnee_parse_range * * * * * **************************************************************/ int xnee_parse_range (xnee_data *xd,int type, char *range) { char buf[DATA_NAME_SIZE_MAX]; int next; int ret=0; int range_len=strlen(range); /* */ xnee_verbose ((xd, "int arg=%p\n", (void*)xd)); xnee_verbose ((xd, "nt arg=%d\n", type)); xnee_verbose ((xd, "string arg=%s\n", range)); while ( 1 ) { next=strspn (range, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"); if (next==0) { ret = XNEE_RANGE_FAILURE; break; } strncpy(buf,range,next); buf[next]='\0'; range+=next+1; range_len=range_len - next - 1; xnee_verbose((xd, " -- calling xnee_add_range_str (%p, %d, %s) \n" , (void*)xd, type, buf)); ret=xnee_add_range_str (xd, type, buf); if (ret == XNEE_RANGE_FAILURE ) { ret = XNEE_RANGE_FAILURE; break; } if (range_len<=0) { break; } if (ret!=XNEE_OK) return (ret); } xnee_verbose((xd, "<-- parse_range()\n")); return ret; } int xnee_get_nr_of_data (int type) { if (xrs->type==NULL) { return -1; } else { /* * We're not going to record if only ReparentNotify are recorded */ if ( ( type == XNEE_DELIVERED_EVENT ) && ( xrs->type[type].index == 1) && ( xrs->type[type].data[0] == ReparentNotify)) { return 0; } else { return xrs->type[type].index; } } } int * xnee_get_data (int type) { if (xrs->type==NULL) { return NULL; } else { return xrs->type[type].data; } } int xnee_is_type_nr_set(xnee_data *xd, int type, int nr) { int i ; xnee_verbose((xd, " -- xnee_is_type_nr_set\n")); for (i=0; itype[type].index ;i++) { if ( xrs->type[type].data[i] == nr ) { return True; } } return False; } int xnee_set_ranges(xnee_data *xd) { int i ; int j ; int first = -1; int last = -1; int this ; xnee_bsort_all(); if (xnee_is_replayer(xd)) { xnee_undo_workaround(xd); xnee_do_workaround(xd); } for (j=0; jtype[j].index ;i++) { this = xrs->type[j].data[i] ; if (first == -1) { first=this; last=this; } else if ( this == last + 1 ) { last = this; } else { xnee_add_range (xd, j, first, last); first=this; last=this; } } if (first!=-1) { if (last!=-1) { xnee_add_range (xd, j, first, last); } else { xnee_add_range (xd, j, first, first); } } } return XNEE_OK; } int xnee_rem_from_list(xnee_data *xd, int type, int ev) { int i ; int j ; struct xnee_range *xrp; xnee_verbose((xd, " -- xnee_rem_from_list\n")); if (need_init==1) { return XNEE_OK; } xrp = &xrs->type[type]; for (i=0;iindex;i++) { if ( xrp->data[i] == ev ) { for (j=i;jindex;j++) { if (j==xrp->index-1) { xrp->data[j]=0; } else { xrp->data[j]=xrp->data[j+1]; } } xrp->index--; } } return XNEE_OK; } int* xnee_get_list(int type) { if (need_init==1) return NULL; if (type==0) { return xrs->type[type].data; } return XNEE_OK; } int xnee_rem_data_from_range_str (xnee_data *xd, int type, char *name) { int rem_data ; int my_type; if (type == -1) { rem_data = xnee_data2int_special(&my_type, name); type = my_type ; } else { rem_data = xnee_data2int(type, name); } if (rem_data == -1) { return -1; } xnee_verbose ((xd, "xnee range removing : %d of type %d\n", rem_data, type )); xnee_rem_from_list(xd, type, rem_data); return XNEE_OK; } xnee-3.19/libxnee/src/xnee_display.c0000664000000000000000000002763711671646172014375 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, * 2004, 2008, 2009, 2010, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include "libxnee/xnee.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_display.h" #include "libxnee/print_varargs.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_xinput.h" /************************************************************** * * * xnee_setup_display * * * * * **************************************************************/ int xnee_setup_display (xnee_data *xd) { int ret; xnee_verbose((xd, "-- xnee_setup_display - data display\n")); if (xd->data!=NULL) { /* xnee_verbose((xd, "-- xnee_setup_display - close data display\n")); XFlush(xd->data); XCloseDisplay(xd->data);*/ } else { xnee_verbose((xd, "-- xnee_setup_display - open data display\n")); xd->data = xnee_open_display (xd); } if (xd->data==NULL) { return XNEE_NOT_OPEN_DISPLAY; } xnee_verbose((xd, "-- xnee_setup_display - control display\n")); if (xd->control!=NULL) { XCloseDisplay(xd->control); } xd->control = xnee_open_display (xd); if (xd->control==NULL) { return XNEE_NOT_OPEN_DISPLAY; } xnee_verbose((xd, "-- xnee_setup_display - fake display\n")); if (xd->fake!=NULL) { XCloseDisplay(xd->fake); } xd->fake = xnee_open_display (xd); if (xd->fake==NULL) { return XNEE_NOT_OPEN_DISPLAY; } xnee_verbose((xd, "-- xnee_setup_display - modifier map\n")); xnee_verbose((xd, "Freeing modifier mapping memory %p ", (void*)xd->map)); XFreeModifiermap(xd->map); xnee_verbose((xd," building modifier map on %p\n", (void*)xd->fake)); xd->map = XGetModifierMapping(xd->fake); xnee_verbose((xd, "display data %p\n" , (void*) xd->data)); xnee_verbose((xd, "display control %p\n" , (void*) xd->control)); xnee_verbose((xd, "display fake %p\n" , (void*) xd->fake)); xnee_verbose((xd, "-- xnee_setup_display - resolution\n")); /* * resolution */ ret = xnee_set_default_rec_resolution (xd); if ( ret != XNEE_OK ) { return XNEE_NOT_OPEN_DISPLAY; } #ifdef XNEE_XINPUT_SUPPORT ret = xnee_get_xinput_event_base(xd->control); if ( ret > 0 ) { xd->xi_data.xinput_event_base = ret; ret = xnee_init_xinput_devices(xd); if (ret != XNEE_OK ) { fprintf(stderr, "Failed finding X Input extension devices\n"); xd->xi_data.xinput_event_base = -1; } } #endif /* XNEE_XINPUT_SUPPORT */ /* return XNEE_OK on success, 1 indicats error opening the displays */ if ( ( xd->data != NULL ) && (xd->control != NULL) && (xd->fake != NULL) ) { xnee_verbose((xd, "-- xnee_setup_display - return OK\n")); return XNEE_OK; } else { xnee_verbose((xd, "-- xnee_setup_display - return 1 ... which is bad\n")); return 1; } } /************************************************************** * * * xnee_set_default_display * * * * * **************************************************************/ void xnee_set_default_display (xnee_data *xd) { char *tmp; tmp = getenv ((const char*)"DISPLAY"); if ( tmp != NULL ) { xd->display = strdup(tmp); } else { xd->display = NULL; } return ; } /************************************************************** * * * xnee_open_display * * * * * **************************************************************/ Display * xnee_open_display(xnee_data* xd) { Display *dpy ; /*@null@*/ const char *tmp; tmp = (const char*) ((xd->display!=NULL)? (xd->display): NULL_STRING); if ( (tmp!=NULL) && (strlen(tmp)==0) ) { tmp=NULL; } xnee_verbose((xd, "Open display %s \n", tmp?tmp:"" )); dpy = XOpenDisplay (tmp); xnee_verbose((xd, "Open display %s \n", tmp?tmp:"" )); if (!dpy) { (void) xnee_print_error ("%s: unable to open display \"%s\"\n", PACKAGE, XDisplayName(tmp)); return dpy; } xnee_verbose((xd, "Display %s = %p\n", tmp?tmp:"", (void*) dpy)); return dpy; } /************************************************************** * * * xnee_add_display_list * * * * * **************************************************************/ int xnee_add_display_list ( xnee_data* xd, char * disp) { char buf[256]; size_t next; int ret=0; int disp_len; if (disp==NULL) { return XNEE_WRONG_PARAMS; } disp_len = strlen(disp); xnee_verbose((xd, "xnee_add_display (xd, %s, )\n", disp)); while ( (1!=0) ) { next=strcspn (disp, ","); if (next==0) break; strncpy(buf,disp,next); buf[next]='\0'; disp+=next+1; disp_len=disp_len - next - 1; ret=xnee_add_display_str (buf,xd); xnee_verbose((xd, " ------------------------- are we doing fine??? ret=%d\n", ret)); if (ret!=0) { xnee_verbose((xd, "Could not add all display for distribution ... returning\n")); return (ret); } if (disp_len <= 0) { xnee_verbose((xd, "disp_len = %d\n", disp_len)); break; } } xnee_verbose((xd, "xnee_add_display_str ... finished\n")); return XNEE_OK; } /************************************************************** * * * xnee_add_display_str * * * * * **************************************************************/ int xnee_add_display_str (char * disp_str, xnee_data* xd) { Display *dpy; int xtest_event_basep = 0; int xtest_error_basep = 0; int xtest_version_major = 0; int xtest_version_minor = 0; xnee_distr *xdist; xnee_verbose((xd, "Adding Display \"%s\" to distribution list\n", disp_str)); xdist = xd->distr_list; if (xd->distr_list_size==0) { xdist = NULL; } xnee_distr *tmp = xd->distr_list; xd->distr_list = (xnee_distr *) realloc (xd->distr_list, (xd->distr_list_size+1)*sizeof (xnee_distr)); if (xd->distr_list==NULL) { /*@ignore@*/ xd->distr_list = tmp; /*@end@*/ tmp = NULL; return XNEE_MEMORY_FAULT; } xnee_verbose((xd, "Adding Display - opening display\n")); dpy = XOpenDisplay (disp_str); if (dpy==NULL) { xnee_print_error ("Could not open display %s\n", disp_str); return ( XNEE_NOT_OPEN_DISPLAY ); } xnee_verbose((xd, "Adding Display - opening display gave us %p\n", (void*) dpy)); xnee_verbose((xd, "Adding Display - trying to grab control\n")); /*@ignore@*/ XTestGrabControl (dpy, True); /*@end@*/ if (!dpy) { (void) xnee_print_error ("Unable to open display \"%s\"\n", disp_str); return (XNEE_NOT_OPEN_DISPLAY); } xnee_verbose((xd, "Adding Display - does the display/host have XTest\n")); if( XTestQueryExtension(dpy, &xtest_event_basep, &xtest_error_basep, &xtest_version_major, &xtest_version_minor) == 0) { xnee_print_error ("XTest extension missing on display %s \n", disp_str); return (XNEE_NO_TEST_EXT); } xnee_verbose ((xd, " XTest Release on \"%s\" %d.%d\n", disp_str, xtest_version_major, xtest_version_minor)); xnee_verbose ((xd, " -- resolution to 0\n")); if ( (xd!=NULL) && (xd->distr_list != NULL ) ) { xd->distr_list[xd->distr_list_size].is_used=0; xd->distr_list[xd->distr_list_size].res.x_res=DisplayWidth (dpy, 0); xd->distr_list[xd->distr_list_size].res.y_res=DisplayHeight (dpy, 0); xd->distr_list[xd->distr_list_size].dpy=dpy; xnee_verbose ((xd, "cheking if resolution differs\n")); if (xnee_res_cmp(&xd->distr_list[xd->distr_list_size].res, &xd->res_info.record)==0) { xnee_verbose ((xd, " -- resolution differs\n")); xd->distr_list[xd->distr_list_size].is_used=1; } xd->distr_list_size++; } else { return (XNEE_MEMORY_FAULT); } return (XNEE_OK); } /************************************************************** * * * xnee_add_display * * * * * **************************************************************/ int xnee_add_display (Display *dpy, xnee_data* xd) { int xtest_event_basep = 0; int xtest_error_basep = 0; int xtest_version_major = 0; int xtest_version_minor = 0; xnee_verbose((xd, "Adding Display \"%p\" to distribution list\n", (void*) dpy)); if (xd->distr_list_size==0) { xd->distr_list = (xnee_distr *) calloc (1,sizeof (Display)); } else { xnee_distr *tmp = xd->distr_list; xd->distr_list = (xnee_distr *) realloc (xd->distr_list, xd->distr_list_size); if (xd->distr_list==NULL) { /*@ignore@*/ xd->distr_list = tmp; /*@end@*/ tmp = NULL; return XNEE_MEMORY_FAULT; } } /*@ignore@*/ XTestGrabControl (dpy, True); /*@end@*/ if( XTestQueryExtension(dpy, &xtest_event_basep, &xtest_error_basep, &xtest_version_major, &xtest_version_minor) == 0) { xnee_print_error ("XTest extension missing on display %p \n", (void*)dpy); return (XNEE_NO_TEST_EXT); } xnee_verbose ((xd, " XTest Release on \"%p\" %d.%d\n", (void*)dpy, xtest_version_major, xtest_version_minor)); if ( (xd != NULL) && (xd->distr_list != NULL) ) { xd->distr_list[xd->distr_list_size].dpy=dpy; xd->distr_list_size++; } else { return (XNEE_MEMORY_FAULT); } return (XNEE_OK); } xnee-3.19/libxnee/src/xnee_xinput.c0000664000000000000000000003503011773013205014225 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2010, 2011, 2012 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_xinput.h" #define XNEE_XINPUT_PRINT_MASTER_OR_SLAVE(xd, devid, fd) \ if ( ! xd->xi_data.xi_devices[devid].is_slave) \ fprintf (fd, "%d", XNEE_PROTO_XINPUT_EVENT_MASTER); \ else \ fprintf (fd, "%d", XNEE_PROTO_XINPUT_EVENT_SLAVE); #define XNEE_XINPUT_IS_SLAVE(xd, devid) \ xd->xi_data.xi_devices[devid].is_slave #ifdef XNEE_XINPUT_SUPPORT int xnee_init_xinput(xnee_data *xd) { if ( xd==NULL ) { return -1; } xd->xi_data.forced_core_replay = 0; xd->xi_data.recording_enabled = 1; return XNEE_OK; } int xnee_init_xinput_devices(xnee_data *xd) { int major = XI_2_Major; int minor = XI_2_Minor; int nr_of_devices; int i; XIDeviceInfo *xi_info, *dev; static int already_done = 0; if ( (xd==NULL) || (xd->control==NULL) ) { return -1; } if (already_done != 0) { return XNEE_OK; } if (XIQueryVersion(xd->control, &major, &minor) != Success || (major * 1000 + minor) < (XI_2_Major * 1000 + XI_2_Minor)) { if (major < XI_2_Major ) { fprintf(stderr, "XI2 not supported\n"); return EXIT_FAILURE; } else { fprintf(stderr, "XI2 may not be supported (minor: %d/%d)\n", minor, XI_2_Minor); } } xi_info = XIQueryDevice(xd->control, XIAllDevices, &nr_of_devices); for(i = 0; i < nr_of_devices; i++) { dev = &xi_info[i]; xd->xi_data.xi_devices[dev->deviceid].name = strdup(dev->name); xd->xi_data.xi_devices[dev->deviceid].deviceid = dev->deviceid; xd->xi_data.xi_devices[dev->deviceid].device = NULL ; if (dev->use == XIMasterPointer || dev->use == XIMasterKeyboard) { xd->xi_data.xi_devices[dev->deviceid].is_slave = 0; } else { xd->xi_data.xi_devices[dev->deviceid].is_slave = 1; } } xd->xi_data.nr_of_xi_devices = nr_of_devices; XIFreeDeviceInfo(xi_info); already_done = 1 ; return 0; } XDevice * xnee_get_xinput_device(xnee_data *xd, int deviceid) { int count; int i; int dev_pointer; XDeviceInfo *dev_info; XDevice *xdevice = NULL ; xnee_verbose((xd, "---> xnee_get_xinput_device\n")); if ( xd->xi_data.xi_devices[deviceid].device == NULL ) { if (!(dev_info = XListInputDevices(xd->fake, &count)) || !count) { fprintf(stderr, "Cannot list input devices\n"); return NULL; } xnee_verbose((xd, "--- xnee_get_xinput_device count=%d\n", count)); dev_pointer = 0; for (i = 0; i < count; i++) { xnee_verbose((xd, "pointer: %d %d (%d) [%d %d ]\n", i, (int)dev_info[i].id, (int)deviceid, (int)xd->xi_data.xi_devices[i].deviceid, (int)xd->xi_data.nr_of_xi_devices)); if ( dev_info[i].id == deviceid) { dev_pointer = i; xdevice = XOpenDevice(xd->fake, dev_info[dev_pointer].id); xd->xi_data.xi_devices[deviceid].device=xdevice; break; } } XFreeDeviceList(dev_info); } xnee_verbose((xd, "<--- xnee_get_xinput_device\n")); /* we may return NULL, so make sure to check */ return xd->xi_data.xi_devices[deviceid].device; } int xnee_get_xinput_event_base(Display *dpy) { int ret; int ext_op; static int ext_fi_ev = 0 ; int ext_fi_er; if ( ext_fi_ev == 0) { if ( dpy == NULL ) { dpy = XOpenDisplay(NULL); } if ( dpy == NULL ) { return -1; } ret = XQueryExtension(dpy, XNEE_XINPUT_EXTENSION_NAME, &ext_op, &ext_fi_ev, &ext_fi_er); if ( ! ret ) { return -1; } } return ext_fi_ev; } int xnee_has_xinput(xnee_data *xd) { if (xd==NULL) { return -1; } if ( xd->xi_data.xinput_event_base <= 0 ) { return 0; } return 1; } int xnee_handle_xinput_event(xnee_data * xd, int event_type, XRecordDatum *xrec_data, Time server_time) { static saved_xinput_event sxe; static int valuator_counter = 0; int event_base; FILE *out ; if (xd == NULL ) { return XNEE_NO_MAIN_DATA; } if (xnee_xinput_disabled(xd)) { return XNEE_OK; } out = xd->out_file; /* printf ("\nXI HE base=%d event_type=%d last:%d \n",xd->xi_data.xinput_event_base, event_type, sxe.type); */ event_base = xd->xi_data.xinput_event_base; /* * Are we using Xinput * AND * the event is a xinput device event */ if ( ( event_base > 0 ) && ( event_type > event_base ) && ( event_type <= (event_base + 6) )) { /* printf ("XI XI :: "); */ int ordinary_event_nr ; deviceKeyButtonPointer *e; e = (deviceKeyButtonPointer *) &xrec_data->event ; xnee_verbose((xd, "handle xi:: dev-id%d type:%d ", e->deviceid, event_type)); ordinary_event_nr = event_type - event_base + 1; sxe.type = ordinary_event_nr ; /* printf ("%d \n", ordinary_event_nr); */ /* printf ("GOT %d | detail: %d saved=%d\n", ordinary_event_nr, xrec_data->event.u.u.detail, sxe.type); */ /* MotionEvent */ if ( ordinary_event_nr == MotionNotify) { sxe.x = xrec_data->event.u.keyButtonPointer.rootX; sxe.y = xrec_data->event.u.keyButtonPointer.rootY; sxe.time = xrec_data->event.u.keyButtonPointer.time; /* printf ("XI2 Motion (%d/%d): root: %dx%d XI:%dx%d | xy:%dx%d axes:%d/%d %d %d %d %d %d %d \n", ((XDeviceMotionEvent*)&xrec_data->event)->type, ((XDeviceMotionEvent*)&xrec_data->event)->deviceid, xrec_data->event.u.keyButtonPointer.rootX, xrec_data->event.u.keyButtonPointer.rootY, ((XDeviceMotionEvent*)&xrec_data->event)->x_root, ((XDeviceMotionEvent*)&xrec_data->event)->y_root, ((XDeviceMotionEvent*)&xrec_data->event)->x, ((XDeviceMotionEvent*)&xrec_data->event)->y, ((XDeviceMotionEvent*)&xrec_data->event)->first_axis, ((XDeviceMotionEvent*)&xrec_data->event)->axes_count, ((XDeviceMotionEvent*)&xrec_data->event)->axis_data[0], ((XDeviceMotionEvent*)&xrec_data->event)->axis_data[1], ((XDeviceMotionEvent*)&xrec_data->event)->axis_data[2], ((XDeviceMotionEvent*)&xrec_data->event)->axis_data[3], ((XDeviceMotionEvent*)&xrec_data->event)->axis_data[4], ((XDeviceMotionEvent*)&xrec_data->event)->axis_data[5] ); */ /* * Rest of the data is sent in an Devicevaluator event, * store what we have and continue */ } /* ButtonPress / ButtonRelease */ else if ( ( ordinary_event_nr == ButtonPress) || ( ordinary_event_nr == ButtonRelease) ) { XNEE_XINPUT_PRINT_MASTER_OR_SLAVE(xd, e->deviceid, out); fprintf (out, ",%u,0,0,%d,0,0,%lu,%d,%s\n", sxe.type, xrec_data->event.u.u.detail, xrec_data->event.u.keyButtonPointer.time, /* sxe.time, */ e->deviceid, xd->xi_data.xi_devices[e->deviceid].name); } else if ( ( ordinary_event_nr == KeyPress) || ( ordinary_event_nr == KeyRelease) ) { XNEE_XINPUT_PRINT_MASTER_OR_SLAVE(xd, e->deviceid, out); fprintf (out, ",%u,0,0,0,%d,0,%lu,%d,%s\n", ordinary_event_nr, e->detail , server_time, /* sxe.time, */ e->deviceid, xd->xi_data.xi_devices[e->deviceid].name); } } else if ( event_type == event_base) { /* printf (" -:: SAME ::- "); */ /* * * DaviceValuator event * */ deviceValuator *e; e = (deviceValuator *) &xrec_data->event ; valuator_counter++; /* printf ("deviceValuator: %d %d (%d), %d, %d (%d %d %d %d %d %d) sxe.type=%d\n", e->type, e->deviceid, sxe.deviceid, e->num_valuators, e->first_valuator, e->valuator0, e->valuator1, e->valuator2, e->valuator3, e->valuator4, e->valuator5, sxe.type ); */ if ( valuator_counter < e->num_valuators ) { xnee_verbose((xd, " valuator not printed %d / %d \n", valuator_counter , e->num_valuators )); /* return XNEE_OK; */ } valuator_counter = 0 ; if ( sxe.type == MotionNotify ) { if (XNEE_XINPUT_IS_SLAVE(xd, e->deviceid)) { XNEE_XINPUT_PRINT_MASTER_OR_SLAVE(xd, e->deviceid, out); fprintf (out, ",%d,%d,%d,0,0,0,%lu,%d,'%s'\n", sxe.type, /* (int)e->valuator0, */ /* (int)e->valuator1, */ sxe.x, sxe.y, server_time, /* sxe.time, */ e->deviceid, xd->xi_data.xi_devices[e->deviceid].name); } } else { fprintf (stderr, "WARNING: Enough valuators," "but non motion/button event (%d) so not printing\n", sxe.type); return -1; } sxe.x = 0; sxe.y = 0; sxe.button = 0 ; } else { fprintf (stderr, "WARNING: Enough valuators ... Xnee believes this to not be a valid XI event\n"); return -1; } return XNEE_OK; } int xnee_handle_xinput_event_human(xnee_data * xd, int event_type, XRecordDatum *xrec_data, Time server_time) { static saved_xinput_event sxe; FILE *out ; if (xd == NULL ) { return XNEE_NO_MAIN_DATA; } if (xnee_xinput_disabled(xd)) { return XNEE_OK; } out = xd->out_file; /* * Are we using Xinput * AND * the event is a xinput device event */ if ( ( xd->xi_data.xinput_event_base > 0 ) && ( event_type > xd->xi_data.xinput_event_base ) && ( event_type <= (xd->xi_data.xinput_event_base + 6) )) { int ordinary_event_nr ; deviceKeyButtonPointer *e; e = (deviceKeyButtonPointer *) &xrec_data->event ; ordinary_event_nr = event_type - xd->xi_data.xinput_event_base + 1; sxe.type = ordinary_event_nr ; /* MotionEvent */ if ( ordinary_event_nr == MotionNotify) { sxe.x = xrec_data->event.u.keyButtonPointer.rootX; sxe.y = xrec_data->event.u.keyButtonPointer.rootY; sxe.time = xrec_data->event.u.keyButtonPointer.time; /* * Rest of the data is sent in an Devicevaluator event, * store what we have and continue */ } /* ButtonPress / ButtonRelease */ else if ( ( ordinary_event_nr == ButtonPress) || ( ordinary_event_nr == ButtonRelease) ) { XNEE_XINPUT_PRINT_MASTER_OR_SLAVE(xd, e->deviceid, out); } else if ( ( ordinary_event_nr == KeyPress) || ( ordinary_event_nr == KeyRelease) ) { XNEE_XINPUT_PRINT_MASTER_OR_SLAVE(xd, e->deviceid, out); fprintf (out, ",%u,0,0,0,%d,0,%lu,%d,%s\n", ordinary_event_nr, e->detail , sxe.time, e->deviceid, xd->xi_data.xi_devices[e->deviceid].name); } } else if ( event_type == xd->xi_data.xinput_event_base) { /* * * DaviceValuator event * */ deviceValuator *e; e = (deviceValuator *) &xrec_data->event ; /* printf ("deviceValuator: %d %d (%d), %d, %d (%d %d %d %d %d %d) sxe.type=%d\n", e->type, e->deviceid, sxe.deviceid, e->num_valuators, e->first_valuator, e->valuator0, e->valuator1, e->valuator2, e->valuator3, e->valuator4, e->valuator5, sxe.type ); */ if ( sxe.type == MotionNotify ) { XNEE_XINPUT_PRINT_MASTER_OR_SLAVE(xd, e->deviceid, out); (void)xd->data_fp (xd->out_file, ",XInput Event=%s Number=%d ", xd->xi_data.xi_devices[e->deviceid].name, sxe.type); (void)xd->data_fp (xd->out_file,"\n"); sxe.x = 0; sxe.y = 0; sxe.button = 0 ; } } else { return -1; } return XNEE_OK; } int xnee_xinput_add_devices(xnee_data *xd) { int xinput_ev_base; #define XI_BUF_SIZE 100 char buf[XI_BUF_SIZE+1]; if ( xd->xi_data.xinput_event_base == 0 ) { return XNEE_OK; } xnee_init_xinput_devices(xd); xinput_ev_base = xnee_get_xinput_event_base(NULL); if ( xinput_ev_base == -1 ) { fprintf(xd->err_file, "Failed to initialize xinput implementation\n"); fprintf(xd->err_file, "Will not use XInput event\n"); } if ( xnee_xinput_keyboard_requested(xd) && xnee_xinput_mouse_requested(xd) ) { snprintf(buf, XI_BUF_SIZE, "%d-%d", xinput_ev_base, xinput_ev_base+5); } else if ( xnee_xinput_mouse_requested(xd)) { snprintf(buf, XI_BUF_SIZE, "%d,%d-%d", xinput_ev_base, xinput_ev_base+3, xinput_ev_base+5); } else if ( xnee_xinput_keyboard_requested(xd)) { snprintf(buf, XI_BUF_SIZE, "%d-%d", xinput_ev_base+1, xinput_ev_base+2); } xnee_parse_range (xd, XNEE_DEVICE_EVENT, buf); return XNEE_OK; } #else /* XNEE_XINPUT_SUPPORT */ int xnee_init_xinput(xnee_data *xd) { return XNEE_OK; } int xnee_init_xinput_devices(xnee_data *xd) { return XNEE_OK; } int xnee_get_xinput_event_base(Display *dpy) { return XNEE_OK; } int xnee_has_xinput(xnee_data *xd) { return -1; } int xnee_handle_xinput_event(xnee_data * xd, int event_type, XRecordDatum *xrec_data, Time server_time) { return XNEE_OK; } int xnee_xinput_add_devices(xnee_data *xd) { return XNEE_OK; } int xnee_handle_xinput_event_human(xnee_data * xd, int event_type, XRecordDatum *xrec_data, Time server_time) { return XNEE_OK; } #endif /* XNEE_XINPUT_SUPPORT */ xnee-3.19/libxnee/src/xnee_keysym.c0000664000000000000000000003413211461645745014237 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, * 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_keysym.h" #include "libxnee/xnee_km.h" int masks[] = { 0, ShiftMask, ControlMask, LockMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask, -1 } ; int xnee_token_to_km (xnee_data *xd, int keycode, const char *str, xnee_key_code *kc); KeyCode xnee_keysym2keycode(xnee_data* xd, KeySym ks, char * str, xnee_key_code *kc); KeyCode xnee_str2keycode(xnee_data* xd, const char *str, xnee_key_code *kc) { const char *tmp; if (xd->fake==NULL) return -1; tmp = xnee_symbolic_modifier2modifier(xd, str); if (tmp!=NULL) { str=tmp; } /* Xnee special syntax */ if (strncmp(str, XNEE_XK_SPACE, strlen(XNEE_XK_SPACE))==0) { kc->kc = XKeysymToKeycode(xd->fake, XK_space); } else if (strncmp(str, XNEE_XK_RETURN, strlen(XNEE_XK_RETURN))==0) { kc->kc = XKeysymToKeycode(xd->fake, XK_Return); } else if (strncmp(str, XNEE_XK_ALT_L, strlen(XNEE_XK_ALT_L))==0) { kc->kc = XKeysymToKeycode(xd->fake, XK_Alt_L); } else if (strncmp(str, XNEE_XK_UP, strlen(XNEE_XK_UP))==0) { kc->kc = XKeysymToKeycode(xd->fake, XK_Up); } else if (strncmp(str, XNEE_XK_DOWN, strlen(XNEE_XK_DOWN))==0) { kc->kc = XKeysymToKeycode(xd->fake, XK_Down); } else if (strncmp(str, XNEE_XK_LEFT, strlen(XNEE_XK_LEFT))==0) { kc->kc = XKeysymToKeycode(xd->fake, XK_Left); } else if (strncmp(str, XNEE_XK_RIGHT, strlen(XNEE_XK_RIGHT))==0) { kc->kc = XKeysymToKeycode(xd->fake, XK_Right); } else { kc->kc = XKeysymToKeycode(xd->fake,XStringToKeysym(str)); } if (kc!=NULL) { xnee_token_to_km (xd, kc->kc, str, kc); } return kc->kc; } KeyCode xnee_keysym2keycode(xnee_data* xd, KeySym ks, char * str, xnee_key_code *kc) { if (xd->fake==NULL) return -1; kc->kc = XKeysymToKeycode(xd->fake, ks); xnee_token_to_km (xd,kc->kc,str,kc); return kc->kc; } int xnee_token_to_km (xnee_data *xd, int keycode, const char *str, xnee_key_code *kc) { #define TOKEN_STRING_SIZE 20 XEvent event; int size; int i ; int k ; int ret=-1; char string[TOKEN_STRING_SIZE]; KeySym keysym; Display *dpy = xd->fake; xnee_verbose((xd, "Finding km for %s\n", str)); memset (kc->mod_keycodes, 0, XNEE_NR_OF_MODIFIERS * sizeof(KeyCode)); for (i=0;masks[i]!=-1;i++) { event.xkey.type = KeyPress; event.xkey.display = dpy ; event.xkey.time = CurrentTime; event.xkey.x = event.xkey.y = 0; event.xkey.x_root = event.xkey.y_root = 0; event.xkey.state = masks[i]; event.xkey.keycode = keycode; size = XLookupString ((XKeyEvent *) &event, string, 20, &keysym, 0); string [size] = 0; if (strncmp(str,string, TOKEN_STRING_SIZE)==0) { KeySym ks ; char *nm ; xnee_verbose((xd, " i=%d\n", i )); xnee_verbose((xd, " xd=%p\n", (void*)xd )); xnee_verbose((xd, " map=%p\n", (void*)xd->map )); xnee_verbose((xd, " max_keypermod=%d\n" ,xd->map->max_keypermod )); k = (i-1)*xd->map->max_keypermod ; xnee_verbose((xd, " k=%d\n", k )); ks = XKeycodeToKeysym(dpy, xd->map->modifiermap[k], 0); nm = XKeysymToString(ks); if ( ( nm != NULL ) && strncmp(nm, "Mode_switch", strlen("Mode_switch")) == 0 ) { ks = XStringToKeysym("ISO_Level3_Shift"); kc->mod_keycodes[0] = XKeysymToKeycode(dpy, ks); } else { if ( (k>=0) && (i>=0 ) ) { kc->mod_keycodes[0] = xd->map->modifiermap[k]; } } /* printf(" ------------------------------------------------------> Found. %d\n", kc->mod_keycodes[0]); */ ret = XNEE_OK ; break; } } return ret; } KeyCode xnee_char2keycode (xnee_data *xd, char token, xnee_key_code *kc) { char buf[2]; volatile KeySym ks = 0 ; if (xd->fake==NULL) { return -1; } memset(kc,0,sizeof(xnee_key_code)); buf[0]=token; buf[1]=0; switch( token) { /* XK_0 --- XK_9 is skipped and solved elsewhere */ /* XK_A --- XK_Z is skipped and solved elsewhere */ /* XK_a --- XK_z is skipped and solved elsewhere ... below */ case ' ': ks=XK_space; break; case '!': ks=XK_exclam; break; /* case '!': */ /* ks=XK_exclamdown; */ /* break; */ case '\"': ks=XK_quotedbl; break; case '#': ks=XK_numbersign; break; case '$': ks=XK_dollar; break; case '%': ks=XK_percent; break; case '&': ks=XK_ampersand; break; case '(': ks=XK_parenleft; break; case ')': ks=XK_parenright; break; case '+': ks=XK_plus; break; case ',': ks=XK_comma; break; case '-': ks=XK_minus; break; case '.': ks=XK_period; break; case '/': ks=XK_slash; break; case ':': ks=XK_colon; break; case ';': ks=XK_semicolon; break; case '<': ks=XK_less; break; case '=': ks=XK_equal; break; case '>': ks=XK_greater; break; case '?': ks=XK_question; break; case '@': ks=XK_at; break; case '*': ks=XK_asterisk; break; case '\\': ks=XK_backslash; break; case '[': ks=XK_bracketleft; break; case ']': ks=XK_bracketright; break; case '^': ks=XK_asciicircum; break; case '_': ks=XK_underscore; break; case '`': ks=XK_grave; break; case '': ks=XK_quoteleft; break; case '\'': ks=XK_quoteright; break; case 27: ks=XK_apostrophe; break; case '{': ks=XK_braceleft; break; case '}': ks=XK_braceright; break; case '|': ks=XK_bar; break; case '\n': ks=XK_Return; break; case '\t': ks=XK_Tab; break; case '~': ks=XK_asciitilde; break; default: break; } if ( ks != 0) { xnee_keysym2keycode(xd, ks, buf, kc); } else { xnee_str2keycode(xd, buf, kc); } return XNEE_OK; } #ifdef KEYSYMS_TO_USE_LATER case -9: ks=XK_nobreakspace; break; case -11: /* FIX ME */ ks=XK_cent; break; case -12: /* FIX ME */ ks=XK_sterling; break; case -13: /* FIX ME */ ks=XK_currency; break; case -14: /* FIX ME */ ks=XK_yen; break; case -15: /* FIX ME */ ks=XK_brokenbar; break; case -16: /* FIX ME */ ks=XK_section; break; case -17: /* FIX ME */ ks=XK_diaeresis; break; case -18: /* FIX ME */ ks=XK_copyright; break; case -19: /* FIX ME */ ks=XK_ordfeminine; break; case -20: /* FIX ME */ ks=XK_guillemotleft; break; case -21: /* FIX ME */ ks=XK_notsign; break; case 'p': /* FIX ME */ ks=XK_hyphen; break; case -23: /* FIX ME */ ks=XK_registered; break; case -24: /* FIX ME */ ks=XK_macron; break; case -25: /* FIX ME */ ks=XK_degree; break; case -26: /* FIX ME */ ks=XK_plusminus; break; case -27: /* FIX ME */ ks=XK_twosuperior; break; case -28: /* FIX ME */ ks=XK_threesuperior; break; case -29: ks=XK_acute; break; case -30: /* FIX ME */ ks=XK_mu; break; case -31: /* FIX ME */ ks=XK_paragraph; break; case -32: /* FIX ME */ ks=XK_periodcentered; break; case -33: /* FIX ME */ ks=XK_cedilla; break; case -34: /* FIX ME */ ks=XK_onesuperior; break; case -35: /* FIX ME */ ks=XK_masculine; break; case -37: /* FIX ME */ ks=XK_onequarter; break; case -38: /* FIX ME */ ks=XK_onehalf; break; case -39: /* FIX ME */ ks=XK_threequarters; break; case -40: /* FIX ME */ ks=XK_questiondown; break; case 0: /* FIX ME */ ks=XK_Agrave; break; case 0: /* FIX ME */ ks=XK_Aacute; break; case 0: /* FIX ME */ ks=XK_Acircumflex; break; case 0: /* FIX ME */ ks=XK_Atilde; break; case 0: /* FIX ME */ ks=XK_Adiaeresis; break; case 0: /* FIX ME */ ks=XK_Aring; break; case 0: /* FIX ME */ ks=XK_AE; break; case 0: /* FIX ME */ ks=XK_Ccedilla; break; case 0: /* FIX ME */ ks=XK_Egrave; break; case 0: /* FIX ME */ ks=XK_Eacute; break; case 0: /* FIX ME */ ks=XK_Ecircumflex; break; case 0: /* FIX ME */ ks=XK_Ediaeresis; break; case 0: /* FIX ME */ ks=XK_Igrave; break; case 0: /* FIX ME */ ks=XK_Iacute; break; case 0: /* FIX ME */ ks=XK_Icircumflex; break; case 0: /* FIX ME */ ks=XK_Idiaeresis; break; case 0: /* FIX ME */ ks=XK_ETH; break; case 0: /* FIX ME */ ks=XK_Eth; break; case 0: /* FIX ME */ ks=XK_Ntilde; break; case 0: /* FIX ME */ ks=XK_Ograve; break; case 0: /* FIX ME */ ks=XK_Oacute; break; case 0: /* FIX ME */ ks=XK_Ocircumflex; break; case 0: /* FIX ME */ ks=XK_Otilde; break; case 0: /* FIX ME */ ks=XK_Odiaeresis; break; case 0: /* FIX ME */ ks=XK_multiply; break; case 0: /* FIX ME */ ks=XK_Ooblique; break; case 0: /* FIX ME */ ks=XK_Oslash; break; case 0: /* FIX ME */ ks=XK_Ugrave; break; case 0: /* FIX ME */ ks=XK_Uacute; break; case 0: /* FIX ME */ ks=XK_Ucircumflex; break; case 0: /* FIX ME */ ks=XK_Udiaeresis; break; case 0: /* FIX ME */ ks=XK_Yacute; break; case 0: /* FIX ME */ ks=XK_THORN; break; case 0: /* FIX ME */ ks=XK_Thorn; break; case 0: /* FIX ME */ ks=XK_ssharp; break; case 0: /* FIX ME */ ks=XK_agrave; break; case 0: /* FIX ME */ ks=XK_aacute; break; case 0: /* FIX ME */ ks=XK_acircumflex; break; case 0: /* FIX ME */ ks=XK_atilde; break; case 0: /* FIX ME */ ks=XK_adiaeresis; break; case 0: /* FIX ME */ ks=XK_aring; break; case 0: /* FIX ME */ ks=XK_ae; break; case 0: /* FIX ME */ ks=XK_ccedilla; break; case 0: /* FIX ME */ ks=XK_egrave; break; case 0: /* FIX ME */ ks=XK_eacute; break; case 0: /* FIX ME */ ks=XK_ecircumflex; break; case 0: /* FIX ME */ ks=XK_ediaeresis; break; case 0: /* FIX ME */ ks=XK_igrave; break; case 0: /* FIX ME */ ks=XK_iacute; break; case 0: /* FIX ME */ ks=XK_icircumflex; break; case 0: /* FIX ME */ ks=XK_idiaeresis; break; case 0: /* FIX ME */ ks=XK_eth; break; case 0: /* FIX ME */ ks=XK_ntilde; break; case 0: /* FIX ME */ ks=XK_ograve; break; case 0: /* FIX ME */ ks=XK_oacute; break; case 0: /* FIX ME */ ks=XK_ocircumflex; break; case 0: /* FIX ME */ ks=XK_otilde; break; case 0: /* FIX ME */ ks=XK_odiaeresis; break; case 0: /* FIX ME */ ks=XK_division; break; case 0: /* FIX ME */ ks=XK_oslash; break; case 0: /* FIX ME */ ks=XK_ooblique; break; case 0: /* FIX ME */ ks=XK_ugrave; break; case 0: /* FIX ME */ ks=XK_uacute; break; case 0: /* FIX ME */ ks=XK_ucircumflex; break; case 0: /* FIX ME */ ks=XK_udiaeresis; break; case 0: /* FIX ME */ ks=XK_yacute; break; case 0: /* FIX ME */ ks=XK_thorn; break; case 0: /* FIX ME */ ks=XK_ydiaeresis; break; case 0: /* FIX ME */ ks=XK_guillemotright; break; #endif xnee-3.19/libxnee/src/xnee_time.c0000664000000000000000000003320111671473640013644 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_time.h" #include "libxnee/xnee_buffer.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_dl.h" /************************************************************** * * * xnee_get_elapsed_time * * * * * **************************************************************/ static unsigned long last_read_msecec = 0; static unsigned long last_read_sec = 0; static unsigned long first_read_msecec = 0; static unsigned long first_read_sec = 0; int xnee_reset_elapsed_time(xnee_data *xd) { xnee_verbose ((xd, " --- xnee_reset_elapsed_time \n")); last_read_msecec = 0; last_read_sec = 0; first_read_msecec = 0; first_read_sec = 0; return XNEE_OK; } long xnee_get_elapsed_time(xnee_data *xd, char type ) { long last_sec; long last_msec; long diff_sec; long diff_msec; long time_offset_msec = 0; struct timeval cur_time; struct timezone zoneData; xnee_verbose ((xd, " --- xnee_get_elapsed_time\n")); /* determine what value to get difference from */ if ( type == XNEE_FROM_LAST_READ ) { last_sec = last_read_sec; last_msec = last_read_msecec; } else { last_sec = first_read_sec; last_msec = first_read_msecec; } /* get current time */ if( gettimeofday( &cur_time, &zoneData) == 0 ) { /* get difference between now and last */ diff_sec = cur_time.tv_sec - last_sec; diff_msec = (cur_time.tv_usec/1000) - last_msec; /* convert diff to msec */ time_offset_msec = (diff_sec * XNEE_MSEC_PER_SEC) + diff_msec; /* if first time through - save values and return XNEE_OK */ if ( last_sec == 0 ) { last_read_msecec = cur_time.tv_usec/1000; last_read_sec = cur_time.tv_sec; first_read_msecec = cur_time.tv_usec/1000; first_read_sec = cur_time.tv_sec; /* xnee_verbose ((xd, "1st elapsed time:%c _sec _msec: %d %d timeoffeset = 0\n", */ /* type, cur_time.tv_sec, cur_time.tv_usec )); */ return XNEE_OK; } /* update last_read values with the new time */ if ( type == XNEE_FROM_LAST_READ ) { last_read_msecec = cur_time.tv_usec/1000; last_read_sec = cur_time.tv_sec; } /* xnee_verbose ((xd, "elapsed time type:%c current time _sec _msec: %d %d time_offset_msec: %d\n", */ /* type, cur_time.tv_sec, cur_time.tv_usec, time_offset_msec )); */ return time_offset_msec; } /* Shouldn't reach this point.... silent the compiler */ return 0; } /************************************************************** * * * xnee_calc_sleep_amount * * * * * **************************************************************/ long xnee_calc_sleep_amount(xnee_data *xd, unsigned long last_diff, unsigned long first_diff, unsigned long record_last_diff, unsigned long recordFirst_diff ) { /* Time sleep_amt; */ unsigned long out_of_wack_amt = 0; int out_of_wack = 0; float tmp; float start_diff_percent ; float compensation_factor ; float sleep_amt ; static unsigned long stored_recordFirst_diff; xnee_verbose ((xd, "xnee_calc_sleep_amount last_diff: %lu first_diff: %lu record_last_diff:" "%lu recordFirst_diff: %lu\n", last_diff, first_diff, record_last_diff, recordFirst_diff )); if ( stored_recordFirst_diff != 0 ) { start_diff_percent = ((double)stored_recordFirst_diff / (double) first_diff); if ( start_diff_percent < 0.99 ) { if ( start_diff_percent < 0.70 ) { compensation_factor=0.5; } else if ( start_diff_percent < 0.80 ) { compensation_factor=0.8; } else { compensation_factor=0.9; } } else if ( start_diff_percent > 1.01 ) { if ( start_diff_percent > 1.3 ) { compensation_factor=1.5; } else if ( start_diff_percent > 1.2 ) { compensation_factor=1.2; } else { compensation_factor=1.1; } } else { compensation_factor=1.0; } } else { compensation_factor=1.0; } /* compensation_factor=1.0; */ sleep_amt= (record_last_diff*compensation_factor); if (sleep_amt > 5.0) { sleep_amt = sleep_amt - 1.0; } stored_recordFirst_diff = recordFirst_diff; return ( sleep_amt ); /* printf ("\n\t%d compensation: %f \n\n", record_last_diff, compensation_factor); */ return record_last_diff*compensation_factor; /* determine where we are from first read * either too fast or too slow */ if (recordFirst_diff > first_diff) { out_of_wack=1; } else if (recordFirst_diff < first_diff) { out_of_wack=-1; } /* else we keep =0 */ if ( out_of_wack==1 ) { xnee_verbose (( xd, "xnee_calc_sleep_amount: too fast\n" )); /* too fast - we should slow down a bit */ if ( record_last_diff > last_diff ) { xnee_verbose (( xd, "xnee_calc_sleep_amount: too fast 1\n" )); /* recorded wait more than we have waited so far */ /* find amount that we are too fast or too slow */ out_of_wack_amt = recordFirst_diff - first_diff; /* if the amount we are out of wack is more than the recorded wait */ /* then sleep the full recorded difference */ if ( out_of_wack_amt > record_last_diff ) { xnee_verbose (( xd, "xnee_calc_sleep_amount: 1.1\n" )); // sleep_amt = record_last_diff; sleep_amt = out_of_wack_amt ; } else { xnee_verbose (( xd, "xnee_calc_sleep_amount: 1.2\n" )); /* otherwise sleep the amount out of wack */ sleep_amt = out_of_wack_amt; } } else { xnee_verbose (( xd, "xnee_calc_sleep_amount: too fast 2 \n" )); /* we have already waited the recorded amount of time */ /* but since we are still too fast - sleep a percentage of recorded wait time */ tmp = (float)record_last_diff * XNEE_TOO_FAST_ADJ_PERCENTAGE/100; sleep_amt = ( long ) tmp; } } else if ( out_of_wack == -1 ) { xnee_verbose (( xd, "xnee_calc_sleep_amount: too slown" )); if ( record_last_diff > last_diff ) { /* recorded wait more than we have waited so far */ /* amount of wait left */ sleep_amt = (record_last_diff - last_diff) / 8 ; } else { /* we have already waited the recorded amount of time */ sleep_amt = 0; } } else { xnee_verbose (( xd, "xnee_calc_sleep_amount: on time\n" )); sleep_amt=2; } xnee_verbose (( xd, "xnee_calc_sleep_amount: %d\n", (int)sleep_amt )); return ( sleep_amt ); } /************************************************************** * * * xnee_calc_sleep_amount * * * * * **************************************************************/ long xnee_calc_sleep_amount_slow(xnee_data *xd, unsigned long last_diff, unsigned long first_diff, unsigned long record_last_diff, unsigned long recordFirst_diff ) { Time sleep_amt; unsigned long out_of_wack_amt = 0; int out_of_wack = 0; float tmp; recordFirst_diff = recordFirst_diff * xnee_get_speed(xd) / 100; record_last_diff = record_last_diff * xnee_get_speed(xd) / 100; xnee_verbose ((xd, "xnee_calc_sleep_amount_slow last_diff: %lu first_diff: %lu record_last_diff: %lu recordFirst_diff: %lu\n", last_diff, first_diff, record_last_diff, recordFirst_diff )); /* printf ("xnee_calc_sleep_amount last_diff: %lu first_diff: %lu record_last_diff: %lu recordFirst_diff: %lu\t", */ /* last_diff, first_diff, record_last_diff, recordFirst_diff ); */ /* determine where we are from first read * either too fast or too slow */ if (recordFirst_diff > first_diff) { out_of_wack=1; } else if (recordFirst_diff < first_diff) { out_of_wack=-1; } /* else we keep =0 */ if ( out_of_wack==1 ) { /* too fast - we should slow down a bit */ if ( record_last_diff > last_diff ) { /* recorded wait more than we have waited so far */ /* find amount that we are too fast or too slow */ out_of_wack_amt = recordFirst_diff - first_diff; /* if the amount we are out of wack is more than the recorded wait */ /* then sleep the full recorded difference */ if ( out_of_wack_amt > record_last_diff ) { sleep_amt = record_last_diff; } else { /* otherwise sleep the amount out of wack */ sleep_amt = out_of_wack_amt; } } else { /* we have already waited the recorded amount of time */ /* but since we are still too fast - sleep a percentage of recorded wait time */ tmp = (float)record_last_diff * XNEE_TOO_FAST_ADJ_PERCENTAGE/100; sleep_amt = ( long ) tmp; } } else if ( out_of_wack == -1 ) { if ( record_last_diff > last_diff ) { /* recorded wait more than we have waited so far */ /* amount of wait left */ sleep_amt = (record_last_diff - last_diff) / 8 ; } else { /* we have already waited the recorded amount of time */ sleep_amt = 0; } } else { sleep_amt=0; } /* printf ("xnee_calc_sleep_amount: %d\n", (int)sleep_amt); */ xnee_verbose (( xd, "xnee_calc_sleep_amount: %d\n", (int)sleep_amt )); return ( sleep_amt ); } /************************************************************** * * * xnee_calc_sleep_amount * * * * * **************************************************************/ long xnee_calc_sleep_amount_fast(xnee_data *xd, unsigned long last_diff, unsigned long first_diff, unsigned long record_last_diff, unsigned long recordFirst_diff ) { Time sleep_amt; unsigned long out_of_wack_amt = 0; int out_of_wack = 0; recordFirst_diff = recordFirst_diff * xnee_get_speed(xd) / 100; record_last_diff = record_last_diff * xnee_get_speed(xd) / 100; /* determine where we are from first read * either too fast or too slow */ if (recordFirst_diff > first_diff) { out_of_wack=1; } else if (recordFirst_diff < first_diff) { out_of_wack=-1; } /* else we keep =0 */ if ( out_of_wack==1 ) { /* too fast - we should slow down a bit */ if ( record_last_diff > last_diff ) { /* recorded wait more than we have waited so far */ /* find amount that we are too fast or too slow */ out_of_wack_amt = recordFirst_diff - first_diff; /* if the amount we are out of wack is more than the * recorded wait then sleep the full recorded difference */ if ( out_of_wack_amt > record_last_diff ) { sleep_amt = record_last_diff ; } else { /* otherwise sleep the amount out of wack */ sleep_amt = out_of_wack_amt; } } else { /* we have already waited the recorded amount of time */ /* but since we are still too fast - sleep a percentage of recorded wait time */ sleep_amt = record_last_diff ; } } else if ( out_of_wack == -1 ) { /* we have already waited the recorded amount of time */ sleep_amt = 10; } else { /* right on time */ sleep_amt=0; } xnee_verbose (( xd, "xnee_calc_sleep_amount: %d\n", (int)sleep_amt )); return ( sleep_amt ); } xnee-3.19/libxnee/src/Makefile.in0000664000000000000000000006653412332167124013577 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 = : build_triplet = @build@ host_triplet = @host@ subdir = libxnee/src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/./autotools/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libxnee_la_LIBADD = am__objects_1 = am__objects_2 = xnee.lo print.lo print_varargs.lo xnee_record.lo \ xnee_replay.lo datastrings.lo xnee_sem.lo xnee_dl.lo \ xnee_setget.lo xnee_resolution.lo xnee_fake.lo xnee_km.lo \ xnee_grab.lo xnee_resource.lo xnee_time.lo xnee_callback.lo \ xnee_buffer.lo xnee_threshold.lo xnee_range.lo xnee_expr.lo \ xnee_error.lo xnee_keysym.lo xnee_strings.lo xnee_session.lo \ xnee_utils.lo xnee_alloc.lo xnee_fileop.lo xnee_display.lo \ xnee_settings.lo xnee_plugin.lo xnee_window.lo feedback.lo \ xnee_xinput.lo $(am__objects_1) am_libxnee_la_OBJECTS = $(am__objects_2) libxnee_la_OBJECTS = $(am_libxnee_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libxnee_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libxnee_la_LDFLAGS) $(LDFLAGS) -o $@ 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) depcomp = $(SHELL) $(top_srcdir)/./autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(libxnee_la_SOURCES) DIST_SOURCES = $(libxnee_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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 = gnu LIBXNEE_H_FILES = ../include/libxnee/xnee.h \ ../include/libxnee/print.h \ ../include/libxnee/xnee_error.h \ ../include/libxnee/print_varargs.h \ ../include/libxnee/xnee_record.h \ ../include/libxnee/xnee_replay.h \ ../include/libxnee/datastrings.h \ ../include/libxnee/xnee_sem.h \ ../include/libxnee/xnee_dl.h \ ../include/libxnee/xnee_setget.h \ ../include/libxnee/xnee_resolution.h \ ../include/libxnee/xnee_resource.h \ ../include/libxnee/xnee_time.h \ ../include/libxnee/xnee_km.h \ ../include/libxnee/xnee_callback.h \ ../include/libxnee/xnee_buffer.h \ ../include/libxnee/xnee_fake.h \ ../include/libxnee/xnee_grab.h \ ../include/libxnee/xnee_threshold.h \ ../include/libxnee/xnee_range.h \ ../include/libxnee/xnee_expr.h \ ../include/libxnee/xnee_keysym.h \ ../include/libxnee/xnee_strings.h \ ../include/libxnee/xnee_session.h \ ../include/libxnee/xnee_utils.h \ ../include/libxnee/xnee_alloc.h \ ../include/libxnee/xnee_fileop.h \ ../include/libxnee/xnee_display.h \ ../include/libxnee/xnee_settings.h \ ../include/libxnee/xnee_plugin.h \ ../include/libxnee/xnee_internal.h \ ../include/libxnee/xnee_window.h \ ../include/libxnee/x11_files.h \ ../include/libxnee/feedback.h \ ../include/libxnee/xnee_xinput.h LIB_XNEE_SOURCE_FILES = xnee.c \ print.c \ print_varargs.c \ xnee_record.c \ xnee_replay.c \ datastrings.c \ xnee_sem.c \ xnee_dl.c \ xnee_setget.c \ xnee_resolution.c \ xnee_fake.c \ xnee_km.c \ xnee_grab.c \ xnee_resource.c \ xnee_time.c \ xnee_callback.c \ xnee_buffer.c \ xnee_threshold.c \ xnee_range.c \ xnee_expr.c \ xnee_error.c \ xnee_keysym.c \ xnee_strings.c \ xnee_session.c \ xnee_utils.c \ xnee_alloc.c \ xnee_fileop.c \ xnee_display.c \ xnee_settings.c \ xnee_plugin.c \ xnee_window.c \ feedback.c \ xnee_xinput.c \ $(LIBXNEE_H_FILES) libxnee_la_SOURCES = $(LIB_XNEE_SOURCE_FILES) EXTRA_LTLIBRARIES = libxnee.la lib_LTLIBRARIES = $(WANTED_LIBXNEE) libxnee_la_LDFLAGS = -rpath '$(libdir)' #dnl libxnee_la_SOURCES = $(LIB_XNEE_SOURCE_FILES) libxnee_a_CFLAGS = $(AM_CFLAGS) #noinst_LIBRARIES = libxnee.a noinst_LTLIBRARIES = $(WANTED_LIBXNEE) @VERBOSE_FALSE@VERBOSE_FLAG = -DNO_VERBOSE @VERBOSE_TRUE@VERBOSE_FLAG = -DUSE_VERBOSE @GCOV_FALSE@GCOV_FLAG = @GCOV_TRUE@GCOV_FLAG = -fprofile-arcs -ftest-coverage -g @GPROF_FALSE@GPROF_FLAG = @GPROF_TRUE@GPROF_FLAG = -pg -g @XOSD_FALSE@XOSD_FLAGS = -DNO_XOSD @XOSD_TRUE@XOSD_FLAGS = -DHAVE_XOSD @BUF_VERBOSE_FALSE@BUF_VERBOSE_FLAG = -DNO_BUF_VERBOSE @BUF_VERBOSE_TRUE@BUF_VERBOSE_FLAG = -DUSE_BUF_VERBOSE @PEDANTIC_FALSE@PEDANTIC_FLAGS = @PEDANTIC_TRUE@PEDANTIC_FLAGS = -W -Wall -pedantic -pedantic-errors -Werror -fno-strict-aliasing -Wno-unused-parameter @XNEE_XINPUT_SUPPORT_FALSE@XNEE_XINPUT_SUPPORT_FLAGS = @XNEE_XINPUT_SUPPORT_TRUE@XNEE_XINPUT_SUPPORT_FLAGS = -DXNEE_XINPUT_SUPPORT AM_CFLAGS = -I../include ${X_CFLAGS} ${PEDANTIC_FLAGS} -g ${VERBOSE_FLAG} ${GCOV_FLAG} ${GPROF_FLAG} ${BUF_VERBOSE_FLAG} ${XOSD_FLAGS} ${DEBUG_FLAGS} ${XNEE_XINPUT_SUPPORT_FLAGS} HTML_SRC_FILES = $(libxnee_a_SOURCES:%.c=%.c.html) HTML_INC_FILES = $(LIBXNEE_H_FILES:%.h=%.h.html) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libxnee/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libxnee/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libxnee.la: $(libxnee_la_OBJECTS) $(libxnee_la_DEPENDENCIES) $(EXTRA_libxnee_la_DEPENDENCIES) $(AM_V_CCLD)$(libxnee_la_LINK) $(libxnee_la_OBJECTS) $(libxnee_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/datastrings.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/feedback.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print_varargs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_alloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_buffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_callback.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_display.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_dl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_expr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_fake.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_fileop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_grab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_keysym.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_km.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_plugin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_range.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_record.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_replay.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_resolution.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_resource.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_sem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_session.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_setget.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_settings.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_strings.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_threshold.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_time.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_window.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnee_xinput.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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 $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done @NOT_INSTALL_LIBS_FALSE@install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-exec-local install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-exec-local install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES @NOT_INSTALL_LIBS_TRUE@install-exec-local: @NOT_INSTALL_LIBS_TRUE@ echo " ... not installing libs" @NOT_INSTALL_LIBS_TRUE@install: @NOT_INSTALL_LIBS_FALSE@install-exec-local: @NOT_INSTALL_LIBS_FALSE@ echo " ... installing libs" %.c.html:%.c $(SRC_HIGHLIGHT) -f html -n --line-number-ref -d -t "$<" -H header.html $< %.h.html:%.h $(SRC_HIGHLIGHT) -f html -n --line-number-ref -d -t "$<" -H header.html $< #${HTML_SRC_FILES}: # $(SRC_HIGHLIGHT) -f html -n --line-number-ref -d -t "$<" -H header.html $< devel-doc-inc: ${HTML_INC_FILES} cp ${HTML_INC_FILES} ../../src-html/libxnee/include/libxnee devel-doc-src: ${HTML_SRC_FILES} cp ${HTML_SRC_FILES} ../../src-html/libxnee/src testnames: echo "HTML_INC_FILES=${HTML_INC_FILES}" devel-doc: devel-doc-src devel-doc-inc # 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: xnee-3.19/libxnee/src/xnee_callback.c0000664000000000000000000000766111173446015014446 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2009 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_buffer.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_callback.h" /************************************************************** * * * xnee_set_callback * * * * * **************************************************************/ int xnee_set_callback (xnee_data *xd, callback_ptrptr dest, const char *sym_name) { const char *error; callback_ptr saved; xnee_verbose ((xd, "\nTrying to set \"%s\" as callback\n", sym_name)); if (xd==NULL) { return XNEE_NO_MAIN_DATA; } else { saved = *dest; *(void**)(dest) = xnee_dlsym(xd, xd->plugin_handle, sym_name); error = xnee_dlerror(xd) ; if ( error != NULL) { xnee_verbose ((xd, "Failed to set \"%s\" from plugin\n", sym_name)); *dest = saved ; fputs(error, stderr); return (XNEE_PLUGIN_FILE_ERROR); } else { xnee_verbose ((xd, "Function set \"%s\" OK \n", sym_name)); } } return XNEE_OK; } /************************************************************** * * * xnee_set_synchronize * * * * * **************************************************************/ int xnee_set_synchronize (xnee_data *xd, synch_ptrptr dest, const char *sym_name) { const char *error; synch_ptr saved; xnee_verbose ((xd, "\nTrying to set \"%s\" as callback\n", sym_name)); saved = *dest; if (xd==NULL) { return XNEE_NO_MAIN_DATA; } else { dest = (synch_ptrptr) xnee_dlsym(xd, xd->plugin_handle, (const char*)sym_name); if ((error = xnee_dlerror(xd)) != NULL) { xnee_verbose ((xd, "Failed to set \"%s\" from plugin\n", sym_name)); *dest = saved ; fputs(error, stderr); return (XNEE_PLUGIN_FILE_ERROR); } else { xnee_verbose ((xd, "Function set \"%s\" OK \n", sym_name)); } } return XNEE_OK; } xnee-3.19/libxnee/src/datastrings.c0000664000000000000000000003366510640701430014212 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include "libxnee/xnee.h" struct data_description event_field[]= { {KeyPress,"KeyPress", "Pressing a key"}, {KeyRelease,"KeyRelease", "Releasing a key"}, {ButtonPress,"ButtonPress", "Pressing a button"}, {ButtonRelease,"ButtonRelease", "Releasing a button"}, {MotionNotify,"MotionNotify", "Moving the pointer"}, {EnterNotify,"EnterNotify", ""}, {LeaveNotify,"LeaveNotify", ""}, {FocusIn,"FocusIn", ""}, {FocusOut,"FocusOut", ""}, {KeymapNotify,"KeymapNotify", ""}, {Expose,"Expose", ""}, {GraphicsExpose,"GraphicsExpose", ""}, {NoExpose,"NoExpose", ""}, {VisibilityNotify,"VisibilityNotify", ""}, {CreateNotify,"CreateNotify", ""}, {DestroyNotify,"DestroyNotify", ""}, {UnmapNotify,"UnmapNotify", ""}, {MapNotify,"MapNotify", ""}, {MapRequest,"MapRequest", ""}, {ReparentNotify,"ReparentNotify", ""}, {ConfigureNotify,"ConfigureNotify", ""}, {ConfigureRequest,"ConfigureRequest", ""}, {GravityNotify,"GravityNotify", ""}, {ResizeRequest,"ResizeRequest", ""}, {CirculateNotify,"CirculateNotify", ""}, {CirculateRequest,"CirculateRequest", ""}, {PropertyNotify,"PropertyNotify", ""}, {SelectionClear,"SelectionClear", ""}, {SelectionRequest,"SelectionRequest", ""}, {SelectionNotify,"SelectionNotify", ""}, {ColormapNotify,"ColormapNotify", ""}, {ClientMessage,"ClientMessage", ""}, {MappingNotify,"MappingNotify", ""}, {LASTEvent,"LASTEvent", ""}, {-1,NULL, ""} } ; struct data_description request_field[]= { {X_CreateWindow,"X_CreateWindow", "Test description"}, {X_ChangeWindowAttributes,"X_ChangeWindowAttributes", ""}, {X_GetWindowAttributes,"X_GetWindowAttributes", ""}, {X_DestroyWindow,"X_DestroyWindow", ""}, {X_DestroySubwindows,"X_DestroySubwindows", ""}, {X_ChangeSaveSet,"X_ChangeSaveSet", ""}, {X_ReparentWindow,"X_ReparentWindow", ""}, {X_MapWindow,"X_MapWindow", ""}, {X_MapSubwindows,"X_MapSubwindows", ""}, {X_UnmapWindow,"X_UnmapWindow", ""}, {X_UnmapSubwindows,"X_UnmapSubwindows", ""}, {X_ConfigureWindow,"X_ConfigureWindow", ""}, {X_CirculateWindow,"X_CirculateWindow", ""}, {X_GetGeometry,"X_GetGeometry", ""}, {X_QueryTree,"X_QueryTree", ""}, {X_InternAtom,"X_InternAtom", ""}, {X_GetAtomName,"X_GetAtomName", ""}, {X_ChangeProperty,"X_ChangeProperty", ""}, {X_DeleteProperty,"X_DeleteProperty", ""}, {X_GetProperty,"X_GetProperty", ""}, {X_ListProperties,"X_ListProperties", ""}, {X_SetSelectionOwner,"X_SetSelectionOwner", ""}, {X_GetSelectionOwner,"X_GetSelectionOwner", ""}, {X_ConvertSelection,"X_ConvertSelection", ""}, {X_SendEvent,"X_SendEvent", ""}, {X_GrabPointer,"X_GrabPointer", ""}, {X_UngrabPointer,"X_UngrabPointer", ""}, {X_GrabButton,"X_GrabButton", ""}, {X_UngrabButton,"X_UngrabButton", ""}, {X_ChangeActivePointerGrab,"X_ChangeActivePointerGrab", ""}, {X_GrabKeyboard,"X_GrabKeyboard", ""}, {X_UngrabKeyboard,"X_UngrabKeyboard", ""}, {X_GrabKey,"X_GrabKey", ""}, {X_UngrabKey,"X_UngrabKey", ""}, {X_AllowEvents,"X_AllowEvents", ""}, {X_GrabServer,"X_GrabServer", ""}, {X_UngrabServer,"X_UngrabServer", ""}, {X_QueryPointer,"X_QueryPointer", ""}, {X_GetMotionEvents,"X_GetMotionEvents", ""}, {X_TranslateCoords,"X_TranslateCoords", ""}, {X_WarpPointer,"X_WarpPointer", ""}, {X_SetInputFocus,"X_SetInputFocus", ""}, {X_GetInputFocus,"X_GetInputFocus", ""}, {X_QueryKeymap,"X_QueryKeymap", ""}, {X_OpenFont,"X_OpenFont", ""}, {X_CloseFont,"X_CloseFont", ""}, {X_QueryFont,"X_QueryFont", ""}, {X_QueryTextExtents,"X_QueryTextExtents", ""}, {X_ListFonts,"X_ListFonts", ""}, {X_ListFontsWithInfo ,"X_ListFontsWithInfo", ""}, {X_SetFontPath,"X_SetFontPath", ""}, {X_GetFontPath,"X_GetFontPath", ""}, {X_CreatePixmap,"X_CreatePixmap", ""}, {X_FreePixmap,"X_FreePixmap", ""}, {X_CreateGC,"X_CreateGC", ""}, {X_ChangeGC,"X_ChangeGC", ""}, {X_CopyGC,"X_CopyGC", ""}, {X_SetDashes,"X_SetDashes", ""}, {X_SetClipRectangles,"X_SetClipRectangles", ""}, {X_FreeGC,"X_FreeGC", ""}, {X_ClearArea,"X_ClearArea", ""}, {X_CopyArea,"X_CopyArea", ""}, {X_CopyPlane,"X_CopyPlane", ""}, {X_PolyPoint,"X_PolyPoint", ""}, {X_PolyLine,"X_PolyLine", ""}, {X_PolySegment,"X_PolySegment", ""}, {X_PolyRectangle,"X_PolyRectangle", ""}, {X_PolyArc,"X_PolyArc", ""}, {X_FillPoly,"X_FillPoly", ""}, {X_PolyFillRectangle,"X_PolyFillRectangle", ""}, {X_PolyFillArc,"X_PolyFillArc", ""}, {X_PutImage,"X_PutImage", ""}, {X_GetImage,"X_GetImage", ""}, {X_PolyText8,"X_PolyText8", ""}, {X_PolyText16,"X_PolyText16", ""}, {X_ImageText8,"X_ImageText8", ""}, {X_ImageText16,"X_ImageText16", ""}, {X_CreateColormap,"X_CreateColormap", ""}, {X_FreeColormap,"X_FreeColormap", ""}, {X_CopyColormapAndFree,"X_CopyColormapAndFree", ""}, {X_InstallColormap,"X_InstallColormap", ""}, {X_UninstallColormap,"X_UninstallColormap", ""}, {X_ListInstalledColormaps,"X_ListInstalledColormaps", ""}, {X_AllocColor,"X_AllocColor", ""}, {X_AllocNamedColor,"X_AllocNamedColor", ""}, {X_AllocColorCells,"X_AllocColorCells", ""}, {X_AllocColorPlanes,"X_AllocColorPlanes", ""}, {X_FreeColors,"X_FreeColors", ""}, {X_StoreColors,"X_StoreColors", ""}, {X_StoreNamedColor,"X_StoreNamedColor", ""}, {X_QueryColors,"X_QueryColors", ""}, {X_LookupColor,"X_LookupColor", ""}, {X_CreateCursor,"X_CreateCursor", ""}, {X_CreateGlyphCursor,"X_CreateGlyphCursor", ""}, {X_FreeCursor,"X_FreeCursor", ""}, {X_RecolorCursor,"X_RecolorCursor", ""}, {X_QueryBestSize,"X_QueryBestSize", ""}, {X_QueryExtension,"X_QueryExtension", ""}, {X_ListExtensions,"X_ListExtensions", ""}, {X_ChangeKeyboardMapping,"X_ChangeKeyboardMapping", ""}, {X_GetKeyboardMapping,"X_GetKeyboardMapping", ""}, {X_ChangeKeyboardControl,"X_ChangeKeyboardControl", ""}, {X_GetKeyboardControl,"X_GetKeyboardControl", ""}, {X_Bell,"X_Bell", ""}, {X_ChangePointerControl,"X_ChangePointerControl", ""}, {X_GetPointerControl,"X_GetPointerControl", ""}, {X_SetScreenSaver,"X_SetScreenSaver", ""}, {X_GetScreenSaver,"X_GetScreenSaver", ""}, {X_ChangeHosts,"X_ChangeHosts", ""}, {X_ListHosts,"X_ListHosts", ""}, {X_SetAccessControl,"X_SetAccessControl", ""}, {X_SetCloseDownMode,"X_SetCloseDownMode", ""}, {X_KillClient,"X_KillClient", ""}, {X_RotateProperties ,"X_RotateProperties", ""}, {X_ForceScreenSaver ,"X_ForceScreenSaver", ""}, {X_SetPointerMapping,"X_SetPointerMapping", ""}, {X_GetPointerMapping,"X_GetPointerMapping", ""}, {X_SetModifierMapping ,"X_SetModifierMapping", ""}, {X_GetModifierMapping ,"X_GetModifierMapping", ""}, {X_NoOperation,"X_NoOperation", ""}, {-1,NULL, NULL} }; struct data_description error_field[]= { {Success,"Success", ""}, {BadRequest,"BadRequest", ""}, {BadValue,"BadValue", ""}, {BadWindow,"BadWindow", ""}, {BadPixmap,"BadPixmap", ""}, {BadAtom,"BadAtom", ""}, {BadCursor,"BadCursor", ""}, {BadFont,"BadFont", ""}, {BadMatch,"BadMatch", ""}, {BadDrawable,"BadDrawable", ""}, {BadAccess,"BadAccess", ""}, {BadAlloc,"BadAlloc", ""}, {BadColor,"BadColor", ""}, {BadGC,"BadGC", ""}, {BadIDChoice,"BadIDChoice", ""}, {BadName,"BadName", ""}, {BadLength,"BadLength", ""}, {BadImplementation,"BadImplementation", ""}, {-1,NULL, NULL} }; struct data_description reply_field[]= { {sz_xGenericReply,"sz_xGenericReply", ""}, {-1,NULL, NULL} }; int xnee_event2int(char *ev) { int i ; for (i=0;event_field[i].data_nr!=-1;i++) { if (strncmp(event_field[i].data_name, ev, strlen(event_field[i].data_name))==0) { return event_field[i].data_nr; } } return -1; } int xnee_request2int(char *req) { int i ; for (i=0;request_field[i].data_nr!=-1;i++) { int len = XNEE_MAX (strlen(request_field[i].data_name), strlen(req)); if (strncmp(request_field[i].data_name, req, len)==0) { return request_field[i].data_nr; } } return -1; } int xnee_error2int(char *ev) { int i ; for (i=0;error_field[i].data_nr!=-1;i++) { if (strncmp(error_field[i].data_name, ev, strlen(error_field[i].data_name))==0) { return error_field[i].data_nr; } } return -1; } /* * * Prints the name of the XEvent that corresponds to the argument ev. * Printout is made on stdout. * */ char * xnee_print_event (int ev) { int i ; for (i=0;event_field[i].data_nr!=-1;i++) { if (event_field[i].data_nr == ev) { return event_field[i].data_name; } } return NULL; } /* * * Prints the name of the error that corresponds to the argument ev. * Printout is made on stdout. * */ char * xnee_print_error_code ( int err) { if ( (err >= FirstExtensionError) && ( err <= LastExtensionError )) { return " FirstExtensionError =< error >= LastExtensionError"; } else { int i ; for (i=0;error_field[i].data_nr!=-1;i++) { if (error_field[i].data_nr == err) { return error_field[i].data_name; } } } return NULL; } /* * * Prints the name of the error that corresponds to the argument ev. * Printout is made on stdout. * */ char * xnee_print_request (int req) { int i ; for (i=0;request_field[i].data_nr!=-1;i++) { if (request_field[i].data_nr == req) { return request_field[i].data_name; } } return NULL; } /* * Prints the name of the request that corresponds to the argument req. */ char * xnee_int2request(int req) { int i ; if ( (req <= 0) || (req>X_NoOperation) ) { return NULL; } else { for (i=0;request_field[i].data_nr!=-1;i++) { if (request_field[i].data_nr == req) { return request_field[i].data_name; } } } return NULL; } /* * * Prints the name of the event that corresponds to the argument ev. * Printout is made on stdout. * */ char * xnee_int2event(int ev) { int i; if ( (ev <= 1) || (ev>LASTEvent) ) { return NULL; } else { for (i=0;event_field[i].data_nr!=-1;i++) { if (event_field[i].data_nr == ev) { return event_field[i].data_name; } } } return NULL; } /* * * Prints the name of the error that corresponds to the argument err. * Printout is made on stdout. * */ char * xnee_int2error(int err) { int i ; for (i=0;error_field[i].data_nr!=-1;i++) { if (error_field[i].data_nr == err) { return error_field[i].data_name; } } return NULL; } /** * Get the integer value from X11 data dat */ int xnee_data2int(int type, char *dat) { if (type==XNEE_DEVICE_EVENT) return xnee_event2int(dat); else if (type==XNEE_EVENT) return xnee_event2int(dat); else if (type==XNEE_DELIVERED_EVENT) return xnee_event2int(dat); else if (type==XNEE_REQUEST) return xnee_request2int(dat); else if (type==XNEE_ERROR) return xnee_error2int(dat); else if (type==XNEE_REPLY) return -1; else return -1; } /** * Get the integer value from X11 data dat */ char* xnee_int2data(int type, int dat) { if (type==XNEE_DEVICE_EVENT) return xnee_int2event(dat); else if (type==XNEE_EVENT) return xnee_int2event(dat); else if (type==XNEE_DELIVERED_EVENT) return xnee_int2event(dat); else if (type==XNEE_REQUEST) return xnee_int2request(dat); else if (type==XNEE_ERROR) return xnee_int2error(dat); else if (type==XNEE_REPLY) return NULL; else return NULL; } /** * Get the integer value from X11 data dat */ int xnee_data2int_special(int *type, char *dat) { int i ; int ret; for (i=0;i MotionNotify)) ; else if ( (i==XNEE_DELIVERED_EVENT) && (ret <= MotionNotify)) ; else { *type = i; return ret; } } } } return -1; } struct data_description* xnee_get_event_names() { return event_field; } struct data_description* xnee_get_error_names() { return error_field; } struct data_description* xnee_get_request_names() { return request_field; } struct data_description* xnee_get_reply_names() { return reply_field; } xnee-3.19/libxnee/src/print_varargs.c0000664000000000000000000000572110640701430014540 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/print_varargs.h" #ifdef HAVE_STDARG_H #include #else #include #endif /************************************************************** * * * xnee_verbose * * * * * **************************************************************/ #ifdef HAVE_STDARG_H void xnee_verbosef (xnee_data *xd, /*@null@*/ char * msg, ...) { va_list ap; if (xd==NULL) { return; } if ( (xd->verbose!=0) && (xd->err_file!=NULL) ) { va_start(ap, msg); (void)xd->verbose_fp ( xd->err_file, msg, ap ); fflush(xd->err_file); } } #else void xnee_verbosef (xnee_data *xd, valist) va_dcl { char *fmt; va_list ap; if (xd==NULL) { return; } if ( (xd->verbose!=0) && (xd->err_file!=NULL) ) { va_start(argp); fmt = va_arg(argp, char *); xd->verbose_fp ( xd->err_file, msg, ap ); } } #endif /* * Print an error message */ #ifdef HAVE_STDARG_H void xnee_print_error (char * error, ...) { va_list ap; va_start(ap, error); (void)vprintf ( error, ap ); va_end(ap); } #else void xnee_print_error (char * error, ...) { char *fmt; va_list ap; va_start(ap); fmt = va_arg(argp, char *); vprintf ( error, ap ); va_end(ap); } #endif xnee-3.19/libxnee/src/xnee_error.c0000664000000000000000000002243512332106031014024 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2003, 2010, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_alloc.h" #ifdef HAVE_STDARG_H #include #else #include #endif static char *latest_error = NULL ; char error_descr_solut[128][256] = { /* XNEE_OK */ "OK", "No need to do anything", /* XNEE_MEMORY_FAULT */ "Memory failure", "This is probably because you are out of memory", /* XNEE_FILE_NOT_FOUND */ "Xnee can't find or create the file you are lookig for ", "Check the path and the permissions", /* XNEE_TIMED_OUT */ "Timeout expired", "The synchronisation timeout expired", /* XNEE_USER_INTR */ "User interrupt", "This is an internal 'signal'", /* XNEE_SYNCH_FAULT */ "Synchronisation failure", "For more information on this error, please read the manual(s)", /* XNEE_WRONG_PARAMS */ "Wrong paramters", "You have given invalid input to Xnee ", /* XNEE_NO_REC_EXT */ "Record extension missing on the display. Please add appropriate option to your X Server configuration", "Enable the RECORD extension. Read the manual on how to do this", /* XNEE_NO_TEST_EXT */ "XTest extension missing on the display", "Enable the XTest extension. Read the mnual on how to do this", /* XNEE_NO_PROT_CHOOSEN */ "No protocol choosen", "Make sure you have set the Xnee application to record some data", /* XNEE_NOT_OPEN_DISPLAY */ "Could not open the display", "Make sure you have given a correct display name and that you " "have permissions to open it", /* XNEE_AMBIGOUS_CMD */ "Ambigious command", "Make sure that the command/actions set aren't ambigous", /* XNEE_OUT_OF_SYNC */ "Can't synchronise any longer", "Read the synchronisation part of the Xnee manual", /* XNEE_NOT_SYNCING */ "Xnee is not using synchronisation", "internal 'signal'", /* XNEE_NO_PLUGIN_FILE */ "Xnee can't find the plugin file", "Make sure that the path and permission are correct", /* XNEE_PLUGIN_FILE_ERROR */ "Xnee can't use the plugin file", "Make sure that the plugin file is valid", /* XNEE_NO_PROJECT_FILE */ "Xnee can't find the project file specified", "Make sure that the path and permissions are valid", /* XNEE_NO_MAIN_DATA */ "xnee_data structure missing", "This is a major error, please report the error " "with all the information you have: project file, session file, comand" "line options etc", /* XNEE_NO_RECORD_DATA */ "record_setup structure missing", "This is a major error, please report the error " "with all the information you have: project file, session file, comand" "line options etc", /* XNEE_NO_REPLAY_DATA */ "record_replay structure missing", "This is a major error, please report the error " "with all the information you have: project file, session file, comand" "line options etc", /* XNEE_SYNTAX_ERROR */ "Xnee syntax error", "Make sure all Xnee expressions are valid", /* XNEE_UNKNOWN_GRAB_MODE */ "Requested grab mode is unknown", "Internal error, please report it", /* XNEE_NO_GRAB_DATA */ "No grab data", "Not used anymore. If this is reported to you, " "report it to the Xnee project", /* XNEE_GRAB_DATA */ "Grab data found", "Internal state, please report this as an error if you receive it", /* XNEE_BAD_GRAB_DATA */ "Bad grab data", "You have requested to grab the same key more than once or one already grabbed", /* XNEE_BAD_SESSION_FILE */ "Bad session file", "Make sure that the path and permission to the session file are correct", /* XNEE_BAD_SPEED */ "Invalid replay speed", "Make sure that the replay speed is valid ", /* XNEE_BAD_RESOLUTION */ "Invalid screen resolution", "Make sure that the resolution is valid ", /* XNEE_BAD_THRESHOLD */ "Invalid threshold(s)", "Make sure that the threshold(s) is/are valid ", /* XNEE_BAD_CONTEXT */ "Bad context", "Internal state, report if you receive this", /* XNEE_BLANK_LINE */ "Blank line", "", /* XNEE_XOSD_FAILURE */ "xosd failure", "Could not load xosd library", /* XNEE_FEEDBACK_FAILURE */ "Feedback failure", "Could not give feedback", /* XNEE_MODE_NOT_SET */ "No mode set", "You have to specify a mode (record/replay/retype)", /* XNEE_GRAB_MEM_FAILURE */ "Grab memory failure", "The memory used to save lines during grabs is exceeded. Report it", /* XNEE_RECORD_FAILURE */ "Record memory failure", "Xnee failed due to bad data received from RECORD extension", /* XNEE_DATE_FAILURE */ "Date failure", "Xnee failed to get or handle the date from the OS", /* XNEE_SCREEN_MISSING */ "Screen nr could not be retrieved", "Xnee could not find the screen of the recorded event. Report the problem", /* XNEE_RANGE_FAILURE */ "Fatal error while adding data to range of recorded data", "Xnee could not add data to record. Report the problem", /* XNEE_BAD_OFFSET */ "Fatal error while setting replay offset", "Xnee could not adjust replay offsets. Report the problem", /* XNEE_WINDOW_POS_ADJ_ERROR */ "Fatal error while adjusting window position", "Xnee could not adjust window position. Report the problem", /* XNEE_MISSING_ARG */ "Missing arguments when trying to parse", "Xnee misses one or more arguments. Make sure your command line or file is correct", /* XNEE_OK_LEAVE */ "OK, Xnee will quit as soon as possible", "No need to do anything", /* XNEE_GRAB_CONFUSION */ "Xnee have reached a point where it is confused over the grabs done", "Make sure you do not grab something already grabbed. If you are sure about this, report the problem (include recorded session file and verbose printout file)", /* XNEE_PROJECT_SYNTAX_ERROR */ "Syntax error in Xnee project file", "Check the file", /* XNEE_CLI_ERROR */ "Something went wrong when executing a cli command to an option", "Most likely NOT an error in " PACKAGE, /* XNEE_XINPUT_EXTENSION_FAILURE */ "Something went wrong when initializing XInput", "Most likely you don't have XInput enabled in your X server" , /* XNEE_REPLAY_BACKEND_FAILURE */ "Someone requested Xnee to use a replay backend that does not exist", "Most likely this is an error inside " PACKAGE ", please report this as a bug", /* XNEE_OVERRIDE_DISPLAY_FAILURE*/ "Xnee failed to set the (user overridden) display to record", "Report this bug together with the command line." /* XNEE_LAST_ERROR */ "Last error", "Internal state, report if you receive this", }; const char * xnee_get_err_description (int error) { if ( (errorXNEE_LAST_ERROR)) { return NULL; } return error_descr_solut[error*2]; } const char * xnee_get_err_solution (int error) { if ( (errorXNEE_LAST_ERROR)) { return NULL; } return error_descr_solut[error*2+1]; } char * xnee_get_err_string (void) { return latest_error; } void xnee_free_err_name (void) { XNEE_FREE_IF_NOT_NULL(latest_error); return ; } #ifdef HAVE_STDARG_H char * xnee_set_err_string (char *new_error, ...) { #define ERROR_STRING_SIZE 100 va_list ap; char buf[ERROR_STRING_SIZE]; va_start(ap, new_error); vsnprintf (buf,ERROR_STRING_SIZE, new_error, ap ); latest_error = strdup(new_error); return latest_error; } #else char * xnee_set_err_string (char *new_error, ...); { char *fmt; char buf[100]; va_list ap; va_start(ap); fmt = va_arg(argp, char *); vsnprintf ( buf, ERROR_STRING_SIZE, new_error, ap ); latest_error = strdup(new_error); return latest_error; } #endif xnee-3.19/libxnee/src/xnee_dl.c0000664000000000000000000000742410640701431013300 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #include /************************************************************** * * * xnee_dlopen * * * * * **************************************************************/ void * xnee_dlopen (xnee_data *xd, char *dl, int flag) { xnee_verbose ((xd, " ---> xnee_dlopen\n")); xnee_verbose ((xd, " <--- xnee_dlopen\n")); return dlopen ((const char*)dl, flag); } /************************************************************** * * * xnee_dlsym * * * * * **************************************************************/ void * xnee_dlsym (xnee_data *xd, void* handle, const char *sym) { xnee_verbose ((xd, " ---> xnee_dlsym\n")); xnee_verbose ((xd, " <--- xnee_dlsym\n")); return dlsym (handle, sym); } /************************************************************** * * * xnee_dlclose * * * * * **************************************************************/ int xnee_dlclose (xnee_data *xd, void* handle) { xnee_verbose ((xd, " ---> xnee_dlclose\n")); xnee_verbose ((xd, " <--- xnee_dlclose\n")); return dlclose (handle); } /************************************************************** * * * xnee_dlerror * * * * * **************************************************************/ const char* xnee_dlerror (xnee_data *xd) { xnee_verbose ((xd, " ---> xnee_dlerror\n")); xnee_verbose ((xd, " <--- xnee_dlerror\n")); return dlerror(); } xnee-3.19/libxnee/Makefile.am0000664000000000000000000000011211067164020012747 00000000000000SUBDIRS = src test AUTOMAKE_OPTIONS = gnu EXTRA_DIST = autotools/* xnee-3.19/libxnee/README0000664000000000000000000000130307740361201011601 00000000000000Xnee / README ------------- Xnee is a GNU package. For more information about GNU, please visit http://www.gnu.org The following files contains information about Xnee Name Description --------------------------- AUTHORS List of authors, contributors etc BUGS Known bugs and limitations Changelog Log of source code changes COPYING Contains the Xnee license DESCRIPTION Obsolete* DEVELOPMENT Obsolete* EXAMPLES Obsolete* FAQ Obsolete* INSTALL Contains information about how to build and install Xnee NEWS Contains information about what is new in "this" release README This file TODO List of features, fixes, docs, ... to implement USAGE A printout of Xnee's built in doc, 'xnee --help' xnee-3.19/libxnee/autotools/0000775000000000000000000000000012332167175013044 500000000000000xnee-3.19/libxnee/autotools/CVS/0000775000000000000000000000000012332167116013472 500000000000000xnee-3.19/libxnee/autotools/CVS/Repository0000664000000000000000000000002712332167116015513 00000000000000xnee/libxnee/autotools xnee-3.19/libxnee/autotools/CVS/Entries0000664000000000000000000000000212332167116014736 00000000000000D xnee-3.19/libxnee/autotools/CVS/Root0000664000000000000000000000004712332167116014261 00000000000000hesa@cvs.savannah.gnu.org/sources/xnee xnee-3.19/libxnee/INSTALL0000664000000000000000000002110207740360336011761 00000000000000Basic Installation ================== These are generic installation instructions with some added Xnee specific information (Makefile.xnee) The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Another way to build Xnee is : 1. `cd' to the directory containing the package's source code and type make -f Makefile.openbsd This way might seem easier but I can not guarantee that the Makefile will work for all platforms ..... however it seems to work on Debian GNU/Linux. There is no install rule in this Makefile. You have to copy as you pleas are update various paths (e.g PATH and MANPATH). To compile the documents in the doc directory: 1. make pdf generates pdf version of the Manuals 2. make ps generates pdf version of the Manuals 3. make txt generates pdf version of the Manuals 4. make info generates info version of the Manuals 5. make html generates html version of the Manuals 5 make devel-doc generates rtf, ps, pdf versions of the APIs There is no install rule for thes files. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. xnee-3.19/libxnee/AUTHORS0000664000000000000000000000061307740360454012005 00000000000000Xnee / AUTHORS -------------------- Authors: -------- Henrik Sandklef hesa@gnu.org Jon-Erling Dahl joda@gadgeteer.nu Contributors (code fixes, comments etc): --------------------------------------- Janice Waddick Juan F. Codagnone Lars Brinkhoff Ton van Vliet Nekrasov Alexander Dr. Adrian Wrigley Conall McGleenan Bianchi Roberto Thomas Riga Stuart Guthrie Volker Stolz xnee-3.19/libxnee/ChangeLog0000664000000000000000000000001011175423125012466 00000000000000See ../ xnee-3.19/libxnee/include/0000775000000000000000000000000012332167175012436 500000000000000xnee-3.19/libxnee/include/libxnee/0000775000000000000000000000000012332167175014064 500000000000000xnee-3.19/libxnee/include/libxnee/xnee_km.h0000664000000000000000000000431310640701430015570 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_KM_H #define XNEE_KM_H const char * xnee_symbolic_modifier2modifier (xnee_data *xd, const char *mod_str); /** * Grabs the modifier and key as specified on xd. * These keys are mapped to call xnee_stop_session * @param xd xnee's main structure * @param mode action mode (stop, pause, resume) * @param mod_key string representation of modifier + key * @return int XNEE_OK on success */ int xnee_grab_key (xnee_data* xd , int mode, char *mod_key); int xnee_check_key(xnee_data *xd); int xnee_get_action_key (xnee_data *xd, xnee_action_key *xk, char *mod_and_key); int xnee_handle_rec_key(xnee_data *xd); int xnee_handle_rep_key(xnee_data *xd); int xnee_key_check(xnee_data *xd); #endif /* XNEE_KM_H */ xnee-3.19/libxnee/include/libxnee/xnee_utils.h0000664000000000000000000000753012332106345016331 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, * 2004, 2010, 2011 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_UTILS_H #define XNEE_XNEE_UTILS_H #include "xnee.h" #ifdef LONG64 #define CARD32_PRINTF_FMT "%ld" #define SIZE_T_PRINTF_FMT "%d" #else #define CARD32_PRINTF_FMT "%ld" #define SIZE_T_PRINTF_FMT "%d" #endif #define TIME_PRINTF_FMT CARD32_PRINTF_FMT /** * Removes XNEE_COMMENT_START from the argument * and removes unnecessary allocated memory * @param xd xnee's main structure * @param str string to clean up * @return int 1 on success */ int xnee_rem_comment_start(xnee_data *xd, char *str) ; int xnee_write_settings_to_file (xnee_data *xd, FILE *fp); /* * INTERNAL USE * * Sleep for int seconds * and print some information to the user about the remaining time * * Useful if a user wants to wait for a few seconds in order to iconize * the terminal window where record was started .... just an exanple * */ void xnee_delay (int , char *) ; /** * Removes blanks from the argument * and removes unnecessary allocated memory * * @param xd xnee's main structure * @param str string to clean up * @return int 1 on success */ int xnee_strip(xnee_data *xd, char *str) ; int rem_all_blanks (char *array, size_t size); int rem_begin_blanks (char *array, int size); int rem_blanks (char *array, int size); /** * Returns the clients (displays) id (resource ) * @param dpy display of the client * @return XID client's X ID */ XID xnee_client_id (Display *dpy); #define XNEE_ATOI_FUNCTION(func, xd, str, xnee_macro_in_ret_val) \ { \ int my_xnee_atio_macro_function_ret ; \ if ( sscanf(str, "%d", &my_xnee_atio_macro_function_ret) == 1) \ xnee_macro_in_ret_val = func(xd, my_xnee_atio_macro_function_ret); \ else {\ xnee_macro_in_ret_val = XNEE_WRONG_PARAMS ; \ }\ } int xnee_str2int(xnee_data *xd, char *str); char ** xnee_str2strptr (char *tmp, int fill_option); void xnee_print_strptr(xnee_data *xd, char **strptr); int xnee_free_strptr(char **strptr); int xnee_boolstr2int(xnee_data *xd, char *str); int xnee_record_from_data_display(xnee_data *xd); Display * xnee_get_display_for_recordcontext(xnee_data *xd); int xnee_get_xinput_event_base(Display *dpy); int xnee_check_true(char *expr); int xnee_check_false(char *expr); int xnee_is_screen_ok(xnee_data *xd, int screen); #endif /* XNEE_XNEE_UTILS_H */ xnee-3.19/libxnee/include/libxnee/xnee_record.h0000775000000000000000000001055410640701430016446 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_RECORD_H #define XNEE_RECORD_H /* Standard includes */ #include /* * Xnee includes */ #include "libxnee/xnee.h" /** * Prints X events data according to the Xnee protocol\/format * prints all events to the logfile as specified in in * the xnee_data struct. * If the event is \"replayable\" we call fakeXX functions *

By all events we mean all but Expose/NoExpose * ... there are a lot of them * * @param xd xnee's main structure * @param xrecintd pointer to data as sent by the Xserver * @return void */ int xnee_record_handle_event ( xnee_data *xd, /*@null@*/ XRecordInterceptData *xrecintd); /** * RECORD callback procedure for Xnee * @param xpoint_xnee_data pointer to xnee's main structure * @param data pointer to data as sent by the Xserver * @return void * */ void xnee_record_dispatch(XPointer xpoint_xnee_data, XRecordInterceptData *data ); /** * RECORD callback procedure for Xnee * This callback calls function that prints in human format * * @param xpoint_xnee_data pointer to xnee's main structure * @param data pointer to data as sent by the Xserver * @return void */ void xnee_human_dispatch(XPointer xpoint_xnee_data, XRecordInterceptData *data ); /** * Inits the structures used when recording. * @param xd xnee's main structure * @return void */ void xnee_record_init (xnee_data* xd) ; /** * Sets up Record extension with some nice values * @param xd xnee's main structure * @return int 0 on success. XNEE_NO_PROT_CHOOSEN if no data was choosen to record. */ int xnee_setup_recordext (xnee_data* xd); /** * Closes down Record extension. After this a call to xnee_setup_recordext is possible * to restart recording. * @param xd xnee's main structure * @return int 0 on success. XNEE_NO_PROT_CHOOSEN if no data was choosen to record. */ int xnee_unsetup_recordext (xnee_data* xd); /** * Tests if Record extension is readu to be used * @param xd xnee's main structure * @return int 1 if present, o if not * \todo (return values need to be changed) */ int xnee_has_record_extension(xnee_data *xd); /** * Given a xnee_data struct this function sets up * all data and sets the dispatch method to Record extension. * * @param xd xnee's main structure * @return int 0 in success */ int xnee_setup_recording(xnee_data *xd); /** * * * @param xd xnee's main structure * * @return 0 if succuessful */ int xnee_unsetup_recording(xnee_data *xd); /** * Waits for data from X server * When data is received the dispatch * method is called * * * @param xd xnee's main structure * @return int 0 on success */ int xnee_record_loop(xnee_data *xd); /** * * * @param xd xnee's main structure * * @return 0 on succeess */ int xnee_record_async(xnee_data *xd); #endif /* XNEE_RECORD_H */ xnee-3.19/libxnee/include/libxnee/xnee.h0000775000000000000000000005030012332106243015102 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2003, 2009, 2010, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_H #define XNEE_XNEE_H #include #include #include #include #include #include #include "libxnee/x11_files.h" #include "libxnee/xnee_internal.h" #include "libxnee/xnee_strings.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_settings.h" #define XNEE_CLI "cnee" #define XNEE_CLI_UC "CNEE" typedef int xnee_keymask; /* * Return values */ enum return_values { XNEE_OK = 0 , XNEE_MEMORY_FAULT , XNEE_FILE_NOT_FOUND , XNEE_TIMED_OUT , XNEE_USER_INTR , XNEE_SYNCH_FAULT , XNEE_WRONG_PARAMS , XNEE_NO_REC_EXT , XNEE_NO_TEST_EXT , XNEE_NO_PROT_CHOOSEN , XNEE_NOT_OPEN_DISPLAY , XNEE_AMBIGOUS_CMD , XNEE_OUT_OF_SYNC , XNEE_NOT_SYNCING , XNEE_NO_PLUGIN_FILE , XNEE_PLUGIN_FILE_ERROR , XNEE_NO_PROJECT_FILE , XNEE_NO_MAIN_DATA , XNEE_NO_RECORD_DATA , XNEE_NO_REPLAY_DATA , XNEE_SYNTAX_ERROR , XNEE_UNKNOWN_GRAB_MODE , XNEE_NO_GRAB_DATA , XNEE_GRAB_DATA , XNEE_BAD_GRAB_DATA , XNEE_BAD_LOG_FILE , XNEE_BAD_SPEED , XNEE_BAD_RESOLUTION , XNEE_BAD_THRESHOLD , XNEE_BAD_CONTEXT , XNEE_BLANK_LINE , XNEE_XOSD_FAILURE , XNEE_FEEDBACK_FAILURE , XNEE_MODE_NOT_SET , XNEE_GRAB_MEM_FAILURE , XNEE_RECORD_FAILURE , XNEE_DATE_FAILURE , XNEE_SCREEN_MISSING , XNEE_RANGE_FAILURE , XNEE_BAD_OFFSET , XNEE_WINDOW_POS_ADJ_ERROR , XNEE_MISSING_ARG , XNEE_OK_LEAVE , XNEE_GRAB_CONFUSION , XNEE_PROJECT_SYNTAX_ERROR , XNEE_CLI_ERROR , XNEE_XINPUT_EXTENSION_FAILURE , XNEE_REPLAY_BACKEND_FAILURE , XNEE_OVERRIDE_DISPLAY_FAILURE , XNEE_LAST_ERROR } _return_values; enum bool_string_values { XNEE_BOOL_EXPLICIT_FALSE=0, XNEE_BOOL_IMPLICIT_TRUE, XNEE_BOOL_EXPLICIT_TRUE, XNEE_BOOL_ERROR } _bool_string_values; enum xnee_protocol_data_numbers { XNEE_PROTO_EVENT = 0, XNEE_PROTO_REQUEST , XNEE_PROTO_REPLY , XNEE_PROTO_ERROR , XNEE_PROTO_DUMMY1 , XNEE_PROTO_DUMMY2 , XNEE_PROTO_XINPUT_EVENT_MASTER, XNEE_PROTO_XINPUT_EVENT_SLAVE, XNEE_PROTO_LAST } _xnee_protocol_data_numbers; enum xnee_replay_backend { XNEE_REPLAY_XNEE = 0, XNEE_REPLAY_SWINPUT, XNEE_REPLAY_LAST } _xnee_replay_backend; /** * \brief simply a X error. * */ typedef struct { int type; /*!< Simply an X error. Put in a struct if things are to be added later on */ }xnee_error; /** * \brief simply a X reply. * */ typedef struct { int type; /*!< Simply an X reply. Put in a struct if things are to be added later on */ }xnee_reply; /** * \brief simply a X request. * */ typedef struct { int type; /*!< Simply an X requets. Put in a struct if things are to be added later on */ }xnee_request; /** * \brief simply an X event. * */ typedef struct { int type ; /*!< type of Xevent (e.g MotionNotify)*/ int x, y ; /*!< x, y coordinates. These are only used when type is MotionXXX*/ int button ; /*!< x, y coordinates. These are only used when type is Button*/ int keycode ; /*!< x, y coordinates. These are only used when type is Key*/ int screen_nr ; /*!< The screen on which the event occured */ }xnee_event; typedef struct _xinput_device { char *name; int deviceid; int is_slave; int masterid; XDevice *device; /* for replay */ } xinput_device ; typedef struct _xinput_data { int xinput_event_base; int xinput_record_mouse; int xinput_record_keyboard; int nr_of_xi_devices; xinput_device xi_devices[XNEE_NR_OF_XINPUT_DEVICES]; int forced_core_replay; int recording_enabled; } xinput_data; typedef struct _saved_xinput_event { int button; int type; int x; int y; int deviceid; int detail; Time time; } saved_xinput_event ; /** * \brief an Xinput event. * */ typedef struct { int type ; /*!< type of Xevent (e.g MotionNotify)*/ int x, y ; /*!< x, y coordinates. These are only used when type is MotionXXX*/ int button ; int keycode ; int screen_nr ; /*!< The screen on which the event occured */ int detail; /*!< The id of the originating device */ int deviceid; char name[100]; }xnee_xinput_event; struct data_description { int data_nr; char *data_name; char *data_descr; }; enum { XNEE_ANY_OPTION, XNEE_GENERAL_OPTION, XNEE_RECORD_OPTION, XNEE_REPLAY_OPTION, XNEE_SYNC_OPTION, XNEE_GRAB_OPTION, XNEE_MISC_OPTION, XNEE_INTERNAL_OPTION, XNEE_OBSOLETE_OPTION, XNEE_RETYPE_OPTION } xnee_option_type; enum { XNEE_OVERRIDE_DISPLAY_NONE, XNEE_OVERRIDE_DISPLAY_DATA, XNEE_OVERRIDE_DISPLAY_CONTROL } xnee_override_display; typedef struct { int key; char *option; char *short_option; char *args; char *description; int type; int visible; } xnee_option_t; /* typedef struct { xnee_option_t **options; int nr_of_options; } xnee_options_t; */ typedef struct { Bool new_project; char *project_name ; char *project_descr; char *creat_date; char *creat_prog; char *creat_prog_vers; char *last_date; char *last_prog; char *last_prog_vers; char *author_name; char *author_email; } xnee_resource_meta ; /*! \brief Holds information about Record Extension setup * */ typedef struct { int xtest_version_major ; /*!< Major version number of XTest */ int xtest_version_minor ; /*!< Minor version number of XTest */ int xtest_error_basep ; /*!< First error number for this extension*/ int xtest_event_basep ; /*!< First event number for this extension*/ } xnee_testext_setup; /*! \brief Holds a * */ typedef struct { KeyCode key ; /*!< key */ char *str; /*!< string representation of the key */ char *extra_str; } xnee_action_key; /*! \brief Holds a information about the sync state * */ typedef struct { int max ; /*!< max positive diff */ int min ; /*!< max negative diff */ int total ; /*!< total diff */ } xnee_diff; /*! \brief Holds information about keycodes needed to fake a letter press * */ typedef struct { KeyCode kc ; /*!< key to fake */ int shift_press ; /*!< is a SHIT press needed */ int alt_press ; /*!< is a ALT press needed */ int alt_gr_press; /*!< is a ALT GRAPH press needed */ int ctrl_press ; /*!< is a CTRL press needed */ } old_xnee_key_code; /*! \brief Holds information about keycodes needed to fake a letter press * */ typedef struct { KeyCode kc ; /*!< key to fake */ KeyCode mod_keycodes[XNEE_NR_OF_MODIFIERS]; } xnee_key_code; /*! \brief Resolution of X server * */ typedef struct { int x_res ; /*!< Xserver resoluton: x */ int y_res ; /*!< Xserver resoluton: y */ } xnee_res; /*! \brief Data needed for distribution * */ typedef struct { xnee_res res ; /*!< resolution when replaying */ int is_used ; /*!< flag to say if we should convert resolution at all */ Display *dpy ; } xnee_distr; /*! \brief Resolution of X server * */ typedef struct { xnee_res record ; /*!< resolution when recorded */ xnee_res replay ; /*!< resolution when replaying */ int is_used ; /*!< flag to say if we should convert resolution at all */ int x_offset ; /*!< Xserver offset for X */ int y_offset ; /*!< Xserver offset for Y */ } xnee_resolution_info; /*! \brief time scale settings for Xnee * */ typedef struct { int percent ; /*!< percentage of the original time (0-10000) */ int is_used ; /*!< flag to say if we should scale time at all */ } xnee_timescale_info; /*! \brief holds replay delay information. * Xnee chooses at replay/fake-time one of these to * use as delay. */ typedef struct { Time f_delay ; /*!< time to wait before next event is faked */ Time s_delay ; /*!< time to sleep before next event is faked */ } xnee_delay_time; /** * Used for holding data of what we've received (from file) * * u * type Type of event/request/error/reply... eg MotionNotify * newtime * oldtime * */ typedef struct { union { xnee_event event ; xnee_request request ; xnee_reply reply ; xnee_error error ; xnee_xinput_event xievent ; } u ; /*!< What have we got ... event, request, reply or error */ int type ; /*!< Type of event/request/error/reply... eg MotionNotify */ Time newtime ; /*!< Time when data (u.type) occured */ Time oldtime ; /*!< Remember when the last data occured*/ } xnee_intercept_data; /** * Used for holding scripting data * * x mouse position's X coord * y mouse position's Y coord * x_rel X coord is relative * y_rel Y coord is relative * button nr of button to fake * button_state XNEE_PRESS or XNEE_RELEASE * key nr of key to fake * key_state XNEE_PRESS or XNEE_RELEASE * valid 1 if whole struct is valid, else 0 * msecs Nr of msecs to sleep before fakeing * kc keycode of the key to fake * */ typedef struct { /* Mouse */ int x ; int y ; int x_rel ; int y_rel ; int button ; int button_state ; /* Keyboard */ int key ; int key_state ; int valid ; int msecs ; int xinput_deviceid ; xnee_key_code kc; } xnee_script_s ; /* * * this typedef should, according to XRecord, * specification be defined in * ... can't find .... errrh? * */ typedef union { unsigned char type ; xEvent event ; xReq req ; xGenericReply reply ; xError error ; xConnSetupPrefix setup; } XRecordDatum ; /** * Holds information about the xnee_record session */ typedef struct { Bool first_last ; /*!< when true, only first and last motion events are printed */ Bool last_motion ; /*!< was the last event a motion event */ int store_mouse_pos; /*!< shall we save the mouse position before starting recording */ Bool store_window_pos; /*!< shall we store every new window position 0=don't, 1=only for window pos, 2=window pos and user resuested recording*/ unsigned long server_time ; /*!< when the X11 data did occur */ int x ; /*!< last MotionNotify RootX-value */ int y ; /*!< last MotionNotify RootY-value */ int events_recorded; /*!< .. to Intercept */ int data_recorded ; /*!< .. to Intercept */ int time_recorded ; /*!< .. to Intercept */ int events_max ; /*!< .. to Intercept */ int data_max ; /*!< .. to Intercept */ int time_max ; /*!< .. to Intercept */ unsigned int interval ; /*!< how many seconds to record */ unsigned int size ; /*!< max size of file */ int replayed_events; int data_ranges[XNEE_NR_OF_TYPES] ; /*!< Count how many data ranges specified */ int interrupt ; int override_recorded_display; } xnee_record_init_data ; /** * */ typedef struct { int grab ; /*!< true if any key is grabbed */ int grabbed_action ; /*!< set to the action when grabbed */ xnee_action_key action_keys[XNEE_GRAB_LAST]; } xnee_grab_keys; /** * Holds information about Record Extension setup */ typedef struct { /*@null@*/ /*@only@*/ XRecordClientSpec * xids; /*@null@*/ /*@only@*/ XRecordState * rState; /*@null@*/ /*@only@*/ XRecordRange ** range_array ; XID id ; XRecordContext rContext; int data_flags; int major_return; int minor_return ; int nclients; int active; } xnee_recordext_setup; typedef struct { unsigned int key_press_delay ; unsigned int key_release_delay ; } retype_settings ; struct buffer_meta_data { int sum_max ; /*!< sum of the maximum in the buffer. */ int sum_min ; /*!< sum of the minimum values in the buffer. */ int total_diff ; /*!< the total sum of positive values in the buffer */ int cached_max ; /*!< a cached value of the maximum value in the buffer. (-1 for unknown state) */ int cached_min ; /*!< a cached value of the minimum value in the buffer. (-1 for unknown state) */ /* thresholds used during synch */ int sum_max_threshold; int sum_min_threshold; int tot_diff_threshold; } ; /** * Holds most information about the Xnee session. * */ typedef struct { /*@null@*/ char *program_name; /*!< name of the program currently using libxnee */ /*@null@*/ char *out_name ; /*!< name of output file (e.g stdout, /tmp/xnee.log*/ /*@null@*/ char *err_name ; /*!< name of error file (e.g stdout, /tmp/xnee.log*/ /*@null@*/ char *rc_name ; /*!< name of resource file (e.g netscape.xns, /tmp/xterm.xns*/ /*@null@*/ char *data_name ; /*!< name of data file (e.g */ /*@null@*/ char *rt_name ; /*!< name of retype file (e.g stdout, /home/user/myfile.txt */ /*@null@*/ /*@dependent@*/FILE *data_file ; /*!< data input file descriptor */ /*@null@*/ /*@dependent@*/FILE *out_file ; /*!< output file descriptor */ /*@null@*/ /*@dependent@*/ FILE *err_file ; /*!< error file descriptor */ /*@null@*/ /*@dependent@*/FILE *rc_file ; /*!< resource file descriptor */ /*@null@*/ /*@dependent@*/FILE *rt_file ; /*!< retype file descriptor */ /*@null@*/ /*@dependent@*/FILE *buffer_file ; /*!< verbose buffer printout file descriptor */ FILE *saved_out_file ; /*!< output file descriptor */ FILE *saved_err_file ; /*!< error file descriptor */ char **app_args ; Bool verbose ; /*!< true if verbose mode */ Bool buf_verbose ; /*!< true if verbose mode for buffer printouts */ Bool all_clients ; /*!< True if recording all clients (else Xneee recods only future clients) */ Bool sync ; /*!< True if Record used when replaying */ Bool keep_autorepeat ; /*!< True = use autorepeat */ unsigned char mode ; /*!< Xnee's current mode (RECORDER/REPLAY/SYNTAX_CHECK...) */ /*@null@*/ void *plugin_handle ; /*!< Handle for the plugin file */ /*@null@*/ char *plugin_name ; /*!< Name of the plugin file */ callback_ptr rec_callback ; /*!< recording callback function */ callback_ptr rep_callback ; /*!< replaying callback function */ callback_ptr sync_fun ; /*!< synchronisation function */ fprint_fptr buffer_verbose_fp; /*!< pointer to buffer verbose fun */ vfprint_fptr verbose_fp; /*!< pointer to verbose fun */ fprint_fptr data_fp ; /*!< pointer to xnee protcol print fun */ /*@null@*/ /*@observer@*/ /*@null@*/ char * display ; /*!< char representation of the Display */ /*@null@*/ Display *data ; /*!< used for sending recored data between Xnee and Xserver*/ /*@null@*/ Display *control ; /*!< used for sending info between Xnee and Xserver */ /*@null@*/ Display *fake ; /*!< used for faking events */ /*@null@*/ Display *grab ; /*!< used for holding the grabbed key/modifier */ int first_replayed_event; /*!< True if the event to replay is the first one. Needed to set the start time of the first event to 0 */ int recall_recorded_win_pos; /*!< True if Xnee (during replay) shall use the recorded. window position*/ int cont ; /*!< A simple flag telling Xnee wether to keep recording/replaying or to quit. */ /*@null@*/ xnee_distr *distr_list ; /*!< array of displays to distribute events to */ size_t distr_list_size ; /*!< size of array of displays to distribute events to */ /*@null@*/ /*@reldef@*/ #ifdef XNEE_USE_SEMAPHORES sem_t *buf_sem ; /*!< semaphore to protect the replay buffer */ #endif /* XNEE_USE_SEMAPHORES */ long first_read_time ; /*!< server time of the first read from recorded file */ int force_replay ; /*!< Keep replaying even if we are out of sync .... dangerous */ XKeyboardState kbd_orig; /*!< User keyboard state before Xnee messes is up */ int autorepeat_saved; /*!< Flag indicating if we have a stored keyboard state */ /*@only@*/ /*@null@*/ xnee_record_init_data xnee_info ; int no_reparent_recording ; int max_nr_of_moves; /*@only@*/ /*@null@*/ xnee_recordext_setup *record_setup; /*@only@*/ /*@null@*/ xnee_testext_setup *replay_setup; int data_buffer[4][XNEE_REPLAY_BUFFER_SIZE]; struct buffer_meta_data meta_data; int speed_percent; /*@only@*/ /*@null@*/ xnee_grab_keys *grab_keys; int button_pressed ; int key_pressed ; xnee_resolution_info res_info; xnee_resource_meta xrm; XModifierKeymap *map ; int in_use; retype_settings retype; unsigned char x_version_major; unsigned char x_version_minor; unsigned char x_version_minor_sub; char * x_vendor_name ; xinput_data xi_data; unsigned char replay_backend; } xnee_data ; /** * Checks if the first argument is equals to any of the other two arguments * @param arg string to compare * @param long_arg with this one * @param short_arg and with this one * @return int 1 if arg was equal to any of long_arg or short_arg, else it returns 0 */ int xnee_check ( const char *arg, const char *long_arg , const char *short_arg ); #define xnee_print_obsolete_mess(s) fprintf (stderr, s) int xnee_start(xnee_data *xd); /** * Allocates a new xnee_data structure. * To free the memory, xnee_free_xnee_data can be used. * @return xnee_data * NULL if alloc failed */ /*@null@ The implementation of this function is located in xnee_alloc.c*/ xnee_data* xnee_new_xnee_data(void); #define DEBUG_XNEE_DATA #ifdef DEBUG_XNEE_DATA void xnee_debug_xnee_data(xnee_data *xd, char *str) ; #endif #endif /* XNEE_XNEE_H */ xnee-3.19/libxnee/include/libxnee/xnee_setget.h0000775000000000000000000004035112332106163016463 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999-2011, 2013, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_SETGET_H #define XNEE_SETGET_H #include "libxnee/xnee.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #define xnee_set_events_replayed(xd,n) xd->xnee_info.replayed_events=n; #define xnee_inc_events_replayed(xd) xd->xnee_info.replayed_events++; #define xnee_get_events_replayed(xd) xd->xnee_info.replayed_events; /** * * * @param xd xnee's main structure * @param disp name of the X display to set * * This functions is called to set the display name of the * main display for Xnee. * * @return 0 on success */ int xnee_set_display_name (xnee_data *xd, const char *disp); /** * * * @param xd xnee's main structure * * This functions is called to get the display name of the * display used in Xnee. * * @return display */ char* xnee_get_display_name (xnee_data *xd); /** * * * @param xd xnee's main structure * * This functions is called to get the display of the * control display for Xnee. * * @return */ Display * xnee_get_control_display(xnee_data *xd); /** * * * @param xd xnee's main structure * * This functions is called to get the display of the * data display for Xnee. * * @return */ Display * xnee_get_data_display(xnee_data *xd); /** * * * @param xd xnee's main structure * * This functions is called to get the display of the * grab display for Xnee. * * @return display */ Display * xnee_get_grab_display(xnee_data *xd); /** * * * @param xd xnee's main structure * @param out file descriptor to use for printout * * @return */ int xnee_set_out_file (xnee_data *xd, FILE* out); /** * * * @param xd xnee's main structure * * @return file descriptor to use for printout */ FILE* xnee_get_out_file (xnee_data *xd); /** * * * @param xd xnee's main structure * @param out_name file name to use for printout * * @return */ int xnee_set_out_name (xnee_data *xd, char* out_name); /** * * * @param xd xnee's main structure * * @return file name to use for printout */ char * xnee_get_out_name (xnee_data *xd); /** * * * @param xd xnee's main structure * @param rt file descriptor to use for retype * * @return */ int xnee_set_rt_file (xnee_data *xd, FILE* rt); /** * * * @param xd xnee's main structure * * @return file descriptor to use for retype */ FILE* xnee_get_rt_file (xnee_data *xd); /** * * * @param xd xnee's main structure * * @return file name to use for retype */ int xnee_set_rt_name (xnee_data *xd, char* rt_name); /** * * * @param xd xnee's main structure * * @return file name to use for retype */ char * xnee_get_rt_name (xnee_data *xd); /** * * * @param xd xnee's main structure * @param err file decriptor to use for error prints * * @return 0 on success */ int xnee_set_err_file (xnee_data *xd, FILE* err); /** * * * @param xd xnee's main structure * * @return file descriptor to use for error prints */ FILE* xnee_get_err_file (xnee_data *xd); /** * * * @param xd xnee's main structure * @param out_name file name to use for error prints * * @return 0 on success */ int xnee_set_err_name (xnee_data *xd, char* err_name); char * xnee_get_err_name (xnee_data *xd); int xnee_set_rc_file (xnee_data *xd, FILE* rc); FILE* xnee_get_rc_file (xnee_data *xd); int xnee_set_rc_name (xnee_data *xd, const char* rc_name); int xnee_set_rc_byname (xnee_data *xd, const char* rc_name); char * xnee_get_rc_name (xnee_data *xd); int xnee_set_data_file (xnee_data *xd, FILE* data_file); FILE* xnee_get_data_file (xnee_data *xd); int xnee_set_data_name (xnee_data *xd, const char* data); char * xnee_get_data_name (xnee_data *xd); int xnee_set_verbose (xnee_data *xd); int xnee_unset_verbose (xnee_data *xd); int xnee_get_verbose (xnee_data *xd); int xnee_is_verbose (xnee_data *xd); int xnee_set_buf_verbose (xnee_data *xd); int xnee_unset_buf_verbose (xnee_data *xd); int xnee_get_buf_verbose (xnee_data *xd); int xnee_set_all_clients (xnee_data *xd); int xnee_unset_all_clients (xnee_data *xd); int xnee_get_all_clients (xnee_data *xd); int xnee_is_future_clients_str(xnee_data *xd); int xnee_is_future_clients (xnee_data *xd); int xnee_is_all_clients (xnee_data *xd); int xnee_set_recorder (xnee_data *xd); int xnee_set_replayer (xnee_data *xd); int xnee_set_distributor (xnee_data *xd); int xnee_set_syntax_checker (xnee_data *xd); int xnee_set_retyper (xnee_data *xd); unsigned char xnee_get_mode (xnee_data *xd); int xnee_set_mode (xnee_data *xd, unsigned char mode); int xnee_is_recorder (xnee_data *xd); int xnee_is_replayer (xnee_data *xd); int xnee_is_syntax_checker (xnee_data *xd); int xnee_is_distributor (xnee_data *xd); int xnee_is_retyper (xnee_data *xd); char* xnee_get_exec_prog (xnee_data *xd); int xnee_set_key (xnee_data *xd, int mode, const char* key ); char * xnee_get_key (xnee_data *xd, int mode); char * xnee_get_key_str (xnee_data *xd, int mode); char* xnee_get_extra_str (xnee_data *xd, int idx); int xnee_set_key_str (xnee_data *xd, int idx, const char *str); int xnee_set_extra_str (xnee_data *xd, int idx, const char *str); int xnee_set_exec_prog (xnee_data *xd, const char *prog); #define xnee_get_stop_key(xd) xnee_get_key_str(xd, XNEE_GRAB_STOP) #define xnee_get_pause_key(xd) xnee_get_key_str(xd, XNEE_GRAB_PAUSE) #define xnee_get_resume_key(xd) xnee_get_key_str(xd, XNEE_GRAB_RESUME) #define xnee_get_insert_key(xd) xnee_get_key_str(xd, XNEE_GRAB_INSERT) #define xnee_get_exec_key(xd) xnee_get_key_str(xd, XNEE_GRAB_EXEC) #define xnee_set_stop_key(xd, key) xnee_set_key_str(xd, XNEE_GRAB_STOP, key) #define xnee_set_pause_key(xd, key) xnee_set_key_str(xd, XNEE_GRAB_PAUSE, key) #define xnee_set_resume_key(xd, key) xnee_set_key_str(xd, XNEE_GRAB_RESUME, key) #define xnee_set_insert_key(xd, key) xnee_set_key_str(xd, XNEE_GRAB_INSERT, key) #define xnee_set_exec_key(xd, key) xnee_set_key_str(xd, XNEE_GRAB_EXEC, key) int xnee_set_sync (xnee_data *xd); int xnee_get_sync (xnee_data *xd); int xnee_is_sync (xnee_data *xd); int xnee_unset_sync (xnee_data *xd); int xnee_set_force_replay (xnee_data *xd); int xnee_unset_force_replay (xnee_data *xd); int xnee_get_force_replay (xnee_data *xd); int xnee_is_force_replay (xnee_data *xd); int xnee_set_cont (xnee_data *xd); int xnee_get_cont (xnee_data *xd); int xnee_unset_cont (xnee_data *xd); int xnee_is_cont (xnee_data *xd); int set_first_replayed_event (xnee_data *xd); int get_first_replayed_event (xnee_data *xd); int is_first_replayed_event (xnee_data *xd); int xnee_set_first_last (xnee_data *xd); int xnee_unset_first_last (xnee_data *xd); int xnee_get_first_last (xnee_data *xd); int xnee_is_first_last (xnee_data *xd); int xnee_set_no_expose (xnee_data *xd); int xnee_unset_no_expose (xnee_data *xd); int xnee_get_no_expose (xnee_data *xd); int xnee_is_no_expose (xnee_data *xd); int xnee_set_interval (xnee_data *xd, int interval); int xnee_get_interval (xnee_data *xd); int xnee_set_human_printout (xnee_data *xd); int xnee_set_xnee_printout (xnee_data *xd); #define xnee_is_human_printout(xd) (xd->rec_callback == xnee_human_dispatch) #define xnee_is_xnee_printout(xd) (xd->rec_callback == xnee_record_dispatch) #define xnee_is_autorepeat(xd) (xd->autorepeat_saved!=0) int xnee_set_replay_speed_str (xnee_data *xd, const char *speed_str); int xnee_set_replay_speed (xnee_data *xd, int speed); int xnee_get_replay_speed(xnee_data *xd); int xnee_set_replay_offset_str (xnee_data *xd, char *str); int xnee_set_replay_offset_x(xnee_data *xd, int offset); int xnee_set_replay_offset_y(xnee_data *xd, int offset); int xnee_get_replay_offset_x(xnee_data *xd); int xnee_get_replay_offset_y(xnee_data *xd); int xnee_set_events_max_str (xnee_data *xd, char *str); int xnee_set_events_max (xnee_data *xd, int loops); int xnee_get_events_max (xnee_data *xd); int xnee_get_events_left (xnee_data *xd); int xnee_set_data_max (xnee_data *xd, int loops); int xnee_get_data_max (xnee_data *xd); int xnee_get_data_left (xnee_data *xd); int xnee_set_time_max (xnee_data *xd, int time); int xnee_get_time_max (xnee_data *xd); int xnee_get_time_left (xnee_data *xd); #define xnee_set_events_recorded(xd,e) xd->xnee_info.events_recorded=e; #define xnee_get_events_recorded(xd) xd->xnee_info.events_recorded; #define xnee_inc_events_recorded(xd) xd->xnee_info.events_recorded++; #define xnee_dec_events_recorded(xd) xd->xnee_info.events_recorded--; #define xnee_zero_events_recorded(xd) xd->xnee_info.events_recorded=0; #define xnee_inc_data_recorded(xd) xd->xnee_info.data_recorded++; #define xnee_dec_data_recorded(xd) xd->xnee_info.data_recorded--; #define xnee_zero_data_recorded(xd) xd->xnee_info.data_recorded=0; #define xnee_inc_time_recorded(xd) xd->xnee_info.time_recorded++; #define xnee_dec_time_recorded(xd) xd->xnee_info.time_recorded--; #define xnee_zero_time_recorded(xd) xd->xnee_info.time_recorded=0; int xnee_set_store_mouse_pos(xnee_data *xd); int xnee_unset_store_mouse_pos(xnee_data *xd); Bool xnee_is_store_mouse_pos(xnee_data *xd); int xnee_set_program_name(xnee_data *xd, const char* name); char * xnee_get_program_name(xnee_data *xd); int xnee_get_new_project(xnee_data *xd); int xnee_set_new_project(xnee_data *xd); int xnee_unset_new_project(xnee_data *xd); int xnee_set_autorepeat (xnee_data *xd); int xnee_reset_autorepeat (xnee_data *xd); int xnee_set_application_parameters(xnee_data *xd, char **argv); char ** xnee_get_application_parameters(xnee_data *xd); int xnee_set_new_window_pos (xnee_data *xd); int xnee_get_new_window_pos (xnee_data *xd); int xnee_get_new_window_pos_value (xnee_data *xd); int xnee_set_new_window_pos_value (xnee_data *xd, int val); int xnee_unset_new_window_pos (xnee_data *xd); int xnee_get_recall_window_pos (xnee_data *xd); int xnee_set_recall_window_pos (xnee_data *xd); int xnee_unset_recall_window_pos (xnee_data *xd); char * xnee_get_project_name(xnee_data *xd); char * xnee_get_project_descr(xnee_data *xd); char * xnee_get_creat_date(xnee_data *xd); char * xnee_get_creat_program(xnee_data *xd); char * xnee_get_creat_prog_date(xnee_data *xd); char * xnee_get_last_date(xnee_data *xd); char * xnee_get_last_program(xnee_data *xd); char * xnee_get_last_prog_vers(xnee_data *xd); char * xnee_get_author_name(xnee_data *xd); char * xnee_get_author_email(xnee_data *xd); char * xnee_get_char(xnee_data *xd); char * xnee_get_project_name_str(xnee_data *xd); char * xnee_get_project_descr_str(xnee_data *xd); char * xnee_get_creat_date_str(xnee_data *xd); char * xnee_get_creat_prog_vers(xnee_data *xd); char * xnee_get_last_date_str(xnee_data *xd); char * xnee_get_last_prog_str(xnee_data *xd); char * xnee_get_last_prog_date_str(xnee_data *xd); char * xnee_get_author_name_str(xnee_data *xd); char * xnee_get_author_email_str(xnee_data *xd); char * xnee_get_char_str(xnee_data *xd); int xnee_set_all_clients_str(xnee_data *xd, char *str); int xnee_set_future_clients_str(xnee_data *xd, char *str); int xnee_set_future_clients(xnee_data *xd); int xnee_unset_future_clients(xnee_data *xd); int xnee_set_data_max_str (xnee_data *xd, char *str); int xnee_set_time_max_str (xnee_data *xd, char *str); int xnee_set_sync_mode_str (xnee_data *xd, char *str); int xnee_unset_sync_mode_str (xnee_data *xd, char *str); int xnee_set_sync_mode(xnee_data *xd); int xnee_get_sync_mode(xnee_data *xd); int xnee_set_unsync_mode(xnee_data *xd); int xnee_get_unsync_mode(xnee_data *xd); int xnee_unset_sync_mode(xnee_data *xd); int xnee_set_buf_verbose(xnee_data *xd); int xnee_unset_buf_verbose(xnee_data *xd); const char * xnee_get_xosd_font(xnee_data *xd); int xnee_set_xosd_font(xnee_data *xd, char *font_str); int xnee_set_max_threshold_str (xnee_data *xd, char *thresh_str); int xnee_set_min_threshold_str (xnee_data *xd, char *thresh_str); int xnee_set_tot_threshold_str (xnee_data *xd, char *thresh_str); int xnee_set_max_threshold (xnee_data *xd, int thresh); int xnee_set_min_threshold (xnee_data *xd, int thresh); int xnee_set_tot_threshold (xnee_data *xd, int thresh); int xnee_set_rec_resolution_y (xnee_data *xd, int res); int xnee_set_rec_resolution_x (xnee_data *xd, int res); int xnee_set_rep_resolution_y (xnee_data *xd, int res); int xnee_set_rep_resolution_x (xnee_data *xd, int res); int xnee_get_max_threshold (xnee_data *xd); int xnee_get_min_threshold (xnee_data *xd); int xnee_get_tot_threshold (xnee_data *xd); int xnee_set_rec_resolution (xnee_data *xd, char *res_str); int xnee_get_rec_resolution_x (xnee_data *xd); int xnee_get_rec_resolution_y (xnee_data *xd); int xnee_set_rep_resolution (xnee_data *xd, char *res_str); int xnee_get_rep_resolution_x (xnee_data *xd); int xnee_get_rep_resolution_y (xnee_data *xd); #define xnee_set_interrupt_error(xd, err) \ (xd->xnee_info.interrupt=err) #define xnee_set_interrupt_action(xd) \ (xd->xnee_info.interrupt=XNEE_OK_LEAVE) #define xnee_unset_interrupt_action(xd) \ (xd->xnee_info.interrupt=XNEE_OK) #define xnee_get_interrupt_action(xd) \ (xd->xnee_info.interrupt) #define xnee_is_interrupt_action(xd) \ (xd->xnee_info.interrupt!=XNEE_OK) xnee_data* xnee_get_xnee_data (void); int xnee_set_xnee_data (xnee_data *xd); int xnee_set_keep_autorepeat (xnee_data *xd); int xnee_set_retype_press_delay(xnee_data *xd, unsigned int delay); int xnee_set_retype_release_delay(xnee_data *xd, unsigned int delay); #define xnee_get_retype_press_delay(xd) \ (xd->retype.key_press_delay) #define xnee_get_retype_release_delay(xd) \ (xd->retype.key_release_delay) int xnee_set_project_file(xnee_data *xd, char *name); int xnee_set_resolution_str (xnee_data *xd, char *str); int xnee_set_plugin_name(xnee_data *xd, char *str, unsigned char mode); int xnee_set_xosd_feedback(xnee_data *xd); int xnee_set_stderr_feedback(xnee_data *xd); int xnee_set_no_feedback(xnee_data *xd); int xnee_has_xinput2(xnee_data *xd); int xnee_set_no_reparent_recording(xnee_data *xd); int xnee_unset_no_reparent_recording(xnee_data *xd); int xnee_is_no_reparent_recording(xnee_data *xd); int xnee_set_replay_backend(xnee_data *xd, int replay_backend); int xnee_set_replay_backend_name(xnee_data *xd, char *replay_backend); #define xnee_is_swinput_playback(xd) (xd->replay_backend == XNEE_REPLAY_SWINPUT) int xnee_set_forced_core_device_events(xnee_data *xd); int xnee_unset_forced_core_device_events(xnee_data *xd); int xnee_is_forced_core_device_events(xnee_data *xd); int xnee_get_max_nr_of_moves(xnee_data *xd); int xnee_set_max_nr_of_moves(xnee_data *xd, int moves); int xnee_set_override_display(xnee_data *xd, int mode); int xnee_get_override_display(xnee_data *xd); #endif /* XNEE_SETGET_H */ xnee-3.19/libxnee/include/libxnee/x11_files.h0000664000000000000000000000367510641032701015746 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_X11_FILES_H #define XNEE_X11_FILES_H /* Ugly hack to aid various OS */ #define NEED_REPLIES #define NEED_EVENTS #include /* Ugly hack to aid AIX */ #include /* Warning, there be dragons here.... */ #ifndef XLIBINT_H #define XLIBINT_H #endif /* XLIBINT_H */ #include #include #include #include #include #include #include #include #endif /* XNEE_X11_FILES_H */ xnee-3.19/libxnee/include/libxnee/xnee_sem.h0000664000000000000000000000425710640701430015754 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #ifdef XNEE_USE_SEMAPHORES #include int xnee_sem_init(xnee_data *xd, sem_t *sem, int shared, int val); int xnee_sem_wait(xnee_data *xd, sem_t *sem); int xnee_sem_trywait(xnee_data *xd, sem_t *sem); int xnee_sem_post(xnee_data *xd, sem_t *sem); int xnee_sem_destroy(xnee_data *xd, sem_t *sem); #else #define xnee_sem_init(xd, sem, shared, val) #define xnee_sem_wait(xd, sem) #define xnee_sem_trywait(xd, sem) #define xnee_sem_post(xd, sem) #define xnee_sem_destroy(xd, sem) #endif /* XNEE_USE_SEMAPHORES*/ #define XNEE_BUFFER_SEM_INIT #define XNEE_BUFFER_SEM_GET #define XNEE_BUFFER_SEM_WAIT #define XNEE_BUFFER_SEM_POST #define XNEE_BUFFER_SEM_DESTROY xnee-3.19/libxnee/include/libxnee/xnee_internal.h0000664000000000000000000001606112153732372017012 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2013 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_INTERNAL_H #define XNEE_XNEE_INTERNAL_H #include #include #include #include "libxnee/xnee_settings.h" #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #ifdef HAVE_STDARG_H #include #else #include #endif /* needed for the RECORD extension */ #ifndef NEED_EVENTS #define NEED_EVENTS #endif /* NEED_EVENTS */ #ifndef NEED_REPLIES #define NEED_REPLIES #endif /* NEED_REPLIES */ #ifdef HAVE_CONFIG_H # include "config.h" #endif /* If not using GNU C skip: __attribute__ */ #ifndef __GNUC__ # define __attribute__(x) /*NOTHING AT ALL*/ #endif #define XNEE_FREE(a) xnee_free(a); #define XNEE_FCLOSE(a) (void)fclose(a); #define XNEE_FREE_AND_NULL(a) XNEE_FREE(a); a=NULL; #define XNEE_FCLOSE_AND_NULL(a) XNEE_FCLOSE(a); a=NULL; #define XNEE_FREE_IF_NOT_NULL(a) if (a!=NULL) { XNEE_FREE_AND_NULL(a); } #define XNEE_FCLOSE_IF_NOT_NULL(a) if (a!=NULL) { XNEE_FCLOSE_AND_NULL(a); } #define XNEE_CLOSE_DISPLAY_IF_NOT_NULL(a) if(a!=NULL) { XCloseDisplay(a); a=NULL; } /* ** Do NOT edit ** */ enum _xnee_data_types { XNEE_EVENT = 0, XNEE_REQUEST , XNEE_REPLY , XNEE_ERROR , XNEE_DELIVERED_EVENT , XNEE_DEVICE_EVENT , XNEE_EXT_REPLY_MAJOR , XNEE_EXT_REPLY_MINOR , XNEE_EXT_REQUEST_MAJOR , XNEE_EXT_REQUEST_MINOR , XNEE_NR_OF_TYPES , XNEE_META_DATA , XNEE_REPLAY_DATA , XNEE_SETTINGS_DATA , XNEE_MARK_DATA , XNEE_ACTION_DATA , XNEE_PRIMITIVE_DATA , XNEE_PROJECT_INFORMATION_DATA, XNEE_NEW_WINDOW_DATA, XNEE_PREDEF_EVENTS, XNEE_NO_DATA } xnee_data_types ; /* ** Do NOT edit ** */ enum _xnee_mode { XNEE_NOMODE = 0, XNEE_REPLAYER , XNEE_RECORDER , XNEE_RETYPER , XNEE_DISTRIBUTOR , XNEE_SYNTAX_CHECKER } xnee_mode ; /* this macro might be dangerous .. don't use when incrementing variables (e.g i++) */ #define XNEE_MAX(x, y) ((x)>(y)?(x):(y)) /* this macro might be dangerous .. don't use when decrementing variables (e.g i++) */ #define XNEE_MIN(x, y) ((x)>(y)?(y):(x)) /* this macro might be dangerous .. don't use when incrementing variables (e.g i++) */ #define XNEE_ABS(x) ((x)>0?(x):(0-(x))) #ifdef XNEE_WANT_DEBUG #define XNEE_DEBUG(arg) fprintf arg #else #define XNEE_DEBUG(arg) #endif #ifdef XNEE_WANT_SYNC_DEBUG #define XNEE_SYNC_DEBUG(arg) fprintf arg #else #define XNEE_SYNC_DEBUG(arg) #endif /* AIX's XTestFakeKeyEvent has a bug with the last argument * requires 0 - so we use usleep instead * * OBSOLETE * */ #ifdef AIX #define XTEST_ERR_SLEEP(per) usleep (per*1000) #else #define XTEST_ERR_SLEEP(per) #endif /* EO OBSOLETE */ #define XNEE_FAKE_SLEEP(per) { if (per>1000)usleep (per*1000); } #define XNEE_RETURN_IF_ERR(ret_val) \ if (ret_val!=XNEE_OK) \ { \ const char *xnee_macro_tmp ; \ (void) fprintf (stderr, "Xnee error\n"); \ xnee_macro_tmp = xnee_get_err_description (ret); \ (void) fprintf (stderr, "Description: %s\n", xnee_macro_tmp ); \ xnee_macro_tmp = xnee_get_err_solution (ret) ; \ (void) fprintf (stderr, "Solution: %s\n", xnee_macro_tmp); \ return (ret); \ } #define XNEE_RETURN_NULL_IF_ERR(ret_val) \ if (ret_val != XNEE_OK) \ { \ return (NULL); \ } #define XNEE_RETURN_VOID_IF_ERR(ret_val) \ if (ret_val != XNEE_OK) \ { \ const char *xnee_macro_tmp ; \ (void) fprintf (stderr, "Xnee error\n"); \ xnee_macro_tmp = xnee_get_err_description (ret); \ (void) fprintf (stderr, "Description: %s\n", xnee_macro_tmp ); \ xnee_macro_tmp = xnee_get_err_solution (ret) ; \ (void) fprintf (stderr, "Solution: %s\n", xnee_macro_tmp); \ return; \ } #define XNEE_SILENTLY_RETURN_VOID_IF_ERR(ret_val) \ if (ret_val != XNEE_OK) \ { \ return; \ } /* * Resolution states * */ enum xnee_resolution_states { XNEE_RESOLUTION_UNSET = -1, XNEE_RESOLUTION_USED = 0, XNEE_RESOLUTION_UNUSED = 1 } _xnee_resolution_states; /* * Grab modes/actions */ enum xnee_grab_modes { XNEE_GRAB_STOP = 0, XNEE_GRAB_PAUSE , XNEE_GRAB_RESUME , XNEE_GRAB_INSERT , XNEE_GRAB_EXEC , XNEE_GRAB_LAST, XNEE_GRAB_NODATA = 0, XNEE_GRAB_SET = 1, XNEE_GRAB_UNKOWN = 15 } _xnee_grab_modes; /* * continue_process commnd enum */ enum cont_proc_commands { XNEE_PROCESS_RESET = 0 , XNEE_PROCESS_INC , XNEE_PROCESS_DEC , XNEE_PROCESS_GET } _cont_proc_commands; typedef void (*callback_ptr)( XPointer, XRecordInterceptData *); typedef callback_ptr *callback_ptrptr; typedef void (*synch_ptr)( XPointer, XRecordInterceptData *); typedef synch_ptr *synch_ptrptr; typedef int (*print_fptr) ( const char*, ... ); typedef int (*fprint_fptr) (FILE*, const char*, ... ); typedef int (*vfprint_fptr) (FILE*, const char*, va_list ap ); #endif /* XNEE_XNEE_INTERNAL_H */ xnee-3.19/libxnee/include/libxnee/datastrings.h0000664000000000000000000000576210640701427016504 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #ifndef XNEE_DATASTRINGS_H #define XNEE_DATASTRINGS_H void xnee_init_names(void); /** * Get the integer value from X11 data dat * @param dat * @param type * @return int */ int xnee_data2int(int type, char *dat); /** * Get the integer value from X11 data dat * @param dat * @param type type is saved here * @return int */ int xnee_data2int_special(int *type, char *dat); /** * Get the integer value from event ev * @param ev * @return int */ int xnee_event2int(char *ev); /** * Get the integer value from request req * @param req * @return int */ int xnee_request2int(char *req); /** * Get the integer value from error err * @param err * @return int */ int xnee_error2int(char *err); /** * Prints a string representation of the error * @param err * @return char * */ char * xnee_print_error_code ( int err); /* * Prints the name of the XEvent that corresponds to the argument ev * Printout is made on stdout */ char * xnee_print_event (int); /* * Prints the name of the Request that corresponds to the argument ev * Printout is made on stdout */ char * xnee_print_request ( int req); char * xnee_int2event(int ev); char * xnee_int2request(int req); char * xnee_int2error(int err); struct data_description* xnee_get_event_names(void); struct data_description* xnee_get_error_names(void); struct data_description* xnee_get_request_names(void); struct data_description* xnee_get_reply_names(void); char* xnee_int2data(int type, int dat); #endif /* XNEE_DATASTRINGS_H */ xnee-3.19/libxnee/include/libxnee/xnee_grab.h0000664000000000000000000000471010640701427016103 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_GRAB_H #define XNEE_GRAB_H int xnee_ungrab_key (xnee_data* xd, int mode); int xnee_ungrab_keys (xnee_data* xd); xnee_grab_keys* xnee_new_grab_keys(xnee_data *xd); /*@null@*/ int xnee_free_grab_keys(/*@null@*/ xnee_grab_keys *grab_keys); int xnee_grab_keys_init(xnee_data *xd); int xnee_grab_all_keys (xnee_data* xd); enum { XNEE_GRAB_NONE_PRESSED=0, XNEE_GRAB_NONE_IN_USE, XNEE_GRAB_SOME_IN_USE, XNEE_GRAB_ALL_IN_USE, XNEE_GRAB_DO_SAVE, XNEE_GRAB_DO_PRINT, XNEE_GRAB_DONT_PRINT, XNEE_OVERRIDE_FALSE, XNEE_OVERRIDE_TRUE, XNEE_OVERRIDE_GET, XNEE_GRAB_BUFFER_SAVE, XNEE_GRAB_BUFFER_PRINT, XNEE_GRAB_BUFFER_RESET, XNEE_GRAB_KM_PRESS, XNEE_GRAB_KM_RELEASE, XNEE_GRAB_MOUSE } xnee_grab_modifiers_control ; int xnee_save_or_print(xnee_data *xd, KeyCode kc, int mode); int xnee_grab_handle_buffer(xnee_data *xd, char *str, int mode); int xnee_get_grab_mode ( xnee_data *xd, int key); void xnee_print_grabbed_keys(xnee_data *xd); #endif /* XNEE_GRAB_H */ xnee-3.19/libxnee/include/libxnee/xnee_fileop.h0000664000000000000000000000331410640701427016445 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_FILEOP_H #define XNEE_XNEE_FILEOP_H int xnee_open_err_file(xnee_data *xd); int xnee_free_file (xnee_data *xd, /*@null@*/ char *file_name, /*@null@*/ FILE* file); int xnee_open_files(xnee_data *xd); #endif /* XNEE_XNEE_FILEOP_H */ xnee-3.19/libxnee/include/libxnee/xnee_fake.h0000664000000000000000000001104511447136544016105 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_FAKE_H #define XNEE_FAKE_H #include "xnee.h" #include "xnee_record.h" int xnee_reset_fake( xnee_data *xd); #define xnee_fake_motion_event(xd, scr, x, y, dtime) xnee_fake_motion_event_impl(xd, scr, x, y, dtime, 0) #define xnee_fake_xi_motion_event(xd, scr, x, y, dtime, dev) xnee_fake_motion_event_impl(xd, scr, x, y, dtime, dev) #define xnee_fake_button_event(xd, button, bo , dtime) xnee_fake_button_event_impl (xd, button, bo , dtime, 0) #define xnee_fake_xi_button_event(xd, button, bo , dtime, deviceid) xnee_fake_button_event_impl (xd, button, bo , dtime, deviceid) #define xnee_fake_key_event(xd, key, bo , dtime) xnee_fake_key_event_impl (xd, key, bo , dtime, 0) #define xnee_fake_xi_key_event(xd, key, bo , dtime, deviceid) xnee_fake_key_event_impl (xd, key, bo , dtime, deviceid) /** * Sends a faked moton event to the display in the distribution list as found in xd. * @param xd xnee's main structure * @param screen the screen to send it to * @param x x coordinate * @param y y coordinate * @param dtime how long before the faking shall take place * @param deviceid Id of the device (XInput extension) * @return int XNEE_OK on success. */ int xnee_fake_motion_event_impl (xnee_data* xd, int screen, int x, int y, unsigned long dtime, int deviceid); /** * Sends a faked button event to the display in the distribution list as found in xd. * @param xd xnee's main structure * @param button the button to fake * @param bo press or release * @param dtime how long before the faking shall take place * @param deviceid Id of the device (XInput extension) * @return int XNEE_OK on success. */ int xnee_fake_button_event_impl (xnee_data* xd, int button, Bool bo , int dtime, int deviceid); /** * Sends a faked key event to the display in the distribution list as found in xd. * @param xd xnee's main structure * @param keycode keycode of the event to be faked * @param bo is it a press or a release * @param dtime how long before the faking shall take place * @param deviceid Id of the device (XInput extension) * @return int XNEE_OK on success. */ int xnee_fake_key_event_impl (xnee_data* xd, int keycode, Bool bo, int dtime, int deviceid); /** * Replays the event (if possible) and calls xnee_fake_** * functions for distribution.
* If it wasn't poosible to replay the event XNEE_NOT_REPLAYABLE is returned. * * @param xd xnee's main structure * @param xid the data to replay * @param last_elapsed * @return 0 on success, XNEE_NOT_REPLAYABLE if failure * */ int xnee_replay_event_handler (xnee_data *xd, xnee_intercept_data* xid , long int last_elapsed); int xnee_fake_relative_motion_event (xnee_data* xd, int x, int y, unsigned long dtime); int xnee_type_file(xnee_data *xd ); int xnee_fake_key_mod_event (xnee_data* xd, xnee_script_s *xss, Bool bo, int dtime); #endif /* XNEE_FAKE_H */ xnee-3.19/libxnee/include/libxnee/xnee_plugin.h0000664000000000000000000000430211175423223016462 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, * 2008, 2009 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_PLUGIN_H #define XNEE_XNEE_PLUGIN_H /** * Opens the plugin file (pl_name). Xnee will use the functions in this file instead of the built in * @param xd xnee's main structure * @param pl_name name of the plugin file * @param mode external (1) or internal (0) plugin * @return int 0 means OK. */ int xnee_use_plugin(xnee_data *xd, char *pl_name, unsigned char mode); /** * Closes the previoulsy opened plugin file (pl_name). * Xnee will use the defaults functions as callbacks again * @param xd xnee's main structure * @param pl_name name of the plugin file * @return int 0 means OK. */ int xnee_unuse_plugin(xnee_data *xd); #endif /* XNEE_XNEE_PLUGIN_H */ xnee-3.19/libxnee/include/libxnee/print_varargs.h0000664000000000000000000000431610640701427017034 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_PRINT_VARARGS_H #define XNEE_PRINT_VARARGS_H #include "libxnee/xnee.h" /** * Verbose prints to specified file * * @param xd xnee's main structure * @param str formatted string * @param .... extra parameters to string * @return void */ void xnee_verbosef (xnee_data* xd, /*@null@*/ char * str, ...) __attribute__ ((format ( printf, 2 , 3))) ; #ifdef HAVE_STDARG_H void xnee_print_error (char * error, ...) __attribute__ (( format (printf, 1, 2))); #else void xnee_print_error (char * error, ...) __attribute__ (( format (printf, 1, 2))); #endif /* HAVE_STDARG_H */ #ifdef NO_VERBOSE #define xnee_verbose(a) #else #define xnee_verbose(a) xnee_verbosef a #endif /* NO_VERBOSE */ #endif /* XNEE_PRINT_VARARGS_H */ xnee-3.19/libxnee/include/libxnee/xnee_expr.h0000664000000000000000000000336411173444477016165 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2009 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" int xnee_expression_handle_session(xnee_data *xd, char *tmp, xnee_intercept_data * xindata); int xnee_expression_handle_project(xnee_data *xd, char *tmp); int xnee_is_script(xnee_data *xd, char *tmp); xnee-3.19/libxnee/include/libxnee/xnee_window.h0000664000000000000000000000525110641032701016471 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2006, 2007 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" typedef struct { int rel_x ; int rel_y ; int x ; int y ; int border_w; int border_h; int width ; int height ; int window ; int event ; int parent ; char* name ; } xnee_win_pos; enum { XNEE_WINDOW_RECEIVED, XNEE_WINDOW_SESSION } xnee_window_types; int xnee_window_add_attribue_impl(xnee_data *xd, XWindowAttributes *attributes, Window win, int where); int xnee_window_add_impl(xnee_data *xd, xnee_win_pos *xwp, int where); int xnee_window_add_attribute_impl(xnee_data *xd, XWindowAttributes *attributes, Window win, Window parent, int where); #define xnee_window_add_session(xd, xwp) \ xnee_window_add_impl(xd, xwp, XNEE_WINDOW_SESSION) #define xnee_window_add_received(xd, xwp) \ xnee_window_add_impl(xd, xwp, XNEE_WINDOW_RECEIVED) #define xnee_window_add_attribute_received(xd, xwp, win, par) \ xnee_window_add_attribute_impl(xd, xwp, win, par, XNEE_WINDOW_RECEIVED) #define xnee_window_add_attribute_session(xd, xwp, win, par) \ xnee_window_add_attribute_impl(xd, xwp, win, par, XNEE_WINDOW_SESSION) int xnee_window_try_move(xnee_data *xd); xnee-3.19/libxnee/include/libxnee/xnee_time.h0000664000000000000000000000642610640701430016126 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_TIME_H #define XNEE_TIME_H int xnee_reset_elapsed_time(xnee_data *xd); /** * Returns the elapsed time from either the 1st read or the last call to this f'n * * @param xd xnee's main structure * @param type char (f or l ) represents type of elapsed time * @return long elapsed time. */ long xnee_get_elapsed_time(xnee_data *xd, char type ); /** * Returns the calculated sleep amount - attempts to keep timing the same as when recorded * * @param xd xnee's main structure * @param last_diff amount of time elapsed since last read * @param first_diff amount of time elapsed since 1st read (ie how long playback has been running) * @param record_last_diff recorded amount of time between last recorded entry and current entry * @param record_first_diff recorded amount of time between start of recording and current entry * @return long amount of time to sleep */ long xnee_calc_sleep_amount(xnee_data *xd, unsigned long last_diff, unsigned long first_diff, unsigned long record_last_diff, unsigned long record_first_diff ); #define xnee_is_normal_speed(xd) (xd->speed_percent==100) #define xnee_get_speed(xd) xd->speed_percent long xnee_calc_sleep_amount_percent(xnee_data *xd, Time last_diff, Time first_diff, Time record_last_diff, Time recordFirst_diff ); long xnee_calc_sleep_amount_slow(xnee_data *xd, unsigned long last_diff, unsigned long first_diff, unsigned long record_last_diff, unsigned long recordFirst_diff ); long xnee_calc_sleep_amount_fast(xnee_data *xd, unsigned long last_diff, unsigned long first_diff, unsigned long record_last_diff, unsigned long recordFirst_diff ); #endif /* XNEE_TIME_H */ xnee-3.19/libxnee/include/libxnee/xnee_strings.h0000664000000000000000000001640411446717745016703 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 * 2009, 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_STRINGS_H #define XNEE_XNEE_STRINGS_H #include "libxnee/xnee.h" extern const char* XNEE_EMPTY_STRING ; extern const char* XNEE_COMMENT_START_STR ; extern const char XNEE_COMMENT_START_CHAR ; extern const char* XNEE_HOME_URL ; extern const char* XNEE_MAIL ; extern const char* XNEE_AUTHORS ; extern const char* XNEE_BUG_MAIL ; extern const char* XNEE_DEVEL_MAIL ; extern const char* GNU_HOME_URL ; extern const char* FSF_HOME_URL ; extern const char* XNEE_PLUGIN_DIR ; extern const char* XNEE_RESOURCE_DIR ; extern const char* XNEE_ERR_FILE ; extern const char* XNEE_OUT_FILE ; extern const char* XNEE_DISPLAY ; extern const char* XNEE_FIRST_LAST ; extern const char* XNEE_ALL_EVENTS ; extern const char* XNEE_ALL_CLIENTS ; extern const char* XNEE_FUTURE_CLIENTS ; extern const char* XNEE_DIMENSION ; extern const char* XNEE_EVENT_MAX ; extern const char* XNEE_DATA_MAX ; extern const char* XNEE_TIME_MAX ; extern const char* XNEE_LOOPS_LEFT ; extern const char* XNEE_STOP_KEY ; extern const char* XNEE_PAUSE_KEY ; extern const char* XNEE_RESUME_KEY ; extern const char* XNEE_INSERT_KEY ; extern const char* XNEE_EXEC_KEY ; extern const char* XNEE_EXEC_PROGRAM ; extern const char* XNEE_EXEC_NO_PROG ; extern const char* XNEE_EXEC_MARK ; extern const char* XNEE_NEW_WINDOW_MARK ; extern const char* XNEE_NEW_WINDOW ; extern const char* XNEE_EVERYTHING ; extern const char* XNEE_DELAY_TIME ; extern const char* XNEE_SPEED_PERCENT ; extern const char* XNEE_RECORDED_RESOLUTION ; extern const char* XNEE_REPLAY_RESOLUTION ; extern const char* XNEE_ADJUST_RESOLUTION ; extern const char* XNEE_DISTRIBUTE ; extern const char* XNEE_NO_EXPOSE ; extern const char* XNEE_NO_SYNC_MODE ; extern const char* XNEE_REPLAY_OFFSET ; extern const char* XNEE_USE_SYNC ; extern const char* XNEE_SYNC_MODE ; extern const char* XNEE_RECALL_WINDOW_POS ; extern const char* XNEE_HUMAN_PRINTOUT ; extern const char* XNEE_LOOPS ; extern const char* XNEE_FORCE_REPLAY ; extern const char* XNEE_RESOURCE ; extern const char* XNEE_PLUGIN ; extern const char* XNEE_ERROR_FD ; extern const char* XNEE_VERBOSE ; extern const char* XNEE_BUFFER_VERBOSE ; extern const char* XNEE_MOUSE ; extern const char* XNEE_KEYBOARD ; extern const char* XNEE_STORE_MOUSE_POS ; extern const char* XNEE_FEEDBACK_XOSD ; extern const char* XNEE_XOSD_FONT ; extern const char* XNEE_FEEDBACK_STDERR ; extern const char* XNEE_FEEDBACK_NONE ; extern const char* XNEE_REQUEST_STR ; extern const char* XNEE_REPLIES_STR ; extern const char* XNEE_DEVICE_EVENT_STR ; extern const char* XNEE_DELIVERED_EVENT_STR ; extern const char* XNEE_ERROR_STR ; extern const char* XNEE_REPLY_STR ; extern const char* XNEE_EXT_REQ_MAJ_STR ; extern const char* XNEE_EXT_REQ_MIN_STR ; extern const char* XNEE_EXT_REP_MAJ_STR ; extern const char* XNEE_EXT_REP_MIN_STR ; extern const char* XNEE_META_END ; extern const char* XNEE_MAX_THRESHOLD ; extern const char* XNEE_MIN_THRESHOLD ; extern const char* XNEE_TOT_THRESHOLD ; extern const char* XNEE_REPLAY_CALLBACK_NAME ; extern const char* XNEE_RECORD_CALLBACK_NAME ; extern const char* XNEE_SYNC_FUNCTION_NAME ; extern const char* EXT_REPLAY_CALLBACK_NAME ; extern const char* EXT_RECORD_CALLBACK_NAME ; extern const char* EXT_SYNC_FUNCTION_NAME ; extern const char* XNEE_FAKE_MOTION ; extern const char* XNEE_FAKE_X_ARG ; extern const char* XNEE_FAKE_Y_ARG ; extern const char* XNEE_FAKE_BUTTON_PRESS ; extern const char* XNEE_FAKE_BUTTON_RELEASE ; extern const char* XNEE_FAKE_BUTTON ; extern const char* XNEE_FAKE_BUTTON_ARG ; extern const char* XNEE_FAKE_KEY_PRESS ; extern const char* XNEE_FAKE_KEY_RELEASE ; extern const char* XNEE_FAKE_KEY ; extern const char* XNEE_FAKE_KEY_ARG ; extern const char* XNEE_FAKE_MSEC_SLEEP ; extern const char* XNEE_TRUE_STRING ; extern const char* XNEE_1_STRING ; extern const char* XNEE_FALSE_STRING ; extern const char* XNEE_0_STRING ; extern const char* XNEE_XK_ALT_L ; extern const char* XNEE_XK_ALT_R ; extern const char* XNEE_XK_RETURN ; extern const char* XNEE_XK_SPACE ; extern const char* XNEE_XK_UP ; extern const char* XNEE_XK_DOWN ; extern const char* XNEE_XK_LEFT ; extern const char* XNEE_XK_RIGHT ; extern const char* XNEE_SYMBOLIC_ALT ; extern const char* XNEE_SYMBOLIC_CONTROL ; extern const char* XNEE_SYMBOLIC_SCROLL ; extern const char* XNEE_SYMBOLIC_CAPS ; extern const char* XNEE_SYMBOLIC_SHIFT ; extern const char* XNEE_REAL_ALT ; extern const char* XNEE_REAL_CONTROL ; extern const char* XNEE_REAL_SCROLL ; extern const char* XNEE_REAL_CAPS ; extern const char* XNEE_REAL_SHIFT ; extern const char* XNEE_XINPUT_EXTENSION_NAME ; extern const char* NULL_STRING ; extern const char* XNEE_REPLAY_XNEE_STRING ; extern const char* XNEE_REPLAY_SWINPUT_STRING; #define EMPTY_IF_NULL(a) (a?a:XNEE_EMPTY_STRING) #endif /* XNEE_XNEE_STRINGS_H */ xnee-3.19/libxnee/include/libxnee/xnee_buffer.h0000664000000000000000000000500310640701427016435 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_resolution.h" #ifndef XNEE_XNEE_BUFFER_H #define XNEE_XNEE_BUFFER_H int xnee_replay_buffer_max_diff (xnee_data* xd, int type); int xnee_replay_buffer_min_diff (xnee_data* xd, int type); int xnee_replay_buffer_tot_diff (xnee_data* xd, int type); void xnee_replay_buffer_handler (xnee_data* xd, int data_type, int data_nr, Bool rec_or_rep); int xnee_hard_update_buffer_cache(xnee_data *xd); int xnee_check_buffer_limits (xnee_data *xd); /** * Prints the synchronisation status of the X11 data given by data_type and nr * * @param xd xnee's main structure * @param data_type X11 data type (e.g event) * @param nr nr of the data type (e.g 23) * @return int 0 means in sync. */ int xnee_replay_buffer_status (xnee_data* xd, int data_type, int nr); int xnee_update_buffer_cache(xnee_data *xd); #endif /* XNEE_XNEE_BUFFER_H */ xnee-3.19/libxnee/include/libxnee/xnee_threshold.h0000664000000000000000000000316410640701430017160 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_THRESHOLD_H #define XNEE_THRESHOLD_H #include "libxnee/xnee.h" /* The headers have moved to xnee_setget.h */ #endif /* XNEE_THRESHOLD_H */ xnee-3.19/libxnee/include/libxnee/xnee_range.h0000775000000000000000000001002511715172361016266 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_RANGE_H #define XNEE_RANGE_H #include "xnee.h" struct xnee_range { int *data; int index; int size; }; struct xnee_ranges { struct xnee_range type[XNEE_NR_OF_TYPES]; int nr_of_data; int alloc_size; } ; /* Standard includes */ #include #include "libxnee/xnee.h" /** * Adds a range of data to record. *

* Example range string: 1,2-4,6-9,12,10
* Calls xnee_add_range to do the job of allocating * * @param xd xnee's main structure * @param data_type type of X11 data (event, request ...) * @param range_str comma spearated integer or integer "-" integer * @return int returns 0 in success */ int xnee_add_range_str (xnee_data *xd, int data_type, char *range_str); /** * Add X11 data to record. Allocates a Record structure if needed. *

* YOU HAVE TO DEALLOC THE RANGES ALLOCATED BY THIS FUNCIOTN * or you can use xnee_free_xnee_data * * @param xd xnee's main structure * @param type type of protocol data (i.e event, request, reply or error) * @param first first value of range (or only value) * @param end end value of range (if not 0) * @return int returns 0 in success */ int xnee_add_range (xnee_data *xd, int type , int first, int end); /** * Parses a range string and call. * Calls xnee_add_range_str to do the job of allocating *

* Example: xnee_parse_range (xd, XNEE_EVENT, "1-4,7,13"); *

* NOTE: YOU HAVE TO DEALLOC THE RANGES ALLOCATED BY THIS FUNCIOTN * or you can use xnee_free_xnee_data * * @param xd xnee's main structure * @param type type of protocol data (i.e event, request, reply or error) * @param range string with ranges * @return int 0 on success */ int xnee_parse_range (xnee_data *xd, int type , char *range); /** * Sets a XRecordRange's values to 0 (zero) *

* This uses memset instead of going through the structure and set each value to 0. * * @param range the XRecordRange to set to 0 * @return void */ void xnee_null_range ( XRecordRange *range); int xnee_get_nr_of_data (int type); int * xnee_get_data (int type); int xnee_print_list(void); int xnee_set_ranges(xnee_data *xd); int* xnee_get_list(int type); int xnee_rem_from_list(xnee_data *xd, int type, int ev); int xnee_rem_data_from_range_str (xnee_data *xd, int type , char *str) ; int xnee_refresh_ranges(xnee_data *xd); int xnee_free_ranges(xnee_data *xd); int xnee_init_ranges(void); int xnee_is_type_nr_set(xnee_data *xd, int type, int nr); #endif xnee-3.19/libxnee/include/libxnee/xnee_callback.h0000664000000000000000000000643411173444541016734 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2009 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ /** * Sets the callback function for Xnee as located in the plugin * previously loaded with xnee_dlopen. The function tries to * resolve the name in the plugin lib. * * If the funciton could not resolve the name the prevoius * is still used. It is up to the user to take action if * resolving the wasn't successfull. * * @param xd xnee's main structure * @param dest where to store the function. * @param sym_name name of the function to find * @return int XNEE_OK if successful. * XNEE_WRONG_PARAMS if type is wrong, * XNEE_NO_MAIN_DATA if xd is null */ int xnee_set_callback (xnee_data *xd, callback_ptrptr dest, const char *sym_name); /* OLD VERSION xnee_set_callback (xnee_data *xd, void (**dest) (XPointer , XRecordInterceptData *), const char *sym_name); */ /** * Sets the synchronising callback function for Xnee as located * in the plugin previously loaded with xnee_dlopen. The function * tries to resolve the name in the plugin lib. * * If the funciton could not resolve the name the prevoius * is still used. It is up to the user to take action if * resolving the wasn't successfull. * * @param xd xnee's main structure * @param dest where to store the function * @param sym_name name of the function to find * @return int XNEE_OK if successful. * XNEE_WRONG_PARAMS if type is wrong, * XNEE_NO_MAIN_DATA if xd is null */ int xnee_set_synchronize (xnee_data *xd, synch_ptrptr dest, const char *sym_name); /* OLD VERSION xnee_set_synchronize (xnee_data *xd, void (**dest) (xnee_data *xd, int replayed_type, int replayed_nr), const char *sym_name); */ xnee-3.19/libxnee/include/libxnee/xnee_resource.h0000664000000000000000000002172512332106430017015 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 * 2010, 2014 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_km.h" #include "libxnee/datastrings.h" #ifndef XNEE_RESOURCE_H #define XNEE_RESOURCE_H extern xnee_option_t *xnee_options; #define XNEE_RES_PROJECT "ProjectName" #define XNEE_RES_DESCRIPTION "ProjectDescription" #define XNEE_RES_CREAT_DATE "ProjectCreationDate" #define XNEE_RES_CREAT_PROGRAM "ProjectCreationProgram" #define XNEE_RES_CREAT_PROG_VER "ProjectCreationProgVersion" #define XNEE_RES_LASTCHANGE_DATE "ProjectLastChangeDate" #define XNEE_RES_LASTCHANGE_PROGRAM "ProjectLastChangeProgram" #define XNEE_RES_LASTCHANGE_PROG_VER "ProjectLastChangeProgVersion" #define XNEE_RES_CURRENT_CHANGE_DATE "ProjectCurrentChangeDate" #define XNEE_RES_CURRENT_CHANGE_PROGRAM "ProjectCurrentChangeProgram" #define XNEE_RES_CURRENT_CHANGE_PROG_VER "ProjectCurrentChangeProgVersion" #define XNEE_RES_AUTHOR_NAME "Author" #define XNEE_RES_AUTHOR_EMAIL "Email" #define XNEE_NO_SYNTAX 0 #define XNEE_CLI_SYNTAX 1 #define XNEE_XNS_SYNTAX 2 #define XNEE_CLI_PREFIX "--" #define xnee_find_resource_option_entry(xd, option, options) \ xnee_find_option_entry_impl (xd, option, options, XNEE_XNS_SYNTAX) #define xnee_find_cli_option_entry(xd, option, options) \ xnee_find_option_entry_impl(xd, option, options, XNEE_CLI_SYNTAX) #define XNEE_OPTION_VISIBLE 1 #define XNEE_LAST_OPTION -1 #define XNEE_OPTION_NOT_FOUND -1 #define XNEE_RESOURCE_CHECK(a,b) strncmp(a,b,strlen(a)) #define XNEE_REMOVE_BEGINING_BLANKS(val) \ do { val++ ;} while( (val[0] == ' ') || (val[0] == '\t') ); #define XNEE_REMOVE_TRAILING_CRAP(a) \ do { a[strlen(a)-1]='\0'; } \ while ( (a[strlen(a)-1] == ' ') || (a[strlen(a)-1] == '\n') ) ; int xnee_init_xnee_resource_meta(xnee_resource_meta* xrm); int xnee_new_xnee_resource_meta(xnee_resource_meta* xrm); int xnee_free_xnee_resource_meta(xnee_resource_meta* xrm); enum XNEE_OPTION_KEYS { XNEE_NO_OPTION_KEY=0 , XNEE_ERR_FILE_KEY , XNEE_OUT_FILE_KEY , XNEE_DISPLAY_KEY , XNEE_FIRST_LAST_KEY , XNEE_ALL_EVENTS_KEY , XNEE_ALL_CLIENTS_KEY , XNEE_FUTURE_CLIENTS_KEY , XNEE_DIMENSION_KEY , XNEE_EVENT_MAX_KEY , XNEE_DATA_MAX_KEY , XNEE_TIME_MAX_KEY , /* XNEE_LOOPS_LEFT_KEY , */ XNEE_STOP_KEY_KEY , XNEE_PAUSE_KEY_KEY , XNEE_RESUME_KEY_KEY , XNEE_INSERT_KEY_KEY , XNEE_EXEC_KEY_KEY , XNEE_EXEC_PROGRAM_KEY , XNEE_EXEC_MARK_KEY , XNEE_NEW_WINDOW_MARK_KEY , XNEE_EVERYTHING_KEY , XNEE_DELAY_TIME_KEY , XNEE_SPEED_PERCENT_KEY , XNEE_RECORDED_RESOLUTION_KEY, XNEE_REPLAY_RESOLUTION_KEY, XNEE_ADJUST_RESOLUTION_KEY, XNEE_DISTRIBUTE_KEY , XNEE_RECORD_OPTION_KEY , XNEE_REPLAY_OPTION_KEY , XNEE_NO_EXPOSE_KEY , XNEE_NO_SYNC_MODE_KEY , /* XNEE_USE_SYNC_KEY , */ XNEE_SYNC_MODE_KEY , XNEE_RECALL_WINDOW_POS_KEY, XNEE_REPLAY_OFFSET_KEY , XNEE_KEEP_AUTOREPEAT , XNEE_HUMAN_PRINTOUT_KEY , XNEE_LOOPS_KEY , XNEE_FORCE_REPLAY_KEY , XNEE_RESOURCE_KEY , XNEE_PLUGIN_KEY , XNEE_ERROR_FD_KEY , XNEE_VERBOSE_KEY , XNEE_BUFFER_VERBOSE_KEY , XNEE_STORE_MOUSE_POS_KEY , XNEE_XOSD_FONT_KEY , XNEE_FEEDBACK_XOSD_KEY , XNEE_FEEDBACK_STDERR_KEY , XNEE_FEEDBACK_NONE_KEY , XNEE_MAX_THRESHOLD_KEY , XNEE_MIN_THRESHOLD_KEY , XNEE_TOT_THRESHOLD_KEY , XNEE_REQUEST_STR_KEY , XNEE_DEVICE_EVENT_STR_KEY , XNEE_DELIVERED_EVENT_STR_KEY, XNEE_ERROR_STR_KEY , XNEE_REPLY_STR_KEY , XNEE_EXT_REQ_MAJ_STR_KEY , XNEE_EXT_REQ_MIN_STR_KEY , XNEE_EXT_REP_MAJ_STR_KEY , XNEE_EXT_REP_MIN_STR_KEY , XNEE_RETYPE_PRESS_DELAY , XNEE_RETYPE_RELEASE_DELAY , XNEE_NO_REPARENT_RECORD , XNEE_MAX_WINDOW_MOVES , XNEE_RECORD_FROM_DATA_DISPLAY, XNEE_RECORD_FROM_CONTROL_DISPLAY }; /** * Opens the resource file as specified in xd. Reads it and calls xnee_add_resource_syntax where applicable. * @param xd xnee's main structure * @return int 0 means OK. */ int xnee_add_resource(xnee_data *xd); /** * Takes a Xnee setting in form of a string (using Xnee Session/Resource file format) * @param xd * @param tmp * @return int 1 on success, 0 on failure. * \todo (return values need to be changed) */ #define xnee_add_resource_syntax(xd, tmp_str) xnee_add_resource_syntax_impl(xd, tmp_str, XNEE_XNS_SYNTAX) /** * Takes a Xnee setting in form of a string as used by program (gnee, cnee) * @param xd * @param tmp * @return int 1 on success, 0 on failure. * \todo (return values need to be changed) */ #define xnee_add_cli_syntax(xd, tmp_str) xnee_add_resource_syntax_impl(xd, tmp_str, XNEE_CLI_SYNTAX) /** * Takes a Xnee setting in form of a string * @param xd * @param tmp * @return int 1 on success, 0 on failure. * \todo (return values need to be changed) */ int xnee_add_resource_syntax_impl(xnee_data *xd, char *str, int syntax_type); int xnee_set_project_name(xnee_data *xd, char* project_name_str); int xnee_set_project_descr(xnee_data *xd, char* project_descr_str); int xnee_set_creat_date(xnee_data *xd, char* creat_date_str); int xnee_set_creat_program(xnee_data *xd, char* creat_prog_str); int xnee_set_creat_prog_vers(xnee_data *xd, char* creat_prog_date_str); int xnee_set_last_date(xnee_data *xd, char* last_date_str); int xnee_set_last_program(xnee_data *xd, char* last_prog_str); int xnee_set_last_prog_vers(xnee_data *xd, char* last_prog_date_str); int xnee_set_author_name(xnee_data *xd, char* author_name_str); int xnee_set_author_email(xnee_data *xd, char* author_email_str); int xnee_set_char(xnee_data *xd, char* char_str); int xnee_handle_resource_meta (xnee_data *xd, char *meta_str); /* int xnee_is_option(xnee_data *xd, xnee_options_t *options, const char *str, int syntax_type); int xnee_is_resource_option(xnee_data *xd, const char *str, int syntax_type); int xnee_add_strings (xnee_data *xd, xnee_options_t *options, const char *long_option, const char *short_option, char *args, char *option_descr, int type); int xnee_find_option_entry (xnee_data *xd, const char *option, xnee_options_t *options); #define xnee_parse_check(xd, str, opt) \ xnee_parse_check_impl(xd, xnee_options, str, opt) int xnee_parse_check_impl(xnee_data *xd, xnee_options_t *options, const char *str, char *opt); */ const char * xnee_key2string(xnee_data *xd, xnee_option_t *options, int key); #define xnee_xns_key2string(key) \ xnee_key2string(xd, xnee_options, key) #define xnee_parse_xns_option(x,o,a) xnee_parse_option_impl(x,o,a,XNEE_XNS_SYNTAX) #define xnee_parse_cli_option(x,o,a) xnee_parse_option_impl(x,o,a,XNEE_CLI_SYNTAX) int xnee_parse_option_impl(xnee_data *xd, char **opt_and_args, int *args_used, int syntax_mode); int xnee_find_option_entry_impl (xnee_data *xd, xnee_option_t *options, const char *option, int syntax_type); #endif /* XNEE_RESOURCE_H */ xnee-3.19/libxnee/include/libxnee/xnee_xinput.h0000664000000000000000000000605412153732372016526 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2010, 2011, 2013 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XINPUT_H #define XNEE_XINPUT_H #include "libxnee/xnee.h" #ifdef XNEE_XINPUT_SUPPORT #include #include #include #endif /* XNEE_XINPUT_SUPPORT */ #define xnee_disable_xinput(xd) \ xd->xi_data.xinput_event_base = 0 ; \ xd->xi_data.recording_enabled = 0 ; \ xd->xi_data.xinput_record_mouse = 0; \ xd->xi_data.xinput_record_keyboard = 0; #define xnee_xinput_disabled(xd)\ (xd->xi_data.recording_enabled != 1) #define xnee_xinput_request_mouse(xd) \ xd->xi_data.xinput_record_mouse=1; #define xnee_xinput_request_keyboard(xd) \ xd->xi_data.xinput_record_keyboard=1; #define xnee_xinput_unrequest_mouse(xd) \ xd->xi_data.xinput_record_mouse=0; #define xnee_xinput_unrequest_keyboard(xd) \ xd->xi_data.xinput_record_keyboard=0; #define xnee_xinput_mouse_requested(xd) \ (xd->xi_data.xinput_record_mouse==1) #define xnee_xinput_keyboard_requested(xd)\ (xd->xi_data.xinput_record_keyboard==1) int xnee_init_xinput(xnee_data *xd); int xnee_init_xinput_devices(xnee_data *xd); int xnee_get_xinput_event_base(Display *dpy); int xnee_has_xinput(xnee_data *xd); int xnee_handle_xinput_event(xnee_data * xd, int event_type, XRecordDatum *xrec_data, Time server_time); int xnee_handle_xinput_event_human(xnee_data * xd, int event_type, XRecordDatum *xrec_data, Time server_time); XDevice * xnee_get_xinput_device(xnee_data *xd, int deviceid); int xnee_xinput_add_devices(xnee_data *xd); #endif /* XNEE_XINPUT_H */ xnee-3.19/libxnee/include/libxnee/xnee_replay.h0000775000000000000000000001266510640701430016471 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_REPLAY_H #define XNEE_REPLAY_H #include "xnee.h" #include "xnee_record.h" /* internal use only */ unsigned long int xnee_delta_time( xnee_intercept_data *); /** * Read the Xnee Manual and Xnee developer Manual for a more detailed * description on synchronisation. * * @param xd xnee's main structure * @return void */ int xnee_replay_synchronize (xnee_data *xd) ; #ifdef USE_OBSOLETE /** * Reads from file (or stdin) an X11 protocol data and places it in xid. * If no X11 data was found it calls xnee_handle_meta_data to handle the data. * * @param xd xnee's main structure * @param xid X11 data read from file is stored here * @return int number of data read. 0 means failure or no more data * */ int xnee_replay_read_protocol (xnee_data *xd, xnee_intercept_data *xid); #endif /** * Handles all meta data read from file.
* The meta data is used to setup Xnee when replaying. * * @param xd xnee's main structure * @param str the meta data found in the file * @return int */ int xnee_handle_meta_data(xnee_data* xd ,char* str ); /** * Reads data from file (or stdin) until the file reaches an end or the user presses * the stop modifier+key. * * @param xd xnee's main structure * @param read_mode Read meta data or read replay data * @return void */ int xnee_replay_main_loop ( xnee_data *xd, int read_mode); /** * Sets up Record extension with nice values * * @param xd xnee's main structure * @return int 0 on success. */ int xnee_setup_rep_recording(xnee_data *xd); /** * Callback function for Record extension when an X11 data is ready to be picked up the * recording program (yes, that's Xnee). It can also be called indirectly by Xnee when * Xnee calls XRecordProcessReplies. *
* If data was recievied it is handled by the synchronise function. If no data was ready * to be read (as is usually the case when calling XRecordProcessReplies (which in turn * calls this function)) nothing is done. * * @param xd pointer to xnee's main structure * @param xp pointer to data as sent by the Xserver * @return void */ void xnee_replay_dispatch (XPointer xd, XRecordInterceptData *xp); /** * Stores data in buffers. * The synchronisation and callback functions makes use of this function to store * data that are out of sync. * * @param xd xnee's main structure * @param data_type X11 data type (e.g event) * @param nr X11 data nr (e.g 23) * @param rec_or_rep Is the data received or replayed * @return int */ int xnee_replay_buffer_handle (xnee_data* xd, int data_type, int nr, Bool rec_or_rep); /** * Verifies that XTest extension is present * * @param xd xnee's main structure * @return int 0 if not. 1 if XTest is present. * \todo (return values need to be changed) */ int xnee_has_xtest_extension (xnee_data *xd) ; /** * Inits the replaying data in xnee_data * @param xd xnee's main structure * @return void */ void xnee_replay_init (xnee_data *xd); /* OBSOLETED */ void xnee_m_delay (int); /** * Parses the arguments given in argv as given by the resource file syntax.
* Read the manual for a description of the syntax. * @param xd xnee's main structure * @param argc number of 'strings' in argv * @param argv array of strings containing directives to Xnee * @return void */ void xnee_replay_parse_args(xnee_data *xd, int argc, char **argv); /** * A callback function that only prints the data retreived from the Xserver * * @param xp pointer to data as sent by the Xserver * @param xd xnee's main structure * @return void */ void xnee_replay_dispatch2 (XPointer xp, XRecordInterceptData *xd); /* * * Set the record range * This is used when recording data to synchronize the replay * * OBSOLETE .... USED BEFORE WHEN TESTING * * void xnee_replay_select_protocol (XRecordRange *) ; */ #endif /* XNEE_REPLAY_H */ xnee-3.19/libxnee/include/libxnee/xnee_resolution.h0000664000000000000000000000505610640701430017371 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_RESOLUTION_H #define XNEE_RESOLUTION_H #include "libxnee/xnee.h" #include "libxnee/xnee_record.h" #include "libxnee/xnee_replay.h" int xnee_resolution_init (xnee_data *xd); int xnee_set_rec_resolution (xnee_data *xd, char *str); int xnee_get_rec_resolution_x (xnee_data *xd); int xnee_get_rec_resolution_y (xnee_data *xd); int xnee_set_rep_resolution (xnee_data *xd, char *str); int xnee_get_rep_resolution_x (xnee_data *xd); int xnee_get_rep_resolution_y (xnee_data *xd); int xnee_str_to_res(char *res_str, xnee_res *xr); int xnee_res_cmp(xnee_res *xr1, xnee_res *xr2); int xnee_resolution_differs (xnee_data *xd); int xnee_resolution_newx (xnee_data *xd, int xval); int xnee_resolution_newy (xnee_data *xd, int yval); int xnee_set_default_rep_resolution (xnee_data *xd); int xnee_set_default_rec_resolution (xnee_data *xd); int xnee_no_rep_resolution (xnee_data *xd); int xnee_is_resolution_used (xnee_data *xd); int xnee_set_resolution_used (xnee_data *xd); int xnee_unset_resolution_used (xnee_data *xd); int xnee_get_resolution_used (xnee_data *xd); #endif xnee-3.19/libxnee/include/libxnee/print.h0000664000000000000000000001451011173172115015302 00000000000000/* Xnee's Not an Event Emulator enables recording and replaying of X protocol data Copyright (C) 1999, 2000, 2001, 2002, 2003, 2008 Henrik Sandklef 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 any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Boston, MA 02110-1301, USA. */ #include "xnee_record.h" #include "xnee_replay.h" #include "print_varargs.h" #ifndef XNEE_PRINT_H #define XNEE_PRINT_H #define XNEE_VERBOSE_ENTER_FUNCTION() xnee_verbose((xd, " ---> %s\n", __func__ )) #define XNEE_VERBOSE_LEAVE_FUNCTION() xnee_verbose((xd, " <--- %s\n", __func__ )) #define XNEE_VERBOSE_IN_FUNCTION(str) xnee_verbose((xd, " %s: \"%s\"\n", __func__ , str)) #define XNEE_VERBOSE_MARK() xnee_verbose((xd, " %s:%d %s()\n", __FILE__, __LINE__, __func__ )) /** * Prints number and name of X11 events * * @param xd xnee's main structure * @return int XNEE_OK on success. */ int xnee_print_event_info (xnee_data *xd); /** * Prints number and name of X11 errors * * @param xd xnee's main structure * @return int */ int xnee_print_error_info (xnee_data *xd); /** * Prints number and name of X11 replies * * @param xd xnee's main structure * @return int */ int xnee_print_reply_info (xnee_data *xd); /** * Prints number and name of X11 requests * * @param xd xnee's main structure * @return int */ int xnee_print_request_info (xnee_data *xd); /** * Prints number and name of X11 data * * @param xd xnee's main structure * @return int */ int xnee_print_data_info (xnee_data *xd); int xnee_print_sys_info(xnee_data *, FILE *); /* * Print character representation of event if verbose mode is on */ void xnee_verbose_event (xnee_data *, int ev ) ; /* * * Name: xnee_record_print_request * * Arguments: xnee_data * XRecordInterceptData * * * Description: Prints X requests according to the Xnee protocol/format * */ void xnee_record_print_request (xnee_data *xd, XRecordInterceptData *xrecintd ); /* * * Name: xnee_human_print_request * * Arguments: xnee_data * XRecordInterceptData * * * Description: Prints X requests so humans can read * */ void xnee_human_print_request (xnee_data *xd, XRecordInterceptData *xrecintd ); /* * * Name: xnee_human_print_reply * * Arguments: xnee_data * XRecordInterceptData * * * Description: Prints X replies so humans can read * */ void xnee_human_print_reply (xnee_data* xd, XRecordInterceptData *xrecintd ); /* * * Name: xnee_record_print_reply * * Arguments: xnee_data * XRecordInterceptData * * * Description: Prints X replies according to the Xnee protocol/format * */ void xnee_record_print_reply (xnee_data* xd, XRecordInterceptData *xrecintd ); /* * * Name: xnee_record_print_error * * Arguments: xnee_data * XRecordInterceptData * * * Description: Prints X errors according to the Xnee protocol/format * */ void xnee_record_print_error (xnee_data *xd, XRecordInterceptData *xrecintd ); /* * * Name: xnee_human_print_error * * Arguments: xnee_data * XRecordInterceptData * * * Description: Prints X errors in a human format * */ void xnee_human_print_error (xnee_data *xd, XRecordInterceptData *xrecintd ); /* * * Name: xnee_human_print_event * * Arguments: xnee_data * XRecordInterceptData * * * Description: Prints X events in a human format * */ void xnee_human_print_event (xnee_data *xd, XRecordInterceptData *xrecintd ); /* * * Name: xnee_record_print_record_range * * Arguments: xnee_data* , FILE* * * * Description: Prints the Record range in a(n almost) user friendly format * File descriptors to be used are specified in the xnee_data struct * */ int xnee_record_print_record_range (xnee_data *xd, /*@null@*/ FILE *) ; /* * * Name: xnee_record_print_sys_info * * Arguments: xnee_data * * * Description: Prints the X and xnee states and settings * The format of the file will be recognised by xnee * when replaying, in order to use the same settings * and thereby enable synchronisation again * * int xnee_rec_print_sys_info(xnee_data *xd); */ /* * * Name: xnee_print_xnee_settings * * Arguments: xnee_data * * * Description: Prints some init stuff ...... * This function is obsoleted by the new printout function xnee_rec_print_sys_info * * */ int xnee_print_xnee_settings (xnee_data* xd, /*@null@*/ FILE *) ; /* * Name: xnee_print_distribution_list * * Arguments: * xnee_data *, FILE * * * Description: Prints the list of displays to distribute events to * * */ int xnee_print_distr_list (xnee_data*, /*@null@*/FILE *); /* * Name: xnee_print_data_range_count * * Arguments: xnee_data* * * */ int xnee_print_data_range_count (xnee_data * xd); #ifdef NO_BUF_VERBOSE #define xnee_replay_printbuffer(a) #else #define xnee_replay_printbuffer(a) xnee_replay_printbuffer_impl(a) #endif /** * If xnee_data->verbose is set this functions prints the synchronisation buffers. * * @param xd xnee's main structure * @return void */ void xnee_replay_printbuffer_impl (xnee_data *xd); /** * Print version information etc * * @param xd xnee's main structure * @return void */ void xnee_version(xnee_data *xd); int xnee_print_ranges (xnee_data *xd, FILE *fp); int xnee_print_xnee_resource_settings (xnee_data* xd, FILE* out) ; void xnee_store_mouse_pos (xnee_data* xd ); int xnee_print_xnee_data(xnee_data *xd); void xnee_human_print_request_verbose (xnee_data *xd, XRecordInterceptData *xrecintd ); void xnee_human_print_event_verbose (xnee_data *xd, XRecordInterceptData *xrecintd ); int xnee_print_data_str(xnee_data *xd, char *tmp, int type); #endif /* XNEE_PRINT_H */ xnee-3.19/libxnee/include/libxnee/xnee_keysym.h0000664000000000000000000000325510640701430016506 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_KEYSYM_H #define XNEE_XNEE_KEYSYM_H KeyCode xnee_str2keycode(xnee_data* xd, const char *str, xnee_key_code *kc); KeyCode xnee_char2keycode (xnee_data *xd, char token, xnee_key_code *kc); #endif /* XNEE_XNEE_KEYSYM_H */ xnee-3.19/libxnee/include/libxnee/xnee_error.h0000664000000000000000000000417110640701427016322 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_ERROR_H #define XNEE_XNEE_ERROR_H #include #define XNEE_PRINT_ERROR_IF_NOT_OK(ret) \ { \ if (ret != XNEE_OK) \ { \ fprintf (stderr, "%s\n", xnee_get_err_description(ret)); \ } \ } const char * xnee_get_err_description (int error) ; const char * xnee_get_err_solution (int error); char * xnee_get_err_string (void); char * xnee_set_err_string (char *new_error, ...) __attribute__ ((format (printf, 1 ,2))); void xnee_free_err_string (void); #endif /* XNEE_XNEE_ERROR_H */ xnee-3.19/libxnee/include/libxnee/xnee_alloc.h0000664000000000000000000000610210640701427016257 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_ALLOC_H #define XNEE_XNEE_ALLOC_H /** * Fres xnee_data structure. * @param xd data to free * @return int 0 on success */ int xnee_free_xnee_data(xnee_data* xd ); /** * Allocates a new xnee_recordext_setup. * To free the memory allocated, use xnee_free_recordext_setup * @return xnee_recordext_setup * NULL if alloc failed */ /*@null@*/ xnee_recordext_setup* xnee_new_recordext_setup(void); /** * Frees xnee_free_recordext_setup structure * @param xd xnee's main structure * @return int 0 on success */ /*@null@*/ int xnee_free_recordext_setup( xnee_data* xd); void xnee_free_replay_setup( /*@only@*/ /*@null@*/ xnee_testext_setup* xrs); xnee_testext_setup* xnee_new_replay_setup(void); int xnee_renew_xnee_data(xnee_data *xd); int xnee_free( /*@only@*/ /*@out@*/ /*@null@*/ void *mem); #define XNEE_CHECK_ALLOCED_MEMORY(mem) \ { \ if (mem==NULL) \ { \ XNEE_PRINT_ERROR_IF_NOT_OK(XNEE_MEMORY_FAULT); \ return (NULL); \ } \ } #define XNEE_CHECK_ALLOCED_MEMORY_INT(mem) \ { \ if (mem==NULL) \ { \ XNEE_PRINT_ERROR_IF_NOT_OK(XNEE_MEMORY_FAULT); \ return (XNEE_MEMORY_FAULT); \ } \ } #endif /* XNEE_XNEE_ALLOC */ xnee-3.19/libxnee/include/libxnee/xnee_session.h0000664000000000000000000000541211461650006016651 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_SESSION_H #define XNEE_XNEE_SESSION_H int xnee_prepare(xnee_data *xd); /** * Returns the number of RecordRanges allocated so far * @param xd xnee's main structure * @return int number of RecordRanges allocated */ int xnee_get_max_range (xnee_data *xd); /** * Init Xnee structures * @param xd xnee's main structure * @return int 1 if successfull, else 0 * \todo (return values need to be changed) */ int xnee_init(xnee_data* xd); /** * Close down all open files and displays * @param xd xnee's main structure * @return void */ void xnee_close_down(xnee_data *xd); /** * Set variables so that Xnee can stop gracefully. * @param xd xnee's main structure * @return int 0 on success */ int xnee_stop_session( xnee_data* xd); int xnee_process_count(int mode); int xnee_process_replies(xnee_data *xd); int xnee_rep_prepare(xnee_data *xd); int handle_xerr(Display *dpy, XErrorEvent *errevent); /* internal use */ void signal_handler(int sig) __attribute__ ((noreturn)); int xnee_err_handler(Display* dpy, XErrorEvent* ev); int xnee_more_to_record(xnee_data *xd); /** * Zeros the sync data in xd. * @param xd xnee's main structure * @return void */ void xnee_zero_sync_data (xnee_data* xd); int xnee_set_x_server_version(xnee_data *xd); #endif /* SESSION_*/ xnee-3.19/libxnee/include/libxnee/xnee_settings.h0000664000000000000000000000724111441455041017030 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003, * 2010 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_SETTINGS_H #define XNEE_XNEE_SETTINGS_H #define SYNCHRONIZATION_EVENT (CreateNotify | MapRequest | ConfigureRequest | DestroyNotify | MapNotify | ConfigureNotify | UnmapNotify ) #define XNEE_NR_OF_MODIFIERS 8 #define XNEE_HIGHEST_DATA_NR 256 #define XNEE_REPLAY_BUFFER_SIZE XNEE_HIGHEST_DATA_NR #define XNEE_SAVED_LINES_BYTES 1024 #define XNEE_RANGE_STRING_SIZE 512 #define DATA_NAME_SIZE_MAX 32 #define XNEE_NR_OF_XINPUT_DEVICES 100 extern const int XNEE_MAX_DELAY ; extern const int XNEE_PRESS ; extern const int XNEE_RELEASE ; extern const int xnee_delay_timeout ; extern const int XNEE_DELAY ; extern const int XNEE_MISSING_DATA_DELAY ; extern const int XNEE_MAX_SYNCH ; extern const int XNEE_MOTION_DELAY ; extern const int XNEE_BUFFER_MAX ; extern const int XNEE_BUFFER_MIN ; extern const int XNEE_BUFFER_SUM_MAX ; extern const int XNEE_BUFFER_SUM_MIN ; extern const int XNEE_BUFFER_TOT_MAX ; extern const int MAX_NOT_IN_SYNC ; extern const int MAX_OUT_OF_SYNC ; /* number of data allowed to be out of sync */ extern const int MAX_UNSYNC_LOOPS ; /* number check-loops when out of sync before exit */ extern const int MAX_SKIPPED_UNSYNC ; /* number of times to ignore unsync state */ extern const int XNEE_NOT_REPLAYABLE ; extern const int XNEE_DEFAULT_MAX_THRESHOLD ; extern const int XNEE_DEFAULT_MIN_THRESHOLD ; extern const int XNEE_DEFAULT_TOT_THRESHOLD ; extern const int XNEE_USEC_PER_SEC ; extern const int XNEE_MSEC_PER_SEC ; extern const char XNEE_FROM_LAST_READ ; extern const char XNEE_FROM_FIRST_READ ; extern const int XNEE_TOO_FAST_ADJ_PERCENTAGE ; extern const int XNEE_DELAY_RECORDING ; extern const int XNEE_RECEIVED ; extern const int XNEE_REPLAYED ; extern const int XNEE_TRUE ; extern const int XNEE_FALSE ; extern const int XNEE_GRAB_MODIFIER ; extern const int XNEE_GRAB_KEY ; extern const int XNEE_REPLAY_READ_META_DATA ; extern const int XNEE_REPLAY_READ_REPLAY_DATA ; extern const int XNEE_REPLAY_READ_ALL_DATA ; extern const int REPLAY_CALLBACK ; extern const int RECORD_CALLBACK ; extern const int SYNC_CALLBACK ; extern const int XNEE_NR_OF_GRABBED_MODIFIER ; #endif /* XNEE_XNEE_SETTINGS_H */ xnee-3.19/libxnee/include/libxnee/feedback.h0000775000000000000000000000734610640701427015710 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_FEEDBACK_H #define XNEE_FEEDBACK_H #include #include #include #include "libxnee/xnee.h" #include "libxnee/xnee_alloc.h" #define FEEDBACK_DELAY 5 #define FEEDBACK_TIMEOUT 3 #define XNEE_FEEDBACK_INS_MARK_STR "Xnee inserted mark in log file" #define XNEE_FEEDBACK_STOP_STR "Xnee stopped" #define XNEE_FEEDBACK_START_STR "Xnee started" #define XNEE_FEEDBACK_PAUSE_STR "Xnee paused" #define XNEE_FEEDBACK_RESUME_STR "Xnee resumed" #define XNEE_FEEDBACK_INS_MARK feedback_fp(XNEE_FEEDBACK_INS_MARK_STR); #define XNEE_FEEDBACK_STOP feedback_fp(XNEE_FEEDBACK_STOP_STR); #define XNEE_FEEDBACK_START feedback_fp(XNEE_FEEDBACK_START_STR); #define XNEE_FEEDBACK_PAUSE feedback_fp(XNEE_FEEDBACK_PAUSE_STR); #define XNEE_FEEDBACK_RESUME feedback_fp(XNEE_FEEDBACK_RESUME_STR); enum feedback_types { XNEE_NO_FEEDBACK = 0 , XNEE_STDERR_FEEDBACK , XNEE_XOSD_FEEDBACK , XNEE_UNDEFINED_FEEDBACK } ; #ifdef HAVE_STDARG_H int feedback(xnee_data *xd, char *str, ... ) __attribute__ ((format ( printf, 2 , 3))); #else int feedback(xnee_data *xd, va_dcl valist) #endif /********************************************* * * * XOSD - X11 on screen display support * * * *********************************************/ #ifndef XOSD_string #define XOSD_string 1 #endif /* XOSD_string*/ int xnee_get_requested_feedback(xnee_data *xd); #define STDERR_REQ(xd) #define XOSD_REQ(xd) #define NO_REQ(xd) #define xnee_fb_no_requested(xd) (XNEE_NO_FEEDBACK == xnee_get_requested_feedback(xd) ) #define xnee_fb_stderr_requested(xd) (XNEE_STDERR_FEEDBACK == xnee_get_requested_feedback(xd) ) #define xnee_fb_xosd_requested(xd) (XNEE_XOSD_FEEDBACK == xnee_get_requested_feedback(xd) ) int xnee_set_xosd_feedback(xnee_data *xd); int xnee_set_no_feedback(xnee_data *xd); int xnee_set_stderr_feedback(xnee_data *xd); int xnee_is_xosd_feedback(xnee_data *xd); int xnee_is_stderr_feedback(xnee_data *xd); int xnee_is_no_feedback(xnee_data *xd); int xnee_feedback_close(xnee_data *xd); int xnee_feedback( xnee_data *, char *str, ... ); const char * xnee_get_xosd_font_impl(xnee_data *xd); int xnee_set_xosd_font_impl(xnee_data *xd, char *font_str); #endif /* XNEE_FEEDBACK_H */ xnee-3.19/libxnee/include/libxnee/xnee_display.h0000664000000000000000000000536010640701427016637 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #ifndef XNEE_XNEE_DISPLAY_H #define XNEE_XNEE_DISPLAY_H #include "libxnee/xnee.h" int xnee_setup_display (xnee_data *xd); /** * Set xnee_data->display to the value as * specified in environment variable DISPLAY * * @param xd xnee's main structure * @return void */ void xnee_set_default_display (xnee_data *xd); /** * open a display for the host as specified in * xnee_program_data->program * @param xd xnee's main structure * @return Display * NULL if the display could not be opened */ Display * xnee_open_display (xnee_data *xd); /** * Adds a display to ditribution list * @param xd xnee's main structure * @param disp Display to add * @return int 0 on success */ int xnee_add_display_list (xnee_data* xd, char * disp); /** * Adds a display to ditribution list * @param str string representation of a display * @param xd xnee's main structure * @return int XNEE_OK on success, XNEE_NOT_OPEN_DISPLAY if failure */ int xnee_add_display_str (char *str , xnee_data* xd); /** * Adds a display to ditribution list * @param dpy Display to add * @param xd xnee's main structure * @return int XNEE_OK on success, XNEE_NOT_OPEN_DISPLAY if failure */ int xnee_add_display (Display * dpy, xnee_data* xd); #endif /* XNEE_XNEE_DISPLAY_H */ xnee-3.19/libxnee/include/libxnee/xnee_dl.h0000664000000000000000000000346510640701427015575 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 1999, 2000, 2001, 2002, 2003 Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include #include #ifndef XNEE_DL_H #define XNEE_DL_H void* xnee_dlopen (xnee_data *xd, char *dl, int flag); void* xnee_dlsym (xnee_data *xd, void* handle, const char *sym); int xnee_dlclose (xnee_data *xd, void* handle); const char* xnee_dlerror (xnee_data *xd); #endif /* XNEE_DL_H */ xnee-3.19/libxnee/test/0000775000000000000000000000000012332167175011772 500000000000000xnee-3.19/libxnee/test/disp.c0000664000000000000000000000244011671473445013022 00000000000000#include "test_setget.h" #include "libxnee/xnee.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_session.h" int fails; int total; int verbose; int main() { xnee_data *xdl; int ret ; Display *dpy; char disp_buf[256]; fails = 0; total = 0; printf (" display tester\n"); xdl = xnee_new_xnee_data(); xnee_set_program_name (xdl, "disp-tester"); xnee_set_application_parameters (xdl, NULL); xnee_add_display_list(xdl, getenv("DISPLAY")); total++; xnee_add_display_list(xdl, getenv("DISPLAY")); total++; strcpy(disp_buf, getenv("DISPLAY")); strcat(disp_buf, ","); strcat(disp_buf, getenv("DISPLAY")); strcat(disp_buf, ","); strcat(disp_buf, getenv("DISPLAY")); xnee_add_display_list(xdl, disp_buf); total++; ret = xnee_add_display_str(getenv("DISPLAY"), xdl); XNEE_TEST_ASSERT(ret, 0, "xnee_add_display_str"); dpy = XOpenDisplay(NULL); printf(" adding display: %p\n", (void*)dpy); ret = xnee_add_display(dpy, xdl); XNEE_TEST_ASSERT(ret, 0, "xnee_add_display"); ret = xnee_print_distr_list (xdl, NULL); XNEE_TEST_ASSERT(ret, 0, "xnee_print_distr_list"); fprintf (stdout, "\n"); fprintf (stdout, "\tSucesss: %d\n", total); fprintf (stdout, "\tFailures: %d\n", fails); xnee_close_down(xdl); return 0; } xnee-3.19/libxnee/test/Makefile.am0000664000000000000000000000262311316676026013752 00000000000000LIBTEST = libtest TESTSETGET = testsetget TESTFEEDBACK = testfeedback TESTPRINT = testprint TESTDISP = testdisplay TESTCALLBACK = testcallback lib_LTLIBRARIES = libtestcb.la noinst_PROGRAMS = $(LIBTEST) $(TESTSETGET) $(TESTFEEDBACK) $(TESTPRINT) $(TESTDISP) $(TESTCALLBACK) TEST_WRAPPER=./test-wrapper.sh EXTRA_DIST = test_setget.h $(TEST_WRAPPER) if BUILD_STATIC STATIC_FLAGS = -static else STATIC_FLAGS = endif AM_CFLAGS = -I../include -I${LIBXNEE_DIR}/include ${PEDANTIC_FLAGS} ${X_CFLAGS} -g ${VERBOSE_FLAG} ${BUF_VERBOSE_FLAG} ${USER_CFLAGS} ${GCOV_FLAG} ${GPROF_FLAG} AM_LDFLAGS = -L../src/.libs/ -L${LIBXNEE_DIR}/src -lxnee ${X_LIBS} ${X11_LIBS} ${LIBDL} ${GCOV_FLAG} ${GPROF_FLAG} $(STATIC_FLAGS) AM_LDADD = -L../src/.libs/ -L${LIBXNEE_DIR}/src -lxnee ${X_LIBS} ${X11_LIBS} ${LIBDL} ${GCOV_FLAG} ${GPROF_FLAG} $(STATIC_FLAGS) libtest_SOURCES = libtest.c testsetget_SOURCES = test_setget.c test_all.c testfeedback_SOURCES = test_feedback.c testprint_SOURCES = print.c testdisplay_SOURCES = disp.c testcallback_SOURCES = callback.c libtestcb_la_SOURCES = callback_so.c libtestcb_la_CFLAGS = $(AM_CFLAGS) test: chmod a+x ./test-wrapper.sh $(TEST_WRAPPER) ./$(LIBTEST) $(TEST_WRAPPER) ./$(TESTSETGET) $(TEST_WRAPPER) ./$(TESTFEEDBACK) $(TEST_WRAPPER) ./$(TESTPRINT) $(TEST_WRAPPER) ./$(TESTCALLBACK) xtest: ./$(LIBTEST) ./$(TESTSETGET) ./$(TESTFEEDBACK) ./$(TESTPRINT) ./$(TESTCALLBACK) xnee-3.19/libxnee/test/callback.c0000664000000000000000000000073511671473445013624 00000000000000#include "libxnee/xnee.h" #include "libxnee/xnee_callback.h" #include "libxnee/xnee_plugin.h" int main() { xnee_data *xd = xnee_new_xnee_data(); int i ; printf ("Set plugin\n"); xnee_use_plugin(xd, "testcb.so", 1); printf ("Test rec callback\n"); for (i=0;i<100000;i++) { xd->rec_callback((XPointer)xd, NULL); } printf ("Test rep callback\n"); for (i=0;i<100000;i++) { xd->rep_callback((XPointer)xd, NULL); } return 0; } xnee-3.19/libxnee/test/print.c0000664000000000000000000001706711671473446013233 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2006, 2007, 2010, 2011 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "test_setget.h" #include "libxnee/xnee.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_session.h" int fails; int total; int verbose; int test_distributionfuns(xnee_data *xd) { int ret; char disp_buf[256]; /* xnee_add_display_list(xd, ":0"); total++; xnee_add_display_list(xd, ":0"); total++; xnee_add_display_list(xd, ":0,:0"); total++; */ xnee_add_display_list(xd, getenv("DISPLAY")); total++; xnee_add_display_list(xd, getenv("DISPLAY")); total++; strcpy(disp_buf, getenv("DISPLAY")); strcat(disp_buf, ","); strcat(disp_buf, getenv("DISPLAY")); strcat(disp_buf, ","); strcat(disp_buf, getenv("DISPLAY")); xnee_add_display_list(xd, disp_buf); total++; ret = xnee_print_distr_list (xd, NULL); XNEE_TEST_ASSERT(ret, 0, "xnee_print_distr_list"); ret = xnee_print_distr_list (xd, xd->out_file); XNEE_TEST_ASSERT(ret, 0, "xnee_print_distr_list"); return 0; } int test_rangefuns(xnee_data *xd) { int ret; xnee_record_print_record_range (xd, NULL) ; total++; xnee_add_range(xd, XNEE_DELIVERED_EVENT, 2, 4); xnee_add_range(xd, XNEE_DEVICE_EVENT, 7, 14); xnee_add_range(xd, XNEE_REQUEST, 2, 4); xnee_add_range(xd, XNEE_REPLY, 2, 4); xnee_add_range(xd, XNEE_ERROR, 1, 1); xnee_prepare(xd); xnee_record_print_record_range (xd, NULL) ; total++; ret = xnee_print_ranges (xd, xd->out_file) ; XNEE_TEST_ASSERT(ret, 0, "xnee_record_print_ranges"); ret = xnee_print_data_range_count (xd); XNEE_TEST_ASSERT(ret, 0, "xnee_print_data_range_count"); xnee_replay_printbuffer_impl (xd ); total++; xnee_version(xd); total++; ret = xnee_print_xnee_data(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_print_xnee_data"); ret = xnee_print_xnee_resource_settings (xd, xd->out_file ) ; XNEE_TEST_ASSERT(ret, 0, "xnee_print_xnee_resource_settings"); xnee_store_mouse_pos (xd ); total++; ret = xnee_print_xnee_settings(xd, xd->out_file); XNEE_TEST_ASSERT(ret, 0, "xnee_rec_print_xnee_settings"); ret = xnee_print_data_str(xd, "MotionNotify", XNEE_EVENT); XNEE_TEST_ASSERT(ret, 0, "xnee_print_data_str"); return 0; } int test_printfuns(xnee_data *xd) { int ret ; XRecordInterceptData xrecintd_impl; XRecordDatum xrec_data_impl; xResourceReq req_impl; xEvent ev_impl; xGenericReply rep_impl; xError err_impl; int req_type ; int ev_type ; int i ; XRecordInterceptData *xrecintd = &xrecintd_impl; XRecordDatum *xrec_data = &xrec_data_impl; xResourceReq *req = &req_impl; xEvent *ev = &ev_impl; xGenericReply *rep = &rep_impl; xError *err = &err_impl; ret = xnee_print_event_info(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_print_event_info"); ret = xnee_print_error_info(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_print_error_info"); ret = xnee_print_request_info(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_print_request_info"); ret = xnee_print_reply_info(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_print_reply_info"); ret = xnee_print_data_info(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_print_data_info"); /* just make sure it links :) */ xnee_verbose_event(xd, 18); total++; /* make sure it accepts NULL without crashing the app */ xnee_record_print_request(xd, NULL); total++; xnee_human_print_request(xd, NULL); total++; /* NOTE: bogus values */ #define SET_BOGUES_REQ_VALUES(r) \ memset(xrecintd, 0, sizeof(XRecordInterceptData)); \ memset(xrec_data, 0, sizeof(XRecordDatum)); \ req_type = r ; \ req->reqType = 1 ; \ req->length = 1 ; \ req->id = 4 ; \ xrecintd->server_time = 200; \ xrec_data->req = *(xReq*)&req;\ xrec_data->type = req_type;\ xrecintd->data = (unsigned char*)xrec_data; for (i=1;i<128;i++) { printf(" request: %d\n", i); SET_BOGUES_REQ_VALUES(i); xnee_record_print_request(xd, xrecintd); total++; SET_BOGUES_REQ_VALUES(i); xnee_human_print_request(xd, xrecintd); total++; SET_BOGUES_REQ_VALUES(i); xnee_human_print_request_verbose(xd, xrecintd); total++; } printf ("==================================================\n"); #define SET_BOGUES_EV_VALUES(e) \ memset(xrecintd, 0, sizeof(XRecordInterceptData)); \ memset(xrec_data, 0, sizeof(XRecordDatum)); \ ev_type = e ; \ ev->u.u.type = 0 ; \ ev->u.keyButtonPointer.state = 0 ; \ xrec_data->event = *(xEvent*)&ev; \ xrec_data->type = (unsigned char) ev_type ; \ xrecintd->data = (unsigned char*) xrec_data; for (i=2;i<35;i++) { SET_BOGUES_EV_VALUES(i); xnee_human_print_event(xd, xrecintd); total++; SET_BOGUES_EV_VALUES(i); xnee_human_print_event_verbose(xd, xrecintd); total++; } memset(xrecintd, 0, sizeof(XRecordInterceptData)); memset(xrec_data, 0, sizeof(XRecordDatum)); rep->type = X_Reply; xrec_data->reply = *(xGenericReply*)&req ; xrecintd->data = (unsigned char*) xrec_data; xnee_human_print_reply (xd, xrecintd ); total++; xnee_record_print_reply (xd, xrecintd ); total++; err->type = X_Error; xrec_data->error = *(xError*)&err; xrecintd->data = (unsigned char*) xrec_data; xnee_human_print_error (xd, xrecintd ); total++; xnee_record_print_error (xd, xrecintd ); total++; return 0; } int main() { xnee_data *xdl; fails = 0; total = 0; printf (" print functions tester\n"); xdl = xnee_new_xnee_data(); xnee_set_program_name (xdl, "print-tester"); xnee_set_application_parameters (xdl, NULL); test_printfuns(xdl); test_rangefuns(xdl); test_distributionfuns(xdl); xnee_set_verbose(xdl); xnee_verbose((xdl, "Just a simple string, printed from test code\n")); xnee_verbose((NULL, "Just a simple string, but with xnee_data arg set to NULL\n")); xnee_print_error("Simple test string in test code\n"); xnee_unset_verbose(xdl); fprintf (stdout, "\n"); fprintf (stdout, "\tSucesses: %d\n", total); fprintf (stdout, "\tFailures: %d\n", fails); xnee_close_down(xdl); return 0; } xnee-3.19/libxnee/test/libtest.c0000775000000000000000000001612711671473445013543 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2006, 2007, 2010 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include #include "libxnee/xnee.h" #include "libxnee/datastrings.h" #include "libxnee/xnee.h" #include "libxnee/print.h" #include "libxnee/xnee_dl.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_fake.h" #include "libxnee/datastrings.h" #include "libxnee/xnee_grab.h" #include "libxnee/xnee_km.h" #include "libxnee/xnee_resolution.h" #include "libxnee/xnee_resource.h" #include "libxnee/xnee_callback.h" #include "libxnee/xnee_range.h" #include "libxnee/xnee_setget.h" #include "libxnee/xnee_error.h" #include "libxnee/xnee_display.h" #include "libxnee/xnee_sem.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_fileop.h" #include "libxnee/xnee_alloc.h" int global_succ = 0; int global_fail = 0; xnee_data *xd ; int test_datastrings() { int nr; int test_succ=0; int test_fail=0; /*****************************************/ printf ("\n Test 1: "); test_succ=0; test_fail=0; for (nr=1;xnee_print_request(nr)!=NULL;nr++) { char *rec_name = xnee_int2request(nr); int received = xnee_request2int(rec_name); printf ("."); if (received!=nr) { fprintf (stdout,"\t%.2d --> %20s --> %d \n", nr, rec_name, received); test_fail++; } else { test_succ++; } } printf ("\n Test 2: "); for (nr=2;xnee_print_event(nr)!=NULL;nr++) { char *rec_name = xnee_int2event(nr); int received = xnee_event2int(rec_name); printf ("."); if (received!=nr) { fprintf (stdout,"\t%.2d --> %20s --> %d \n", nr, rec_name, received); test_fail++; } else { test_succ++; } } printf ("\n Test 3: "); for (nr=2;xnee_int2error(nr)!=NULL;nr++) { char *rec_name = xnee_int2error(nr); int received = xnee_error2int(rec_name); printf ("."); if (received!=nr) { fprintf (stdout,"\t%.2d --> %20s --> %d \n", nr, rec_name, received); test_fail++; } else { test_succ++; } } global_succ+=test_succ; global_fail+=test_fail; return 0; } int test_xnee_data() { int i ; int ret; printf ("\nPreparing Test 4: "); /* Set the signal handler the libxnee's built in */ (void) signal (SIGINT, signal_handler); printf ("."); /* Get a new xnee_data structure */ xd = xnee_new_xnee_data(); printf ("."); /* Set the program name */ xnee_set_program_name (xd, "libtest"); printf ("."); /* Set the cli parameters */ xnee_set_application_parameters (xd, NULL); printf ("."); if (xd!=NULL) { global_succ++; } else { fprintf (stdout, "failed to alloc xnee_data\n"); global_fail++; } printf (".1"); printf ("\n Test 4: "); for (i=0;i<10;i++) { printf (" loop (%d)", i ); fflush(stdout); /* xnee_set_verbose(xd); */ xnee_set_out_name (xd, "/tmp/libtest.xns") ; /* xnee_parse_range (xd, XNEE_DEVICE_EVENT, */ /* "2-6"); */ xnee_parse_range (xd, XNEE_DELIVERED_EVENT, "EnterNotify-MappingNotify"); xnee_parse_range (xd, XNEE_REQUEST, "1-100"); xnee_parse_range (xd, XNEE_ERROR, "1-17"); xnee_parse_range (xd, XNEE_DELIVERED_EVENT, "ButtonPress-MotionNotify"); /* xnee_set_key (xd, XNEE_GRAB_STOP, "s"); xnee_set_key (xd, XNEE_GRAB_PAUSE, "p"); xnee_set_key (xd, XNEE_GRAB_RESUME, "r"); */ xnee_set_events_max (xd, 50); xnee_set_data_max (xd, 0); xnee_set_recorder(xd); /* xnee_prepare(xd);*/ fprintf(stderr, "Start xnee\n"); fflush(stderr); ret=xnee_start(xd); if (ret==0) { global_succ++; } else { fprintf (stdout, "failed to start1 %d %s)\n", ret, xnee_get_err_description(ret)); global_fail++; } ret=xnee_renew_xnee_data(xd); if (ret==0) { global_succ++; } else { fprintf (stdout, "failed to renew xnee_data\n"); global_fail++; } } printf ("\n Test 5: "); for (i=0;i<10;i++) { printf ("."); xnee_set_out_name (xd, "/tmp/libtest.xns") ; xnee_parse_range (xd, XNEE_DELIVERED_EVENT, "EnterNotify-MappingNotify"); xnee_parse_range (xd, XNEE_REQUEST, "1-100"); /* xnee_parse_range (xd, XNEE_DEVICE_EVENT, "ButtonPress-MotionNotify"); */ xnee_set_key (xd, XNEE_GRAB_STOP, "s"); xnee_set_key (xd, XNEE_GRAB_PAUSE, "p"); xnee_set_key (xd, XNEE_GRAB_RESUME, "r"); xnee_set_recorder(xd); xnee_prepare(xd); xnee_set_events_max (xd, 0); xnee_set_data_max (xd, 10); ret=xnee_start(xd); if (ret==0) { global_succ++; } else { fprintf (stdout, "failed to start2 %d %s)\n", ret, xnee_get_err_description(ret)); global_fail++; } ret=xnee_renew_xnee_data(xd); if (ret==0) { global_succ++; } else { fprintf (stdout, "failed to renew xnee_data\n"); global_fail++; } } printf ("\n"); return XNEE_OK; } int main() { fprintf (stdout,"Starting test\n"); test_datastrings(); test_xnee_data(); #ifdef ETTA_SUTTIVA_NOLLA fprintf (stdout,"Press return \n"); getchar(); #endif /* hey, we are fin(n)ished .... cloe down */ xnee_close_down(xd); fprintf (stdout, "\tSucesss: %d\n", global_succ); fprintf (stdout, "\tFailures: %d\n", global_fail); /* Since we are here, we can exit gracefully */ exit(XNEE_OK); } xnee-3.19/libxnee/test/test_all.c0000664000000000000000000010013711671473446013675 00000000000000/***** * Xnee's Not an Event Emulator * * Xnee enables recording and replaying of X protocol data * * Copyright (C) 2006, 2007, 2010, 2011 * Henrik Sandklef * * 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 any later version. * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Boston, * MA 02110-1301, USA. ****/ #include "test_setget.h" #include "libxnee/xnee_session.h" #include "libxnee/xnee_setget.h" #define DUMMY_FILE_NO ((FILE*)0) #define DUMMY_INT ((int)177) int i ; #define BEGIN_LOOP for(i=0;i<1000;i++) { #define END_LOOP } int test_all(xnee_data *xd) { /* Doing what's done in xnee_start .... but not actually calling xnee_start ret = xnee_init(xd); XNEE_RETURN_IF_ERR(ret); */ ret = xnee_prepare(xd); XNEE_RETURN_IF_ERR(ret); /* Testing: * * xnee_set_display_name * */ BEGIN_LOOP xnee_set_display_name (xd, "einar"); orig_str = xnee_get_display_name(xd); ret = xnee_set_display_name (xd, "dumm_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_display_name"); new_str = xnee_get_display_name(xd); XNEE_TEST_ASSERT_STR(new_str, "dumm_str","xnee_set_display_name"); END_LOOP #ifdef USE_LATER /* Testing: * * xnee_set_out_file * */ xnee_set_out_file(xd, 0); orig_fd = xnee_get_out_file(xd); ret = xnee_set_out_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_out_file"); new_fd = xnee_get_out_file(xd); XNEE_TEST_ASSERT(new_fd , DUMMY_FILE_NO,"xnee_set_out_file"); XNEE_TEST_ASSERT_DIFF(orig_fd , new_fd ,"xnee_set_out_file"); ret = xnee_set_out_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(new_fd , orig_fd , "xnee_set_out_file"); /* Testing: * * xnee_set_out_name * */ orig_str = xnee_get_out_name(xd); ret = xnee_set_out_name (xd, "dc_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_out_name"); new_str = xnee_get_out_name(xd); XNEE_TEST_ASSERT_STR(new_str, "dc_str","xnee_set_out_name"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF_STR(orig_str, new_str,"xnee_set_out_name"); ret = xnee_set_out_name (xd, "dc_str"); XNEE_TEST_ASSERT_STR(new_str, orig_str, "xnee_set_out_name"); /* Testing: * * xnee_set_rt_file * */ orig_fd = xnee_get_rt_file(xd); ret = xnee_set_rt_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rt_file"); new_fd = xnee_get_rt_file(xd); XNEE_TEST_ASSERT(new_fd , DUMMY_FILE_NO,"xnee_set_rt_file"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF(orig_fd , new_fd ,"xnee_set_rt_file"); ret = xnee_set_rt_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(new_fd , orig_fd , "xnee_set_rt_file"); /* Testing: * * xnee_set_rt_name * */ orig_str = xnee_get_rt_name(xd); ret = xnee_set_rt_name (xd, "dc_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rt_name"); new_str = xnee_get_rt_name(xd); XNEE_TEST_ASSERT_STR(new_str, "dc_str","xnee_set_rt_name"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF_STR(orig_str, new_str,"xnee_set_rt_name"); ret = xnee_set_rt_name (xd, "dc_str"); XNEE_TEST_ASSERT_STR(new_str, orig_str, "xnee_set_rt_name"); /* Testing: * * xnee_set_err_file * */ orig_fd = xnee_get_err_file(xd); ret = xnee_set_err_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_err_file"); new_fd = xnee_get_err_file(xd); XNEE_TEST_ASSERT(new_fd , DUMMY_FILE_NO,"xnee_set_err_file"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF(orig_fd , new_fd ,"xnee_set_err_file"); ret = xnee_set_err_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(new_fd , orig_fd , "xnee_set_err_file"); /* Testing: * * xnee_set_err_name * */ orig_str = xnee_get_err_name(xd); ret = xnee_set_err_name (xd, "dc_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_err_name"); new_str = xnee_get_err_name(xd); XNEE_TEST_ASSERT_STR(new_str, "dc_str","xnee_set_err_name"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF_STR(orig_str, new_str,"xnee_set_err_name"); ret = xnee_set_err_name (xd, "dc_str"); XNEE_TEST_ASSERT_STR(new_str, orig_str, "xnee_set_err_name"); /* Testing: * * xnee_set_rc_file * */ orig_fd = xnee_get_rc_file(xd); ret = xnee_set_rc_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rc_file"); new_fd = xnee_get_rc_file(xd); XNEE_TEST_ASSERT(new_fd , DUMMY_FILE_NO,"xnee_set_rc_file"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF(orig_fd , new_fd ,"xnee_set_rc_file"); ret = xnee_set_rc_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(new_fd , orig_fd , "xnee_set_rc_file"); /* Testing: * * xnee_set_rc_name * */ orig_str = xnee_get_rc_name(xd); ret = xnee_set_rc_name (xd, "dumm_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rc_name"); new_str = xnee_get_rc_name(xd); XNEE_TEST_ASSERT_STR(new_str, "dumm_str","xnee_set_rc_name"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF_STR(orig_str, new_str,"xnee_set_rc_name"); ret = xnee_set_rc_name (xd, "dumm_str"); XNEE_TEST_ASSERT_STR(new_str, orig_str, "xnee_set_rc_name"); /* Testing: * * xnee_set_data_file * */ orig_fd = xnee_get_data_file(xd); ret = xnee_set_data_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_data_file"); new_fd = xnee_get_data_file(xd); XNEE_TEST_ASSERT(new_fd , DUMMY_FILE_NO,"xnee_set_data_file"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF(orig_fd , new_fd ,"xnee_set_data_file"); ret = xnee_set_data_file (xd, DUMMY_FILE_NO); XNEE_TEST_ASSERT(new_fd , orig_fd , "xnee_set_data_file"); /* Testing: * * xnee_set_data_name * */ orig_str = xnee_get_data_name(xd); ret = xnee_set_data_name (xd, "dumm_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_data_name"); new_str = xnee_get_data_name(xd); XNEE_TEST_ASSERT_STR(new_str, "dumm_str","xnee_set_data_name"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF_STR(orig_str, new_str,"xnee_set_data_name"); ret = xnee_set_data_name (xd, "dumm_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_data_name"); XNEE_TEST_ASSERT_STR(new_str, orig_str, "xnee_set_data_name"); #endif /* USE_LATER */ /* Testing: * * xnee_set_verbose * */ BEGIN_LOOP xnee_unset_verbose(xd); orig = xnee_get_verbose(xd); ret = xnee_set_verbose (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_verbose"); new = xnee_get_verbose(xd); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_verbose"); ret = xnee_unset_verbose (xd); new = xnee_get_verbose(xd); XNEE_TEST_ASSERT(new , orig , "xnee_set_verbose"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_verbose"); END_LOOP /* Testing: * * xnee_set_buf_verbose * */ BEGIN_LOOP xnee_unset_buf_verbose (xd); orig = xnee_get_buf_verbose(xd); ret = xnee_set_buf_verbose (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_buf_verbose"); new = xnee_get_buf_verbose(xd); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_buf_verbose"); ret = xnee_unset_buf_verbose (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_buf_verbose"); new = xnee_get_buf_verbose(xd); XNEE_TEST_ASSERT(new , orig , "xnee_set_buf_verbose"); END_LOOP /* Testing: * * xnee_set_all_clients * */ BEGIN_LOOP xnee_set_all_clients(xd); orig = xnee_get_all_clients(xd); ret = xnee_unset_all_clients (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_all_clients"); new = xnee_get_all_clients(xd); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_all_clients"); ret = xnee_set_all_clients (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_all_clients"); new = xnee_get_all_clients(xd); XNEE_TEST_ASSERT(new , orig , "xnee_set_all_clients"); END_LOOP /* Testing: * * xnee_set_sync * */ BEGIN_LOOP xnee_set_sync(xd); orig = xnee_get_sync(xd); ret = xnee_unset_sync (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_sync"); new = xnee_get_sync(xd); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_sync"); ret = xnee_set_sync (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_sync"); new = xnee_get_sync(xd); XNEE_TEST_ASSERT(new , orig , "xnee_set_sync"); END_LOOP /* Testing: * * xnee_set_mode * */ BEGIN_LOOP xnee_set_mode(xd, 0); orig = xnee_get_mode(xd); ret = xnee_set_mode (xd, DUMMY_INT); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_mode"); new = xnee_get_mode(xd); XNEE_TEST_ASSERT(new , DUMMY_INT,"xnee_set_mode"); /* ADDITIONAL TEST */ XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_mode"); ret = xnee_set_mode (xd, 0); new = xnee_get_mode(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_mode"); XNEE_TEST_ASSERT(new , orig , "xnee_set_mode"); END_LOOP /* Testing: * * xnee_set_replayer * */ BEGIN_LOOP xnee_set_replayer(xd); orig = xnee_is_replayer(xd); ret = xnee_set_recorder (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_replayer"); new = xnee_is_replayer(xd); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_replayer"); ret = xnee_set_replayer (xd); new = xnee_is_replayer(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_replayer"); XNEE_TEST_ASSERT(new , orig , "xnee_set_replayer"); END_LOOP /* Testing: * * xnee_set_recorder * */ BEGIN_LOOP xnee_set_recorder(xd); orig = xnee_is_recorder(xd); ret = xnee_set_replayer (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_recorder"); new = xnee_is_recorder(xd); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_recorder"); ret = xnee_set_recorder (xd); new = xnee_is_recorder(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_recorder"); XNEE_TEST_ASSERT(new , orig , "xnee_set_recorder"); END_LOOP /* Testing: * * xnee_set_cont * */ BEGIN_LOOP xnee_set_cont(xd); orig = xnee_get_cont(xd); ret = xnee_unset_cont (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_cont"); new = xnee_get_cont(xd); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_cont"); ret = xnee_set_cont (xd); new = xnee_get_cont(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_mode"); XNEE_TEST_ASSERT(new , orig , "xnee_set_cont"); END_LOOP /* Testing: * * xnee_set_exec_prog * */ BEGIN_LOOP xnee_set_exec_prog(xd, "str1"); orig_str = xnee_get_exec_prog(xd); ret = xnee_set_exec_prog (xd, "dumm_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_exec_prog"); XNEE_TEST_ASSERT_STR(orig_str, "dumm_str","xnee_set_exec_prog"); END_LOOP /* Testing: * * xnee_set_force_replay * */ BEGIN_LOOP xnee_set_force_replay(xd); orig = xnee_get_force_replay(xd); ret = xnee_unset_force_replay (xd); new = xnee_get_force_replay(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_force_replay"); XNEE_TEST_ASSERT_DIFF(orig, new, "xnee_set_force_replay"); ret = xnee_set_force_replay(xd); new = xnee_get_force_replay(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_force_replay"); XNEE_TEST_ASSERT(new , orig , "xnee_set_force_replay"); END_LOOP /* Testing: * * xnee_set_first_last * */ BEGIN_LOOP xnee_set_first_last(xd); orig = xnee_get_first_last(xd); ret = xnee_unset_first_last (xd); new = xnee_get_first_last(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_first_last"); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_first_last"); ret = xnee_set_first_last (xd); new = xnee_get_first_last(xd); XNEE_TEST_ASSERT(orig, new ,"xnee_set_first_last"); XNEE_TEST_ASSERT(new , orig , "xnee_set_first_last"); END_LOOP /* Testing: * * xnee_set_events_max * */ BEGIN_LOOP xnee_set_events_max (xd, 0); orig = xnee_get_events_max(xd); ret = xnee_set_events_max (xd, DUMMY_INT); new = xnee_get_events_max(xd); XNEE_TEST_ASSERT_DIFF(new, orig, "xnee_set_events_max"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_events_max"); ret = xnee_set_events_max (xd, 0); new = xnee_get_events_max(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_events_max"); XNEE_TEST_ASSERT(new , orig , "xnee_set_events_max"); END_LOOP /* Testing: * * xnee_set_data_max * */ BEGIN_LOOP xnee_set_data_max (xd, 0); orig = xnee_get_data_max(xd); ret = xnee_set_data_max (xd, DUMMY_INT); new = xnee_get_data_max(xd); XNEE_TEST_ASSERT_DIFF(new, orig, "xnee_set_data_max"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_data_max"); ret = xnee_set_data_max (xd, 0); new = xnee_get_data_max(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_data_max"); XNEE_TEST_ASSERT(new , orig , "xnee_set_data_max"); END_LOOP /* Testing: * * xnee_set_time_max * */ BEGIN_LOOP xnee_set_time_max (xd, 0); orig = xnee_get_time_max(xd); ret = xnee_set_time_max (xd, DUMMY_INT); new = xnee_get_time_max(xd); XNEE_TEST_ASSERT_DIFF(new, orig, "xnee_set_time_max"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_time_max"); ret = xnee_set_time_max (xd, 0); new = xnee_get_time_max(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_time_max"); XNEE_TEST_ASSERT(new , orig , "xnee_set_time_max"); END_LOOP /* Testing: * * xnee_set_interval * */ BEGIN_LOOP xnee_set_interval (xd, 0); orig = xnee_get_interval(xd); ret = xnee_set_interval (xd, DUMMY_INT); new = xnee_get_interval(xd); XNEE_TEST_ASSERT_DIFF(new, orig, "xnee_set_interval"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_interval"); ret = xnee_set_interval (xd, 0); new = xnee_get_interval(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_interval"); XNEE_TEST_ASSERT(new , orig , "xnee_set_interval_max"); END_LOOP /* Testing: * * xnee_set_human_printout * */ BEGIN_LOOP ; xnee_set_recorder(xd); xnee_init(xd); xnee_set_recorder(xd); xnee_set_human_printout(xd); orig = xnee_is_human_printout(xd); ret = xnee_set_xnee_printout(xd); new = xnee_is_human_printout(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_human_printout"); XNEE_TEST_ASSERT_DIFF(orig, new ,"xnee_set_human_printout"); ret = xnee_set_human_printout(xd); new = xnee_is_human_printout(xd); XNEE_TEST_ASSERT(orig , new ,"xnee_set_human_printout"); XNEE_TEST_ASSERT(new , orig , "xnee_set_human_printout"); END_LOOP /* Testing: * * xnee_set_xnee_printout * */ BEGIN_LOOP xnee_set_xnee_printout(xd); orig = xnee_is_xnee_printout(xd); ret = xnee_set_human_printout(xd); new = xnee_is_xnee_printout(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_xnee_printout"); XNEE_TEST_ASSERT_DIFF(orig, new ,"xnee_set_xnee_printout"); ret = xnee_set_xnee_printout(xd); new = xnee_is_xnee_printout(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_xnee_printout"); XNEE_TEST_ASSERT(new , orig , "xnee_set_xnee_printout"); END_LOOP /* Testing: * * xnee_set_replay_speed_str * */ BEGIN_LOOP xnee_set_replay_speed(xd, 120); orig = xnee_get_replay_speed(xd); ret = xnee_set_replay_speed_str (xd, "456"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_replay_speed_str"); new = xnee_get_replay_speed(xd); XNEE_TEST_ASSERT(new, 456,"xnee_set_replay_speed_str"); XNEE_TEST_ASSERT_DIFF(orig, new,"xnee_set_replay_speed_str"); ret = xnee_set_replay_speed_str (xd, "120"); new = xnee_get_replay_speed(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_replay_speed_str"); XNEE_TEST_ASSERT(new, orig, "xnee_set_replay_speed_str"); END_LOOP /* Testing: * * xnee_set_replay_speed * */ BEGIN_LOOP xnee_set_replay_speed(xd, 120 ); orig = xnee_get_replay_speed(xd); ret = xnee_set_replay_speed (xd, DUMMY_INT); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_replay_speed"); new = xnee_get_replay_speed(xd);END_LOOP XNEE_TEST_ASSERT(new , DUMMY_INT,"xnee_set_replay_speed"); /* ADDITIONAL TEST */ BEGIN_LOOP ret = xnee_set_replay_speed (xd, 120); new = xnee_get_replay_speed(xd); XNEE_TEST_ASSERT(orig , new ,"xnee_set_replay_speed"); XNEE_TEST_ASSERT(new , orig , "xnee_set_replay_speed"); END_LOOP /* Testing: * * xnee_set_store_mouse_pos * */ BEGIN_LOOP xnee_set_store_mouse_pos(xd); orig = xnee_is_store_mouse_pos(xd); ret = xnee_unset_store_mouse_pos(xd); new = xnee_is_store_mouse_pos(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_store_mouse_pos"); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_store_mouse_pos"); ret = xnee_set_store_mouse_pos(xd); new = xnee_is_store_mouse_pos(xd); XNEE_TEST_ASSERT(orig , new ,"xnee_set_store_mouse_pos"); XNEE_TEST_ASSERT(new , orig , "xnee_set_store_mouse_pos"); END_LOOP /* Testing: * * xnee_set_program_name * */ BEGIN_LOOP ret = xnee_set_program_name (xd, "dumm_str"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_program_name"); new_str = xnee_get_program_name(xd); XNEE_TEST_ASSERT_STR(new_str, "dumm_str","xnee_set_program_name"); ret = xnee_set_program_name (xd, "hej"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_program_name"); END_LOOP /* Testing: * * xnee_set_replay_offset_str * */ BEGIN_LOOP { int orig_x; int orig_y; int new_x; int new_y; xnee_set_replay_offset_str (xd, "34,12"); orig_x = xnee_get_replay_offset_x(xd); orig_y = xnee_get_replay_offset_y(xd); XNEE_TEST_ASSERT(orig_x, 34,"xnee_set_replay_offset_str_x"); XNEE_TEST_ASSERT(orig_y, 12,"xnee_set_replay_offset_str_x"); ret = xnee_set_replay_offset_str (xd, "12,34"); new_x = xnee_get_replay_offset_x(xd); new_y = xnee_get_replay_offset_y(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_replay_offset_str"); XNEE_TEST_ASSERT_DIFF(orig_x, new_x,"xnee_set_replay_offset_str"); XNEE_TEST_ASSERT_DIFF(orig_y, new_y,"xnee_set_replay_offset_str"); ret = xnee_set_replay_offset_str (xd, "34,12"); new_x = xnee_get_replay_offset_x(xd); new_y = xnee_get_replay_offset_y(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_replay_offset_str"); XNEE_TEST_ASSERT(new_x, orig_x,"xnee_set_replay_offset_str_x"); XNEE_TEST_ASSERT(new_y, orig_y,"xnee_set_replay_offset_str_y"); } END_LOOP /* Testing: * * xnee_set_new_window_pos_value * */ BEGIN_LOOP xnee_set_new_window_pos_value (xd, DUMMY_INT-1); orig = xnee_get_new_window_pos_value(xd); ret = xnee_set_new_window_pos_value (xd, DUMMY_INT); new = xnee_get_new_window_pos_value(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_new_window_pos_value"); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_new_window_pos_value"); ret = xnee_set_new_window_pos_value (xd, DUMMY_INT-1); new = xnee_get_new_window_pos_value(xd); XNEE_TEST_ASSERT(orig , new ,"xnee_set_new_window_pos_value"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_new_window_pos_value"); END_LOOP /* Testing: * * xnee_set_recall_window_pos * */ BEGIN_LOOP xnee_set_recall_window_pos(xd); orig = xnee_get_recall_window_pos(xd); ret = xnee_unset_recall_window_pos (xd); new = xnee_get_recall_window_pos(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_recall_window_pos"); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_recall_window_pos"); ret = xnee_set_recall_window_pos(xd); new = xnee_get_recall_window_pos (xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_recall_window_pos"); XNEE_TEST_ASSERT(new , orig , "xnee_set_recall_window_pos"); END_LOOP /* Testing: * * xnee_set_project_name * */ BEGIN_LOOP ret = xnee_set_project_name(xd, "cdtrs"); orig_str = xnee_get_project_name(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_project_name"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_project_name"); END_LOOP /* Testing: * * xnee_set_project_descr * */ BEGIN_LOOP ret = xnee_set_project_descr(xd, "cdtrs"); orig_str = xnee_get_project_descr(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_project_descr"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_project_descr"); END_LOOP /* Testing: * * xnee_set_creat_date * */ BEGIN_LOOP ret = xnee_set_creat_date(xd, "cdtrs"); orig_str = xnee_get_creat_date(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_creat_date"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_creat_date"); END_LOOP /* Testing: * * xnee_set_creat_program * */ BEGIN_LOOP ret = xnee_set_creat_program(xd, "cdtrs"); orig_str = xnee_get_creat_program(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_creat_program"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_creat_program"); END_LOOP /* Testing: * * xnee_set_creat_prog_vers * */ BEGIN_LOOP ret = xnee_set_creat_prog_vers(xd, "cdtrs"); orig_str = xnee_get_creat_prog_vers(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_creat_prog_vers"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_creat_prog_vers"); END_LOOP /* Testing: * * xnee_set_last_date * */ BEGIN_LOOP ret = xnee_set_last_date(xd, "cdtrs"); orig_str = xnee_get_last_date(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_last_date"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_last_date"); END_LOOP /* Testing: * * xnee_set_last_program * */ BEGIN_LOOP ret = xnee_set_last_program(xd, "cdtrs"); orig_str = xnee_get_last_program(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_last_program"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_last_program"); END_LOOP /* Testing: * * xnee_set_last_prog_vers * */ BEGIN_LOOP ret = xnee_set_last_prog_vers(xd, "cdtrs"); orig_str = xnee_get_last_prog_vers(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_last_prog_vers"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_last_prog_vers"); END_LOOP /* Testing: * * xnee_set_author_name * */ BEGIN_LOOP ret = xnee_set_author_name(xd, "cdtrs"); orig_str = xnee_get_author_name(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_author_name"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_author_name"); END_LOOP /* Testing: * * xnee_set_author_email * */ BEGIN_LOOP ret = xnee_set_author_email(xd, "cdtrs"); orig_str = xnee_get_author_email(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_author_email"); XNEE_TEST_ASSERT_DIFF_STR(orig_str, "cdtrs","xnee_set_author_email"); END_LOOP /* Testing: * * xnee_set_all_clients_str * */ BEGIN_LOOP xnee_set_all_clients(xd); orig = xnee_get_all_clients(xd); ret = xnee_set_all_clients_str(xd, "false"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_all_clients_str"); new = xnee_get_all_clients(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_all_clients_str"); XNEE_TEST_ASSERT(new, 0 ,"xnee_set_all_clients_str"); XNEE_TEST_ASSERT_DIFF(orig, new,"xnee_set_all_clients_str"); ret = xnee_set_all_clients_str(xd, "true"); new = xnee_get_all_clients(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_all_clients_str"); XNEE_TEST_ASSERT(new, orig, "xnee_set_all_clients_str"); END_LOOP /* Testing: * * xnee_set_future_clients_str * */ BEGIN_LOOP xnee_set_future_clients(xd); orig = xnee_is_future_clients(xd); ret = xnee_set_future_clients_str(xd, "false"); new = xnee_is_future_clients(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_future_clients_str"); new = xnee_is_future_clients(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_future_clients_str"); XNEE_TEST_ASSERT(new, 0,"xnee_set_future_clients_str"); XNEE_TEST_ASSERT_DIFF(orig, new, "xnee_set_future_clients_str"); ret = xnee_set_future_clients_str(xd, "true"); new = xnee_is_future_clients(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_future_clients_str"); XNEE_TEST_ASSERT(new, 1,"xnee_set_future_clients_str"); XNEE_TEST_ASSERT(orig, new, "xnee_set_future_clients_str"); END_LOOP /* Testing: * * xnee_set_events_max_str * */ BEGIN_LOOP xnee_set_events_max(xd, 10); orig = xnee_get_events_max(xd); ret = xnee_set_events_max_str (xd, "12345"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_events_max_str"); new = xnee_get_events_max(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_events_max_str"); XNEE_TEST_ASSERT(new, 12345,"xnee_set_events_max_str"); XNEE_TEST_ASSERT_DIFF(orig, new,"xnee_set_events_max_str"); ret = xnee_set_events_max_str (xd, "10"); new = xnee_get_events_max(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_events_max_str"); XNEE_TEST_ASSERT(new, orig, "xnee_set_events_max_str"); END_LOOP /* Testing: * * xnee_set_data_max_str * */ BEGIN_LOOP xnee_set_data_max(xd, 12); orig = xnee_get_data_max(xd); ret = xnee_set_data_max_str (xd, "34"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_data_max_str"); new = xnee_get_data_max(xd); XNEE_TEST_ASSERT(new, 34,"xnee_set_data_max_str"); XNEE_TEST_ASSERT_DIFF(orig, new,"xnee_set_data_max_str"); ret = xnee_set_data_max_str (xd, "12"); new = xnee_get_data_max(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_data_max_str"); XNEE_TEST_ASSERT(new, orig, "xnee_set_data_max_str"); END_LOOP /* Testing: * * xnee_set_time_max_str * */ BEGIN_LOOP xnee_set_time_max(xd, 23); orig = xnee_get_time_max(xd); ret = xnee_set_time_max_str (xd, "45"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_time_max_str"); new = xnee_get_time_max(xd); XNEE_TEST_ASSERT(new, 45,"xnee_set_time_max_str"); XNEE_TEST_ASSERT_DIFF(orig, new,"xnee_set_time_max_str"); ret = xnee_set_time_max_str (xd, "23"); new = xnee_get_time_max(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_time_max_str"); XNEE_TEST_ASSERT(new, orig, "xnee_set_time_max_str"); END_LOOP /* Testing: * * xnee_set_rep_resolution * */ BEGIN_LOOP { int orig_x; int orig_y; int new_x; int new_y; xnee_set_rep_resolution_x(xd, 1280); xnee_set_rep_resolution_y(xd, 800); orig_x = xnee_get_rep_resolution_x(xd); orig_y = xnee_get_rep_resolution_y(xd); ret = xnee_set_rep_resolution_x (xd, 123); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rep_resolution"); ret = xnee_set_rep_resolution_y (xd, 456); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rep_resolution"); new_x = xnee_get_rep_resolution_x(xd); new_y = xnee_get_rep_resolution_y(xd); XNEE_TEST_ASSERT(new_x, 123,"xnee_set_rep_resolution"); XNEE_TEST_ASSERT_DIFF(orig_x, new_x,"xnee_set_rep_resolution"); XNEE_TEST_ASSERT(new_y, 456,"xnee_set_rep_resolution"); XNEE_TEST_ASSERT_DIFF(orig_y, new_y,"xnee_set_rep_resolution"); ret = xnee_set_rep_resolution_x (xd, 1280); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rep_resolution"); ret = xnee_set_rep_resolution_y (xd, 800); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rep_resolution"); new_x = xnee_get_rep_resolution_x(xd); new_y = xnee_get_rep_resolution_y(xd); XNEE_TEST_ASSERT(new_x, orig_x, "xnee_set_rep_resolution_str"); XNEE_TEST_ASSERT(new_y, orig_y, "xnee_set_rep_resolution_str"); } END_LOOP /* Testing: * * xnee_set_rec_resolution * */ BEGIN_LOOP { int orig_x; int orig_y; int new_x; int new_y; xnee_set_rec_resolution_x(xd, 1280); xnee_set_rec_resolution_y(xd, 800); orig_x = xnee_get_rec_resolution_x(xd); orig_y = xnee_get_rec_resolution_y(xd); ret = xnee_set_rec_resolution_x (xd, 123); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rec_resolution"); ret = xnee_set_rec_resolution_y (xd, 456); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rec_resolution"); new_x = xnee_get_rec_resolution_x(xd); new_y = xnee_get_rec_resolution_y(xd); XNEE_TEST_ASSERT(new_x, 123,"xnee_set_rec_resolution"); XNEE_TEST_ASSERT_DIFF(orig_x, new_x,"xnee_set_rec_resolution"); XNEE_TEST_ASSERT(new_y, 456,"xnee_set_rec_resolution"); XNEE_TEST_ASSERT_DIFF(orig_y, new_y,"xnee_set_rec_resolution"); ret = xnee_set_rec_resolution_x (xd, 1280); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rec_resolution"); ret = xnee_set_rec_resolution_y (xd, 800); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_rec_resolution"); new_x = xnee_get_rec_resolution_x(xd); new_y = xnee_get_rec_resolution_y(xd); XNEE_TEST_ASSERT(new_x, orig_x, "xnee_set_rec_resolution_str"); XNEE_TEST_ASSERT(new_y, orig_y, "xnee_set_rec_resolution_str"); } END_LOOP /* Testing: * * xnee_set_sync_mode_str * */ BEGIN_LOOP orig = xnee_get_sync_mode(xd); ret = xnee_set_sync_mode_str (xd, "false"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_sync_mode_str"); new = xnee_get_sync_mode(xd); XNEE_TEST_ASSERT(new, 0,"xnee_set_sync_mode_str"); XNEE_TEST_ASSERT_DIFF(new, 1,"xnee_set_sync_mode_str"); ret = xnee_set_sync_mode_str (xd, "true"); new = xnee_get_sync_mode(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_sync_mode_str"); XNEE_TEST_ASSERT(new, orig, "xnee_set_sync_mode_str"); END_LOOP /* Testing: * * xnee_set_sync_mode * */ BEGIN_LOOP xnee_set_sync_mode(xd); orig = xnee_get_sync_mode(xd); ret = xnee_unset_sync_mode(xd); new = xnee_get_sync_mode(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_sync_mode"); XNEE_TEST_ASSERT_DIFF(orig , new ,"xnee_set_sync_mode"); ret = xnee_set_sync_mode(xd); new = xnee_get_sync_mode(xd); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_sync_mode"); XNEE_TEST_ASSERT(new , orig , "xnee_set_sync_mode"); END_LOOP /* Testing: * * xnee_set_xosd_font * */ BEGIN_LOOP ret = xnee_set_xosd_font(xd, "apa"); XNEE_TEST_ASSERT(ret, XNEE_OK, "xnee_set_xosd_font"); orig_str = (char*)xnee_get_xosd_font(xd); XNEE_TEST_ASSERT_STR(orig_str, "apa","xnee_set_xosd_font"); END_LOOP return 0; } xnee-3.19/libxnee/test/test_setget.c0000664000000000000000000000157111671473446014422 00000000000000#include "test_setget.h" #include "libxnee/xnee.h" #include "libxnee/xnee_session.h" int test_all(xnee_data *xd); int fails; int total; int verbose; int orig; int ret; int new; char *orig_str; char *ret_str; char *new_str; FILE *orig_fd; FILE *ret_fd; FILE *new_fd; int main(int argc, char **argv) { xnee_data *xdl; fails = 0 ; total = 0; verbose = 0; if (argc>1) verbose = 1; printf ("Starting tests :) :) \n"); /* Get a new xnee_data structure */ /* call to xnee_init */ xdl = xnee_new_xnee_data(); /* xnee_init(xdl); */ /* Set the program name */ xnee_set_program_name (xdl, "testsetget"); /* Set the cli parameters */ xnee_set_application_parameters (xdl, NULL); xnee_set_recorder (xdl); test_all(xdl); fprintf (stdout, "\tSucesss: %d\n", total); fprintf (stdout, "\tFailures: %d\n", fails); xnee_close_down(xdl); return 0; } xnee-3.19/libxnee/test/test_setget.h0000664000000000000000000000542211461647222014416 00000000000000#include #include "libxnee/xnee.h" #include "libxnee/xnee_resource.h" extern int orig; extern int ret; extern int new; extern char *orig_str; extern char *ret_str; extern char *new_str; extern FILE *orig_fd; extern FILE *ret_fd; extern FILE *new_fd; extern xnee_data *xdl; extern int fails; extern int total; extern int verbose ; #define PRINT_FUN printf (" %s:%d %s()\n", __FILE__, __LINE__ , __func__); #define XNEE_PRINT_ERROR(err) \ fprintf (stderr, "Error number: %d\n", err); \ fprintf (stderr, " Error: %s\n", xnee_get_err_description(err)); \ fprintf (stderr, " Solution: %s\n", xnee_get_err_solution(err)); \ #define ON_FAIL(fun, line) \ total++; \ fails++ ; \ printf("Test of function '%s()' failed (%s:%d) %d/%d\n", fun, __FILE__, line, fails, total ); #define ON_OK(fun, line) if(verbose)printf("Test of function '%s()' OK line:%d %d/%d \n", fun, line, fails, total); total++; #define XNEE_TEST_ASSERT(ret_val, comp_val, fun_str) \ { \ if ( (int)ret_val != (int)comp_val ) \ { \ ON_FAIL(fun_str, __LINE__); \ printf (" %d != %d\n", ret_val, comp_val); \ PRINT_FUN;\ XNEE_PRINT_ERROR(ret);\ exit(1); \ }\ else \ { \ ON_OK(fun_str, __LINE__); \ } \ } #define XNEE_TEST_ASSERT_DIFF(ret_val, comp_val, fun_str) \ { \ if ( (int)ret_val == (int)comp_val ) \ { \ ON_FAIL(fun_str, __LINE__);\ printf (" %d == %d\n", (int)ret_val, (int)comp_val); \ PRINT_FUN \ exit(1); \ }\ else \ ON_OK(fun_str, __LINE__); \ } #define XNEE_TEST_ASSERT_DIFF_PTR(ret_val, comp_val, fun_str) \ { \ if ( (void*)ret_val == (void*)comp_val ) \ { \ ON_FAIL(fun_str, __LINE__);\ printf (" %p == %p\n", (void*)ret_val, (void*)comp_val); \ PRINT_FUN \ exit(1); \ }\ else \ ON_OK(fun_str, __LINE__); \ } #define XNEE_TEST_ASSERT_STR(ret_str, comp_str, fun_str) \ { \ if ( strcmp(ret_str, comp_str)!=0) \ { \ ON_FAIL(fun_str, __LINE__);\ printf (" %s != %s\n", ret_str, comp_str); \ PRINT_FUN \ exit(1); \ }\ else \ ON_OK(fun_str, __LINE__);\ } #define XNEE_TEST_ASSERT_DIFF_STR(ret_str, comp_str, fun_str) \ { \ if ( strcmp(ret_str, comp_str )==0) \ { \ ON_FAIL(fun_str, __LINE__);\ printf (" %s == %s\n", ret_str, comp_str); fflush(stdout);\ PRINT_FUN \ exit(1); \ }\ else \ ON_OK(fun_str, __LINE__);\ } xnee-3.19/libxnee/test/test_feedback.c0000664000000000000000000000410711671473446014651 00000000000000#include "test_setget.h" #include "libxnee/xnee.h" #include "libxnee/feedback.h" #include "libxnee/xnee_session.h" int fails; int total; int verbose; int test_setfeedback(xnee_data *xd) { int ret ; const char *ptr; static char *xosd_test_font = "-bitstream-courier 10 pitch-*-*-*-*-*-*-*-*-*-*-*-*"; /*" * -*-terminus-medium-r-*-*-*-120-*-*-*-*-*-*"; */ /* no */ ret = xnee_set_no_feedback(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_set_no_feedback"); ret = feedback(xd, " ** Testing no feedback\n"); XNEE_TEST_ASSERT(ret, 0, "feedback"); ret = xnee_is_no_feedback(xd); XNEE_TEST_ASSERT(ret, 1, "xnee_is_no_feedback"); /* stderr */ ret = xnee_set_stderr_feedback(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_set_stderr_feedback"); ret = feedback(xd, " ** Testing stderr feedback\n"); XNEE_TEST_ASSERT(ret, 0, "feedback"); ret = xnee_is_stderr_feedback(xd); XNEE_TEST_ASSERT(ret, 1, "xnee_is_stderr_feedback"); /* xosd */ ret = xnee_set_xosd_feedback(xd); XNEE_TEST_ASSERT(ret, 0, "xnee_set_xosd_feedback"); ret = feedback(xd, " ** Testing xosd feedback\n"); XNEE_TEST_ASSERT(ret, 0, "feedback"); ret = xnee_is_xosd_feedback(xd); XNEE_TEST_ASSERT(ret, 1, "xnee_is_xosd_feedback"); ptr = xnee_get_xosd_font_impl(xd); XNEE_TEST_ASSERT_DIFF_PTR(ptr, NULL, "xnee_get_xosd_font_impl"); ret = xnee_set_xosd_font_impl(xd, xosd_test_font); XNEE_TEST_ASSERT(ret, 0, "xnee_set_xosd_font_impl"); ptr = xnee_get_xosd_font_impl(xd); XNEE_TEST_ASSERT_DIFF_PTR(ptr, NULL, "xnee_get_xosd_font_impl"); ret = feedback(xd, " ** Testing xosd feedback again\n"); XNEE_TEST_ASSERT(ret, 0, "feedback"); usleep(2000*1000); return 0; } int main() { xnee_data *xdl; fails = 0; total = 0; printf (" feedback tester\n"); xdl = xnee_new_xnee_data(); xnee_set_program_name (xdl, "feedbacker"); xnee_set_application_parameters (xdl, NULL); test_setfeedback(xdl); fprintf (stdout, "\tSucesss: %d\n", total); fprintf (stdout, "\tFailures: %d\n", fails); xnee_close_down(xdl); return 0; } xnee-3.19/libxnee/test/Makefile.in0000664000000000000000000006362712332167124013767 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 = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) subdir = libxnee/test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/./autotools/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libtestcb_la_LIBADD = am_libtestcb_la_OBJECTS = libtestcb_la-callback_so.lo libtestcb_la_OBJECTS = $(am_libtestcb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libtestcb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libtestcb_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__EXEEXT_1 = libtest$(EXEEXT) am__EXEEXT_2 = testsetget$(EXEEXT) am__EXEEXT_3 = testfeedback$(EXEEXT) am__EXEEXT_4 = testprint$(EXEEXT) am__EXEEXT_5 = testdisplay$(EXEEXT) am__EXEEXT_6 = testcallback$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_libtest_OBJECTS = libtest.$(OBJEXT) libtest_OBJECTS = $(am_libtest_OBJECTS) libtest_LDADD = $(LDADD) am_testcallback_OBJECTS = callback.$(OBJEXT) testcallback_OBJECTS = $(am_testcallback_OBJECTS) testcallback_LDADD = $(LDADD) am_testdisplay_OBJECTS = disp.$(OBJEXT) testdisplay_OBJECTS = $(am_testdisplay_OBJECTS) testdisplay_LDADD = $(LDADD) am_testfeedback_OBJECTS = test_feedback.$(OBJEXT) testfeedback_OBJECTS = $(am_testfeedback_OBJECTS) testfeedback_LDADD = $(LDADD) am_testprint_OBJECTS = print.$(OBJEXT) testprint_OBJECTS = $(am_testprint_OBJECTS) testprint_LDADD = $(LDADD) am_testsetget_OBJECTS = test_setget.$(OBJEXT) test_all.$(OBJEXT) testsetget_OBJECTS = $(am_testsetget_OBJECTS) testsetget_LDADD = $(LDADD) 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) depcomp = $(SHELL) $(top_srcdir)/./autotools/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(libtestcb_la_SOURCES) $(libtest_SOURCES) \ $(testcallback_SOURCES) $(testdisplay_SOURCES) \ $(testfeedback_SOURCES) $(testprint_SOURCES) \ $(testsetget_SOURCES) DIST_SOURCES = $(libtestcb_la_SOURCES) $(libtest_SOURCES) \ $(testcallback_SOURCES) $(testdisplay_SOURCES) \ $(testfeedback_SOURCES) $(testprint_SOURCES) \ $(testsetget_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ LIBTEST = libtest TESTSETGET = testsetget TESTFEEDBACK = testfeedback TESTPRINT = testprint TESTDISP = testdisplay TESTCALLBACK = testcallback lib_LTLIBRARIES = libtestcb.la TEST_WRAPPER = ./test-wrapper.sh EXTRA_DIST = test_setget.h $(TEST_WRAPPER) @BUILD_STATIC_FALSE@STATIC_FLAGS = @BUILD_STATIC_TRUE@STATIC_FLAGS = -static AM_CFLAGS = -I../include -I${LIBXNEE_DIR}/include ${PEDANTIC_FLAGS} ${X_CFLAGS} -g ${VERBOSE_FLAG} ${BUF_VERBOSE_FLAG} ${USER_CFLAGS} ${GCOV_FLAG} ${GPROF_FLAG} AM_LDFLAGS = -L../src/.libs/ -L${LIBXNEE_DIR}/src -lxnee ${X_LIBS} ${X11_LIBS} ${LIBDL} ${GCOV_FLAG} ${GPROF_FLAG} $(STATIC_FLAGS) AM_LDADD = -L../src/.libs/ -L${LIBXNEE_DIR}/src -lxnee ${X_LIBS} ${X11_LIBS} ${LIBDL} ${GCOV_FLAG} ${GPROF_FLAG} $(STATIC_FLAGS) libtest_SOURCES = libtest.c testsetget_SOURCES = test_setget.c test_all.c testfeedback_SOURCES = test_feedback.c testprint_SOURCES = print.c testdisplay_SOURCES = disp.c testcallback_SOURCES = callback.c libtestcb_la_SOURCES = callback_so.c libtestcb_la_CFLAGS = $(AM_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libxnee/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libxnee/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libtestcb.la: $(libtestcb_la_OBJECTS) $(libtestcb_la_DEPENDENCIES) $(EXTRA_libtestcb_la_DEPENDENCIES) $(AM_V_CCLD)$(libtestcb_la_LINK) -rpath $(libdir) $(libtestcb_la_OBJECTS) $(libtestcb_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list libtest$(EXEEXT): $(libtest_OBJECTS) $(libtest_DEPENDENCIES) $(EXTRA_libtest_DEPENDENCIES) @rm -f libtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(libtest_OBJECTS) $(libtest_LDADD) $(LIBS) testcallback$(EXEEXT): $(testcallback_OBJECTS) $(testcallback_DEPENDENCIES) $(EXTRA_testcallback_DEPENDENCIES) @rm -f testcallback$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testcallback_OBJECTS) $(testcallback_LDADD) $(LIBS) testdisplay$(EXEEXT): $(testdisplay_OBJECTS) $(testdisplay_DEPENDENCIES) $(EXTRA_testdisplay_DEPENDENCIES) @rm -f testdisplay$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testdisplay_OBJECTS) $(testdisplay_LDADD) $(LIBS) testfeedback$(EXEEXT): $(testfeedback_OBJECTS) $(testfeedback_DEPENDENCIES) $(EXTRA_testfeedback_DEPENDENCIES) @rm -f testfeedback$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testfeedback_OBJECTS) $(testfeedback_LDADD) $(LIBS) testprint$(EXEEXT): $(testprint_OBJECTS) $(testprint_DEPENDENCIES) $(EXTRA_testprint_DEPENDENCIES) @rm -f testprint$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testprint_OBJECTS) $(testprint_LDADD) $(LIBS) testsetget$(EXEEXT): $(testsetget_OBJECTS) $(testsetget_DEPENDENCIES) $(EXTRA_testsetget_DEPENDENCIES) @rm -f testsetget$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testsetget_OBJECTS) $(testsetget_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callback.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libtestcb_la-callback_so.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_feedback.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_setget.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libtestcb_la-callback_so.lo: callback_so.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtestcb_la_CFLAGS) $(CFLAGS) -MT libtestcb_la-callback_so.lo -MD -MP -MF $(DEPDIR)/libtestcb_la-callback_so.Tpo -c -o libtestcb_la-callback_so.lo `test -f 'callback_so.c' || echo '$(srcdir)/'`callback_so.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libtestcb_la-callback_so.Tpo $(DEPDIR)/libtestcb_la-callback_so.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='callback_so.c' object='libtestcb_la-callback_so.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libtestcb_la_CFLAGS) $(CFLAGS) -c -o libtestcb_la-callback_so.lo `test -f 'callback_so.c' || echo '$(srcdir)/'`callback_so.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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 $(LTLIBRARIES) $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libLTLIBRARIES \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-libLTLIBRARIES test: chmod a+x ./test-wrapper.sh $(TEST_WRAPPER) ./$(LIBTEST) $(TEST_WRAPPER) ./$(TESTSETGET) $(TEST_WRAPPER) ./$(TESTFEEDBACK) $(TEST_WRAPPER) ./$(TESTPRINT) $(TEST_WRAPPER) ./$(TESTCALLBACK) xtest: ./$(LIBTEST) ./$(TESTSETGET) ./$(TESTFEEDBACK) ./$(TESTPRINT) ./$(TESTCALLBACK) # 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: xnee-3.19/libxnee/test/test-wrapper.sh0000775000000000000000000000101511461647222014701 00000000000000#!/bin/sh test_program() { if [ ! -x $1 ] then echo "Program $1 does not exists, or is not executable" return 1 fi xdpyinfo >/dev/null 2>&1 if [ "$?" != "0" ] then echo "Problem with X server (prob authorisation, or no X up and running)" echo " when executing program $1" echo " .... bailing out" return 1 fi $1 } if [ ! -f ./.libs/libtestcb.so ] then cp ./.libs/libtestcb_la-callback_so.o ./.libs/libtestcb.so fi export LD_LIBRARY_PATH=./.libs test_program $1 exit 0 xnee-3.19/libxnee/test/callback_so.c0000664000000000000000000000133611671473445014323 00000000000000#include #include "libxnee/xnee.h" #include "libxnee/xnee_session.h" void xnee_record_dispatch_external (XPointer xpoint_xnee_data, XRecordInterceptData *data ) { static int ctr=0; if (++ctr%1000==0) { printf(" %d ", ctr); fflush(stdout); } if ( (data==NULL) || (!data->data) ) { xnee_process_count(XNEE_PROCESS_RESET); return; } XRecordFreeData(data); return; } void xnee_replay_dispatch_external (XPointer type_ref, XRecordInterceptData *data) { static int ctr=0; if (++ctr%1000==0) { printf(" %d ", ctr); fflush(stdout); } if ( (data==NULL) || (!data->data) ) { return; } XRecordFreeData(data); return; } xnee-3.19/libxnee/Makefile.in0000664000000000000000000004511512332167124013000 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 = : build_triplet = @build@ host_triplet = @host@ subdir = libxnee DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am AUTHORS \ ChangeLog INSTALL NEWS README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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 = src test AUTOMAKE_OPTIONS = gnu EXTRA_DIST = autotools/* all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libxnee/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libxnee/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-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 mostlyclean-libtool 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: xnee-3.19/libxnee/NEWS0000664000000000000000000001501307740617737011445 00000000000000libxnee / NEWS ---------------------------- This file contains major news about libxnee which is a part of the Xnee project. For more information about Xnee, http://www.gnu.org Changes in - '--enable-pedantic' option added to configure - range allocation algorithm partly rewritten All text below concerns the old structure of Xnee ------------------------------------------------------------------------------ Changes in 1.08 - new options: '--write-settings' writes a resource file from settings done '--mouse' sets up ranges for all mouse events '--keyboard' sets up ranges for all keynoard events '--recorded-resolution' resolution used when recording '--replay-resolution' resolution to use when replaying '--no-resolution-adjustment' Don't use resolution adjustment '--speed-percent [percent]' change the replaying speed '--pause-key [k m]' key+modifier pauses xnee's current action '--pause-key [k m]' key+modifier resume xnee's paused action '--insert-key [k m]' key+modifier inserts a meta mark in the log file '--max-threshold [nr]' sets the maximum threshold during sync '--min-threshold [nr]' sets the maximum threshold during sync '--tot-threshold [nr]' sets the total threshold during sync '--retype-file [file]' retype the contents of file '--retype-help ' retype the help printout - synchronisation rewritten Changes in 1.07 - version numbering changed (x.yz is used instead of x.y.z) - plugin functionality renamed to resource - plugin functionality added (plug in dynamic libs) - synchronization rewritten - force-replay option added - replay delay rewritten - Xnee can be configured (during configure) to: + exclude buffer verbose - print functions replaced by function pointers in dispatch functions, - Added modifier+key binding to pause, resume Changes in 1.0.6 - data names can now be more then 10 chars long ... errrh - Xnee can be configured to: + exclude verbose mode + gcov compilation + grpof compilation - new or modified options: '--print-event-names' prints all event names and number '--print-request-names' prints all request names and number '--print-event-names' prints event name or number '--print-request-names' prints request names or number Changes in 1.0.6pre1 - multiple modifiers added - data names can be used when setting ranges - docs updated with the above changes - range setting (when replaying) bug corrected - speed increased (removed recording of device event when replying) - Xnee is now a GNU package Changes in 1.0.5 - Typos corrected in doc/ & README (after GNU review) - Fiex parser error (--no_sync ----> --no-sync ) - Manual corrected (after GNU review) - new options added to ease up usage a bit: '--print-event-name' '--print-error-name' '--print-reply-name' '--print-request-name' '--print-data-name' - info, manuals updated Changes in 1.0.4 - changed printout for --help and --version - made ChangeLog what is supposed to be build.sh doesn't copy NEWS to ChangeLog anymore - xnee manual is now under FDL - xnee developer manual is now under FDL - TODO updated with GNU Coding Standard todos - doc (texi) files updated with index refs - doc (texi) files updated to make info pages nice - build_web.sh added to CVS - fixed one sigbus & one sigsegv on non-glibc platforms (thanks freeBSD) Changes in 1.0.3 - fixed parse error (mainor_range ---> minor_range ) - switched to CLI options syntax as recommended by the GNU Coding Standards - fixed a seg fault when closing down recording Changes in 1.0.2 - stop_key is now correctly parsed (man page updated) - CPU consuming calls to XRecordProcessReplies removed - Async recording is not used anymore - Fixed memory leak (a few bytes when closing down) - man page corrected - help printout corrected Changes in 1.0.1 - Fixed memory leak Changes in 1.0 - Added --stop_key option to CLI and plugin files and record file - Added --future_clients option to CLI - Manual in pdf has moved to Documentation package - Manual updated - Example session included - Source code is documented (using doxygen) - man pages are generated from xnee binary - Xnee now comes in two packages Program and Documentation Changes in 0.9 - new command line options: --print_settings - xnee reads (and uses) settings from recorded file - added texi files (pdf, html, txt manuals) - added man page - EXAMPLES file updated - redhat specs updated Changes in 0.9beta - ugly printout when using delayed startup removed - MANUAL added Changes in 0.9alpha - synchronisation works .... at last :) - removed a lot of duplicated code - The following option has been updated 1) help 2) binary 3) out "stdout" in plugin scripts is treated as stdout (not creating a file called stdout) 4) err "stderr" in plugin scripts is treated as stderr (not creating a file called stderr) - DESCRIPTION, EXAMPLES, FAQ, README, TODO updated - DEVELOPMENT added Changes in 0.8.1 - fixed a hanging (not on all platforms) xnee when finished replaying - fixed dependency to libxnee for the xnee binary in the generated Makefiles - fiexd missing newline in help text Changes in 0.8 - minor bugfixes - copyright years added - the depcomp script have been added. - It compiles and runs on Solaris8 (intel) and Windows98/Cygwin/Xfree86. - The order of libs to be linked has changed. Changes in 0.8beta - --time options now works - Pressing Ctrl-C will stop Xnee but __NOT__ remove the recorded file Changes in 0.8alpha - worked around the bug* that crashed the X server when recording delivered events. *) I still do not know where the bug is located (e.g xnee, X, RECORD) Changes in 0.7.2 - "plugins / xnee settings" is from now on only called plugin .. sorry about the fuzz - Support for RedHat RPM/SRPMS is included is distribution - build.sh is extended to build from clean dist to RPMs Changes in 0.7.1 - Support for plugins / xnee settings file is corrected Changes in 0.7 - Delay works fine - System info printing is back ... never missed it really since replay doesn't use it .. yet - Support for plugins / xnee settings file is added Changes in 0.7alpha_2 - Xnee can now record delivered events (used FutureClients) without crashing - First event not recorded (thank to Ton van Vliet) Changes in 0.7alpha_1 - Seg. fault on debian fixed - Mem fault on OpenBSD fixed - Xnee is now (at last) "autoconfed" xnee-3.19/Makefile.in0000664000000000000000000006750712332167123011362 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 = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in COPYING TODO ./autotools//compile \ ./autotools//config.guess ./autotools//config.sub \ ./autotools//install-sh ./autotools//missing \ ./autotools//ltmain.sh $(top_srcdir)/./autotools/compile \ $(top_srcdir)/./autotools/config.guess \ $(top_srcdir)/./autotools/config.sub \ $(top_srcdir)/./autotools/install-sh \ $(top_srcdir)/./autotools/ltmain.sh \ $(top_srcdir)/./autotools/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in 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 = 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 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)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 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 GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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 = libxnee cnee gnee pnee ${DOC_DIR} share examples sessions pixmap man #${LIB_DIR} ${CLI_DIR} ${GUI_DIR} ${GNOME_APPLET_DIR} ${DOC_DIR} share examples sessions ${PIXMAP_DIR} man AUTOMAKE_OPTIONS = gnu EXTRA_DIST = Makefile.xnee Makefile.cvs autotools/* projects/test.xnp sessions/example1.xns README README.debian README.cvs BUGS FAQ EXAMPLES doc/Makefile.am doc/Makefile.in ChangeLog build/autobuild.sh all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @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 config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # 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 config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(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 mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all 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-libtool 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-hdr distclean-libtool 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-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 \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am devel-doc: -rm -fr src-html/ mkdir src-html/ DATE="$(shell date)" && \ grep AM_INIT_AUTOMAKE configure.in | sed -e 's/AM_INIT_AUTOMAKE//g' -e 's/\,[a-zA-Z0-9\.]*//g' -e 's,[()]*,,g' && \ XNEE_NAME="$(shell grep AM_INIT_AUTOMAKE configure.in | sed -e 's/AM_INIT_AUTOMAKE//g' -e 's/\,[a-zA-Z0-9\.]*//g' -e 's,[()]*,,g') " && \ XNEE_VERSION="$(shell grep AM_INIT_AUTOMAKE configure.in | sed -e 's/AM_INIT_AUTOMAKE//g' -e 's/[a-zA-Z0-9\.]*\,//g' -e 's,[()]*,,g') " && \ echo "Date: \"$$DATE\" $$XNEE_NAME $$XNEE_VERSION " && \ cat tmpl/header.html.tmpl | sed \ -e "s,PRODUCT_TMPL,$$XNEE_NAME (libxnee),g" \ -e "s,PRODUCT_VERSION_TMPL,$$XNEE_VERSION,g" \ -e "s,PRODUCT_BUILD_TMPL,$$DATE,g" \ -e "s,GNU_WWW_TMPL,http://www\.gnu\.org,g" \ -e "s,XNEE_WWW_TMPL,http://www\.gnu\.org/software/xnee,g" \ > libxnee/src/header.html cat tmpl/header.html.tmpl | sed \ -e 's,PRODUCT_TMPL,$$XNEE_NAME (cnee),g' \ -e 's,PRODUCT_VERSION_TMPL,$$XNEE_VERSION,g' \ -e 's,PRODUCT_BUILD_TMPL,$$DATE,g' \ -e "s,GNU_WWW_TMPL,http://www\.gnu\.org,g" \ -e "s,XNEE_WWW_TMPL,http://www\.gnu\.org/software/xnee,g" \ > cnee/src/header.html && \ mkdir -p src-html/libxnee/src mkdir -p src-html/libxnee/include/libxnee mkdir -p src-html/cnee/src cd libxnee/src/ && ${MAKE} devel-doc # cd cnee/src/ && ${MAKE} src-html && cp *.html ../../src-html/cnee/src manual: cd ./doc/ && $(MAKE) all manual man: cd ./cnee/src && make man cd pnee/man && make cd gnee/man && make test: cd libxnee/test && make clean all test check: all cd libxnee/test && make test cd cnee/test && ./test_all.sh xcheck: all cd libxnee/test && make xtest cd cnee/test && ./test_all.sh $(srcdir)/package.m4 : $(topdir)/configure.in :;{\ echo '# ' && \ echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])' ; \ } > '$$(srcdir)/package.m4' autobuild: cd build && autobuild.sh # 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: xnee-3.19/pixmap/0000775000000000000000000000000012332167177010665 500000000000000xnee-3.19/pixmap/Makefile.am0000664000000000000000000000026111113632147012626 00000000000000ICONS = xnee.xpm xnee.png icon_DATA = $(ICONS) icondir = $(datadir)/pixmaps EXTRA_DIST = $(ICONS) %.png:%.svg $(INKSCAPE) --export-png=$@ $< %.xpm:%.png $(CONVERT) $< $@ xnee-3.19/pixmap/xnee.xpm0000664000000000000000000004212711445205262012270 00000000000000/* XPM */ static char *xnee[] = { /* columns rows colors chars-per-pixel */ "128 128 33 1", " c #000000", ". c #0A0A0A", "X c #131313", "o c #1B1B1B", "O c #242424", "+ c #2B2B2B", "@ c #343434", "# c #3C3C3C", "$ c #434343", "% c #4B4B4B", "& c #545454", "* c #5C5C5C", "= c #646464", "- c #6B6B6B", "; c #747474", ": c #7B7B7B", "> c #848484", ", c #8B8B8B", "< c #949494", "1 c #9D9D9D", "2 c #A3A3A3", "3 c #A8A8A8", "4 c #B2B2B2", "5 c #BCBCBC", "6 c #C3C3C3", "7 c #CCCCCC", "8 c #D1D1D1", "9 c #DADADA", "0 c #E4E4E4", "q c #EBEBEB", "w c #F3F3F3", "e c #FFFFFF", "r c None", /* pixels */ "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr .,,>>>>>>>:::::::;:;;;;;;;------=--;===*=# rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr .233333333333333333333323333333234we73333& rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 133333333333333333333333333333338ee03333O rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ,33333333333333333333333333333339ee93332. rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr :33333233333333333333333333333330ee8333> rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr -3333333333333333333232333333333wee7333* rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr *3333333333333233333333333333332eee5333@ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr %2333333333333323333233333233334eee4333X rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr #3333333333332<*$OX+$=1333333335eee233< rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +32333333333<$. .&13333337eew333- rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr X3333333333>. X<333338ee0323$ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr .233333333,.. .%;>-$. o123339ee9332o rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 133333332O =7999996& $3333qee8331 rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr <33333321 ;989999999& .3333wee633: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr :3333333; .79999999994 ,333eee532& rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ;3333333- .99999999996 :334eee333+ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr *3333332< <999999999; .2235eew332. rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr %33333333o .19999989, @3337eeq33> rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr #33323333: @>241:O .,3339ee033* rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr O333333333- .:33339ee933@ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +O .,333333333;o O>333336ew533X rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr O69> .:2333333332-@o .o#:333333323433< %+ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr X=5ee9+ .;333333333333212223333332333333& X23-X rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr .*<15eew: @,33233333333333333333333323,+ ;qew5$ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr .%,11<2eee3+ .$12333333333333333333323,% O2eeeeq1O rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr .#,<<1<12wee5; .@-133233333333333321*O :19eeeee9-. rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrr @><111128weee91O +&-:12333321:*#O @21140eeeee6$ rrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrr O;1<11139eeeeee91- .X... ,122116weeeew2o rrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrr o-11<1<40eeeeee82,*o $111121128weeeeq;. rrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrr X=<1<115qeeeeew72:$. rrr rr .<21111211139eeeee9$ rrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrr .&<11116weeeeew61=O rrrrrrr rrrrr &1112211121214qeeeee4o rrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr .%,11128weeeeeq5,%X rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr ;111211211121115weeeew, rrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr #,1<<28eeeeee04;@ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr O;111111211211227weeee0& rrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr -1<114eeeeee92*o rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr o-212112211121239eeeee6+ rrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr ;<11<5eeew7,$. rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr o-11211121111114qeeeew1. rrrrrrrrrrrr", "rrrrrrrrrrrrrrr :<1<16eeq>+ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr X=12111211121115weeeeq- rrrrrrrrrrr", "rrrrrrrrrrrrrrr ;1<116eeq= rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr X*11121212121128weeee>>>>>>:>:::::::;;:;;;;;;--;---=-========*******&*&&@ &12121214eee32: rrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr :1<116ew2$ 288888888888888888888887888888888888888878888888888888, ;11111219eeq21% rrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr :<11<1111# 6888888888888888878888888888888888888888888888888888883 <1111112wee712o rrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr ;<11<<1<1# .8888888888888888888888888888888888888888888888888888886 11221214eee41> rrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr :11<111<1# +8888888788888888878888888888878878888888888878888888888. .21112118eew12& rrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr ;<11<1<1<@ $88888-========------------;-;;-;;;;;;;:;;:;:::::1878888O <121112qee811O rrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr O*>1111<1@ =88887 .. . . ... ... .. ..........+888888# >1121110ee41< rrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr X$;<11@ >88884. X888887* -11212238511* rrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrr .@=+ 188881. @##$$$# o%% 778888; *12112111121+ rrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrr 58888>. $eeeeee= X9e: .388888, X=,11112211<. rrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrr .77888= >eeeeew+ 3e4 .,888882 o%:11112- rrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrr O88888% 6eeeee9. :e9. .-888885 .@=<1@ rrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr $78888+ oqeeeee1 %ew+ $888888. o. rrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr *88888X .%eeeeee& Oqe& O888888O rr rrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr :88888 ,eeeeewo .8e, .888888# rrrrrr rrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr <88885. .7eeeee7. 2e5 688888& rrrrrrrrr rrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr 488881. Oweeeee, ;e0X .288888- rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr .78888>. *eeeeew% $ew@ .>78888, rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr o78888- 1eeeeeqo oqe* =888882 rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr #88888% .8eeeee5.7e< #888885 rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr &88888+ +weeee31e6. o888887. rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrr ;88889X =eee9;ewo 888888O rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr <98887 5ew*wee% .488888# rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr 378885. #we=0eeeqo .188888& rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr 788882. X0e:4eeeee6. .;88888- rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr X88888>. 5e4.$eeeeee> &88878> rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr @88888-. ,e9. >eeeeee$ @888872 rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr &88888& &ew+ .6eeeee0o X888885 rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrr -88888+ +we& oqeeeee5 798888. rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr ,88888o .9e> $eeeeee: .388888o rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr 388888. 3e4. >eeeeew# .,88888# rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr 688885 :e9X 6eeeee0X .;78888% rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr X888883. $ww@ oqeeeee3 %88888- rrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr +88888,. Oqe* $eeeeee- O88888> rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr %88888;. .7e, >eeeeew+ .888881 rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrr =88888& *51. <44444, 688885 rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr >88888@ .388888. rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr 288888o .>88888o rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr 588888. . .. .............................. .. -88888@ rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr .888887&&**==----;;;:;::::>>,,,,<<<<11122233333444455556677788888% rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr O8888888888888888888888888888888889888888888888888888888887888888- rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr $8888888888888888888888888888888887888888888888888888888878888888> rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr =88888878888888878798888888888878888888887888888888888888988888881 rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr @***=*======-=-=------;-;;;;;;;:;:::::::>>>>>>>>>,>,,,,,,,<,<<<<<> rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr &>>>>>>::>::::::::;;:;;;;;;--;-@.rrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr.;88888888888888778888888788885.rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr +**====--;;;;;::>:>>>,,,,<<<@.rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr #;;;::>>>>,,<,<<1122221111<<<<,,,,>>>:>::;;;;;----=-=-=-=--=-=--=-=$ rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr -878888878888888878788878888888888888888888888888888888888888888888< rrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr ;8888888888888888888888888888888888888888888888888888888888888888881 rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr ;8888888888888888888888888888888888788888888888888888888888888888882 rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr ;8888888888888888888888888888888888888888888888888888888888888888883 rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr :8888888888888888888888788888878888888888888888888888888888888888884 rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr >8897888888888888887988888887887888888888888888878888798888888888886 rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr +%$$$$$$$$$$$$#$##$#############@#@@#@@@@@@@@+@@@@++@+++++++++O+O+OO rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr", "rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr" }; xnee-3.19/pixmap/xnee.png0000664000000000000000000001602610524455102012244 00000000000000PNG  IHDR>asBIT|dtEXtSoftwarewww.inkscape.org<IDATx{xTչ?+r# $@ʭ4j*P.bxxVy|,T[ZE𨍂VE<)E9Bgf8g=LHϳYkλwKH)iGEH;Ўmh t@/'4ۭ5(B@T%q8:u>.>A@ !h5}LZP%Z @w@2 66 "tzLfYګz-Whh(ܼy!ٳݻW= !P]]MjjjbFtt4?я/vׯWrEJYE}v@rr2QQQIe~tMJܼy3cǎ vyF3g(o :Jit9RZWU@JY T٦Shhp_J)  ""`N:%(h=@v溺***{0j(] FoW\Q#g;|$kؼy3Fr; ?~<'N$_&` Z8s se׮]_Z6oLVV׮]S-&K)oj%^oR__oMԩGO>$&&r%N>͞={ӷ7n͒%Kԩ]ΦiVLzjkktzʕ+uBf͚̙3q({U/_'|@II ̞=ۮҥKj #*n޼oߦ[9s5kf^u+ k!l%-N>MPz(,,>0z)] ͜9n'$$ĎtC @h5RVv4f555jKZGEEI[ Zl* Bۦ"﫪صklb}N߾}@f_kZEP@%x8?88p@{J.d 4oU%fNA !B I~3-[dz#G2aRSSgϲqF;1ӚN6)s#DtBd@?We 5{5k|5//pz_?>w}C:,B̖R:o!@1JCߟ43gpu?dܹ$'', Я_?-ZĀJJJ0S\\lMwB !>Bܥ#~@7!b?Jnn.IIIoW^ˏ$++Ka)a28x Wb4С$''3vX;Q aaaH) իWP'? ϟʬk@F۽^ 8L“O>ѣ(**bʔ)օ :t?ȑ#dΝ;MŦM# Yt)111ܹ\*++~̖Rq/w@XxL8ѣGc02&M@F}]222x'tbcc=.Ŭ^ZΌ3x衇eر""CҿN8Ç)((`ڴi~_;wsNŴ4j%Wtt4ƍcȐ!lٲ7|gZ.xQJC-Y>* FbҤI,""G}jۻw/[lwqnHOOgĈ 6n n޼ɾ}طo%^z%>|8^b ?;,'ہ祔N(〷{?LBBC^NHOO_~vSNo~#ӧݺu^Z⿪ .pEuy 6{k׮1Dr|W,ZHBYwnͤ-B!P_A~1uT=qqq 2^zb?K5L?~?Ǐ{fף0Bxx8455Dcc#MMMmb`0o8ee +0|Wh1@|3fh`Dv%˗/{6##t` ,aɭk׮L2#F؍BÐ!CA/B 9w{j6w w}Ku\`0zH222HKKs ?>}j|bMvf„ =n e L~~+K- PJ0A "o]nGkvI)4כ|E{G8qj͸뮻9r~}vfϞ6,R:l= XL Nl'"##4h$rv !B@d0`M61)E'|3gC hUUU|ᇼvfW=jMFlXL:wl-׹sg۷݆ 0bC߽{7GqBJq罀ǘkvHKKcɤ]3y]yMG)y;zrr2&Lp0F/سgC-ʀU?!0cbٓɓ'ᶉٙ~pfΜ6~٤ŗX`{+X%% ;vݻw駟~;+XM}ݙ^R5۷/cƌʕ+Q۠" %zl휌y&4\ĉ0BϞ=6l~PQQŋ*0OJW=?ԩSI YJ95<|0GRnRƣpV^͂ ؽ{B .yf:dw_.]X|9+WT!=FQM3bV~ R.onRnRhm!++۷;gd2qQ$DLL JZ9f%RfJ)w9—RR6͛[駟ҁ#˗ihh **&ۢ[ N;r؝)A)$ ķacu7ndܹ9re]!!!ٲ*y-?d2Ip'BJyDJ0ي*RJ.^4۩,ךQ ۯ`mH)I)&ئ彶W\N ?;K`0M\\B;u7t}}=|cٝNKj/[n)G>Q(>0 <,Ʒ.2-Y֗uy/˭_;V@l54AA%C5o4)((-?J Deu N8a^p`iҥKezi}udRJ~%7w*(Jn-3e'x>e enӧU}x= ߹sビO&))jJJJ\J{QرcGTUcf+:)t'ɓ'x"FPǿS_ԴC~lW ::ګ͚ i\]9Xpe} L]2_UUuWhez/ow&j*jjj6X.+_eݛa7&u.h(Æo(|JM61tP57%@SS+VPݘU> g]-cf40`999e`sX?d1t`v&Z^1(**bÆ $%%Nzz:{Z%˗1 JRCe^ jz3fYſBv{ݖ(++c۶mtؑAI(++#,,La"==r{GdddP[[ˎ;\z՝Oj~f]Jq孫Ơ%'YEuulj:mT}YVZ~gԩ۷olaaa\x|;yjرc5mQ[[J)eRg׸_|B[8<<\5PDiiSٝ;wnE!k׮W_u_hhf:5vZΝˢEO8yPYPP`;!YZ"Y*Ln3RRRTϻ4/^ѣG3j(H6lu{ZL1cnQ3mZ5\tK.(9x`bbb Nm[x;y/$1fYPPp 0@F=ץ>#ǏFQ޾}[4ȭ{-},_YsZg^dXXm3x6~1I)뤔-'6,вF sb}Y~ӟꪧw|DŽ0sL.RüMG2[8lQ+.AF`[nU OK{TTyyyt҅~[m;.h/˫K)l`+&K/X(Q&] ,p:9FbժU 2]vpC ݨS h)E)Rʇ0T}%%%%Oӧ[Mm1bx ^|Eq.^ȣ>RtfO@JY/.# |Xq  U Y% .9s_ycvicƌaҥ1uT]aA9#AJY$Զ @f`ERRlΰ~zU#+RRRذa̞=[upuuu F=D $@o1lzl /jI^^ \5kxܖ-L&j,c^ ft L>0 nܸGyjK - еkW5&է Tűcկ~eVXX9s&<#nEЃ+Wh.a; C)fRJWbր̕,]wyzAzqe`B29r$?R2o<ի}T@kXmM]$$$qFXd &Mrx]t?Vx 3[@K¯hh@ 6l %%[krJձ׽uuuj'.mB܍b@kv#[3SNYtmۦ?pBƎU p,곆݀ K4JO-L6srm233Lï {: @?-@ОGYz5?N3ʺu\opƠg씕m;v,:555L:Uqٓ/n GiLS=nCBnZii[Jwͺu0 <3I.QZZiw"TR6p6mD\\.֭s۷oy k?w& tM6J֮]KVVW\x1qqqj:=ے[n9 ub Jc%77Nh42k,eAdd$.\`РAv񄆆*]>m\9b XfqLB5fCPJWNB@jRZ_M(|պ5J>Dz\lCC!0  BCCCBB0 K+}zڦk+Zfv @؅  8a*/aS` =a*/GeٲeJN)w N݈gZ;gBtvh0I!LjIB@=p T5%Є9>-+I@eddۘjq{S#GkjjZB/น%B?gOwv&LGJ_h`f:?k 'eu3pxCv644,m;Dz~`_7tg`zYҷb8:I |躈c=>j7*~m+[pшz:r 9s;N{wR4aÆiFlk(2r~k9BhKh=NM]|B|;E iM8xb-򔯮ʩݣUY[z˹ۦejOoƣ!]ǝo le*ji(f _Q@ -$!ZCH;|@Ҏ A;8 ~oH'zIENDB`xnee-3.19/pixmap/Makefile.in0000664000000000000000000003504312332167124012647 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 = : build_triplet = @build@ host_triplet = @host@ subdir = pixmap DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/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__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) 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@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH = @BASH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CLI_DIR = @CLI_DIR@ CNEE_INFO = @CNEE_INFO@ CONVERT = @CONVERT@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIA = @DIA@ DLLTOOL = @DLLTOOL@ DOC_DIR = @DOC_DIR@ DOC_TARGETS = @DOC_TARGETS@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ DVIPDF = @DVIPDF@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EPSTOPDF = @EPSTOPDF@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOO_DIR = @FOO_DIR@ GNOME_APPLET_DIR = @GNOME_APPLET_DIR@ GREP = @GREP@ GTKCONF = @GTKCONF@ GUI_DIR = @GUI_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBDL = @LIBDL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSEMA = @LIBSEMA@ LIBTOOL = @LIBTOOL@ LIB_DIR = @LIB_DIR@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEFILES_TO_GEN = @MAKEFILES_TO_GEN@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANEL_APPLET_DIR = @PANEL_APPLET_DIR@ PANEL_FLAGS = @PANEL_FLAGS@ PANEL_LD_FLAGS = @PANEL_LD_FLAGS@ PANEL_SERVER_DIR = @PANEL_SERVER_DIR@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDF2PS = @PDF2PS@ PIXMAP_DIR = @PIXMAP_DIR@ PKGCFG = @PKGCFG@ PS2PDF = @PS2PDF@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2HTML = @TEXI2HTML@ TEXI2PDF = @TEXI2PDF@ VERSION = @VERSION@ WANTED_LIBXNEE = @WANTED_LIBXNEE@ X11_LIBS = @X11_LIBS@ XMKMF = @XMKMF@ XNEE_DOC_DIR = @XNEE_DOC_DIR@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gtk_CFLAGS = @gtk_CFLAGS@ gtk_LIBS = @gtk_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgnomeui_CFLAGS = @libgnomeui_CFLAGS@ libgnomeui_LIBS = @libgnomeui_LIBS@ 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@ ICONS = xnee.xpm xnee.png icon_DATA = $(ICONS) icondir = $(datadir)/pixmaps EXTRA_DIST = $(ICONS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pixmap/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu pixmap/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconDATA install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-iconDATA %.png:%.svg $(INKSCAPE) --export-png=$@ $< %.xpm:%.png $(CONVERT) $< $@ # 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: xnee-3.19/NEWS0000664000000000000000000005526512332135515010012 00000000000000Changes in version 3.19 ('Lucia') ============================== Support for pause/resume/quit when retyping file Defaults to use data display for all X.org with minor version nr >= 3 New options: --record-from-data-display,-rfdd Record from data display. This option is experimental. --record-from-control-display,-rfcd Record from control display. This option is experimental. Changes in version 3.18 ('Abbado') ============================== Removed incorrect comments. Changes in version 3.17 ('Seeger') ============================== * New features: * Fixed bugs: Savannah: Mayhem: #715746 "cnee crashes with exit status 139" Works with X.org 1.14.* Changes in version 3.16 ============================== * New features: Gnee can record XInput events * Fixed bugs: Savannah: Changes in version 3.15 ============================== * Fixed bugs: Savannah: bug #36662: 2 extra lines, not really needed, printed to recorded log files bug #37895: pnee/data/pnee.server.in file missing in 3.14 tarball? Changes in version 3.14 ============================== If XInput is present, record only XI events (discard core events). Forced core replay is now done using XI events (if no core events are available). * Fixed bugs: Bug-xnee mailing list: “WARNING: Enough valuators … still not printing” Changes in version 3.13 ============================== If XInput is present, record only XI events (discard core events). Forced core replay is now done using XI events (if no core events are available). * Fixed bugs: Bug-xnee mailing list: WARNING: Enough valuators ... still not printing Changes in version 3.12 ============================== * New option: --record-replay, -rr Record and replay a session (press q to stop recording) * Fixed bugs: Savannah bug #35029, Segmentation fault when using stop... Changes in version 3.11 ============================== * Fixed bugs: bug-xnee@gnu.org: Package of Xnee for Fedora Replaced exit calls with return in libxnee Savannah: #30137: gnee crashes on Ubuntu 10.04 Recording in X.org > 1.11 does not work Fedora / Red Hat Bugzilla – Bug 757733 Mem error when distributing to multiple displays Changes in version 3.10 ============================== * Fixed bugs: Savannah: #33237, Xnee fails to record on RedHat #33667, Seg fault (on Ubuntu 11.04) #32385: CNEE replay precision #32767: Button key to stop recoring #32762: no sync option faulty Changes in version 3.09 ============================== * Fixed bugs: Savannah: #31231: Replay in demo mode malfunctions #28238: XI2 extension support #28431: Separate tests needing a running X server #32291: Xnee fails checking gtk.h #28242: Missing makeinfo dep in configure xnee-devel mailing list: cnee loves Xephyr ? lists.gnu.org/archive/html/xnee-devel/2011-02/msg00000.html Debian bug report: # 613237 "3.08 is available which works fine in unstable" Changes in version 3.08 ============================== NEW in this release * Various fixes to make Xnee work with new versions of RECORD extension Changes in version 3.07 ============================== * New features: Supports recording xnd replaying of XInput device events * Forced replaying of X11 core events can be done * Backward compatible with olde session files Experimental and undocumented features (read the source): * replay backend * xswine - new swinput backend for Xnee * Build changes: --enable-man Checks for makeinfo once, uses result many times Can build guis and manual without all doc stuff --disable-xinput2 By default Xnee is built with XI support Looks for gtk-config when configuring Checks for makeinfo once, uses result many times Can build guis and manual without all doc stuff * Issues Human printout of X Input events needs more work Need to make X Input code be totally ifdefed away * New options: --force-core-replay,-fcr Discard recorded X Input device data, use recorded core device data --disable-xinput-events Disable recording of XInput events * Fixed bugs as reported on ubuntuforums: http://ubuntuforums.org/showthread.php?t=1253453&highlight=xnee savannah bug: #30134 "Missing xnee.xpm in gnee" savannah bug: #30136 "Configure misses to check for gnome.h" Reported problems on N900 are fixed * Patches from Tuukka Pasanen, Fabian Keil Changes in version 3.06 ('Dio') ============================== * New logo: pixmap/512x512/xnee-new.png * Build changes: configure bails out when building any gui and no pkg-config installed * Test changes: Separated tests: * make check - does not need an X server to connect to * make xcheck - needs an X server to connect to * Fixed bugs as reported on bug-xnee@gnu.org: "crash in xnee_key2string when verbose" "cnee causing segfault" * New options: --no-reparent-recording * Options that didn't make it: --force-reparent-recording Changes in version 3.05 ('Merry X11-mas') ============================== * Bugs report on bug-xnee@gnu.org: "Bug report: libpanelapplet-2.0" (12/15/2009 11:07 AM) "Bug report: No package 'libgnomeui-2.0' found" (12/15/2009 11:03 AM) "Configure Error" (12/15/2009 11:07 AM) "Error in configure." (12/15/2009 11:09 AM) "Building from CVS" (12/17/2009 07:19 PM) * Build changes: configure bails out when building any gui and no pkg-config installed Better help during configure if no gtk, gnomeui found Telling user to run configure with --enable-doc option set, when building from CVS (make -f Makefile.cvs) New file (README.cvs) to ease up for users building from CVS Changes in version 3.04 (futsanaj) ============================== * Bugs fixed: Bad context / RECORD bug fixed: https://bugs.freedesktop.org/show_bug.cgi?id=3722 https://bugs.freedesktop.org/show_bug.cgi?id=20500 https://bugs.freedesktop.org/show_bug.cgi?id=21971 https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/315456 https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/379432 Workaround for RECORD problem in Xorg 1.6.0 recording device events also as delivered Seg faults on Solaris 10 Bugs reported on savannah.gnu.org #27850: "Segmentation Fault in print.c" #27849: "Another Bug in xnee_resource.c" #27848: "Segmentation fault" * Doc changes: Moved Top node outside of ifinfo statment Falling back to one rule for ps and pdf * Build changes: configure now looks for libgnomeui Checking for ps2pdf14 as well as ps2pdf Changes in 3.03 ============================== * Bugs fixed: #23965: Uninitialized variable in cnee Demo mode crashes sometimes Reported on bug list: Sync doesn't work Too quick retype delay bug (see new options) * Doc: Protocol specification fault corrected Added new retype options Switched to using texi2pdf texi2ps * Test: Adjusting to latest swinput (CVS HEAD) Adding coverage rules, using gnulib * New options: --retype-press-delay --retype-release-delay * Various: cnee, libxnee passes gcc's pedantic mode again Changes in 3.02 ============================== Syntax changes: * Changed xnee_replay_offset to replay-offset * The following options will not accept value in sessions/resource file: first-last synchronised-replay no-synchronise New features: * Version printout changed according to new GNU coding standards Build changes: * Docs built by default * New configure options: --enable-static-programs (build static programs) * Changed configure options: --enable-lib (install libxnee) * Fix for X.org releases, recording of deliv events seem need a work around Build changes: * target now respects DESTDIR * possible to choose between static or dynamic binary linking * Rule for excluding library install * Libtool used * Added new pixmap dir * Changed icon name to xnee.xpm * Docs not built by default * Exluding AM_INIT_AUTOMAKE * builddoc=false by default Bugs fixed: * Tries harder to move window * Increased move window tries limit to 10 Doc changes: * changed question email address to xnee-devel@gnu.org Changes in 3.0.1 ============================== New features: Bugs fixed: * gnee: About->Close works * pnee: About->Close works * configure: doc/Makefile.in is built Changes in 3.0 ============================== New features: * GNU Xnee switches to GPLv3 * pnee ready for use Build changes: * Added note on which deb makeinfo is located in for Ubuntu users * docs not build by default * docs built and shipped with the tar.gz Doc changes: * Added more notes on xmodmap etc in FAQ * Added a brief man page for GNU Xnee * docs not build by default * docs built and shipped with the tar.gz Bugs fixed: Various * pnee stands for pnee's not even emulating Minor updates Changes in 2.06 ============================== New features: man page for pnee man page for gnee --check-syntax Checks syntax of cli and files. No other action performed. Updated Options for cnee Short option for recall window position is now: -rwp (-rcp, is not valid anymore) Build changes: * configure option for pnee added --enable-gnome-applet * New script build/test-dist.sh verifies dist file * New file (README.Debian) for Debian users * configure exits if not all doc generating programs are found * New directory pixmap, used when building gnee or pnee * new file: libxnee/include/libxnee/x11_files.h * new dirs and files: gnee/man/* pnee/man/* Doc changes: * FAQ entry added on ending recording with Control-C * Information on gnee added * Information on pnee added * Xnee and different keyboard mapping Bugs fixed: * Replay crashing when window name is empty and using recall window position. * Buffer overflow error while replaying recorded file * #18449 [cnee makes "@" to "q" on german keyboard] Various * New About window for Gnee * Icon added (thanks to Luis Santander and Jeremiah Foster) * Solution to crashing X server depends on what server/version * Moved all X11 inclusions to one xnee file (x11_files.h) Minor updates * Examples (help printout) are updated Changes in 2.05 ============================== New Options for cnee --recall-window-position New features: * Handled that windows may be placed differently during replay than during record Bugs fixed: * Automake fixes for generated files * Xnee records when gnee window is iconified Changes in 2.04 ============================== New features: * info page for cnee * Version number in shell functions (xnee.sh) * x,y offset during replay * Execution counter added as argument to the program executed by Xnee (using the --exec-* options). New Options for cnee --infopage (prints texinfo page for cnee) --replay-offset Build changes: Doc changes: Bugs fixed: * Grabbed (stop) keys are recorded to file * Faulty help text on grabbing keys fixed (cnee) * If sig received when replaying (and using key grab) Xnee messed up X server. Removed grabs from recorded session file Command line options changes: Test updates * Added test scripts for test of grab cnee/test/scripts/grab/*.sh Minor updates * Printing program_name to recorded session file Changes in 2.03 ============================== New features: * Handy shell functions for Xnee primitives share/xnee.sh * Example shell script added examples/simple_bash.sh Build changes: * autotools/* added to all Makefile.am * Makefile.xnee updated to build gnee (not only libxnee and cnee) This is an alternative Makefile if use don't want to use configure && make * Added share to dirs to build a Makefile for * Examples and handy shell scripts added to dist share/xnee.sh examples/example1.xns examples/simple_bash.sh All files are installed to .../share/Xnee/ Bugs fixed: * Memory leaks in libxnee found and fixed * Using grab key in gnee twice works causes hanging of X Command line options changes: Minor updates * libxnee/test/libtest.c updated to test grabbing of keys. * doc/xnee_example.texi updated with shell script info Changes in 2.02 ============================== New features: Build changes: Bugs fixed: * Removed 'recalculation' of screen resolution when distributing device events * Fixed bug distribution option Command line options changes: Changes in 2.01 ============================== New features: Build changes: * Documents built by default. If not all progs found, doc is not built after WARNING the user. Bugs fixed: * Segmentation fault when opening About window fixed. * Missing copyright in files Command line options changes: Changes in 2.0 ============================== New features: * Graphical User Interface (GUI) * Script primitives added * xosd support * Characters supported by '--retype--file' option a-z,A-Z,0-9,\,#,$,!,&,(,),{,},+,-,<,>,@,_,| ....and the comma itself * New thresholds: events-to-record defaults to -1 data-to-record defaults to -1 time-to-record defaults to -1 * Key grabbed (by Xnee) resulting in a successful grab isn't printed to the recorded file. Bugs fixed: * Record/replay multiple screens Command line options changes: * New options: '--data-to-record' '--events-to-record' '--seconds-to-record' '--event-range' '--out-file' '--err-file' '--exec-key' '--exec-program' '--feedback-none' '--feedback-xosd' '--feedback-stderr' '--store-mouse-pos' * Options with new interpretation: '--stop-key' '--pause-key' '--resume-key' '--exec-key' '--insert-key' * Obsoleted options: '--out' '--err' '--binary' '--everything' '--no-expose' '--all_events' '--print_settings' '--first_last' '--no_expose' '--stop_key' '--human_printout' '--delivered_event_range' '--device_event_range' '--error_range' '--request_range' '--reply_range' '--extension_request_major_range' '--extension_request_minor_range' '--extension_reply_major_range' '--extension_reply_minor_range' '--loops' '--all-events' '--no-expose' '--everything' Changes in 1.08 - new options: '--write-settings' writes a resource file from settings done '--mouse' sets up ranges for all mouse events '--keyboard' sets up ranges for all keynoard events '--recorded-resolution' resolution used when recording '--replay-resolution' resolution to use when replaying '--no-resolution-adjustment' Don't use resolution adjustment '--speed-percent [percent]' change the replaying speed '--pause-key [k m]' key+modifier pauses xnee's current action '--pause-key [k m]' key+modifier resume xnee's paused action '--insert-key [k m]' key+modifier inserts a meta mark in the log file '--max-threshold [nr]' sets the maximum threshold during sync '--min-threshold [nr]' sets the maximum threshold during sync '--tot-threshold [nr]' sets the total threshold during sync '--retype-file [file]' retype the contents of file '--retype-help ' retype the help printout - synchronisation rewritten Changes in 1.07 - version numbering changed (x.yz is used instead of x.y.z) - plugin functionality renamed to resource - plugin functionality added (plug in dynamic libs) - synchronization rewritten - force-replay option added - replay delay rewritten - Xnee can be configured (during configure) to: + exclude buffer verbose - print functions replaced by function pointers in dispatch functions, - Added modifier+key binding to pause, resume Changes in 1.0.6 - data names can now be more then 10 chars long ... errrh - Xnee can be configured to: + exclude verbose mode + gcov compilation + grpof compilation - new or modified options: '--print-event-names' prints all event names and number '--print-request-names' prints all request names and number '--print-event-names' prints event name or number '--print-request-names' prints request names or number Changes in 1.0.6pre1 - multiple modifiers added - data names can be used when setting ranges - docs updated with the above changes - range setting (when replaying) bug corrected - speed increased (removed recording of device event when replying) - Xnee is now a GNU package Changes in 1.0.5 - Typos corrected in doc/ & README (after GNU review) - Fiex parser error (--no_sync ----> --no-sync ) - Manual corrected (after GNU review) - new options added to ease up usage a bit: '--print-event-name' '--print-error-name' '--print-reply-name' '--print-request-name' '--print-data-name' - info, manuals updated Changes in 1.0.4 - changed printout for --help and --version - made ChangeLog what is supposed to be build.sh doesn't copy NEWS to ChangeLog anymore - xnee manual is now under FDL - xnee developer manual is now under FDL - TODO updated with GNU Coding Standard todos - doc (texi) files updated with index refs - doc (texi) files updated to make info pages nice - build_web.sh added to CVS - fixed one sigbus & one sigsegv on non-glibc platforms (thanks freeBSD) Changes in 1.0.3 - fixed parse error (mainor_range ---> minor_range ) - switched to CLI options syntax as recommended by the GNU Coding Standards - fixed a seg fault when closing down recording Changes in 1.0.2 - stop_key is now correctly parsed (man page updated) - CPU consuming calls to XRecordProcessReplies removed - Async recording is not used anymore - Fixed memory leak (a few bytes when closing down) - man page corrected - help printout corrected Changes in 1.0.1 - Fixed memory leak Changes in 1.0 - Added --stop_key option to CLI and plugin files and record file - Added --future_clients option to CLI - Manual in pdf has moved to Documentation package - Manual updated - Example session included - Source code is documented (using doxygen) - man pages are generated from xnee binary - Xnee now comes in two packages Program and Documentation Changes in 0.9 - new command line options: --print_settings - xnee reads (and uses) settings from recorded file - added texi files (pdf, html, txt manuals) - added man page - EXAMPLES file updated - redhat specs updated Changes in 0.9beta - ugly printout when using delayed startup removed - MANUAL added Changes in 0.9alpha - synchronisation works .... at last :) - removed a lot of duplicated code - The following option has been updated 1) help 2) binary 3) out "stdout" in plugin scripts is treated as stdout (not creating a file called stdout) 4) err "stderr" in plugin scripts is treated as stderr (not creating a file called stderr) - DESCRIPTION, EXAMPLES, FAQ, README, TODO updated - DEVELOPMENT added Changes in 0.8.1 - fixed a hanging (not on all platforms) xnee when finished replaying - fixed dependency to libxnee for the xnee binary in the generated Makefiles - fiexd missing newline in help text Changes in 0.8 - minor bugfixes - copyright years added - the depcomp script have been added. - It compiles and runs on Solaris8 (intel) and Windows98/Cygwin/Xfree86. - The order of libs to be linked has changed. Changes in 0.8beta - --time options now works - Pressing Ctrl-C will stop Xnee but __NOT__ remove the recorded file Changes in 0.8alpha - worked around the bug* that crashed the X server when recording delivered events. *) I still do not know where the bug is located (e.g xnee, X, RECORD) Changes in 0.7.2 - "plugins / xnee settings" is from now on only called plugin .. sorry about the fuzz - Support for RedHat RPM/SRPMS is included is distribution - build.sh is extended to build from clean dist to RPMs Changes in 0.7.1 - Support for plugins / xnee settings file is corrected Changes in 0.7 - Delay works fine - System info printing is back ... never missed it really since replay doesn't use it .. yet - Support for plugins / xnee settings file is added Changes in 0.7alpha_2 - Xnee can now record delivered events (used FutureClients) without crashing - First event not recorded (thank to Ton van Vliet) Changes in 0.7alpha_1 - Seg. fault on debian fixed - Mem fault on OpenBSD fixed - Xnee is now (at last) "autoconfed"