lcrt-1.1.2/0000775000175000017500000000000011752203002007452 500000000000000lcrt-1.1.2/README0000664000175000017500000000611411750112142010256 00000000000000Description ================== lcrt is a Linux remote login tool. Just like ssh or telnet, but it has a GUI and can manage many connections. User can use it to save connection information such as hostname, username and password(optionally), and auto login at next time. lcrt also can clone a connected session, so user can open many connections quickly. Features =================== - auto save connection information so that can auto login remote server next time. - easy to clone a connected session. - support to connect local serial port. - support ssh2,ssh1,telnet auto login. General Information =================== lcrt is released under the GNU General Public License (GPL) version 2, see the file 'COPYING' for more information. The official web site is: http://code.google.com/p/lcrt Since I can't connect to googlecode to commit code, i use github as repositorie, URL is: https://github.com/niutao/lcrt You can download the latest tarball and deb packet from: http://code.google.com/p/lcrt/downloads/list Also you can get the latest source code from: http://code.google.com/p/lcrt/source/browse/ use command: svn checkout http://lcrt.googlecode.com/svn/trunk/ lcrt or git clone git://github.com/niutao/lcrt.git Make sure you had install subversion or git first. Installation ============ lcrt is a desktop application based on gnome, so make sure the environment of your desktop is gnome. To run the application, you need GTK and vte-terminal library, and some others. If you download the source code, you can install programe with follow command: ./configure make make install Here you should known you have super permission to install the programe. If your oprating system is Ubuntu, you can get deb packet from: http://code.google.com/p/lcrt/downloads/list Then use command: sudo dpkg -i lcrt-x.x.x_i386.deb to install it. Make doc ======== From version 1.1.0, i add command: make doc to Makefile, you can use this command to make the document of lcrt. Depend library ================== lcrt is writen with GTK, and use another widget named vte-terminal, so to compile it, you should have follow libraries: libgtk2.0-dev libvte-dev libsqlite3-dev In Ubuntu system, you can install them with command: sudo apt-get install libgtk2.0-dev libvte-dev libsqlite3-dev In Fedora system, you can install then with command: yum install gtk-devel vte-devel sqlite3-devel Depend programe ================== Now you have installed depend libraries of lcrt, but to compile it, you should install some toolchain: make pkg-config gcc When you have install lcrt, you may install the follow programes: ssh telnet rlogin Because lcrt will call command line programe 'ssh' when you connect with ssh, and call command line program 'telnet' when you connect with telnet, and so on. Bug report ================== If you find some bugs, you can send email to me, I will fix it as soom as possible,my email address is: NiuTao In then end, I hope this programe can help you in your work! lcrt-1.1.2/AUTHORS0000664000175000017500000000022011750112142010436 00000000000000Owners: NiuTao Committers: Contributors: Asias He Manfred Müller lcrt-1.1.2/missing0000775000175000017500000002623311750112142011001 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: lcrt-1.1.2/help/0000775000175000017500000000000011752203002010402 500000000000000lcrt-1.1.2/help/Makefile.am0000664000175000017500000000240611750112142012362 00000000000000SUBDIRS = man DOC_LANGUAGES = en_US zh_CN DOC_FIGURES = \ figures/lcrt-connect.png \ figures/lcrt-global-options.png \ figures/lcrt-quick-connect.png \ figures/lcrt-session-options.png DOC_ENTITIES = \ lcrt.xml \ legal.xml define doc-data-hook @for dir in $(DOC_LANGUAGES); do \ echo "test -z '$(1)/$$dir' || $(MKDIR_P) '$(1)/$$dir'"; \ test -z "$(1)/$$dir" || $(MKDIR_P) "$(1)/$$dir"; \ files=`for p in $(DOC_ENTITIES); do echo $$dir/$$p; done`; \ echo "$(INSTALL_DATA) $$files '$(1)/$$dir'"; \ $(INSTALL_DATA) $$files "$(1)/$$dir"; \ echo "test -z '$(1)/$$dir/figures' || $(MKDIR_P) '$(1)/$$dir/figures'"; \ test -z "$(1)/$$dir/figures" || $(MKDIR_P) "$(1)/$$dir/figures"; \ files=`for p in $(DOC_FIGURES); do echo $$dir/$$p; done` ; \ echo "$(INSTALL_DATA) $$files '$(1)/$${dir}/figures'"; \ $(INSTALL_DATA) $$files "$(1)/$${dir}/figures"; \ done endef dist-hook: $(call doc-data-hook,$(distdir)) install-data-local: $(call doc-data-hook,$(DESTDIR)$(datadir)/gnome/help/$(PACKAGE)) uninstall-local: @for d in $(DOC_LANGUAGES); do \ echo " (cd '$(DESTDIR)$(datadir)/gnome/help/$(PACKAGE)/$$d' && rm -f $(DOC_ENTITIES) $(DOC_FIGURES))"; \ (cd "$(DESTDIR)$(datadir)/gnome/help/$(PACKAGE)/$$d" && rm -f $(DOC_ENTITIES) $(DOC_FIGURES)); \ done lcrt-1.1.2/help/man/0000775000175000017500000000000011752203002011155 500000000000000lcrt-1.1.2/help/man/lcrt.1.in0000664000175000017500000000202411750112142012530 00000000000000.TH "LCRT" "1" "Apr 18, 2011" "lcrt @VERSION@" "" .SH "NAME" Lcrt \(em a linux remote login tool .SH "SYNOPSIS" .PP \fBlcrt\fR [\fB-q connect_name\fP] [\fP-c connect_name\fP] .SH "DESCRIPTION" .PP lcrt is a linux remote login tool. Just like ssh or telnet, but it has a GUI and can manage many connections. User can use it to save connection informations such as hostname,username and password(if choose save),and auto login when next time. lcrt also can clone a connected session, so user can open many connections quickly. .SH "FEATURES" .PP - auto save connection information so that can auto login remote server next time. .PP - easy to clone a connected session. .SH "OPTIONS" .IP "\fB-q\fP" Quick connect in commandline(don't start GUI). .IP "\fB-c\fP" Connect in Tab. .SH "EXAMPLE" .PP lcrt -q "localhost" .PP lcrt -c "127.0.0.1" .SH "AUTHOR" .PP This manual page was written by the Lcrt developer team. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2. lcrt-1.1.2/help/man/Makefile.am0000664000175000017500000000005411750112142013132 00000000000000man_MANS = lcrt.1 doc-clean: rm -f lcrt.1 lcrt-1.1.2/help/man/Makefile.in0000664000175000017500000003037311750112300013146 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = help/man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/lcrt.1.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = lcrt.1 CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = 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' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCRT_LIB_DEPS_CFLAGS = @LCRT_LIB_DEPS_CFLAGS@ LCRT_LIB_DEPS_LIBS = @LCRT_LIB_DEPS_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = lcrt.1 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign help/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign help/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): lcrt.1: $(top_builddir)/config.status $(srcdir)/lcrt.1.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { 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'; \ } | 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,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-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 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 distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-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 pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-man uninstall-man1 doc-clean: rm -f lcrt.1 # 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: lcrt-1.1.2/help/en_US/0000775000175000017500000000000011752203002011413 500000000000000lcrt-1.1.2/help/en_US/lcrt.xml0000644000175000017500000006004311752203002013022 00000000000000 ]>
&app; Manual User manual for the LCRT application. 2011 Niu Tao LCRT Documentation Project &legal; LCRT Documentation Team code.google.com/p/lcrt LCRT Documentation Project LCRT Terminal Manual V0.8 Mar 2011 LCRT Documentation Team LCRT Documentation Project This manual describes version &appversion; of &app;. Feedback To report a bug or make a suggestion regarding the &app; application or this manual, follow the directions in the GNOME Feedback Page. &app; lcrt application Introduction &app; is a terminal application that you can use to perform the following tasks: Connect to remote server through ssh,telnet and etc: If you are a system administrator of unix/linux server, you can use &app;, it can save your session information, such as hostname, username and password(if you choose save password).So in next time you connect to the server, you can't need to enter username and password. I think this can be useful if you need login remote server hundred time every day. An useful terminal of session management If you are a software engineer in embedded field, you may debug your software in embedded device, and you should open several connection to look different result, so you can use &app; to clone as many connected session as you can. &app; have some useful keyboard shortcut to clone, close, move, and switch a session.gnome-terminal is an popular terminal, so I use the same keyboard shortcut to management session, such as CTRL+SHIFT+T to clone a session, ALT+1, ALT+2 to switch a session. Getting Started The following sections describe how to start &app;. Starting &app; You can start &app; in the following ways: Applications menu Choose AccessoriesLcrt. Command line Execute the following command: lcrt To view the command line options, execute the following command: lcrt --help When You First Start &app; When you start &app; for the first time, lcrt will create some default configuration in the directory ~/.lcrt, such as language, the settings of session. When you change the size of window, or it's postion, this change will be saved before close &app;. Quick Connection When you start &app; for the first time, we will open a 'quick connect' window, so you can choose a protocol, enter hostname and username to getting start a connection. The 'quick connect' window is here: Usage Open a Connection To open a new connection in window: Choose FileConnect.... You can also use shortcut AltC(default shortcut). Then you will get a new dialog to choose a saved session: In the top of dialog, there has some useful button,these can allow you create a new session, rename,delete or find a session in treeview.In treeview, there are all sessions you created, select one and double click, you can open a new session in new window. To create a new session: Choose FileQuick connect.... You can also use shortcut AltQ(default shortcut). You will get a 'quick connect' dialog,see To open a new session in tab: Choose FileConnect in Tab. You can also use shortcut AltB(default shortcut). you will get a dialog same as Conenct.but when you double click a seesion,it will be opened in a tab of current window. Managing Connection To reconnect a session: Choose FileReconnect. You can also use shortcut F5(default shortcut). or Enter(when current session had been disconnected.) For some reason, your connection may be disconnect from remote server,so click Reconnect menuitem, you can reconnect to server. To reconnect all session: Choose FileReconnect All. If you have open many session on tab, but network is offline unexpected, after a while, your network is online, you should reconnect all your session, so click Reconnect All menuitem, you can reload all your session. To disconnect a session: Choose FileDisconnect If you finish your work, you want close the session, you can click Disconnect menuitem to disconnect the session first, then close session tab. To disconnect all session: Choose FileDisconnect All Before close &app;, you should disconnect all your connected sessions, here you can use Disconnect All menuitem. To clone a session: Choose FileClone You may need open serveral connection to look diffrent things in one server, you can use Clone menuitem to clone current connection. To lock a session: Choose FileLock When you open a connection to do some work, but you get an imcoming call and must leave a moment, you can lock your session to avoid some operate your remote server, click Lock menuitem, and enter password, you can lock current seesion. Managing tabs &app; support open many session on current window,every session is on a tab in notebook, so we provide some useful keyboard shortcut to move and switch session quickly. To switch to next tab: Press the CtrlPage Down To switch to previous tab: Press the CtrlPage Up To move tab to next: Press the CtrlShiftPage Down To move tab to previous: Press the CtrlShiftPage Up Yes, these keyboard shortcut are same with gnome-terminal, I think many people can use gnome-terminal frequently,the shortcut to manage tabs is easy to use, so I use them in &app;. If you are not like any of them, you can change them in OptionsGlobal Options...Keybindings. Managing the window To hide or show toolbar: Choose ViewToolbar default is show on window. To hide or show statusbar: Choose ViewStatusbar default is show on window. To set window always on top: Choose ViewAlways on Top default is not choose. To run &app; in full screen: Choose ViewFull Screen Or you can press shortcut F11. Working with session To select and copy text: You can select text in any of the following ways: To select a character at a time, click on the first character that you want to select and drag the mouse to the last character that you want to select. To select a word at a time, double-click on the first word that you want to select and drag the mouse to the last word that you want to select. Symbols are selected individually. To select a line at a time, triple-click on the first line that you want to select and drag the mouse to the last line that you want to select. These actions select all text between the first and last items. For all text selections, &app; copies the selected text into the clipboard when you release the mouse button. To explicitly copy the selected text, choose EditCopy. To paste text into a terminal of session: If you previously copied text to the clipboard, you can paste the text into a terminal by performing one of the following actions: To paste text that you copied by selection only, middle-click at the command prompt. If you do not have a middle mouse button, refer to the X Server documentation for information about how to emulate the middle mouse button. To paste text that you explicitly copied, choose EditPaste. To copy and paste text: Select the woards you want copy, and click EditCopy and Paste,Or click right button and select Copy and Paste. Preferences Because of personality, do we have a variety of world. So configure your &app;, make it different. Change session Settings To view or change the current session settings: Choose OptionsSession Options... Then you will get follow dialog: There,you can change the display of current session,such as font, font color, background color and others. Global Settings There are four kands of global options, General,Keybindings,Terminal,and Application To show the dialog of global settings, choose OptionsGolbal Options... You will get the follow dialog: Click the label in left side of notebook to select diffrent settings. General Click the label General in Global options dialog, here you can change: Change language support. Change which connect dialog will be show on start up. Change show toolbar or statusbar on start up. Keybindings Click the label Keybindings in Global options dialog, here you can change keyboard shortcuts. Terminal Click the label Terminal in Global options dialog, here you can change: Change terminal font,font color and font size. Change background color. Change scrollback lines. Change background image. NOTE: only the value of transparent is set to zero, the background image can be displayed. Change transparent. Change terminal bell. Reset terminal setting to default. Click Reset button to reset all setting to default. All settings will effect immediately. Application Click the label Application in Global options dialog, here you can change: Ops, these setting isn't work, but may be used in future.
lcrt-1.1.2/help/en_US/legal.xml0000644000175000017500000000770211752203002013145 00000000000000 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this link or in the file COPYING-DOCS distributed with this manual. This manual is part of a collection of GNOME manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license. Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any GNOME documentation, and the members of the GNOME Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters. DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. lcrt-1.1.2/help/en_US/figures/0000775000175000017500000000000011752203002013057 500000000000000lcrt-1.1.2/help/en_US/figures/lcrt-session-options.png0000644000175000017500000007475711752203002017645 00000000000000‰PNG  IHDRÌ­Ó.sBITÛáOà IDATx^ì@SW€IP” ¢¢¢àª"¢Ö… ·â¨mk­[´î½@hÝ£îÑjhÝ«uOÜT°8@Y*3„ÿ„‹Ï˜¼—E/áÄ4}9ïÜsÏùî}‡›ûÞ»SPP`$õú©cC鯸@jØ{î‘´¾1õex÷FÙyâeãz”37åpMÔ2ŠÊH $P ÎÏÊɃ¡ª…)wÛ©‡‡ŒdAºhTg«òf¢œOâÜð‰¼@H@-c>ׄÏ5³ú;ïÐ2¤•$YȰk&õ„Ä*’¤×jEe$€€ÁØr.¶˜±Œìè Œ-âß,ÿ7ò¬dº ;O$²Ò0Ó/GH@ l;ÿ²[¯ï=ëTÓ8„Ï^o:ö÷pŸÂïÌM¹Z% ·µ§ûþy}ó²Òó2Ó(Ó¼ª--êuçr¸Ž‘¼áܘdZ¡@,‹D¢¼ÂW~~¾H(‰„åRpïhìDH °$¸ojUùõ¯ÆÎ|ãÞñTa’ ð¹°·3$XÉHV$礽…=”i“ŠÎOÞ|Ø·w/߬ðÅ73åóMŒ!Ùæ 9ÙÙYä_VV×®]šØV4‘*«±XP_Ôx\}ºº“b‡UT“7¢qAyS $%S‹pÛˆ `Ø(ÈËר1>dÖB#`Á„g”-(ÉfääÁø4_-mW,.xýúõáÃGÊ•+W¾|yø477çóù cØœœœ¬¬¬ÌÌLølÒÄKl̓éÝ‚,$À3³´o6 BÍV&Á=avº õÕ«C³¤]ùÇë¿TU꼊jòv4.(o $ßL9ŸOVøÈìÕn-´U£P_ÀH6_(›d#ã>F¾‘œ©ú±• Èþëo`»¾KÅúU+JGÅÁ•a¬d$K&¤UA¯@̤, aZ+—Ë5Ð ™+€ PyQÑðX_P¢ŸŠ [XÕ°žga}tKðcÿ|Ì}ÓÈ«ÿÀ!Ï%mo#]ö¯›~jj©ØìUQMÞŽÆåMÉè]q¿p&ÛKÛÝ“P÷˜jA¹ž€´'?’x™´?"šûcý~Í«ÀÆÁ›ñ”¤–£…t°PŒé‹Ä…#ÙÂ-1ßRÚbaÀK2¬@ àp8a •a8]ø‚ä ° teŠK׊ÛzGÀ¹åS+çMËîÛ{ N%3— Æâw÷7ÝIü$¼ø<Û»–ä õŠ œšÿlߨ—‰¥}~fJòƒ£‰7wÃì=¥Ðµg¿Q£í+UÍÏJKºöþîj—CÓ«úŒåüìc®Ç_ü]$È’Á%Ûµ8\¦ê¼f]…²¯Nƒߺ²tudì½ö >ï-ö†O^›n4ëG/ØVE‘Ù“!•Z2­XI÷æÌŠŒ7 ”¥K£ÊíF›Û×4âp2ã" ºO/oËø_õˆä=:ÊL€„„‰uöwu`;ôÐ3"¡U–ù<}J6ÈHRïW¿÷%WHò)dR«‚EH²<6ˆ$YØ.Ì¿fqº@ú’W+Öj 'Oÿ[ÝÖÔºœI£ÊÆÎ¸é9/’…púS¦«8~; r[¿›'ÿ\º|ÕÃ&üo _L’À,zΗ¾¼Ûu\4uè§ìüa“ç·é8!:1Ûòõq²‹Ã3Ý1çû]çŸwéî;s^È«4qöÕ%fÆŸK*ÉTçÜj âê^›7½2âJL¶tu·ƒ[5ó¿Öà,©zÅ÷ödãZLl+"2ßýß¹?}°òœ¹hM…vÓïýö]M{Óê¾óL-íVŽ?{þŠ{ýÃGøE^»RÇÉ”XÆO½# ÉÊ%Ùnì§÷r[z,¡Ò+lƒÐ·‰“|F.ÉåC’éG²59 ]© ƒV2]@Í-À.H»…IG²z×9lRÎ vHOs«nVß‘[¥¢QËÀpR |as™¡¥½goزrs^þW÷ ZÇû»%{·~ïiNЬ[¹8ïcrcóðCkÛtè\§Ý€u“÷ù60ƒ½o®ìˆ|–ãYÅ$=ê ØpkÜf|¨ÿˆVå¥Ó¨ºDÚêˆÙÖn’ùC¹Í>WÛ Æ)‰bë†Õ\Ašg5É@Õ±R•áãÛWäñ-`.-òÅ[W{Sþ‡¨‹&$}Ì«`Îu(ÿÕß épp›Í ¹A“?ñÕ¹¡íä®+O~¹„¾v÷tׄâÄ óËH6G ÌÈþꄚyžË5ƒ“]CIª… (Ÿð"é¾&Y® _”ýuq6sDß”d¤šUt´³·7áeV0ed‹þåÕeñ=(8ãpÚÜ._MšZJ†„ÒSݪ›[I®´wpz/¨ëhܪ°¦¤wï¼\ÌË™¹Y$ÁWG'ç;¯sÝìyßxxºu:£¶ ß:ìªPÑêMzþý¸ü6…ÉK¦gj\]K)›í%W‹õRj6ù}RÓåËó$‡ ÙùâûqB·××è1O(~—Q¤äX©ß䃻­‘½ˆ’Bqü£Ÿ,æ[Ú-õÿõì…+âÞ¹› _Á¹Ù´¯geeº–ÆÕI‡ ß]•š…â|cN-Û/fr…Fqá{×nZVoÔäÛ_'LkôSг‡>®¶’Y5|é#ÒÕ农’²åü+éˆàëHŸê>ߨɇ Å©F6$I†²Ý®@üÍ7õgÍœ™” ^á~q@—Ç•\sPø‚[—ª.ÜÌTÙâò5£D¼<¿‰SÉkبñ‡Ìy¼„SœH£•˜ÜO|p²z»aýqzKív¿€ÚñCûM!ã~ Œ›<ëìÎÅ­ŒÜ»O‚½vÿÉ/Ü ¿àë«Äõ«Tì7de?ÿëé}™®¥quÂÜLc³òÎUàš³òÝU©Yâž¹ÔºIpÍx£Ë„§wÜ~ùFr20W {ókëò6E3%LÌPÎR É[Ú?é ë×±:ìÚ|î|Bž…¯2y–W)Éæ¼(onÙÒÎwqyŸ‡±f•2³²-8Y"!Ìõ±pR‚#΋)H{!ßkYJÝR€XñÏŠ¡¦ ~lÝ¡«K5?cc‘ ócBôµ;åK¿º°)ê}A§n¾ý&ø”üïÞu»¶oªjmb&ùó-y]»|þ× m•*W…Yˆý›û{ß.W33£¨ý6í§®Ý²ëCjrÌ…”å¯VÞ”û¥qu¯.lqò¾ÿ¸äjÙ‹þ’+ ¤_JÍe™~þîÞa×Îã:Oô€½ñ1ÁÁ¡p>N2j_CÆ<~Õ0•‡§©í¨ŽÕ;5 ]acSaž¥U–ÉrÖ®¶{V·´ÿÝË5-g×ø;žã7™YÆ™o>=:*ÎI×lè¥F„b£»ñòÞgäçæÃeÓF|¸ƒ…caÊss4ë^›3ç„d68‰Ûÿ¥}ž›ô1?OhdÁç8T0v®È¯moT˶HÍÝÑìÝǼl˜o­deZ©¢I}£jÖœãO…q¹Ùy–|Î7•MoÄæR6¥íËDÀTݰõ’Yc¸~€©º]÷òàʸZ ÔBzV€Oµ¢ ÁÊ”:-|’÷![r•Oy3ž‹­©£%¯½«ü/N™ ð+ ì¿•4l䯱7I;›”û^r¯VÇ K^ç§À†«ƒ…ë××ɺ¶ønû– ?~+¹…^0';ãhZᜬütA‘)Éÿà¢ô:ƒ6–³wÉÌÈøôò¥¥Ë7ö™W–dH.䯗A0å}ë©Tÿ:Ý4G(ùA#yqŒL¹F–’Óå› YI¶‚m˜©äÔ1{•f&ÁúFÆ\£¶7}Q«é` úp] 1ÏvÕ°‘¤¡6®Æ¶åÊ}Ê……1$÷ v¨kš',²)m_†0Su”šCÚê:¸™V¶6%Õz^гGÝ(ÈHVºTSc+ c¸¾ .Ú,Í8  ð‡žЂ’qè×ÞÃí2wÀþÎR WZ½ÈÂç?²¤'ÎÉÊý(“.æÜn´¥Cu˜k°´¬PÛ½vffÆGsk/³Gõ%º­ è5màý¹¿|]ÆGr‚þË.8¯oi QÿZMÖ”­¹Q›ê2¢¯2öefªŽRk_ƒÆ™jVFÕ¬¾ªN£(Œ¤KÙ[Ù»ÈÔ%¦Œóø•µ /r!—ºhî£ô)®/I®€yWz«nE7ï¸Ç¶pE.˜Ÿ56‘¼2y6ææÖ\ÁúR(E%NàÖ‚¦S­†ÌØŸKÜ+¬P@Ž{öòm½ßiìsTì[0Bu?²¡lº€ËËLŠ «ry&c¸œ 7'K“i"H剙2³Æ.bA$P &ŠcË–?·tÜxúعâE;º½äREò"CceÓùIÇËWêPdC~J@©èî?È~“•šSX±>ÓáKŠ,¾ß_¦ > Ä)Y__X|óh $€È_ûÿUtýRBH  W´­´xÿ)‰›À‚H $ O )þUøØÉ¸”…<” $€´FàóÍ_ÌËÍyúðÓ‡TXQkU¡!$€€!€«`+XÙºÕkdÊ—¬á)ó¢O²/ž?²wªâÙ¢YOV¶~GH Ï`­Ë¸Øçÿ=R·ay*ôIöcZr£oÛåå~õtEùÂ(AH  PÑÊ:öù#Zôs²0K€cXZ^(DH È€Å`™&W铬¼ ” $€€0Éj ‹ $€T%€IVUR¨‡Ѐ&Y  a$€€ª0ɪJ õ@Ѓ$ëV·¼5ˆ*R| êÖ^ò5ªë!ê#$P2诓UZ7SÖ‹yJó¬=¥ÖôKÄ.©¼D¿"Bo‘Ð “,•bJ ¿ècâÖGŸu×ÉÐ2(Ë´9]ÏÉÛþÇNŸÎÝë5lܦC§M[¶IžœWø"?ŸwýµäîõR’°ÛwìZߣq^ß]º|eùª5­Úú@ñ^}¿ðà¡tYéíCGŽvêÚ³nÏn¾}nÝþ²Nã;ÿ‚Šj×÷háÝ> p~ff¦Ò¦½}çî? làÙô›FM†uõz8) 5„§&ä%Ttªø¼ó¯Ýí:v!–ÃGŽQf¡,“oJƒB$€ØC@›Ivëö?B—,mÒ¤ñýÛáß×wÙŠUs¥CyñâŸG££¾Ü|yòØ¡µ«VDÇÄŒ=öCzúÙÓÇ×­^ñôÙó³˜0ݹsïè¡ý«–/}ñâ¿9ó(µÜÜœÓÇ<~pgêä ¾ƒ‚3Y ä“§Í|ø0bå²%÷n]ÿu”ßÎ]»É.¦X¨!*lmy m¥´>Ã_p²n:×.Ÿß½sÇ?gÎJ—eòÖ> ‘`'m&ÙÝ{öAcFû™™™ ô lÿµ{ïWYcÒ iɤ‰ãAâݺNœ0¾¶kÛ¾¾~ó† Ù¤BµíÛ‚B\|<¥6Úod­Z5MMMûöî‹—.3Y äYYY¦&&NNN.·i¯-'»”Æ¢Ô²Œ­Ï0ôµ9³¦ÛX[Ã6¤K1ù¦nÕ¨@)PuNVfñÃV>=åNzÿ„»ô v%¼{'­fme%S 2 Hàñ·Dng+y®4Y6šj¯ÈÑQòŒ1RŠR»{ïþò•«aœM„>=»TÞ%™>Ε*‘"•¥ËÒúvýü Zû(DH d(^ØPÞU“¬ü⇹ٲ3žNŽŽñoßÞ¸v‰äJùÊt*™0yZrròæ ëZ·j +Á«‚4My2ø—ýüáÙóè›·nÃüÆÔé³n^—ŒK&H¯oââ“*W–¤×· Òˆh}óñí¯SŒh Å/l(_VÕ$«Êâ‡C\²déò•þ³fòxÜ{÷ü±s×ö-›äkÕ…D,YKK˼¼¼UkÖ©XÅØ “üF ‡YQ¢Ï7ã“ ±@0MQµJ¢,/Q±ö!ƒ. bó Œ B/•.Hë›üß6ëB5$€´E@Á†òU¨šdUYüF^|¾ÌöðnkjÊoìÙhèàÁòUêH²|éâ Åƒæ£F W±–¿ï9îÁÃX©Ì³Q£Ù3§’‚ b7fôï6vèÔ 4ÉY/y‰Šµÿ2p€¸@ §[¶i_µJå‘#†]¸x &.Hq&ßT4ŽjH 舀‚… åkäx·l~åºìƒaâ~–Jšä%ò¶PRL/_½îÜ­§kêÿž:^LSX ÝädÝ ¿(}jJ^µÃƒGâƒu× *Z7qò“Ȩüü|˜ÎZ¥à Ë¢@ì' êtû#ÑS}{ö˜;oÁóè>Ÿ_¿^ÝõkWwêØAOcA·‘'€IVžI‰Jºtêï­+CH  hóf„t«BH èL²úÑNè%@zJ“¬ž6º€~À$«í„^"$ §0ÉêiáÛH èL²úÑNè%@zJ“¬ž6º€~À$«í„^"$ §0ÉêiáÛH èL²úÑNè%@zJ“¬ž6º€~(Ñ$[í®~P)/á9»°Œ¬¶˜hËŽ®C×?CIºZ’u麉Ѿ M²úH_w½žì»pÞÜ—1OÙ‰Ew—p¼H sÃê´E@'Iºµü[[kÝŽÌA(óUwIžùض·Æáè:w0®‹zua“ˈÆäK¥ N•JDe§R,uHukè†ÑÅuÑ!àYdÔczuam"$À:É*lÏÞ°Öí|Üë5ìÑ«oÔÓgDS$-Y¶¢É·­ê|Óh¤©YYYD~ùÊÕÎÝ}AŠìÛ@±²t¥ª$ø¤6Àõ•lË ¤u^ L1«nÏf-¼7nÞJ8h} œ”©îlÿÀžMá=' ¾R•nÛñg ïv®îõ¤”)NvѺÇÄ–ùðá£W³–?~¢Œƒ¤ióÖ ¡ Êùz)5Êa²Oá1jL}¯:õ=™’š*í¿âX˜|–ö,À×Ý{öµiß©vý†ÐOà™ð: Ï^#½ëyt´ŒK O‹HuWÁ ßÔrFÆ7 ­3òØÕí0LðQ^J:É“·†í¸w«KçNMH„ë7nŽŒŒ:qôн[×á¡¿-#ò)ÓfNž8þñûû÷üõðá#ÅÊÒ°T/HÚðIm€ê«LÐ:¿|åꌌÌk—ÏŸ>yŽsª­Ô^™záiä‰IIÏýsáìé„„w`“ÒŒˆxdb££¤‘)NvѺÇÄ–±²ªØµkç=ûÂ(ãûÂö÷òíQ±béê(hë•Ö¤¶‡ûý:lÈ û·ÃïܼVÓÕuQÈbZ5ÊÛTà³ kááa{vEܻݧWÏ!Ãý.]º²{çŽG÷o÷èÞu–Qï’®—‘ꮂ)¾©ë -Zgä©ÛahëBaÉ(é$»p~ aþž7×ßÉɱ\¹r3¦O9sæ Ðü>9=-ÝÙ¹Òâ "dR–æ¥qAÅÐi?vâdÀœ™¶66ð† Ê­Lö?0ÛÎÖÖÞÎ.p®ÿÑã'(Mbœ© ´œÖ=¥¸†üמ½B¡LÁçî½aÇ‘©Nu¨‚gOŸhÙ¢9üÉ„ç¥Ï˜6ùÚµpUB : |–ñ$$ha¥JNfffÆ †@A æQ_Ÿ<‰”¯‘‘Z®*ðM]gä݉ŠÎh¥ÃÐ:€B­ÐÉœ¬/aèDöÂAløš”ô¾c—îT)xÜ.ÙÞ°nÍÚß7¬Z»Î²¼%ä Ÿí(KWªqAžÃ.ZçSRR+;;“‚U*W¦,ÐúÀd?55Õ¥jU²×¥j•ÔÔ4JÓÁÁ©”ŒœÖ=&¶TYW×nµjþ÷Œoîÿü{¦qcOø“&cYu¨‚÷<]² þŽæää€jSUbQೌ'ÖÖVÄ t'ØþJõ.éi©åªßÔu†…ŠÎh¥ÃÐ:€B­(é$K€½½Ýáa0•ÙëѰÁÖMë `~sú,ÿ;7®‚“²tY Òº§Xhkkû6!¤Hxâ,¥Lë“)0_½Z5Pxoccä©®\\0 „¿dd·ý±sÑ‚yjUallœ››Kr\zúªì˜ñ“ügÏlׯ»|ùò0Æ„¹fÕͪâ³êÖ”jªåj1}cÂ¥.7Ýu¥¸PA]%=]@ëßÀýgùÏ}ýæ Œ>à|œû"jã'M}ñâ¿ü|!äY±HD„LÊÒ–Õ*X¡‚å±/©â2_i–öêÙ=8tIZ:Ìj¤/ YBí¢õÉšon …ÂÙ!x/ ›Lšêú© ®6Þ­233wîÚ]¾\9xb®âªeøÔ­S{óÖígaˆ8Ÿ* çÍø|S>þxÌ P’¸elªâ³b'ÕÚ«–«Åô —Rn2ˆ4è0j1Ae-`E’í7²Y¯Ÿ ­×°ñ„ÉÓ:uò!véä3zìøúáTØŠå¿!“²4µ úÞ«ï÷ÔYr™¯JYO<Ñ¢¥wû.Ý|{zPWeÑúÀdmúÔÉ0ÛΧ ¼§M™Ä¤IÉUôS\`NR-X2rø0uë :sö Tûýï'˜„¥Š/ †?9õ6þià`//OÅfebQÑgÅ6Uß«–«Åô —Rn2ˆ4è0ªAMíàx·l~åú)‰Òv¯Ÿ?áãÛ?7;“ÊK´ë‡aX‹} 縯\ÓÊi…lˆ}'P IV×ýîãܾcçœYÓå£-ŽdöÌé[·ÿ®Ç;ËR-ÂòuÄ•ÒÓu×Rê* y¥pâ‹,)$ïŠÆ8´¤mþóïÙ¦M½àÕØ—¯þ7à—ë—Ï›ššJÿô)ãÇŸRKáIï;ò*1îZ£º§g£³çÎ÷ì¡üv,c)•‚=¦uÄekæ¤v›ƒÖ­w-ÚZPˆÔ"P IV-ÿ4P>áb—N  ¤E¸‘ìÀ߇~Ð_ÚΞ½û<yüsò(Êg¦cîeqòe–ŽmÖ²MFF†t]´Ë6ƒ‹‚ÊÚ@lÆ, GJ1ÉU¯‘bHj¡HRöåå´1Ò6thÚmiËÒ®’m&VÒ‹ +@M©©Òdùùù°`.,îáÕl˶Ä=DÚsÚ°‹é¸‰—6@¥M  %º& “$ëíÝêö»àzbbÒ¼…‹È“à¤J›6­¥ãY¹jMjZÚÕKçN?~ã&µ‹ilÚõ’å×3~ŸœìøyyÀoê×sq©ëøQÆŸ8ÙÈ£!Œª4 [ÉÉ –Ö&¬šL»24)5vÌèUk§’þšuë‡þV\•v†vÙf¢Taip –œ’²jõZª“T©‘Ø‘'©@N#mI‡¦Ýæ¶,¿ÍÄDzÙo¨)5U®Zó{Ì‹'¾zñ|bbÑê zˆ¼·Ò¦ãB¦m€J›@qÕ¸Wt’dÛz·†” î>z –b:^8v È¥c8rì8µR5,ÚMíbZ[ÁzÉÒfaÉ.GI~å·eëvê+ 4F¡%SŸ´Ê VM¦]š°Ò̾|õêòÕ«deì+X¶™à‚µ½aèQ™ä  J´*ÒÆ¨Jé¨9ä½eb"½ì·Ô”š*92on¬:keÍõŸMœQÐC何–02¥hT¥ ׎{µN@'s²° `Á×£ÇN,]²ný¦þ?þpÿáÃßKË]W­R…H`¥jjÓ2Ø ÖK–6 ÃXoR–›ÛŒÃåÞ¸y«Eóo/_½++ÃHV1G¦9Ùw‰‰ÔYÁªÉ´+CS5ŽýuÔ’¥Ë{tï¶rõºÑ~#ÈJ¬Òþ(X¶:PÏ9 IDAT™ 6€UŠIN”Ö¨˜í^ÚUi -6­cJ™H/û­µ´šR€ÉÉ)Ò˜ø  ‡(öœé¸)EÛèª4âÚq¯Ö èd$ KÿÁ"Ö'N677kß®­X,‚“òÕ\\à©3ÒØÙIVª&j¾’e°‰\zlX/ùæµËÉ[æ±W”å† ¾yø0Bº¢±£ý` $[·íøuÔH!‚Ù† âdÕd²­Ö2Û°¾±±ÉÒå+~pæ”E °ØÚ~YØ›IN *­QÞÍ$*6¶šC±“Š™² PKW ‡> ãS!ëveéeΩâLÇ…Œ}ÚUlÅèp¯v è$É‚‹m¼[é€>½}a»w¯ž ‚@"ãzoßž°ä(LËÂJÕ°d5µ—il¦õ’eÖ3†§Ô@~—® $0¶=|ä<ÖEÞ Õž<ýO'É#pà¥ñªÉð –±cFÁ‰¾qcG›ššÈ×®` i‚ ˆ/îÓK–¼˜äd¯Òå}‘¨¸9SÉXÓVs(v[1RVjiãJöëÛgAÐ"8WÂ’l¤,SQºn7Óq!/m€*6bt¸W»t•dÛ¶ñ†ŒF®v‚OøÔöë³^,w OEmÕ¦C·½áW$Ó2ØLë%ˬgÜ­kç{÷¼zýš2ɯ~#gÌö5r¸*øhçda õþý‡ð]b¡8«&ÔqêÕáȤuFÁÒM¼wíÞ«u[˜ô^î‹INÙW\#­ÒBí.®•æPê³R&`AjûŠN?¶¦kÍn¾½ÛtèèüùoL=DéºÝLÇ…ŒK´2#Jq¡‚î°}ÑnÍ–ÁÞ°qóƒˆG›7¬Ó"8¸O·q#ÑŘm œ;ta´îÛ³‡ZîAê§,f’K׬FµÜ3lehØí«ntòKtËKÀ&Y´[''¾ÔõX^~sM76??O³e°ázLy›Å”h%eÃÅ[aÂ(N|Ó‹—|*:¦/jP_Zе~²4Éê2Ø5kׇdž¯]½‚ËÕÕDLW+ùYÛ×5s jÆ KQXšd ulÚßû*vG¦²LrbVñ^«.Ëj°,·¾Vb/¡ñ”V|E#H ½#€IVïš FH@Ÿè*ÉÊ/{¡uí¨«¯™WX $ "]%Y«G5$€€aÀ$kØí‹Ñ!$PÊ0É–r`õH 6'Y¦¥‹™ÖKfZ±˜i5b&}Ãn6Œ }! ó$Ë´t1ÓzÉL+3­F̤¯/ €~"$`Øtžd™–.fZ/™iÅb¦Õˆ™ô »Ù0:$€ô…€ÎïøbZº˜i½d¦‹™V#fÒ×—@?‘0l:É2-]Ì´^2ÓŠÅL«3év³atH è 'Y¦¥‹™ÖKfZ±˜i5b&}h¼1A_z!ú‰ ˜€Î“,ÓÒÅLë%3­XÌ´1“¾·††€`û¢Ýz„]EH Œ_¢[^(È¢Ý:É–è&@H€–&YZ,(DH h‡&YípD+H Z˜di±  $ ˜dµÃ­ $€h `’¥Å‚B$€€v`’ÕG´‚ %€I– ‘@Ú!€IV;Ñ @H€–&YZ,(DH h‡&YípD+H Z˜di±  $ ˜dµÃ­ $€h èüÉ´µ¢PÄb± 7W\ Ö…q´‰—Ãå›™q¹êM1ÉHÏ)((HHxû"úizZzæYiU ƒE8®µµ›{]çÊUÔr “¬Z¸Ø«œ““óÜ¥škW_O›•½-…žé)‘Hq?öEŒµ-£Fx4ª‹Íª0WϬìܳ¯H(„7›]E߀ž¨ïÑøÑÃûb±Çã©‚z“ ªÛEÍ’'³…m_ï!C‡á'@Z$¦àøÒ`.?SòÉP'5fffž9}ü—a¿æ r‡ þÇöm:©"2I€S¦|³]Û7tîÖÄǻ~±•OO †‚ÇÏàtAuÉ Ö¨`Çö­ðiPa0H x†_hÑ©wNV†ffÈ1¥ÙA…Óš1gu©!ÃF°Ú?t èâSeh$[í2{ëöÉÓf¼{—(¿Kߺñ†°lÛŸúé?ztI@Óãâó1¥Éa¥#YÈ•Zl„Ð%KΛk(¶Ìá#µˆM!$PœcJû#YÚ$¨Å,¦ESÐuž>{Þ¶·f}ˆvh¬™)­–‚‘ìæÂk ð…€ Ùãîâ‘Öî=û8ÎÏúÏš1 6ä©ç˜ÒþH’ yƒ£ÒÛò~³A’——gbbÂO´åt"ø«[x ßH  Ç—üAñמ}7oÝ>îŸsgO߸ykoØ~yê˜Òì Õ~’•÷C$-Y¶¢É·­ê|Óh¤©YYYDF‚ÛvüÙ»«{=ÀWø{Ò¦}§Úõvîî{÷Þý¿îЩ›{½†=zõ}M•¢6öì kÝ·(D=}FäoââFŒSßëN}ÁÃF¦¤¦Ê»$m ê%£oH¸³ýx6…÷œ€@øª "R„*+ãS:—v[aNS,@Rȱ'w\üý÷¡Ó¦:Ú;À68D{ì|9¦Ô?†K"ɮ߸922êÄÑC÷n]çóù¡¿-£üŒˆxòØè("¹¶gWĽÛ}zõ2ÜïÒ¥+»wîxtÿvî]gùÊG‚†í¸w«KçN‰Âp¿_‡ tÿvø›×jºº. Y,_HÈÌ5î^¶bUbRÒÅsÿ\8{:!áÝò•«©‚òÉ”eª¢Äå’N4T2'+×›P‚Ê4r,ÊÑ11 ¿!ÇKÃõá+í±#uL©}L—D’ ;ð÷¼¹þNNŽåÊ•›1}Ê™3ç(7æÌ´µ±¡¾†-¬TÉÉÌÌlØÁ0à Z0úúäI¤|p ç:::˜››ûUtåÀÙÓ'Z¶hÙÜÒÒrÆ´É×®…ˤ•=~20`¶­­½]à\ÿ£ÇOPj´ÉÑî|±¼}%;$s²øBH@9ììl ¢ Šú-S²8Ç”öO|ɇ•”ô¾c—î”\z^ÙÁÁAZßÚÚŠ|…< Ò_…t÷ã[YU¤ô)…û„.Y9ÖL½´ÓØòN‚îýw©Z•ìr©Z%55R£­ˆÖHé a ¸ãkäèq[6®+]O°v$ÀBptÈxeaaþ!=½|ùr ÏÈÈ,WÎB^v‘cÊØÄTƒ J"ÉÚÛÛ>CN üӠȘñ“ügÏlׯ»|ùòðw &XU4bkk_½Z5Ðo#5ÄVÑ;Ô ¶l\[ø“_H È=.ÜjÕzüäI‹æÍ@ïId¤[­š´ÇNqŽ©’˜.FøÏ}ýæ 6áüœûÒiË 3>ߔχŒ9'`žêuùöè¶pQ(œ(ƒ÷‚ à^=¿Œ¾iT¨`ù_ìKé]´—¯Ñ–Õ‘.µ†7üÕ%ø‰!@Ž8y}ûôZ±jmRR2¼aã»>½åu¤) ŽÜ’ÉŽöÉ1Úúó ¡ïß'רQ}ܘÑ8ªz‘%!Á‹B–¼7ÆÎ0W{üä)ËNŸ:9p~P;Ÿ. ß£[×iS&).è7bx¯¾ßÜK¦b ½•ÌëoÞ€#YÅM‡{Ë,Ù‘lÿûÅÅÅuëÙˆüÔÿ‡¾ïK;’ý|LÉW…#®Â¥ %=Ð!«põÿeXvÆG¿1ã7¯‡<‹/$€Š<‹¸ Ĥ¿OÐŒ9¦,,+îÛµWáÒŒ¡¡”’Llú} |JHЋ¢cJ££ª$ædµF )' ™.5f<íµ~(De˜9x$ˆo©cJùA(£Qs²j;…ŠC ÀþêâÅÅAˆe –€FCQ Qœc G²Õ ÿFøPx•¾‘("àÞ qjbœÆÅçcJ“t#YM¨±·La–Ý´n5ŽdÙÛFè™(:¦4ãHV\‘Ë’¿Û£ÆMÄO$€´N p2Wí^Â¥62v€K¸Îþs²ßÿäfeh| •¡¡WH€ à}³r–ÃötêÚM­)âH– ͧ¸\®]Ôã±X¤sh ¯ À‘Ç—­½=—«Þ,«zÚˆµ`)2×ZîÑÏŸ>ŠÔàÑð¬ C,!Àáp­­mÜj×c-/7[u¯0ɪΊ՚ð[¦’se[¡HÈjGÑ9$ ·xŒ&Ùâ g]Y²ž,ëÜB‡€AÐ(Çb’5ˆ¶7° ŒM ," GX†g± $[í.›Ù­ëípéwý=?§ïô¿¿Š Q‹öú‘&—á'YýoײdXïnß—ÅÈ 1本Œ»Wþ5ÄÈTŠI'IÒ•k6,c#P•ZK5%Mþتfµ@q”Ñž©“$ í Yb-NbYB Œvdl~Ö(³=S½›p‹ÓŽyyy³ýx6…÷œ€@øJ¬ÁˆuÏÞ°Öí|Üë5ìÑ«oÔÓg 'caø”“"ùùù‹B{5kéáÕl˶DÈdŸò™IªØ¶ãÏÞí\ÝëQ.'ÒÒ, ÙÞ¥IëÖè™ý¡(¹$»lŪĤ¤‹çþ¹pötB»å+WSyóÖíƒa{#îÝêÒ¹ä_“0|ÒŽˆW­ù=æÅ‹“Ç_½x>11‘ØQ`_©BDÄ£GÅFG鬕˜á²Ú‘K 0V¤92Ú9u•dÉ Tz(zôøÉÀ€Ùv¶¶övvsý?A5ÖÂùŽŽðP¿Ã"£ž*mÄCGŽÌ›àääX¡‚å\ÿÙD_}¥ sfÚÚØPõÒfv¥^¡@H@ž@ÉÍÉÂõ.U«\ªVIMM£¼±²ªH¶áÑBî»ONN 2Á(°O4(888È£ÑG ¬a‘'ÈÕGÏ¥}615Ó÷ÐyÐ3MLåãR*ÑÕHV¾b[[Û¸øx"o#5r”WV,±·· 2:Jí+UP\©þì5€eú=Uƒ@í™%—d}{t[¸(4%5Þ ‚‚{õ쮸u`*à¿Ø—´:ýúöY´(11éÓ§Œ àP¢£Ô¾Rª.Ú³m´ž°M7"À›mTÑ­0€ž©Ù>%—d§O ³±í|ºÀÛÉÑqÚ”IŠ[ÎoÄð^}¿§ÍwÇ­éZ³›oï6::;;;Jí+UPìžì5€Á‚Fgpõ¤yʶ›e´sêdN–öÄŸÏ_ºÞ2ýLF™ú:ö×Qð¦í”&&&p ÞÒ{•ÚWª@Y£õŸÖ6 1G±±UЧ‹ ËäK'I¶L’dGВ邲ڗÙÑèCè™[˜d™º„žÊÉ/2=uþ+·á†wCcøB@£Å.€š„€I–]m¨o4éZ¨V‹&2ÒSÀZY^RD‹0YdJÿ{¦f01ÉjÆ¥¥ DZ†Ð—Ý4f)btKSÐ35;´0ÉjÚeØYÎpf ØÉ½*Û4ʲ˜d ¬ÓH.F4°0$Àš\˜dYÓ|Åv„ÃáÂmµð@xC8[lh h—‡Ã‘_µï-P»€výFkÚ"Àåríìì¢GˆÅ"mÙD;H PàÈ‚ãËÖÞžËUolªž6g-XÃ̵–{ôó§O£"5x4ÛEÿ€~€ãKƒ¹8L²úÙÚL^ã*\LdPŽŠO@“õaŒ0É<‹,æX:‹‚@WK hvha’eis–e·ŒMÊrø»° Ïb±:ÉÂóÀÙöàØâ»T| BÉ“*èÇÎáçñô~4•Ê^6jÑ^e]Ö*jrp±:ɲ–4:¦ka[wí§ëZÐ~ÉÈÍÎ,ËOlÓI’…ÁÕx*X6ÿ¶YÀœYU«¨woÉ4¿!Ö¢É[Cä€1±@í™:I²Ð¶äg>܆”š–¶ã]cÆM<~ä ÛÚÜ ý)£Ù ÛÒ°‚*³=S½›pÕmtXxÑÎÖvâø111/HÙ7qq#F©ïáU§¾Çàa#SRS‰¤|uBÿúù>¾ýá> ª©å%lè±±/‡ ÷»rñ,œ)]233Ïœ>Þÿ—aÙKדâ×^¾¢ Ü „w|Ÿ$K,;¾êx4e‰?»aaYqß®í»õ0áñî†_låÓ“2%ÈÉ’‘À®¤øW#ÇNÖÕ‰/ÃP¥ Ì'L76??/(dqçNE×'¨RÐðu$Ó84üvÖÇ ¡gjtlée’­R¥r‡N]s‚Ž>¦Lš Ng>“_d:3_‚†¥H•`µX•îh”¢tçŽ&–5 A/“,Ü•@nLЄ’Á—Ѥ° JFz 8T–—aW{hËý‘ÐË$«Y¨e¡Tá8Öú²{ƒÆe¡½ÊTŒÐ35;´0ÉV?7œÙÃjŒÆ0h”e1ÉFãSQH.F4°0$Àš\˜dYÓ|Åv„ÃáÂmµð@xC8[lh h—¬ 9¾8jß[ víúÖ´E€ËåÚÙÙE=Ž‹EÚ²‰v À‘Ç—­½=—«ÞØT=m$ÎZæææ®µÜ£Ÿ?}©Á£áY:†XBưÖÖ6nµëÀ±–—›­ºW˜dUgÅjMø-Sɹ²­P$dµ£èÐ[<ž1,ÑG­¨b˜dU¥j0c`na¡Ž¢‹H ,À9Ù²ÔÚ+@%N“l‰#Ç ‘(KpºÀpZ[Kæä Dpu&óŒ ¨K€k¬R&är¸ðÜ,˜—S˾J¦Õ²ˆÊ¥B@,¥¦&_:ÿïÛ¸7"^ÅU*€•ê+ϦJÏÃù®Š­ª×t«T©èñW*F‹IVEPlWËÍɹvé¼K ·Þ?ârylwýCl"pîÔá~¦Ø#±XüìIDÜ«Xk+.Üó£ò “¬Ê¨Ø­(*½~ۣߧJ_=\’Ý^£wH€Eòóн©óGÔ“‡b±ËScÆ“¬bªú³·Àf p «? †ž²À× ÞÃÅã}õ£fc5¸g]|Ì>$è@H@kÈvä3æ¿ÿFŒ ŸÒBÍjÂ$«7,…€ø’N_ü÷böÿ„„ø„mÉ*Í_ÞjGIVmdX $ð9‘¾xñßÿ¹¿ü<àÈ¡ƒð Û )FŽ5Ò§$ Ï'M+¿Qœ&§¬1QªÀTåH è Â+YŽyÇ :Ô×·'Ÿo Ÿ° ²K³ ÐñÄ—}²í˘§j@U$€ôˆ@a]0ožä|×ç„Ú¹<¯µ}qnðÑÉH6##cá¢PïvÝê6hÔä[¿_Ç]¿¡G¨™\Õ» [ùóK:"8=\·nÝzõê…††RgKÕ•3QB9ÐOVÅðæñà"XÉõ–’h2–ÕI’?qJ¾0Ï_<{òðü™Ó½|{¬ý}ƒ~r×o¯ß¾dbؽ{÷Í›7/]ºtñâÅððð½{÷uåú½G2>ÏH¦ Þšgu’doܺ5{Æ´ªUªÀ¨ÛÖÆ¦g÷nûvï$åçç/ YìÕ¬¥‡W³-Ûv!ü ß¶ãÏÞí\Ýë$//o¶`Ϧðž_ô‡›·6mÞºnϳüŸ5ßÄÅ5¦¾‡Wúƒ‡LIMUP;eüñ“Èæ­Ûîø³ÈUùJ¥ç‚÷ì kÝÎǽ^ýúF=}F”áº%ËV4ù¶UoM˜45++‹È/_¹Ú¹»/(C‘}ûP–Ke¶wÿþý³fÍr,|Á|%þ¨+—çƒ$€ä è$Éz5n<Ë?ðÁƒ‡ì«ÖüóâÅÉc‡¯^<Ÿ˜˜H9ñèÄÑC±ÑQ Y¶bUbRÒÅsÿ\8{:!áÝò•«åý¦$·ïÜ=}òèÕKç’SRV­^KäÃý~6dÐýÛáwn^«éê iÈ™j‡½.^:Ü/h~àÐÁƒTGíºyëöÁ°½÷nuéÜ þùú›##£ {·®ÃB¡¿-#ò)ÓfNž8þñûû÷üõðá#UìëN'::ºaÆÄ>l<þœl«+ׇh ”<X^)_«ä¯hÀÇä³N’ìÆß×V®ì<ÓnÃÆÍZµíó³?~":rdÞÜ''Ç ,çúÏ¦Ü ˜3ƼäëÑã'fÛÙÚÚÛÙÎõ?zü“÷ 'š  GŽ'šgOŸhÙ¢9¤9KKËÓ&_»®¸ö]í™0oÛ–0Ç­ .é] ç:::Àƒ(üF ‹Œ*:vàïysŠÖõ- IDATý!ºråÊ͘>åÌ™s¤ߌŸü>9=-ÝÙ¹Òâ ÊN©LòÂøÜ#>À5ÜVW®"(TCzBàó5\_]+/T;$YH 3§M9sê8ÌÉîÚ±-''gÜÄÉĵää—ªUäÝtpp „©©©.U«’¯ œšš&¯OI`R‚lÃFJJÑ´Àý~èÿs½†á÷8Ì$¤¥§+®}ëö?ú}×Ç£aÉì²²ªH$ð8 ¡°è‰/IIï;vé•»Y ojšbú5W®]ïÞ«OÛÏ_¸¨z-ºÐ,Nb•Nĺð m"Ò"P †S¿Ê^bÖœø¢0Áâ`®®5æÍsûÎ"´··{¯˜£­­m\|‘(Û|áÒ–¢4ãß¾µµ- ?iÐ/?ߺ~æ?¸C@gª=lϮӧÿÝ´emª ÁþÍk—a|JÞdöŠCúÞºiý½[á æÀDŠêu¡éîîþèQÑ”lÔ®]›Ô¢®\¾¡M$PZ$çº _0f’ɵ_$ùÒÉH¶ÿσNœ: “¤p"èÝ»ÄÅ¿-oäáAØõëÛgAТÄĤOŸ2‚‚Ciúöè3 0 „÷‚ à^=»Óªá¢%©iið ^ܧ—/Â\°\IÌçC ž0*ÎT;üÀÛ³óÀß7lܬ .¥»è?Ëîë7o UžGGù/Rdü¤©pÓH~¾¤ñ`áWÊN©œøúᇖ,Y’Tø‚ü‘ø£®\) T@zDF²dž xñÒó.Ss° òU¢£þK'Iv¸1'NžêÔµGíúßýئ Ö­YI|›8~lMךÝ|{·éÐÑÙ™~íÛéS'Ãll;Ÿ.ðvrtœ6e’‚¸šx5îÚ½Wë¶>ÖÖVS&M šKB‚!ùÖoØø§ƒ½¼<©â j‡ù ¸âà‘£Å¹Úl´ßÈfM¼~4f*&LžÖ©SÑ o—N>£ÇޝïÑN…­Xþ›‚p´»‹\& 6© Ø8p`³fÍÚ¾š7oþÓO?‘JÕ•k×U´†JÀþÜÿîÞsâôiH\ÇO†m]šyÈñnÙüÊõR¾œèC×ÏŸðñퟛI•—hV–ÒŒO7®]>qÖBG'Uf‘€¡سcC÷Þßçå]sûòÕ‚àÅ™™™åË—Ÿç?˵Fu¸©y¹SGÿnÛ¾£1{7üb+ŸžAN–Œv%Å¿9v²NF²†Ú@K@rAÑM®Õ«Í›3³’“#|¶ÔÍ šDkhB Ë $``àt Ì PAÕ¨^mÕÒ%<ÞW«tƒŽQc’ÕAHÀÐŽb¿:¯Åård$_ïW•&YUI¡@M€ÜwÀ"\ 9>5v`’eƒb$€ÊAv†âpáiµq1Ïllì¸\H›jÌ`’U ÷"$P&\¼PtR²ba±êÓèG"&Ùâ1gMiQèõ«Øý8UªÌ§Ð$ s°XÇ‚™ã¿ÜèȺk„IVç „*(0‚YÖm¬†5$óR‹uæXE'%®^»võêuîϙ͸."»Ì1É2³Á=H Ȱ!¡‹iʉ‰'NžêÙ£;­‚fB¼ãK3nX =&““-ÂXò …yyy9ÙÙBa¾±‰qç.ÝŽŸ8©ÅØ0Éj&šBH Ô =Ö[ê9Þ_K 'àÑ´â\õE^p#HE"qâ»D›î={¦Ðàè’e+š|ÛªÎ7&Lšš••E¹sÄ´-‚Â2Là«YTÉù,˜hØ¿ Û"£Îó$ïZ>’K Ä¢ŒŒOŸ>½KHHKKKMMIOO‡K*V¨?¾k»»»Ts±²‚,,?±«6ZÝ&YpF²ëÖolÔȃ¸6Üï×aCÝ¿~çæµš®®X‰|Õšßc^¼8yìðÕ‹ç¥ã¸pñÒÐá~Aó‡òå+Wgdd^»|þôɣŤ5#"8z(6: „ËV¬JLJºxîŸ gO'$¼ƒRJÙܼuû`ØÞˆ{·ºtîy™è¯\µB¸zéÜÉã‡ÃoÜTjäZxxØž]÷n÷éÕsÈp¿K—®ìÞ¹ãÑýÛ=ºwå_d“ Shë7nŽŒŒ‚ÐîݺÎçóC[¦Ô T@H €$Kfeeäæf ÅÂ|Q\T)~d›˜À»¢UENîÇw1O_ý÷ɵs¯ŸyóøÎ³›Ÿ‡Ÿ{~¦\nrÜEc#yêdN¼‘aU¬XáÀÞÝÄų§O H3¦MnݶhRùБ#»wþáää{çúϦâÙõמu6m۲ѣa"¥¿R6™ 0…–”ô¾c—/· PÐäC@ (ãàÞ‚æèøåOˆ*µ @œŒá$¼Œqå4:!âòR²2ì«×¢°0âÀ?.,_˜Ëás D\#®‰‘1ßÈÔ\lQIÄɉ|œ\ßÇ­˜u>'›‘‘±uÛ˜~%ŽÂ¹3>ߔχ„5' è7/ìê×·Ï‚ E‰‰IŸ>e‡RQÁoä°=;ü}pÃÆÍDØ«g÷àÐ%iéðŒ‰ôE!K˜â÷íÑmá¢P8±ïAÁPŠhÖ­S{óÖígax8Ÿ©8%ïíÛjiY°•ê«¢À)´úÏòŸûúÍèpö Î}Qµà‰/U€£N" ™ƒýr‹lÂ$¬0õu9a†(?§ædóbažX(à‰8’§ 9ÇHÌ)r Ë ¹BØæed&Çe›U°¶‘2¨ H]%Y8øÉûÛVmïܹ»võ âÝ’`ÈYõ6†ñ©——'åòÄñckºÖìæÛ»M‡ŽÎŸgÈ^˜€YуGŽ’yÒ©“'Â%l-½ÛwéæÛØÓÃÄÄ„6îéS'ÛÛÙµóéo'GÇiS&µÐà 3gÏÁºßÿ~jÙ¢9mYi!TƒñVm:tëÑ.øUª¯Š¦ÐFûlÖÄëçACë5l}ܸvùÄY  ƃðŸì°hyjrÒ™ÓÇûÿ2,;ã#¥vøXÏÎí>ZênÍ›qÄɯŸÛ9U Ó Äp›WAÑI! y%›=©]‚œ, ìJŠ5rìd]d2)îN˜O€ói)))A!‹;ְ΀C+n«cy$ >Hß¾¬˜Ÿ*þøN”ðXôúŽIÖÛÁ»‚ü¸#¡ðÊxL‡——iœ—a,ÈàäæÁéx1Ǭ@ÌM±¨¯ÑŠ02nêüÄ—úX”—¨R¥r‡N]á6ãŽ>¦Lš ¼€þhphúÓè©~øzÑnŽðÍ=‹´h¡±Q\ÉÅ71æñ¸bW(I¦’·ä§|#¾1¤cŽä!a0 -àpD9™f5šs’Ÿ*^\Rz™dá®rc‚*ê—Ž‡¦_ Þê+2‡úÙ{X"Ö<9ª‚qžØÔ‚Ã362æ™sòrRÞÂõ±F0±d™YSŽ(êmAË^­kÖª"©+Ó5ɲ˜dËZÄx‘€! Wp‘!g6ðlvå£ 7—Ì |yáè•ÂJíƒÄjïèlÏádeg[®Sdðëò*~Ã$«"(TCH@_PãÍ‚F¹×vä Ôuf `pkjR“Ñ«tu˜dÕ…ÏV}8GÊãÁcèÙêú…tBžÿÅ´ÔldI—[Þ¢\9s ÍêæÂÒ’3aŸKk”o1ÉjŸu¥x\^µµž<¼ ¡‡‡$³Î?t è€dØk—ιÖt‡b¥á—\XxÌÐM ¨êtfÕ$ËâѨ*i–ëñùf»ôø÷ÔÑ+çÿ¥ÜXî-º‡´BưU«ÕèÕï'x¨eP“D¨oŒ`’e£obž±±µ­íÀ¡£9pm ¾@™!×À#½Å… ¸$ ƶ0j%FÔ.KŒÃEj¾0ɪ ŒÅêÐÏòD’$ñ…Ê ˜?µ³³‹zQ½z5 R¡RbpÂŒÛÚÛs¹ê Ã$«”-* $ ÌÍÍ]k¹G?ú4*Rrç–¶_¸­­mÜj׊òr³U7IVuV¨‰{ ÀÏùJΕmll…¢¢÷µî+œR†¥¨Õ]5“¬Ö "$P:`ÆÀÜBëµtç±Ú“¸ºs-#$€ &YÃkSŒ À$Ë¢Æ@W0<˜d ¯M1"$€XD“,‹]AHÀð`’5¼6ň`L²,j t Ã#€IÖðÚ#BH€E0ɲ¨1Ð$€ &YÃkSŒ ÀÛjYÔÅw%>>îEôÓô´tÕÈ,{acíæ^·r•ªÅw- $ C“¬Au‰Ø˜ç.Õ\»úzªþpX"32â~ì‹L²Õ0ÖÐ~’­áVW>º—1Oå…z$ ô"„ÔÔÔÎ=ûŠòóá­:Þú=¼¯º>j"$ :í'Y*éKbRû5a–€Ëå òÔrŠ@ÁŒOÕ*…ÊH ¬0·(gl¬vÎT»€X!ÛÌ™µuûޤ¤÷±ÑQoââ. ½qó–H(üöÛfË—.¶³µ³ ¼pþúM›ß¿Ov«Usé’Ðzuë€üò•«Á‹{õ굃ƒý¸1£ûÿøQž9}ê¶ídfeùöè´pßÔä ŒKûOÁZ¶rõ¡xçŽ>¡Á Ë•+Ç䛓O}ÏÂÃŒeW,Þ¿gçA€ÔÆ×í(y*ÒÓˆ;_ ñ@_ÀSmZwî-ÈÉRJI$Yð)"âщ£‡lml`{¸ß¯ ~_³2//oåêu‹B¯Z¾”ø}óÖíƒa{+T°Ü²mÇœ€À#÷ƒ|Ê´™‹‚æwhß.5%uͺõ$É‚üö»§O…é3ç¬Z½r®bãÒ>¬ß¸922 \²´,?apèoË-˜Çä$V}•CŽ¥{’%¤Ù[¨ß¸yB?‘'pÿæy¡*’º„+`ÎL’aÁ§³§O´lÑœÏç[ZZΘ6ùÚµpÊÑ…óàé~#†EFMãòÍøÉï“ጹ³s¥Å!A”r`ÀlÃ6Ž;Nä ŒKûvàïysýœa;cú”3gÎ)öA”,щòó92oðH¨ i(ÂçÑ $`xJh$ëàà@±»ÿàAè’eCsr$Oý“~–ƒ•UE¢Ïx ‹ž!±aÝšµ¿oXµveyKȧ>ÚªUªP))©d[qi`â¢c—î”KJ}Ч†‡a)Í`UJ(¿—nä«O!£¯H€ÅJ(ÉJ3~’ÿì™íÚx—/_>++«gSÅ|<6غi=<ã&g§Ïò¿sã*Ñ‹¯^­lÇ¿}kk+™ˆ€—ŠÆíííƒQ³âªõq¯d¶@>J=$Y~/HïßÐð×>RBŸ‘€º80)«Ñ«’¬@ 0ãóMù|È’Ë–¯RêöøIS'ŽãââÙ<]Y²dIè"Ø ^ܧ—/ªh|à€þ³üçÎô¯ììü_lìïë7­Yµ\'0Mü_ìËš®5è°e—$ÇÊžøòíÝ—©¯¼-LÊÞ]z³%ô RH²KB‚!?¾7’0÷züä)Å<»tò=vüë7q5jT_±ü7J¹‰Wã®Ý{Áå=ºw2i‘«h|´ßHŽÑÖŸ …+À,\´ Ø¿Ã{õý>;;›åWÀí[ps L凫LÂT ‚œ6e²‰r$€(ï–ͯ\¿ñ!%QÊõó'||ûçfgRByIéBÔ§Óý%Hêê¥óöŽÕ«Wƒ¤©bµ0Â…ËãÞ'¿oÓ¶ƒŠEP ”q0"¹~±•OOŠƒ¼v%Å¿9vr)ŒdËxóè4|×ZîÑÏŸ>Š”Ÿ1`ªW²vµ[mÉ%ÉøBH@ë0Éjii„õp ‚Òl¬ ÈPõG¥\ÁR°|n´”é`õH °†€¾&YÖDG@Š`’UD÷!$€ŠI“l1bq$€€"˜dÑÁ}H bÀ$[L€X $ ˆ&YEtp@H ˜0É GH ("€7#(¢ƒû €X,äæŠåÖÐ1¼H©ˆ¸.ßÌŒËÅUé42&ÙÒᎵ– X7'!á­ºOM/WµU)õÈwçÊU¤×MÖ–}´£”&Y¥ˆPÁpÀ:ñ<5]¯ã§ùnmckaa¡×±è©ó˜dõ´áÐmMÀ\AÑSÓ…Bxާ&&ô° yä»X\Vâe[a’e[‹ ?º%ë“ñx<‘° =Ö âU}U6ÝÒ/“Ö1É–Éf/ãAKƒV–”©`Ù×°˜dÙ×&葎 æØ2”xÊP¨:î9š™/Í«:à)Šš9¥@úB@W#ÙO©ñŠܼs¿ºK÷z«±j/í3oh… ܦôÕ-¨À&îR“€ä!hjÑkõ2,ëZJWI½·c(S¸Qoóÿ{/œ¿f“‚Nå˜ÝtŠ#$ M@‡Iªéû]?yÜc’;s~|;3ù]DIP~—… ESò~¢DOhapWµz-,\ÚØ³ÑÂùnnE’bBËq¯^Óg Ý&Yù“¸ïÓsF,9;åÍ3"™PI‡œLˆP^LZH±…¼)L…;þØ9~âäÓ§ŽÓ1ª¸¶<Ô–?hGcº>ñUx"Wê=oû {+óþ>njy,‰–,[ÑäÛVu¾i4aÒTêŒdám;þláÝÎÕ½„¯»÷ìkÓ¾Síú ;w÷½{ïþ߇wèÔͽ^ýú>Ž&•R#eØØ³7¬u;¢õôQx7bÔ˜ú^uê{ 62%5U±·7omÚ¼uÝž3fù òòˆ2“ÏŠMáÞ’ Û+e:©Ê_Á×BS–å-Góâ?Ø E‹/õôjæ^»þ¸ñ“²2³ˆÎ¥K—;vêVÓ­n‹Vm÷î #BZe—Â2|J6´èjIÅ:hè8ÉÂé©÷åñÇ®ÅÎҌˡqEhýÆÍ‘‘Q'Žºwë:ŸÏým¥ñä±ÑQDr-<t°·MJJjß± ¥‡ÔµnÍŠuë7­X¹¦¼eù¹sfvhßt˜”a—¶<SÆ&¦Lþ£¼è6É:XñM¹wž§Œ]sóURf£šÖ\­5¸DÑÞÞîð0r–¨bÌøIþ³g¶kã]¾|y7ðlª¸Þ¸øøêÕªNüÛ·¶¶EÃêöY±‡¸WŽü ×Ê«€Ã1rq©²bYhŸ~ý[µüÖÞÎîï°¿¾î«’º6¨¿yÃÈÈW®^›9'ðæµ‹ dR.ôL[j%L4¢9ÝN ô©±nGk³3÷¢ã?5«m'5Ǥ†ÓôŸå?÷õ›70Ø„óWpîKÂê« 3˜Nãó!{Î ˜§ÔÀ¢%©iið ^ܧ—/Ñ/aŸ•:‰ ¯ÏHŸ5Po R¦›x5>züÔ€þ?Ι»àõëÊY˜]ƒIDAT¸ü|áóç1§Ì :°ó"6/_(‰Db"dR®`iù_ìKmù vðUŠt;’…µ¼Ü¬O.j?zõ­»Ñi^î6š­4Úo$Çhëσ†¾Ÿ\£FõqcFëÙ’`È›oÇM„ñÌÕ?yJquptuíÞ+3ëÿíXW×ÇgvWvYêR¤YP@ [Tì½—×C¬M¬é>‰1ÆXL 11_b4±½Æ|ù5Ö‚-F#Å€° Ti[g¿3;°,ËîlvÙÃ3Ï>³÷Þ¹÷œß½óçΙ;³•p{íµ•Ë™ÂMl3»…˜[Ÿs7É*TêlæóÏ|ºeë/?í'vó¢ñ%§ˆÿ»Z5¡‡ÀSX7wîõ½»wM4“½6ÌEV!PQQqêđȹÑUåeV©Ð.*ºyØûݸ‰“]]ÝíÂ`Û7RR]yíÒÙÁ£§¨Mm˜Yù9 —¼Úˆ3YÐPMXblZèè……Ž4¹s$_mp7–ÈâÕ;Mª%`Åp]@E•mÎnj,‘mNŸ°m$`ÊŽADXÀJPd­«±ªy¬©¬¹j“ƒEÖ&»jT-hT¼Xy}(²8"½Õ‘Üv(gm®cQdm®KРF%@’x¬ÞPä à¹^Ú_²q;jÔ.³÷ʽ½÷ Úo‡ããã“~#…¢&fÏEÁSð×Û×—ÃÁUót$roîØj³€×­u í”™qófzšy6‹Ù–4 sX‘È+¬sðÝ’zðX³  Èš´?píäåå-WÈíÏzs-æryðòOƒ/“3·z<ÎY€0»…€ˆ³PØÂœBwl™Ædm¹wÐ6$€잊¬Ýw!:€€-@‘µåÞAÛ°{(²vß…è@¶LEÖ–{mCHÀî  ÈÚ}¢H Ø2Y[î´ »'€"k÷]ˆ $`ËPdm¹wÐ6$€잊¬Ýw!:€€-@‘µåÞAÛ°{(²vß…è@¶LEÖ–{mCHÀî  ÈÚ}¢H Ø2Y[î´ »'€"k÷]ˆ $`ËŒY‡¤(Ê–=AÛ@MC~…$ÑȶŒýeOŸ¬®ù¶Ã±0’,CH E…-¸Ÿëéíg¤wÆŠlh×ð¬ô”ûW( ÃÝH¶X Hæ°î"Ÿ°§ÂôÍX‘uâ ºõ`d¥X $€ÆÆd‘@H ˜AEÖ hx@HÀXºE×ËË!$€‚e½î˜,®%Àaƒ0’ûzÝ"‹k Œ„‹Å@ìë t‹,®%Àqƒ° Ý1Y«T• $€Š,Ž$€@#@‘mD¸X5@HEÇ@H  è¾ñÕˆ bÕöFÞ¾&‹)¥½ƒCrø‡£{ ‚@´†0a?§QdÙù8z.,¼ÿÞ­Ì›%Å%JÇÐY’䈼Daž jÓðsDë”@ 5EÖ "‡.P]]•Ñ®}Ç S{s¹1Z yZÊõì[Y"/o¡P¨Õý°†zá§MC·1ÅHp%XTT4nÊ …\›‘GÙ{±ná}R“¯S”ˆVç"ƒ£]wÔÉàaXÀq@”ÀAæ°ê>Yb#Dkð#v5À™,;ÌeÀ›ÚêeíE ÚJ‹#DŸX Èê#ƒéPRPRØO!úù Èêgƒ9µTgÁÉ]ËáeÐU¢ëŸŽAl4B4]E‘m9žØYEEîê5¤LNÿ®)IÒï…Ÿ|†ŸÉ£(×Y/øikÛ²=b±$ò`[¡«Š¥ÊЪ å3ò¾-› ¶¡ÈÚxµLóärùÔO"{¾ÁãµØ ›»ØÝYªJ(°)áSµ;Š­ÛHeãǵÌn¯ÊÊÊ\ÜÈgÂËÕ2J"£Äd‚D u#´fÍ*[ì·&$¬‹ŽXíbv÷µ eüìÝW×Ïï÷®Mê¬Ag aÖV-¯ÌN­àraØÛ('ØÃø²ˆå>JÄÕªGð(‚T’°£TÂWH´âÈ4ÅHƒ@ê*Ã%\¦€u貪8¤Å›\.Û}}c¥[æ€à±؇Ë«ÕWCÛà}Y¬éÆô´^²Šò¼±®gZaår%¬/†™Éªö!6nu5¿õÁ‰“¬–èmÅêG±²²ˆµL¥µ"t°€‚è‹Js›ŽOý¶ŒRSEÖXŽ\Ô*cYsؤ®7Æ“yïÀ1R;éV©¿a%æ…Ættö˜)ÄacbÝ`«RRáÀ­|}i…e¤>IÒãÙgéȬ\Ωª¢â>¹ü¤¾Úš2…•%@LuÃwW6LÝç_-–hK«* ò ¯Ñ€O%‡KšZ¹µÊD]EÖ$\XØ|%Ø“´±Ê5£§ÿ%)£AÊzû®fïKÚ¹ZUýÍ·B:çùM6ù‘2±8÷¥:«š·ºê·jUÀæÍ<ÐYfJK’þëÖù¾þºßûï3ñYtvæ'Ó4ööíìE‹—ôìÕ/´S×)Óf;~¢É]ižaìúkC…s¶» ñV-#àW^B¡$Io:_à“‘™9菱.]{Â;ÿfd¨+iªÞ‡ô~ý#¶»³ üD‘mÈö߄ŹLJZåöoÿÁ °JBF)¥ ¥4éщâLÞ HxjWóÊRP{÷íÿ½w÷ýw?ì›QìÍ3ž½ÓôÔyçàaW7fÞ XS¸¦… ŒçùùÁëfü?üÐeĨÛmòd™3™é-YYYðÑfµw²sf¾0kÈÁ üž–šüáÚ÷9f¦zìÔ];+³€ènHU0Hv]ÙPå’Ó·íXâ­b­ÃAU•\ (ަ´®vçæÜ¹ûâ¬¹ãÆŒ¹vål°3kö73ò×£GÕ•À{Å`£}‚jûÂÞߺÀìU)“1Ò)ËË+ŒgnËðZ·úòË€¸8Fa¡êŠß/Û¿_±UR µ=[â?ååEsg¿(yòù­z÷ÿú«/˜ÜÜÜÜè±]ºõ ëÒuîü¨ÂÂBµûûöï2<¤ÓS'OMKOgÒe2éºõzõ}º{xŸíßî`áý&}¼¹w¿þºt[º|EeeEmÓ4+ý›9@ôצÝ zë’Ý»Í(J)iÕŠY¦¥YŒà;‘´ÂÂL¤–Ó"«ê_õèÆDÏ™éêêìÀ×Ï>ߪéàùóçƾ¿å“éÓ¦ož®’ì@êrQd%…åŒ!@_î]Û˜'ÿ{÷ßpG‹ŽÀçÞäM•îi][¤)D àS®”¦'æ%9M XÔ©S˜·——ÖƒÝ{ö½4o.>oÎì]»÷j6}寫§N»tþÜãÇ…pR©³ô¥CeK^‰ÿ^eÂŽßúetÔ|cÜ1¹ ¬Á¨½ÙRûäðáGqq5:ëç'4ˆ©öÁŠÊêêš@­BAj,Þ¸tùòÔ©“u6ýRòõ¿®_ý3$¤ãºõÕÅþüóÊÁŸü'åïñãÇ­zg5“þYüÖ̬['ŽýzéüÙ2‰_~õõ´´ãG'ý}…Ïçoܧ³­¦LTE 6– 3{ W9%qrÖgGÄü´à\PlBТóA›ïE…„…(.€WjhÛxñÒ¥3¦k¦Â× .ªSŽŸøíÍ·ßÙýýŽ¡CkÜhßQd ­ãUÌ(l!?%¼í€Rá ˆÀŠ%PØr·Ô§|P$(¬„>…”’‹/N›6öóòòÕ8×®Yíãã ì:ô«Át(0|øPW—#GÁþ;9 çKd¡Íå ³¿üòtVã¯òìÙË–Q *ÌLÛ˜R%%¥^"‘æ!êý3¿Ÿ<(BÀ绹¹­zëó.¨³Ö¯[ëïççìì¼8vAZÌd鿟9´îý÷üýÝÝÝ!öÂ$øñ'&ÑÅÅeÕ[ožŒ1°ó¸°Pm˜¾t¦À˱ â>ùlܘQ›?ݲpAÜAañˆ×ʉÝY}@rU¬@õÐýèLQ9çþý5kkÕ©“D äçS[›Q¨¶ÇÓÓ£àáC__Ÿ†6\OJŽûdKZú¿ðZ[È… ¯ú(¡³€Ù× /˜ýGûûùjyZPP0rÌxuåš•ècb6†.h¥Ð:×ãŠo†ÿ¾°p– ( о»Eߤ#K”R¦$é:ÖDÊ%­°L¸@*•hÚìééùàþ}?¿ºÇ Ou™?XóöªwÝÝ\Ÿî×× m, Ñ<g²,$1ËXô©’w®hÏ ¢’Rx‡"Ä­ÝüŸˆþ‚OU^(ɺ[yùzñË,Nm7Ö;&,4ÔËKÔðI©TúËÁ_ÏùíÖ¿7˜íìé“?< éŒ5ùù÷˜{÷î{{{©MÔ—Î=jD«V¼O¶|žœœùÂóÆ:fF¹Úe°ôÚX’l½~½kýÇg‚‚ÂŽáøûËÅbfSÀ¯ûðê.}#8^±ÚŠe+_Ÿ3{Ö¥Ä?²n¦&_ûÓe7Ð×ÇGó"€) ‰ΨñBUì•4^.£°N7ºô•+ÅôF‰ái.EßU(%ÕòâbINAuz^Åß9—îTœÏ.O¼]~&§ò|~ÕXÂ¥e[ÄÀþ‡@ð½î¾Š¨þþü³3>Þ´~ñ+ËÏüq®ñüÒªE¶ÉPÛsCô­Õ3Nz6xŸ÷Ï™+'d>NÎ.»Æœ-®|Ï6nŸÈòÒKŽe”ý~¯*µ´ºœ“1b¬(*,$ÄKäɃ Zƒ =Þ³{›ÀuVÛ Àݺ=v‚ nnø(®&ºEEë7}tèÎÒ¥Œ ü¶m»=ëÊ ×’ð©ZðYƒwÅ’—¿Þ¾.êKKK¥IJJêÒå¯1¹±DàäÄwj•Ÿ—¿zÍZºfæ(õNý¯ÏügÚºõ›>|øäÉ“ ?f ÏŠœùÎ{ksïæÊe²ŒŒÌ•¯½©»’zˆÌ‚Ö<)/WPrÐVˆÃÒ›R*–?)¨ÎÊ.»”Zt$¹èPfÙ™¼Êk…’Œ'²{bªDATB”î’Â]/Õ½Òzcrù’Å;¾ÛýÃÿ­(¯€ Â×e¯,ÒtpôÈáß|µuÕ;ïA,…Å6CY†€hä£ÈšËa‹jß np«•ÃåBÔo”߯{#²¥æ”%UÉKò*’2ËÎÞ¯J©¢Š †j©vŒ(*44~D‹Ëãé¬vßþsfEjeÍzñHg¦m}ûôž8í™a£'ˆ<=W._”„®Ñ—®®ŠËå·ŸñŸi:ÛÕJdïk}5´òöRJ¥ò²²’ôtP—^½˜zJºý …Û¶å,^LŸ½Ñ*0Ð5<œQXøä8 Ôu¶n¿w×ÎÄóGÔ«_Äë7Mž4ÉݸრoîÑgÀìù1}zÓ•«Ý×4I¾tÉËC:L™þÜÈ1˜2± £ûõí37jA>ý_}ãí1£Gé¬DËGó€hUÒðë0ïȪL´ûW$òêRɃì²+©…ÇÒ‹OåW¦–ËB|žì‚½à“ÖºNc¢-šuvèÐaÏwÛOþ#bØ(Ø~ûýÌîßk9Ø·oŸ½»v|¿uûÎïšdd ;Í\rè ‰/—ÖÜy4þH,é***N897ºª\{e¸–ûpé·²nÝ>qogy‡o7ЬàrHzºAb™’›9bŒgTXhˆÎ(‘0ú†g¥§4,¬/]³äâ%+¦Lž0eÒƇk¥Ý<ìýnÜÄÉ®®îZYì@àÅ/i³ç¹\¸DRÌù!!]Ϋ¼zõNd$¡ w@¢Oll›mÛrçÍ+ýáær·Ä×·íé“°Mmšfa7O=fŽçïPtLç Är¢’ÓZI¥Ç†¶!«¨ÁKb”ÙCç…¬ do¥1rY€h6WŸ³pÉ«xã«1ºÀë„è*¨'h(AÄœ¼K”vLpu!!Ò·0$R%/kÌa-TX³±Ââ­Ÿ~>x77wÒ„º>fׯr L–»ýwOê¼hXÜË¡(ÅíÛ™ŠG8R)(#©¥Û·W>-ËÎfνR?¿6¿³e…eñ×Â,õ˜™D,8ž½£´m‚‹+ÌPéy+Ü5¬+á"„h‘åÂĵ…I,ÜãÞêÔÛY °Ð†&8E¶ ·„&Œyi7—Çyy††vODŸÊ!ªCà9HXÿ5l´W4¤C.”1¦*dú×—UuîÞ;((0þÓ8’ÁO¸´ÂŸ¾z8\N=;ÿ™¿À7!‘T(¨ü|ÕTžþSë,•MÇa ¢$ Àïįî­}ôÕfC›ª ó\P™‰ð¿9Ÿ(k—è oŒåb©²{ÊXÆ«Ó|Kûúx·i$ Ã,ÖéP Y%EÖ*[z%ꘖ!Gy\¬ñ„ûZèl6QÒþœgÞˆÑ>Ѫ;]"ȵðŒÈLKÖYƒ¾tÆ^:—ù3ò|4XŒ—Ãí¾kGZÔBÿs  ³Ð²Z^5wŠ}ö€×lÎöFÏ7h!+vó4ÆLÌÉ<¢"8ÑÅ•„'»wëÚàèúƒ{Î>, v‚ÅvmÓUƒ¥i¦4Š"k)mÇ8Þ„sˆÇãÒq¢#AD%>àó™ÒQ‡…Ù›)c³9É´Ó.—Óíûíéыڜ¿qÆFaéO’,ôõõ>zУ5,†5ØVs‚¨mÛ ‘€°û 1f¢»KTvL„»ƒ­}}Ú¶ b?P•kÐ6#ê0¹ˆ ¢ÈšL× O ¡I‘È Â³¾e+à°)&Õм új ‡ûÔÎon?I•=ÑrGÉ!ÛLï&Ù «aïSõ˜!”ѧîy>ç”>¦:öú­›kˆfs(²Ö…ß‚k3i\<âîn\X«Å£4¶84†=‚ùl§©“ô;n¸ýÇÚ`Ž¥î0cb÷\îB…"Š/€çî,­Ó0¡ÈÚB/ؼ 0ÔMíð¬ý¸ü™~l31h°Y@šÙ)Kšo* 0`¼<½øù ¹ÂÅEh»#Ç  Ú(²– =Ç9EE«¯Hcù,\ÕÖnŠ˜5ééh‚a(²MÚ3öÛ˜ cÊ~4ÅrÒPeMáç@eQd¨³Ís•$9ðÒ)¸'nðu$æÕokGÁ­Ú_úGûtÿ!-.D÷@©MÕ;’ØÃ\!Àáp|||Òo¤ÀãKâ2x þzûúÂÇ4th1A ‰VŠŽadð,à8`½wÇÐN™7o¦§)•5ë=[¶û0/ƒ5ga»€ï =E ZLHÃA‚"k ¨#×ÎA^^ÞòúïÕnÙŒ`Y„@ ¨yI}WˆV×#ƒçÎd "rôp=è,:: ÿˆÖ`@ ìgÆdÙù`.@HÀ"(²áÑ@ìPdÙù`.@HÀ"(²áÑ@ìPdÙù`.@HÀ"´ÈJÅUÕ#$€€øÅ)“' ü`œžò˜Œ@† Ü[öúÛ °5áøvÃa $€0‚€L"V—¢EöÔ™„™Ï=S^ZT]YnÄáX $€ô€9ì“Ò¢¯½Ò …Hõ«•Æß?úà]^+'>ß~hW¯‹˜h>%€Æ……:‘eL68¢ùlÖ‘@vOâ°š>ü?k¾¨P¢»Ë)IEND®B`‚lcrt-1.1.2/help/en_US/figures/lcrt-connect.png0000644000175000017500000003302011752203002016074 00000000000000‰PNG  IHDRJ]꘳qsBITÛáOà IDATx^í|Uׯ·fw“MOH%‚ôŽô¦(AJ(¯ˆ Ò{‘"(E@yDl¨¨ø¢ÔP>D)ÒH@H5 %•ôdû~g2qÉîÎn²Ifà–üfïœ{î¹ÿ»ÏÜ;õгÒï‰J-‹¼Yú+ÖADà­w––ŽVfù {ÅÚõª B(Màñ¯ÑW‹ÈÅlï=súäÅK—ûúø˜Eb³X d #@Ò›Dfs^æÍ7&½÷ßÕ?#ï±£G~óí·"‘Ä,™EÕ á‚ÀAàÃ?ªd=&MšÀHÚlº—šöæŒiŸ|¶îïÁ¹Ùl›ÍfÒ¶¹’e ;€€³>\óÑ“½z·mÛÖÙŒû³gÏ®þpͤ‰¨÷ôôbÓeþõøIM^–I$¶h[«Õ›Ä"‰X"‹K%‹L&“ÑhÔ/z½Þh oÆZjµ{…ÃBF³YÔ¦ukRW…QPö?í§.š<Ðß·çÍ%i—ôÞ¤mvëLâââ7oÚ¤P/ ¥›B!—É(]§Õ°ÿ žzªwÏž{x¨*2‚K’zOS…QH$ÌЛU±J¥dý”È»´¶™ fsbbâöí;<<<Ôj5ýU©T …‚¶P¿]TTTPPŸŸO}´-3œ/Þg`q-­V·}玣Gß¹s‡K¾¾>u"#—,ZèÚR*ìí©~1”÷ÿöÄVØ2þCÀLCcsezo:è.¯D‹¼ÿµÛ0“^Mfx „“¤ißÀîZ(…™Ó 0û rk®ø^ml•fÎ~+)9iôÈ‘õè&•Éþüóê¶;ø†šoñX…ÉÿDRwqï]vpÞ+º7O£nKʧ°›Ä ë¤temõÞ"‹¶µZ-SÉ2cLé”B ÉžN›˜CvôÞ®þmøß¦7o¾þÚ+}û0 LK‹æÍèâ¦æøaë¶}ÿ÷Sff¦ŸŸÙ<óôЇg¢¾1ƒèï´)“6où!55-,4tÜØÑ”Ñþ&r»cç®Ý{÷¥§gÐõÑþýúyzpqÛ2ËO~‰Ý½;)9ÙÛËû…çŸ}ªw4[ mêÓ ýÝ»ƒµÄß  µøÌ–Õì$éýûöÒ¦Þ}ú²å-%)õÞe”XrŒ³—Zh˜@ûR2i˜”¬Ñhh@^ø÷B_Yy“ýŠÇæX\LàØñ“ÔÝ»w³ê÷‡·~óíwݺtþáû];w¦õ~ÜÆZ²ÍñbšU+gÏxƒ4¹zÍGœ›¶nß±îËõM›4Þ²é»^½ž\ÿÍ·ÛvìdsíŠÝ½êÃ5þþþë¿\·fõ·þJ¤ô=»¶³Ñ }¬‰D'0bô]æ³ïïc¶EÛ”XÞ’o—"Û:ÖåMÃmÒ-u×l‡@Ų£t¶Ç&USfÚ$•J™¼•€©£²³³ ²··Õ {ÿ­ 4ÀM.<ˆ9Þ·Ÿ9kJ Û®/¾ð+i׎¹Ð’’’ʹi÷ž}d9ô™!nnncúÑúî={Ù\Ûw#_NÁxzªG|½´7«á!ÑYLÇ[Ü{—ÿìÙõ¯‘}-oC)”í½K·ÎßgÎ ögÁþ5ͤ^:f9;Nc†âbä3Â&Ëby3Çä¤þÒÙ±^y¤¥ŒÌÌû™þþ~å½Ý¿ŸE‰žîîDÞK­¦u²-Ý ¾ÞÞô•ÝyS{sn¢A>95f¼¥,¥³¹22˜Mþ~V[Ùjbù€‘bŸ‰“Îtéuûf´Õ– avÿVâ?÷œ—öK?Ò°»{ÉÕlZg…M6ì: ›l˜,bæb8gL0p–@çŽvíÙûë±ãƒ2s™ÅÇLJ™››K+99¹´ÕßÏÊ^ l6ÛßüýSÓÒ¾ýòsrXÆŠÝ”š–dÛ¶TACž+íš¾îøq³ƒ…Ù”w³fMgÏšIf;lúKgÐé±TœO/^h¬Q;¢äô‹ƒÂÌ1Ï?;ôÂÅ‹ßmÚìcl:Pºvýúö±o½9‹ôìÑã‡mÛ¶ïÚýÒóÏnßÅ ž£{=á˜cëV1ýû~ñÕ×ß|÷¿¯½F;óK—¯ÐÎåysÉšÆêŸ¹þ‹¯ÖO7†ºˆ-?n{ýÕ—)öþt6&%558²·NÕùÔ²b4äYÖÉŽ¿§ök±Â™¯œ‹uyK%âˆððÚa¡t-ÎÒuëô†¼¼L`: öÀ-kœœ6ððpé’±{öìû¿u_}M;S/OÏ:u"YGÏ?û ]¸<üëѱ»ý|}_xîÙ!ƒ™æ^ôë«ps£²^>BîæÖ¸QÃA1ýYoýûö¡Ãx:©þúèq^Þ^/<ûLI C‡lþáÇQã&Ò×][·T¸hdü‡@Yu—lÙ±µDÌ´2èébÁÛ°,SÜ­sGº)5+í®ÊÌ0\*+,ÒäæäÐ1¡B.¥¼{lpŠÀÇŸ~>eÊmQS¹J+T«V­7f›˜v7iäø©Üχ‘¶^jo_wu‘V§ÕRÒ2é&ª ÇŒ VPYÉO9§Üò–È ¥Šúkz ¥aƒ†t:]oÐݼ•TÎ@*I 2ú¶RôßÇÞߟTÆ„9….•Ñ…ºF&©D&g–¤Œäºu#èhÍŠK$8O >>¾u«VÎç+ÉϬý[ÈÖO­ýS†X¬-*¢SåÌ¥1‰”N•Ó lzƒ‘2)~R €€ ÐÃòÙáC‡+㋜”ÉÎ!oR°\Jwªëè™æüšHä¡y„‡D†‡T&ä(C ¼8+ˆûØ»òeÀ€@€¼k; ê P28go)¯ŽQ€@u@ï]]¤QT;ë§Ö<}ª= PqyYå3[—·UÓò™‘ Àgœó¹uTŠä])|È |&yó¹uTŠä])|È |&yó¹uTŠä])|È |&PÃò¾xæ8®±óù÷ØMÀúuoGªTP$ÉÕHô³LjP+Mj%ó‚dG2ºÐ&'§0ùv†ŸŸghˆ¯ ÝVÞ½xR*É’îŠ5É}¦Èl0K”fyYn”„Mž"f®e, Pµ*"o­¡àZöO7Ò3r =5ùíÒVž c°gAóH“§ª:~µyùE×o¤*TîáᵺöhüØ9’wNnaú¥’¬àG_¦=ƒØè}™YywÓk5Š’ºýC#;ùž®°È¿^„Tî4"©$ÛM'N:fκ%2JEb7æaZšNYFÏÖdÁMŒu&šNˆ™’ T§»ùÚôs÷¿H4üdvWëŒíU¦°P¯6J¹\kPœºñgãÐÜp¿¨ª W§3Äÿq»n½°ÇŸèh)EªRýù·Zu¶v»©vÎ ë²ÔÁ R2¿úŸüN²èÅçBº´cs妤gŸ:«¿ŸcÒhk5}DR<¹šƒ uÚJÃ/Æ? ¤bïfU-±œÞ$Ko¼1ˆ•¾"M–áîiiá.eD¾ÆÔÁl.™¨ÕAç0§8ñÃ%¿ZC~üýïn÷H¤]Q¨—î•Î ê‰iô‚EꙤJYjQ‚[¶´–O§‚pÐøÚõ©›*ºwÇâiVØLÌ{ؽ÷/lÖ-(=¨“.e¯B¾ÙÝ£›ƒóî¥ßùä«Ð³Çüê„%ÿòó=™<¸}Ëü”Œ¬c¿…+Åʆµ¯Ÿ¿”&ÕjÚ€:^Ç|šÜdWÍ©ÉzS#qƒÇEêP³L-’*è94e›Dd’JDf¯š[;U>Wä>‘:}•€r,TX=øœ“wrþïIúŸÌ“Ñà%-x²c½:9ù²{9þ41•Vï§L®Ü%3÷ª¿±6;K‘ ù9w³Í£Í|}½Š§R*yTÁ{I«Z7ëš‘•üäMóÝ|ßÅ¢«š QŒ#âFƒñæÖ=þ{wú‡ûÉÝdu•¦;gO'æåËòrÃä__±›ª^Kgÿpóóö«êH]ÄfØ”kTF¢zJ¼Âþy[3„”Ä-–ÊL~Íõ:£BtTlÎwÄ'l@ Â=Fe H*<ª•dÑübڜƒ—Š´êKwÕZ“‡Y$ך"nf›Rïgz«åäçU8 «ã.$vêÚÖËÛÓh™‰Îi6dQzü¹û„5 L7éþ$>¼&1éöÉû/+‚š[uR&Q*“´m¡mÚ¢Pg4ë´nq¨Ôè~!.¨0ÛO­è22î§ÝWF„¨|½qÈØ˜õ"Í]©ŸJìÉ솊ãd&[eb¦ñ3ƒ£È`KüeZ‘æ¾£na"à\ï};ëŽFîe6) sB¼üEƒL&—‘Òr‹DnÒ ÷UžäB€¼ƒF££É-+õL^jEa¡N.g^ÌÊŒÊÅ¢Ì3§ÄßvŠP›ód·nŽ_Xÿé7Ÿvz)™9·YÂ:µIUL¸÷ÕW²Ü4Ü<¥‡Gý“>_9EŸžyÏ +ìÚ=¤{g^+åÿ%×ǹ«%EÒ&“ŸÉ¤d¦q*ž›†è&SŽÔ”¨2’æþ®—‰œÃïH`ÿpî÷•}·Ï}‡\ROd2êÔ&O¥N"a$Gs–P¿¤Õ©ƒ<} ™½‹' ª|òô…è¾]t4{íM.]0¯ëäÛbxRÌ¢”ÑM’ú¬qoТ]óv4ÞþëVbÝ–þŽ·pP›féâ×26n’¦¦‰´fTPX`ÈÉIÓˆ =ܳ‹3Ú&tªL!ÎNp+J‘ºŸ0©šda&‘Z,–KD:±1G¬»!+8/Ñ$™ ³7Ϋ9ÞP°¬çäí«ˆJɹ)šŠEž7SS›×É©í¯Ê+’È¥bƒ‰:¨†~*Ÿ?R7=âѵ"±ØÍÓºeísq7š4‰R(D§~ZÓµvŸSÁÑÊ÷Æ\{iƒTb ”IŒ:“‰¦Q±ëÆÊFÏÀ€l‘Xwû®$CÎl¦á´N¯«TnT˜3‹Yä¦W>&ÕÄKŠîJòîŠ (Ôj‰‡§H,µ"C>½s–¹NCte'ƒÜ¡ƒgʇ-ü‹€sò®SK|C»Nîû© í½´çO^ÈèÞV¢÷õÍ×Hr³»LqëÖÝŒ¢ŒG}:åTS(•n¹™wL¦¨³gnÖ‹ž~eéSÆãM?ÞU+)“®(útº‚Â"iñàÝñEwû^þšO”‡!êÝäb:¯@§Á ïÂôܵk³$¿^=÷F–zE;‘Ï$·œoD)g Fy¨F"b±K& 0I<ôÝuêL²p§<Ü%àœ¼ûÝ4ÒG¤žÇвŽ^:=çf‹¨<_÷´,sŸ©¦‚ôð'D†*™3´mëºgÏ$(•ª„k)žóõRåU*O“Ñœ›«óóu3 Eb'&×ÜJÌZµV¶}«\b6*F9É[&¢saz½D§W¥žÉZ²”¦pð{¢»Ô­¸cwdKIáfÃ5iö³W}s@QœO; ‘Xa–z™dazU7£¢¥YŒ‘¹#4aS)ÎÉ»–wHÛüá» eçÝŽfÞtîn“„{y2w滙̪ö‘÷ò³Ò¯^»Ñªe3¥“#[‡êaÈ‹ªß8((˜ÆÐ4½xN6s,Μ“6›I›^Þ 'fN1›söþœ·i“Ýp"Ë´:yT”|ÀÓÅ‹ú_2“—ÓqxÂ…´Ï¾òhÞÔ=œJtt‘æý!KÚl¹êŽÔ×zTl* ]†H"7‹<̵Hìà%tG‹ƒØ"àÜ…1:Ü4¬m¿ðÉÞº6b·x7õï4µ`¡Î›îNU»ë£ÛdîÙ0ª^ÝÔ´ô„KW4§ƒmEiIoÕ¢NÂÅ+&ºGÄhf&7¥R‰§—’f>»s'?%¥À‰‰‰é~˜Ç»¨»t.‰óMfCH¨rÌÅä ÊiSÄ;ˆÄtqOïç08FàÈuô’ÅÚdyâZQám“_g“'³ÄÏ$«m’Gš¤¡f©7´ÍÙÄ0p!çzo*˜.ò4¯Ý"´pÞ­ì3ÉÆÜLënRs¨¿¸n°82ØÃM.óör7%ݦKA­[ºþì‘A›ëá¡ÌË+òòö …'&¦¥Ý½Oãi©„¹´,i§£lÔ pÑ‚û i®\‘Ž£éÛ[l4Š<"š:IRP ½ùWÀìYÞC‰•Žž`£sãn÷ÿ')8g’ø#žÉ=– àrNË›" ݪ#éÓ:È@X¼\&µL„ “Éš6n(“Q·êÜÐÀÁº5n|ýú-Ma¡\ª™ôÌãbÍTjµoî“3˜L¡Á†ÉóÎ_¸Zxê7^GQ)•>bÈ£¦{g7ºÊo29ø0œÌð§›ô¼8ÈW#`öié``UD "ò¶„"·ñ4ÍܬIã*Š˜ºnUAø#A•÷OJvS*õ xÕ7åäzhŠL´»¢ç?d2ψO//…J%•ÉŸÂÅ( 3È[‰=ï½cDR‡ÏÆU¾&ðÖTJÞÖVGZx¸7®Ø ˆ:|÷â…l"ìØ9¼É$ +òå°9 A j TÉøÙñ›=ÚS&8Ž – à–·S±Â@À)·S¸` B"y ©µ+8Eòv ŒA@H o!µb§@ÞNá‚1‰ä-¤ÖB¬ àë·µÐä!Ny1€@Í [HÊ`]Þ·n^+oŠj 3ôU¶”¢¢¢ ñqéi©&“ÑV¹ô4D­ à-[[5°.o26n¶Õ H¨:>^fqwö÷ˆÈzOö‰‘HèÌÓô^z¿»Æ¾éÀh4ü™p!îÜ™N]¬¼ÞÇÞU×Rð •"p?3£qó–ôDõÞônš]€Ä¬Ójtš"úh‹ µEz¶aÓæ™ééVK‚¼­bA"Ô<=‰L/ÿ³¿˜ÍÔ·Ó N¬ZAÞV± ÷ƒÐЍÃCB€Ž½ÓSîXfØã¬5ä͉ À ¤êk—âoþùÇ­k *\Àò ãuUO€ô|5!.73#8<2/çþ­ë—QxÕÊ;//oÁ‚;vŒŒŒlÒ¤ÉðáÃ;æ*wîÜq•+øž¸–Ÿ—“Õ¤M‡È¨FM[w,ÊÏM¼~…3f›×½)'I1&&ƾ‹ØØØ®]mN94fÌö–-[¨§ÍÎÎ>qâĪU«ìØÛ/ [Aà¡%àëYOåá©×jd2·†ÍÍÍæžaÖ^ïM:$õúûûÓ߬/–tûZ=~üøÜ¹s#""è­fä‡v?þø#ÛBôŠò¥K—¶hÑ"**jìØ±ùù%“]}úµk×¶mÛvîÜ9;‰–º-_¾<%%…¢:zô(Øß{ï=Ë&/ìܹóòåË}úô¡HñƉ  ò¦j”Q¸ãÚ¦¼_~ùexx8u­tàݾ}{:ÏÉÉaÑlÚ´iñâÅ!!!jµzΜ9ûöícÓIêiii™™™Ô÷®X±ÂN¢ñŽ;.\¸hÑ"újÙD„àà`z*&\¼xÑo–¼X¡à–7ÕТðeË–9Øo³\¼¼¼Þ|óMZ߸qƒFÚ………£Gf7QÛ½{wÒ0-­ZµÊÈÈ`Ó×­[wäÈ‘^½zuîÜùÀv-è)/ÿÙ¯´bqE)>>>lºJ¥2Jf·Z„ÅV@€?Ì&ë·£•ŽPSXr`[>l{§ÖJ[³ §ƒgûçÒÊÀ¦Ð}³õë×§>¶qã’é jÕªE®¨k-“…¤NÃ~:éèÐ!¥ÇÅÅ‘ÕDKFê·“““ëÔ©C)IIIto+ 6ݾ7ûy±ª“Àw_}Z™â•7•A §#[ö¥ÿ9dÈW^y….Œùùù¥¦¦~òÉ'mÛ¶eó6Œí4>§Þûúõë«W¯¦­´iܸqS¦L©[·.)ÜÒßZM´Ä0`À€ùóç¯\¹’RheàÀöóïÍ~^lj#`0臽>Ž}2Œ}bŒ£§Jèá±RÿÌù9÷÷ìÞe5*'äMùÒ6ÙO:uýúõ³fÍ¢ãÔ]÷èÑãÓOKöF&LX»víСCi”N;QcãëÝ»÷ˆ#éŒ:~³“h©ÏìÙ³éü|—.Ìãìýû÷§â¬VÕ’hµûY°jŠ="ÆÜÁRüŸþÒWfýï…™[Úö"îÖ¹ã¯ÇOfg¤”¶‰Ýò5ž÷¶ [@ ªÐóÞ–×9lûaõÞ:m‘}yÓVê½ÿóÌó¥cJ½ý×ÈñS:µVUU_ª$yW%]ø%y×(~UIò®Jºð 5Jò®Qü(ª’ä]•táj”€ÍëÞE¿•<€Q£á¡pxØø¹°Â6å­ô}Ä…ÅÀ€€c23sÈʦ¼Kn‚sÈ Œ@øHòæc« &p Ûòff:Á `vΜ“¾kæþøBmñæZ·.Œ®@ WîMl÷ÞÅS–ÕÜâÚÒ-Þ\ë¶æð dp€€ÞÛÜŸIøã‹¾J£ÆB%`»÷¦ÇKkpqméo.që'5ÈE?4lË›´:ü5ûc_¦X<Þdá„h…°ÁhZòÙ/[\¤ Q'ë6ú™”˜x7ëíµNÄ'ê Æ.­ë|0+&À×£L%6Äž[»ñDJF^ú+gÆ4­D¶J9xúú’ÏÞHÎ ðœôR×úµ ïɼΕý{ûà\B `€ÁyÍœWûûz;Sú{_&)ýv̯ߎ¹“šóþW‡Ù3+¿þõê_û?ýÔÆ )é¹lâkom1¤ýùmSèUÛoá'?ÿ}º‚êÏÖEt2þ¯k^¾;ý©® g­Ü˦Û*eʲØi¯v»ºwÆÖÕÃâ.ß&ãÛç/ú[¼Rƒ|PôLÀž\Ýf³÷6™JÞ+ê¬G—س¥ï8˜°eåó~Þ òùöø'ž{cÓœQ=hý‡ý6­x.È_EëóÆ<ÆÿüÅp¶h7¹tÆð®_üÌRËÊâI½|<•d6ê™¶«7³_ŠÒMšš‘›ž•à¹|ZïòÞ\RS8ª#`SÞŽS .LéÙ…Á^l$!^Y…ìzZV}-áÙ„;ï®û5ázj¡FOyéݬ¥ JêâãI{ f]¥ÑŸ]·UÊgo\ýÝɾ=î¥V,ÛóÉNQã¨Y25Ø((Z`ìÈ»ækàãžœš['”yWyÒ½w6¦Z¾ôµ^¸oéÇ.Ú5oÌ㵫§v—çêšüÐÁ Ø*¥eïý‡^duø÷¿f¬Øw¦½³ ‰€ícïâ—3Ö̇Ó£áÛkÉÈ* ­ x¬!›>$ºÉü5?ßKÏÍÍ×,üä ›¨Ñr©B.Iº—=ûƒýL#°ñ—_ùwº­R&,‰¥#|ƒÁD¯’gºúâ\^ŠI™5ƒ¥¦šåV'—î=ìôÞ5;eJŸ9¼ë¼~éþÊ´Þ¯{ƒ¯ÑT¤LúÔ—;/ùüHïQßP×:yXg6ñýé½}zxôÂ]ÁþêQÏ<{øÏòƒóR),E{¥DwŠýÎÎÄ»Ùõjû­žÝ—Í;zh»þã¿+(Ò%˜îÒ†€3p=›/B~¡‡Üõ¥Á#€€]è]ø"d›½7óÎt, B&`SÞÌá%!°}jMȵBì DÀvïÁ9~ p¶åÁ¹À›ჀMyë‹\ùJ7€pŒ@µ¼)UÕþ=Ç¢€€ëœYæ:_"œZs!L¸~€¼ùÕˆ\Hòv!L¸~€¼ùÕˆ\H@0ò sªÚ{g3:U ŒA€Ï#o>CDl ÀO7?ÛQ€ @Þ.€ ÀO|”÷Áƒ{öìÙ¡C‡7ZÀmذR(=:::!!M7K—.mÑ¢ETTÔØ±cóóóù Q@õࣼ'Ož<}úôk×®mÛ¶íܹs('NœØ¹sçåË—ûôé3sæL6}Íš5.\Ø¿ÿùóç•Jå’%̫ȱ€>Ê›Tš–––™™I'½W¬Xai'ꥃƒƒÝÝÝÇŒsñâE6}Ó¦M‹/ Q«ÕsæÌÙ·oÚ@€%ÀGy¯[·îÈ‘#½zõêܹó,Måãü2••Je0”¼†=%%¥{÷î´# ¥U«VhZ–€Í'Æj©ô믿¦×$:tˆFéqqqv‚©U«Vll,õêvl° N|ì½ÇwõêUêŸIá–^ÚVó 6lÆŒ‰‰‰dyåÊ:»fËé ð°àcïÝ»wï#Fbéd89³ß$&LX»víСCi”^¿~}:-gß[Aàá!ÀGy,^Ê´Á;wJ§X¾J$’‰Å‹-û2ž¦EMA€ƒs´ €€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á°Ra¼IDAT' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG7[1€K@Þ.Á' ÀG2>…˜@Êøaã·¥Óbþ§œIÙÈ»,|~xæ…—Ef³N«¡¿ìÂ'眈`B%€Þ[¨-‡¸6œ?l-Žú>D08ˆUNœs"‚ð‚ç¼hUAƒóª  Ÿ T¸0&Ô–CÜ ÀIòæD*È[¨-‡¸A€“ä͉ T·P[qƒ'È› @@¨ o¡¶âN7'"€€P @ÞBm9Ä œ oND0¡€¼…Úrˆ8 @Þœˆ`B%y µå7p€¼9Á„JòjË!nà$ys"‚•ä-Ô–CÜ ÀIòæD*È[¨-‡¸A€“ä͉ T·P[qƒ'È› @@¨ o¡¶âN7'"€€P @ÞBm9Ä œ oND0¡€¼…Úrˆ8 @Þœˆ`B%y µå7p€¼9Á„JòjË!nà$ys"‚•ä-Ô–CÜ ÀIòæD*È[¨-‡¸A€“ä͉ T·P[qƒ'È› @@¨ o¡¶âN7'"€€P @ÞBm9Ä œ oND0¡€¼…Úrˆ8 @Þœˆ`B%y µå7p€¼9Á„JòjË!nà$ys"‚•ä-Ô–CÜ ÀIòæD*È[¨-‡¸A€“ä͉ T·P[qƒ'È› @@¨ o¡¶âN7'"€€P @ÞBm9Ä œ oND0¡€¼…Úrˆ8 @Þœˆ`B%y µå7p€¼9Á„JòjË!nà$ys"‚•ä-Ô–CÜ ÀIòæD*È[¨-‡¸A€“ä͉ T·P[qƒ'È› @@¨ o¡¶âN7'"€€P @ÞBm9Ä œ oND0¡€¼…Úrˆ8 @Þœˆ`B%y µå7p€¼9Á„JòjË!nà$ys"‚•ä-Ô–CÜ ÀIòæD*È[¨-‡¸A€“ä͉ T·P[qƒ'È› @@¨ o¡¶âN7'"€€P @ÞBm9Ä œdœ0¨An ¥ÙLå3ÿEf³LîF«¥þ™ósîÛ ò¶Eé Pà å¦oÖ9„L&·jy[Å‚D¨yF£qØëãDb¶ç.îÁÍf£ÁÀ®cÓÌ[þ÷µÕp!o«Xü ™M&FÇŒ”Í´¦Ójدfæ³(Tî¶bÅ©5[d‚'y ¾ Q°Eò¶Eé À#©wõz% ƒAŸ•‘Æä͉ Pó2Óî?}T§ÓS(¤í?ÿ8““móz˜%\œZ«ù–C ÀI A³6W.üê¯`Vfš§·_dTCÎ\è½9Ájž€X,nÔâQ/¿”Û‰¤í:õS gXè½9ÁxA€ôܰy[µ—`°D,¡ cœaAÞœˆ`|!@ ¯þ÷epî¨08çf (È[  ‡°|‰Äd4rÔS,6™Œ4V·jf=Õª)Aª“€@À¥?âI½v %ý'œó ´jcóØ{ÃÇˬf@"€@õhݦý…óçΟ;cGáÔÃ× nݦլË;fè«V­‘ Pm”*eûŽ+Sç•¡‡¼ Àk7¯›Á@e@Þ•¡‡¼ ÀkÖ½Ùs²³‰ÝÛÇ׳Ò6ui|ëÚegs9kïx)Ž[:ìA  Ø“7…u`×÷öƒë5àYû|Ø õò¡Cõà74bÚÛ¶Âúb¥ÍM”%//ïƒÕøù—”ÔT÷öíÚ½2ìÅ.;ÙòVuéÕ0R¨Šà+¶WªX®ªˆ>kœ·¼+âÄÉÓjGÔÞøÝס!!Ù99'O^³ö“‘w…«€Œ hUxjíäéÓoÎ|£vx¸T*õ÷óëß·Ïæÿ}kµqÓ÷]{¢A“ý ¾tù ›®ÓéÞœ;¿yëvô™óÖ|úJé=ÑûÚµë¬ÁÖm;ØJ¡ô2èµ:ÝŒYs7oݾS·ÏÖ}iÙJ»ž”œW™P-_i…*Ò®cWªÔÌÙs ]øú¨By·mÓföÜùqqñ¤ò¤Nþmë÷›ÎŸ=Ý;º)™5X±räýüì»{÷Þ?XMéݺuùí÷3´’’’º`áâ‚‚Z?ýÛïÝ»w-ãöƒUfÞ¿ôðÏ{b·Ÿ8yª|¡¯;üÕ—Ïývâ÷SÇ¢êÕ[ünÙ;ó¬@~(’¼¼ücG~Ù·g癳çÊ{¦[yi“ÕÊ–v2íYS'Oü#þÌ–ßÅÇ_ MìýµYØ þüù »wn»yõRù\VCe‰*U‡p¥gd¬Z½ÆŽ%6 ”@ÊûÓµkÂÂBgÍ×¢Mû.=z.\¼4''ׂiáÛóƒ‚j©TªQ#†'\*9‹¾3vÏü·Þ ð÷ ˜?oîÎØÝdߣ[W3­lß¹K©PÄîÙKë”Bée ïØkɾ`ÞÜòMr`ßîÎ:* OOÏ™oL=vìD«Í®Ý{Þš3‹Æ ô¡•òž)ÅV^Údµ²¥(”Šô´ô¬ûY¡¡!ËÞ]dÕ¿àÙØ¬æ²“Ȳ"Ú´BèìXb“@ T¡¼½¼ï,Z2 _Ö¾{·®tœGƒó>üÀ>¾Ó§ÒQ7§OpPÐÓ¦°ö=ºw£zÿ~ŒÚé/${”;¯F›¦OìííÕ¥{Ï>ývìо|YËß]B¿é¦-Ú<ÿÒ+mÛ¶.o`+òLƒˆÎÝïÝ'¦Më–r¹•Ûlå-_Jù”Þ½ž3~bÓ–m–¾·båßc Fx}Àà!–sÝœÁ[͵tÉ¢ŸüLW"ž~öù2‡3¶móTß]{<áëë3mʤòQ!EèÄÝ:wüõøÉ쌔ò5¡›R¹k­7¥–/K@)7oÞzõõQ¿:  ˜Ë‡J{ ÞíS¾.H)O õö_#ÇO席¥Â÷œ–¹ÜZºxþª-Y:iÂxš)bѻˢ{=Q(R@€oìÉ»2ݲ@5l§yÂÃÃzözJ£Õ>ùDO eí€Â&þ°'oþDɇH^{åeúð!—Äðàí]‚åsR…§Ö0R¨Žä-¸&CÀ à(ÈÛQR°Á€¼×d%y;J v 8·àš ƒ€£ oGIÁGò\“!`p”nkq”ìL&“V£190o;¢uI 4÷¥B©¤™´¬z«X,‰·}><ÚJÏŠÞ½{çúÕËôT*=6ʣȪ,±XâëçûHƒÆ¡aáôÖ€2å'xÈ›_ è‰Ú›×þŒˆ¬÷TLk©ô¡h8£ÑpþÜÍë×|ýüéÜ2- œ?͇âWÂIA4¥÷=E÷l4è#ˆ˜+$=!þœÉd¥¾Â‰òæDÄ#“Ó[¥=bªâP¨¾vŽDÄ>~ÈÛ>þm5‹DôyxÎʈíäm› /·ÿ˜9ò¼ ½BAqV@ìpµ~½ÁNl ôÞBi)KœÔysvi•ªTí:QÉݨ” Wfæ¬l•qem\à‹È?e@Þ.à]í.œhàŠÆV ET44+ù„­• TQçU¶ ÝmºàsýÆÍQcÆ7oõhTƒ&4‘#½”žuK¡»Ä¿Kœ8ÂÑ©‚lÕÚ)'®2®]§¾³®b±¼ÂÅcg6ìoÝükè³/tíÚåÈÁ â½½ 6vO‰¬y¥oŠßþb£‚VwQöj팫Î+’X1Ôö”Ú y;ŒŠ/†®ù®\µzÜØÑÃ^|žæ0P(ä­[·üôcš$”u^ò£Ó괳ޜӤy+úÌžC“ÓL¯ŒÁá#GžŒîÕ q§®=6mþžM¤;Ì–-¿õ£í4j:aÒä‚‚|× ì£wˆZÛªlDÝúßmÜH5¥úöé“pé[/[é¶8Ð+´.^Òªm»f-Û|¾î rB¨bô·xʼnZØÇQz+äí8«ÊòÄÉ“11ýìWéý+iÒå_ýL=cÚdZ§YÚîÝ»›šz&ŠZüÎ|Öxóæ-ë¿üÔßׇ ¦O™ÔÐÓ æ½Y™Ù¼2¹›}'N±Sk[•¥Òi‚dofBÛ᯼ôášµhVÓmqøqëö _Áòysæt‹[M`«Öœ@Jg„¼ma|ÀÓiNbú­Ø©'ÍëV»vɄʴÂÎÇLök×|ðÑÇŸ}¸æcµ§zÞœY=ŒSÓÒ¢û °x+ÿ€—‚ªm“ZÛª,ÅÆj›VJOVm+ÝšKÓ³Úê yWjÄ£ÑÿÊ.:vØ»oÿ+Ã^°î¨¸šøvòíÈÈZONNöóóe‹nѬéçHÏcþzôج¹óO=D4÷ãßTz¦qWÄÉ“Ú_œb§Ö¶*Ë^¦"–¯ÖÒmq tbX·N²µq–'RàØ»,mž/¾‡ÃŸIãÇ|ºî‹M[~ÈÊɦ³Jñ.ŒŸ<õÌüž‹‹è×ç©EK—³ó1/\²¼ß>lúäé3¯Ý¸¡3èMf³Ñhb_xî™9óÞNLJÒô^½J6.‰“œØo§J±Sk[•µÐ(ÇVº-ƒ X¸xÙ½Ô”œ¼ÜÅKßc½yyzÞ¸uË©*p) ½·ý/·rüàйNdä†õ_¬\õáû+VÑìß59üÕ¤T\Äô)ß^ôî½™3p}zGO›<5èõÄãã'NMJ¾]·Nä—/aG.úrý˯LKO§>jܘ‘\Ât(N‡Œb§Ö¶*ËPƿ嫵t[&޳|ÅʘÏШgüØQ¬ÏÃ_<äùÂÂÂk—Î;TS'ìMì¤+˜W-üüüŸöÅ>7lxA^vÕ–Ä'ïž>›7|ݧŸZíU&.±ÓPMl'?6Õ ê1î¬j&B×–ÊYY± ƒsÛlxº?ç2  6©·M4üÜÀü–=×ÊÏš8•C7€Ø€ yÛÃÛdôUeš@lÿV!oÛlxº…¹dÅÓЪ$,ÎʈMî·M4<Ü@ïý¦{0é}ßÉøœn}cê+¶yw€Øÿ•Úg?¶V?š©# àÒçM&cõ—^#%RM©¾þ‰•~@8Å 5Î<0¨*•ª^ýWÿ¼|ùR‚w×HlUT(3K‰¯ß# QÝË å™”I¼9ñÅ€Fª!¡a~~þ4‰_bªú8h>zÃê*‰òæDÄ#ŽªÊÍÅãøª=±ÇÞöù`+˜ä-àÆCè `ŸämŸ¶‚€€ @Þn<„ö @Þöù`+˜#o¦PÀ5@è 6HvíÜÞ¿_÷rÏÊÛ°G2€ß d¦Þ™8}I»dpnÐ?D3Âó½qT‚€¾Ô{²yoùþû¡Cþ“—YTW ·È  PèßÎÍΜ‘@€èx»tÿ¢¬û²>IEND®B`‚lcrt-1.1.2/help/en_US/figures/lcrt-global-options.png0000644000175000017500000010161011752203002017375 00000000000000‰PNG  IHDRÌ­Ó.sBITÛáOà IDATx^ì\MÀé#¤KRÅND°(Q,0>?»;QL”0PìîÖÏn°;AÄÀF‘–îï‹ëyw‚¼ûîwßì›7oÞüw}ÌÎÎÎH&ÇÇJð|&pä=Ä4@H ”ŠÀ¶cWxõeȃ™Ãºd殞Ò]IANRJ¶TFQ $€Š ó2²r¡«ª('µæ¿KI¢' Ò%ãÕjÈdý(ÌN_ä…@¥" )Ñ’åHÉ«¥|‹\p&ŠèÒrƒ,DØÓ{@`-à†×ÔREe$€À_C`×µÈ2¶elg° £¬ó%jÍåog¹Ã™¹…E9IaËÈ‹#$Pu ì¹þ±«K_³FµDnBØëÏ;Οm_'?%VAN B+7àöp°=± wnFrnziZÚÈR±I7)I)II øÁ·¨H¢¨°°°   ·ø“——WŸ_P¯”&õí±ÈnaA$€@e ®Y=ÔˆË";Ó¬Aç ÅA,Àïâžú`¹=ق¬¤¯Cš–UÕ•rìèQŽ|ñ‡#/ÇáÈÊÈ@°ÍÍÉÉÊÌÌ þËÈèÒÅÉBSU–§¬ÈþaÁªB ñ´«àê« ì ©F5"rAª)IÅÔÂâfU6EEÐmÌÉÍÙ1DÖb#`AVZ"3§¸'›–• ýÓ¼œL^»……EŸ?>{öœ’’R5àWAAÃá€ôa³²²222ÒÓÓá×¼P]†Dv VBÒòÊÚm©Ôµ’UÑ÷ò3“s?}:ãÎëêØýŸ·5è¼jT;"¤šI³×á÷ÅZ{¾\ñÖB[5 « èÉæåóÙ—Ñ©/£¸OªúY“ 9q? ÒMU›©ò¶Šƒ2B,·'K ðª‚^Q¡$åüü|€À*%%j b¬ ò"‰’îqUA‰~²QT«;h«´¢ºß®¥'Ï_JÍ,hÖÒ|ÀÛ¯ÅOî¨Á[öPPÊÀÖÊìÖ WH5ª‘ RM’ £· Ò'Òá«ì&‰)‹{Lµ ¼Š€°GíɆLò9ñZäÕ¯é?í !q:è )©§«ÈÛX(Fˆá÷d‹S…Dÿ–Ô† ^"ÂæääHJJB„•‘)V†îtñ‚/(@èòç­ÓUŽ€¾å95ýk;z²‘ž¼±ŠLalèŸÇß~äß|“iS{CC~ò ‹j¶¬ÝÒEVY;/=!>Ìï[Ða½'ºôè5nüm=£¼Œ¤¸GÇ¿?9Ifé´îgd?”ó2SRßÝÿrsKAN.þKKRŠ©:s÷»PöSÀRPà¨ðVGdAî½°·ð²Ü~Axo¶„{?sH³´¢Äl ¯žå09U½œ¤è¨+kӢ ”²qK» Úu%$%ӣáu?>>âó«ˆ{Ðuä. Ѭóú4‚ô²3¯ ­2×ÈÏáS"Aôd!ôþv¿ÏmPħI¡¯ !ÈJKKC‚AÒÅñÂ,T¡kI€«ªõ¬A#ðâåÚšrêJ²- dôU¤’³ŠÞÇçÃãO¾KE·í ƒã‚¬Z³¾ß(×þCƽ‹Ë‘{L ž—lì:/™9òGfÞ(·…¶]ß~ËTþìOdIJËí›ß÷àõ7NÝœç.ðý”T˜yw…¼ÌÏ’ÅJ|Õé[ a¯î³Bë¾cî¼Ëä­îÑR«6÷ÁšµY¢êµ}µ‰Ä½wiØŠ—y .{ LQ3›»d£ŠÝì•}êjËÕv^ §¬µÖ{êÕëw4m>z̸—÷î4ª)GXÆß*G€Û“¥Ù®-µg»Ô_uþ4‡ ¯¡³EMjD.îÉ–ÄC"0Ò÷d!jJJJCוŒ°Ði%† ȱÈ‚°[d±'[å.'6‡e•Ô ;%9©~mù¦ºR†ª–Þˆ·ãëZj›õ„,ßu;U¤ó>Ü=&1dd#›>+Žîîk¦@Ù¼nynj|+c…g6Ùvrld7h³Û1çæòugßË×Yf†²Éð¢oýV¶S—yŒ±ªÁëœHÕ}£­Ž0k]Ÿ;¾q&<»ÍÏj ½hŠ€VìÞ¶A*'ɬ·£ª«g¸ïAÚÔŽªÒEK{ùþ«‰¶'%bû׸Ô\)¿ýàm¦+3np½Q|9¶Ðtën².ð×Z8ìf¦CÕ„â„¢™¿z²Y9ùi™¿=PSÈÍ—’’‡‡]C‰P (¿ð!Â+Y©œ¼‚Ìß‹WfŽè›@9i‰òªºZÚÚ²Òé*ri™—ÝÍ–‡@Á9g“¼œ~„•Sæv S’ë×VP“àÎÔÖ©ùìKNc]«âšâbcÍ”ä$ê+ÆÁ¡nMýÇŸ³ëkK735«ï8yÙœ†²¸° KEU-*9/4:϶¸ ñá»2E®Î’ÇfGîlñß>ÍÆk]§F iî?ø'™W_ÿòÖ:ŽSö9ÿ®’£_¿ÜüäÉ£wßó¸÷~ø©zrò Ó³ Òò©®ƒœWȤ¦–]FÈ‹f@)nO. òæ®ÄPa!DREÅ’1]Há•«\œ†ðÊ8 IR+à/Nõ%U‡À÷7Œ­vuéqí?Ž wž4ïçf¤„ÏqNZDd5uM©ìúFÜÇbñß¿åæƦ•(éêéqdShJhh×QÜ·˜œüÂ/)ƒ-ç(k­ò˜xõÆÂ"ékAÏຂg³I¿Êò]Z"WÇÛêå*Ð,çÈHÖÓüe&;_"úÁÑM{ç+×niÑv¢ë¬–}^?µ7Ñ䎪á§* .uêmÈõ »®âm޵¯mßL‹ÚL(N^`D‚d¡ÁÙ6kÖÔ}Dç~áÎHt¥¥¸sŠ?0bkld,•žÈ_œZ3Jª×wHê™?õŒ‚´tÌÉ,£zLî ¬m7jÀБáw5´ jþgNÈAÄýÙ˜âæ~õ¿åªj ºM‡Ü“‡pŠsá?}Kmj¨úψ)¤ý¼ß‡÷ù.-‘«ËÏN—‘¯¡osÎR¨—«@³„{ <ë&A£åÕù÷=zö6=Šû00;'çxXÖDë%#%LÌP^I @$$¾¼þñFØqkCÖÎkŸàâ,òÅY¢¸PA6ëkx eKcxÞ%!%ý³+¯—ž‘©(™Qã°07JHæ¾+JzO½j+)EtK…9i—ÖŽ”kÞϺSãZãddd rÒScÞÞ{üœZúÓß‹º::*çGü壛îÝa¤.+ÏýóÍýÜ»}}¢Ï=#…8±så©cMtäåe%"Nxjtœ¹i×Á”Äøw7ö‘–‹ï~}ø.-‘«ûtcWM›Ñ'ü¹³eozpgð~š%”ùœ‰ 9kâ8Åqš)ä~y¾té2øGúóxX5@'”·J8MvlÇw®íМÛu…ÄŽâ8K«LíÉJ¶hXë°{פlïÅJÉ)iµê#­Û,-=C&=êÇ3¿Â¬äª ½‰@~¡Ä“/EÏcr¿§åeçÁ´i Ž,¼Á"©(']_W¾[CÉùÜuÚà!¤?$I\}“—š—›/¡È‘ÔQ‘ÑWå4Ô–¨§Y¢Ö@W>6573§#+¥§&§§*ÛTG¢–º¤ÿ«üðèìÌÜ"eŽd3¹‡‘Ù¤M^û|-`ªnÔVî¨1Ì`ªî`H.Ì|€ÙZ æÛC~KÕ ¢±|¥®¼Í“›’ÉåSC^ÚXSNWYº£ õŽ“¯xX œŽ5vbäÃ3¼ÎEÆeF~羫չ8ŸkÏ a¢£hòû'Ëeåsoh¸I 9) eîãÔL%#‡­ #•’ä?%ÉçÀú2Ru4%ëƒPâ—Z]9Їa|i Ȫ£Á C¶&2šJJ?²aa î;ˆËåæ—ØäµÏG˜©:RMGE–¶ºNõå Ôesò¹Õ]xSÔ£‘di[AôdyKµ6–QS”ùm0iš¤,/Ù\·oìªè? 8ƒÜ~èïÞÃë|o@¾#OÀåU/±ðó,q%ÉR|ñ”Ó·› ¬SÆ”•U6h˜žž–*«câ"ÿl{E‰n C®ºðýy½ü^Æžû€þW<ׂ/¯„Pÿ]ß”¦‚„mm>aÉ!Ÿ}>‡™ª#Õ:Ö¡q¦–šD-µßª©¼¥´%´ùêâo&ŸóxXi Or!¦ºˆî#ï#®_Aæ À¸+½UI)Õú6EðŽmñŠ\0>+#Ëý¤Kk((¨Kå¤Ð—B)¨pÁ‹ZÏzзOïÕk×CÌ¥­ÂmÖܧOÃ×­^|âøqÿg–ºššººÚÜÙ3áp߃¼M`Ê=zü$¨1ŒÃáŒ9ÒÇNžâ-è6Ý•ÜA™WŽi$P™ ÐÏ“%=&z²ß¾ÅõêóO¿ûžK< ‚ùíÚ¶]»z¥–϶÷å‰wvÁû7Ï”•Uë6lFÜ Ã3D¦š]ÝfAç¶ÍÖV–0˜ã˜Lc¼ ¼FEGß1nxýÿsàkÐsä‹8,Õ±Û„?“_¾~}xï–Vq cù :d@¿_¿yüFfÎvº_Ò7gòаQÕÐÀÒDx%£*{.œ_à””¤¥¥¿ LüYbñ̲°ü;ÿÞ ÓvÔù³àŸy\LTTä[&7oE‰DOöÆÍ[ÿöíËdbÓæ-ÏŸ¿¸|!ðYX(Üè-ñ]Fj> ò;{:âExW'§9îó ù¦Í[Ÿ?yùBÀ³°>}¼à4až,Ü3†…‡bجZ³.%%59%Åwù*^#CC8þYYY7oåÍb©ŽÝæˆá%5þø‘wîÞ#¦Sžì:",Œ·kÛr9òB‡Å+BaùÊÕЖä䔫ր„¨‘´Ï”ÛË…;ÆÄpϾîÿ/ãUœAu!Ï&@€àP¿™Ejr"y…ó%YbL¶¸sñ«×c`\›ø¶Ž;¾dñB=½šÐ!ï>÷â¥Ëd¾K׬©«¨ 0a¸/_òè/ø©?çâ¥+¤þ/OMMîÝ"|®]¹`iÙ^žÃN0´w÷Þ=R­¼¼c²0J@û‡xÞMþ‚KkV-‡?C†êæÒ»NíÚB:9tÈ ÏùsÃÂÃ-m;4Ô¡s'(·çDñeKƒÍ©ÓgvwécffÊk“¥:v›Ð?õY´àåËWím:XÛu>pððÈáÜPê§_ß ú›µn7xØH³–-ׯY)Ð+B¡“´ÅªC§gÏ_Ì›;{èàA¼Æ™r]§L?vôù€À­Ú\¸t†°áê!™2i‚ŠŠr'‡®äL&M”#ò&7š,·­^F œkiÞúR`„K^_!Î~ú’Z&õòóóÉ,I_>GÂ! |úHÊÉÃZ&õYôÉ—BBÖ-_ùâetâÀ˜%z¸0…ë3ôÌ+jíìƒ[QøÛÈÛöòKüôÙ±k“:µ/_ðW-åa“É7"ä1=ñgÏe²‰r$PÉ @göºÿ±¤ÄQ^F z²vlOžúí9/o›ut´CCÀ%¾_>ÿ ¬´hŠõƒ þ_""S5'Mv>lÈã {[_> eùCA-[F‰È³ D«wÊ47ø[›TÂP©Ï_0ÓD3E–*›et ‹#êI@Àp1&;kæŒ}¬]·Ñ@'4#3óÖí_““† 2{®û§ÏŸ!ëõë7“¦Ðl¼È —¢ïJ‹>;'‡Ã‘—“ãDGqŸïE«SN ~ã˹Gw¯‹LÍÛ:÷ê››—·uÓ†Þ½¸£“eù”‡Í²øƒe‘@µ% ÔìxRìïw‚,LäJLL‚ARóV­Ž.™ü8yÒDÉmÛû³LLêL›* ÈNž4Ar›dÿƒêO¡¥¿r¹¯ÏRß “btuualÎ? V­<„ìkˆ½F'‡Îð¯Ùò°)Œ‡LDYö\a죨r„“-}«¸SJEûT†bx=¯à1YÑ a)$€þ 1ŒÉþAïÿHÕ<&ûGÚˆ•"$P1„“­W*O-<&[yŽž $ v‚l%\…K쨱'Ke‚$€D# ÈÂ삊ܨKÀžľ å¹3ödE»˜°@Tøà‹»X • ))ï_uê7þøî‹¥Í»ÁÒ:€úÂù4‘i-Ð …ñ‡Eçî½û°lE|B\¨¼i–"Õ-K”_RRÒùù°À]uƒ…íE•“DÏ?å,ıvõ ¢+À›þSþT¹zéçÉjëé¿}Ú°Y+îº|ù‘’–aïZRa눲öRšb4“Í}£WøOZZÚº ›¯^» ‰ÁRdmZ·>t°Ë _ h–G‡¥TüÅÊ•“­xowJuúÞ¼}G¬¥xÓ¥2R9©–ª "+ÓÙ­Úß¹ò"ôQQQ¡È¦ÿŽ‚šZÂ7dê´FÆFGí‡Åa1Ù‡AÁ›¶l+ +¼K¨‰ÊH ''GF¦$Pð¦Ëh¶ú§²ò а¶´“‹DQ!ìY+¡z v Dª‘j¬ìËݽN5Ë"y¼uóbõ~M ݺ—ЇXW¯ÛpòäéôŒ ÇÎö°¼±Š.iIÖ4€a×,À™2iâØÑ#‰;Gâ—¥ƒï@/^² }A~~Û¶m`Õ.bY(¸tñ­;vÂ"ÙõëÕ]µb,È nÀ¿Ÿù^ .\¼¬\£Æ¨‘áRÂ8_„ðάf ¹L€–gƒÅã©s÷n>‹pää}Z9¬ ¸`Ñ’€ Aǹ{×…Þž°‡¡ï9ß}÷Þ}°b/qÍd ¥˜šÏˆ77×Ók!ÔxGÁÛj"mgï{OÔ¯_OŸ9÷OŸ^x÷îýØ “o]¿ÌZœ”l‡m|(L„O«C  ~‰*H8´ú SÚ+–å¼Ð^¨,m¯œYŒ£®pµIËȈa+gS+À+xÛØÝÃ;,ì)¾ê¶nßùòeD€ßØ/ VÑ]¶rµ ë7n½­ÏŸ½{óú·â-ˆØ¿,Ô`"låyÁ";uML–øþÚp á>}ühxH°“£Ã|OoÂØÖ!--¶»èÛ.ÄÅdŸÉŽ@PãŒYsݦM}þôɉ#‡ž>}&ÐØê¼½{ë<–Y¿a©O+‡ñDƹyíÒ«cbbÁOR?<üœšÈ·B²ïºõ“’ÀÕ@ÿ³°=µi66Và6Èaåò‹—ÀR¿† 7mm­©Ê,Ú¶ ŸV‡Z}p¬´W,Ëy¡½PYÚ^9³ƒlåt·’{µ}Ë&Øà`®‡¬ˆ «©BG25õáóñ“§xyÀr‘Ð3{Æ•+×øÚ¤pæÜ9Xf Âò©^ó„'põb€eûvÐa­‰9³ÜîÝ+Ùk,,^è ›(((Œ3êeDÉÜXÈV¶…8|!!°"&ûLv˜È[¬ ÿ=>9)Y__Ö®胷ç<èžÃçÎÿZ’VîçHȵµ´¼½<üüíXC4\`u¼ LÍg Õ@­«ƒ5±‡ñY¿ó°Œ²àÐ È©Ê,Ú¶ _Þz™ôK{ŲœÚ •¥í•3‹~¸ rúZù½‚88wÖ øÂ}ÀÇŸvíÙKÜÏÝrnE;;u#›@]œI!>>Á؈»?Bi?¡aaËV¬†J.ÈKZPSS%Ò°—"¹¶oBB"¹Ã±y {Lö™ì05·–m›7Â(öúM›•k(C°°ï$`Sb° ¨—4E+OLL462"t),uDêëèp·_+Õ‡©ù`„ /éí …¿ˆÐ…â~çV­ðݼuŒ–„>}ºrùÒR9FÛvaà £Ãë “~i¯X–óBK²T4*ƒ2Ùr9 CaA²^óM͹·ÀG[[ëìÉã,›V1)€<*ú ,ã]ZG'Mî1o®­M5àÞ³¹Ykv °w!ì0F„!XÙ–T†‡ÙÙÙŽA;Êr&ûLv˜Èë•i‹æ»wl…?Q08;ÛÝãñûËädÁö3µkÕ‚8Lî©Á$ÇH}@JìØÈ[{©ÒLÍg2{‹µ“»æð*ÃP>À‡A[ùŽv`·!˜¦RËØn8˜lÒÊi™_Þ™ôK{ÅŠ÷¼Ð2ù³ÂŠ.hÕÞN,Mmmã ;åadÀàaðÆá™@lì·å+×´4-Ù3fÈ î^Ÿ£¢ çøæí[×éܽ²y?L ÿôîµÈg ŒÓÁ–\äFgÐeþ)`qt†»N9þÕÍ÷\ °½.=º-]¶")nÖ“—ø® õ7j¸s÷^ˆ³Ðsñô^HÊ™ì3Ùaj ¯c°ÑÎû÷òòò!Λ˜A.“~Â@'|}–.ïåâLš¢•ÃÃ.ÀIHL„/ìÑ ~Ò2¡²å}ì#°ù´6AØÓ¹áÔnЪÙÚXÃÐy¯žÜ†ôtéá½È$´š,BÚ¶ _Þz™ôK{Å y^Xš\ɳ*.È29øVÂhë:†ìÿö IDATeR@à‡.Ý65íÓoܧoÞ¸Žh8lvÐÆÂ6ËjÒ¢l4ëàP²×/‰…IaÚÔÉuMêvuîiÛ©³þÏ ÃÇíÒ»/í?~Òà ߥðï­i‹V‡ 777câOÊaÇoèLYÚttêêÜÊ̔غr—-õ¹rõt„ÿé?niÚg²ÃÔ@^Çœì'LžÚÔ´<\ûkK1z  …y«.Ý\¬;Ø«««Í˜þkõwZùì™n0 ñá [öΚ1– [Øɼ =𪪪XÙvêÚ½'9í”϶60ˆÑ£;7úÃ/ €t(åS/&&ÂÀF‡×a&ýÒ^±BžÚ“U%„ô¯Õ‚ëð:)„?rl³vvaA·ˆ&½ÿ9ÑuÖÐÁý‡ êÏÔHê.°ú°ÄS)BÎ>… bëã»WÙ-¹b™Âód+r/aÚU:‘‘GŒwç¦PœYü—Ú*˜f51Éi:bêä‰íÛµ¨‰ Õ–€(¯Õ²Àzö"bÂÔY3¦Mf‰°,Å1«2€á˜‘àã»Ü‘Ò×ÞsqÙ¾ÆòÓ¨„Jd¯Ý¼ 1kÓºåmÛ˜-Ù{àЫ×oØuãâ9xÙfýæ 3bÈŽ=û KÞÇݹçÀÀþ}kÔàn©~âàÞ€3Ç`àiû®}T!¡O÷íÜróâÙŽ¶Ö¾«JF3·ï9œ’êwòàá};‡†QK$$,|϶ üwïÏÈÈ„‚Göïö‚,¸`ÉÊq£‡ÝºtnǦ5/~Î¥5[Ý„#‡ yôàexȆµ«ˆ÷ÖD# .;ìµ3½‹Á$g·†¹H œ”"Ⱥ{.ží6¥qä+gÏÎé o@Â?H×ÉãnÜâN¸±lׯ\» i˜(ó øÑÀ~ÿEf»MÕÐP‡/$.Pfノûìé:ÚZ0[hÈÀ_¿}O”ºtåúL׉êêšê3§M¦1w†«¶–&_Aðaú”ñêjjð…Y¹C”OIýQSWÇcÎ Zƒ(DH ˆ…@)æÉzºÏôñ]­®ª ž‰º¿Ç'ôî?Œôƒœ`?fÄÐ [v8Øwܶk߈!a"¡˦ }=Þ©à¤U" E`‘N*~ÿ‡HþLEˆL»¡-/Jr}½šd‘>Þ{Þ¹ï` %¥®m,=1ç3‹‡H 2(EO¶—s·E^sÝæxÞ¾{Ÿ¨æW_ö?³ˆoèCnï>l,aùæí;Ÿ¿xùO¯_³cbc …˜ØoÐ-Òuèù›æ„ò×îËûB~ÔÕÕaz)Y#YªIã†k–/¾rþäìé“}W– JiÕ@¥"PŠ v;ØX­_µtá’ç/Áá¿}\|–­Šþòz0¯ ž}uC—vôˆ!3r(9ݲÖlد ÁwõúÍ]: éh‡Në6oONIIòk7n²¨9v¶[¿e,9_b¼˜(ë±Ð÷ã'îK0Ï žÝ o°²i²Ï“­lÞ¢?H z(]Ff-[ìܲnó¶]CG‡ã§Ìh×ÁÉÝËžV‘¥¥¤àmçn]x±¶4mþï‘0@MUeâØQBŸ0f¤Š²²ó?ƒoþs¤B˜²ÆŒPTP€‚0— y³Æäš˜v¶–s<Ù:ºlÚ¶ úæÂ˜ªH–ÐÉ—…Ox*ò¼`]H@4¾ŒPZëÓg{@^à)mAÐgAxƒ¼/#|ŽŠž6ÛãÜñÿ„/š°žlÅ¿ŒÀ2—ž%«TíBe$€ÄH@Ì/#ô &o9ý| T.o…u›¶ÿHKOLJ^·y‡UyWAðÈÑãÖvö š´èîÒ;âÕk¢FNY±z­E[«FÍZªÄR¡Þ Ož>CºtâÔi}Uø¥ög©Y¤$9fÛÑ¡aÓŽÝœa5ØSgÎvrèJ¸K%°¸QÞLÐ>¨æJ=\ —¹e§=-ôt—ªû0êééö4²ÏÀÊ5”Æþ5B`+DV ]f˜vyãž§NŸ%ê‡ÅCa1ü…^,‹F³d·÷<8~ä`xÈ£^.=àØ[·îþoß³ÐGÝ»uuĉæÐº!rK± @Â(¯áêÚÂxCè”Çpðµój–v¸z”aƒˆE0aÙ*XTåÝ«ç`ú¶öî®kRÒ°FWwçÞŠñƒô?ÿìÞ½k`àÅÓ'Âò% #Lƒ­|Yä!$B=„ER 8ÔÛ¸¹ï¡@7Dƒƒ¥ °”bž,†í2ÃLËCTíÝËVï>‡ˆ°ÂTA«CDXÈ"~å=$—åfrƒÖ ‘  ²bÁ(ÀÓòƯ^¿†¡XØ´fÁb‡Îˆõ§Ø*C6“e0‰E‘@€qLæºÂ.§22² `¶h—7†ÕfÝfÎݰvµ“cgØ•sŠ«±ý"uÑh²–,!¼ uƒ(H>CÆê $ <Æž¬ŠªFÜ×ϺÆyEáÍ‘šE"”ùY¤° ¿ ¥-˸°X ÀòÆ’»aÅnØ…»NÚ°Ù5dy.X4|Ø6­- ›Y}úåµ`1lèD, KšQGfY²„q˜Ö a ¢@"`|ðõ<ä~.ô¬²³Ê¾ôµÈÎýñ‚I‰ ?Oö·@H TD|ð•–šÒÂÂJ¢¨0??¯TõÊeéEVªÙ"´‹ $€HŒc²Ð•–‘-Â"_$€ 0Y„@e'€A¶ì Ñ@H€‘YF4˜(;ªdɽË- $€ʃã<Ùò¨ŒÉ&ìSúðS.Ê‘@©À:p9ÙÙ…EUx9öRµ•Ù HIJqäåÿàzUBY³vvÔfÀ–3T¡hŒ°¢qÃRT0+&&æëû·¯’“’‹0ÎRU3‰¤¤”º†zýõ ÉM+˜PA–Œ§mÅ[+¸©X]u /+G¾{c\ˤ‹³™´´P—wuÀRmÛXPÿ2<4òý;u Ͳìr_€"^…°5Ö–»Ïù_€·?íl­½çÍ"Qví>xôD||Bȃ›00¶ÛÃÇ`_[#CϹ3£¾|Ý{àl¤X·NmŸóëÕ5ïÉá®þœûþ;ŸhR§Ö‚y³Ô¯ _cb×lÜú$4V¿67k±Ðcì^–fcÙ¿•Œ$&&:öè +oÀ÷om&¶KxMM[={ZXøÇ.|A |õúí±»n\<Ç‘“ãݦðEÄ+C„%(=Ù½mÃí«Ýœ:O™1÷þà›×Þ¹è`oç³l5•THèÓ=Û6ܼxv ó]U²•¬Û\Ïÿö¹pêòùµŒ`¿jA” ‚ŒHKKKHÀúøEEp1üÙ#ƒìÙósgºêèhCÖuò¸·¸KPèÉ’‹™‚ÄÓ}–®ŽŽ<‡3hÀ¿Ðí7{yñú 5.¸Ïž®­¥ ‹¢øïë·ï …÷´67ƒh^CIiòøÑÁC©Q‚~ÀØò€…ðËúçòþÛq¸nÿ{÷ÿµ› ïˆ2„HÞÁÆ´Ä!ÄYHð½?µíª**ÄÚ O*<{;ËBÌ…eÿ¡ÈŸÀ¦z‹’ÊI 8”e%¸ÊÙ¬êëUYÎæ¿D ²ZZšÿíÞª£ÍÝ.¥>î^‹§O™`Ù®µ’¢bff–]—žP)V(;‡ þíãâ³lUô—¯ÐÙ|ÿ!‚`Ù]a±“›ËÁYYxbFÔ²èc•@5[–º>øEÅþô=ˆ=Ù‘Cí—<:~Ê ˜O¢ÆŽJýW-F‰—ûLxØ5÷[l cµW®ß£q4…„'`T»nô§õ…Thþ¥ ²ä$Yx}bÔ°ÁðåCÀ7‹–ï-¦CRΧðøîU¾|ɺúÿÓ‹H“ •çLDF~\µvl Où5l8~ܘn]œ*Ì=–n+̇JSQùÅq-Õ®ý©äÁ,C“Ëφ ÿfq†Yº û7ŸDq´íã§Oý›>u²¯ÏbE%ňˆW»vï­È +ŽFü%6øþQ×®Ç×°(!’‘aгÿ»gÏe´Ž@’fHwr‘¹y+Š¢KU¹Â$"ŽÉV˜U«¢õ·L?vð 0‰ ÆÍZšnݼhß(y‰=û´·±3iÐ4ùaÈ{Åêµm­5ké:}fFFiíÈÑãÖvö š´èîÒ;âÕk¢,ñË>ü=fü¤¦¦æšš56!1‘Å&dÁ&D3ç¸7nnÖ¦½Íö»y=ç=;¤œÉ>“¦6’-â­EØ4ñï’÷WB"êã{Þ¯ˆ³‚ÀªqªDH5jA”"páâ%Ÿ%¾Üxú»&H@¹4'HØë¦\ô0ÈŠëÇAÎÝ»–Öbxø³¿3‘o#ˆ‚¼‡[·ï|ù2rC‚ïs8œe+½¾#§  vrt˜ïé e‰á—º#¯K£ÇM5bX裃îÕ51Y⻜̥ڄ¬5ë6¤¥¥ß»}ýb ß“âNû‡É>“–6²WÄšKý— êTa‘qz‡ŽioÝ¡nƒÆ]»;¿Œ€³ÀUËÎÉv›9»AãfæmÚmÛ¾Ô~/±CJnݾÝÙ±+#G'ÕhÍÒú€ÂR˜;gVóæÍ¸q6®Æ’s i€r鬱^,圉AVœ€“SRÔKÿ¾¯çü¹š¤¼‡ÇOžZàåQ³¦®’’ÒœÙ3®\¹Fª-^è­««£  0n̨—¯„oÆÕ‹–íÛAÈVVVž3ËíÞ½ì6Ï.“X“}&;,mdÿk!Ð!‚‚‚Ïž>þ"<ÄÉÉÑ}¾'Qjõšuiiiïݾr1ðñ“SÓgÌšá6-âùÓÓ'Ž„=}JjÒše±ƒYB€YF^žó‰8{áâ常ïÅ}[€r…´Saj8&+NÔêjjÉÉÉÚÚÚ¥2ª££Ã«Ï{Pg§nd.ï[jjª„ÞŽË/ÍKú¡aaËV¬†¸ k©€6 ôõ‰º 6É>“–6 ¬‹I–ÉÍá¾·Âû1®SŸ÷ðýëçÄ¡·ç<5U.ÌQÇlÜ´…(èwÞÿØ¡Ê5A>oÎÌk×où9NllL\\lM]Ý%‹¼É\Z³|.á¡0àí$êÙtŸ=nì6oÝFXhef ‰Â‚ÜþWœddå„©¥üt{²ðoÖב©tÊEÙ-·oßþ¨ÒÚ‘‘‘!^WƒÜääZª¦¬Ý»MŒÀ/9¤@Õ^2iêôaCß¿ Öž‡=¸å»¦¦æ×˜Âþ—¯_ÉŠ˜ZÄdŸÉNy´±ØI¾Á‰÷¯Ÿñ~Éûúâ·¹Êòòœâ?WÜ4üIÐׯI¤ ôx ’–K[6­½{ï¾sϾºÞ¸y‹Ý,Å+š Ô¡ žÍ"YYøã±òàÒ ¡$ðŸ½?÷aìɪ¨jÄ}ý¬k`Ì‘çþ1/í'ò§°@<ëå”e[rÑœŸî:¹ÿ arr˜Q  ¨ðêÕë»öϾ7j¸s÷^¸µOMý±x‰¯ö‡ àîáµÐÛú’"#·lݱqý–²**Ê"?Ö5©Ã¢ à•e9'úË—ÕkÖ³hY.=º-]¶bÙR8\⻂Ôgj“}&;,myFñ"_Ó˜®>9q¨©©ñõk¬‘‘!ùò…û7†TãK4oÖlÇÖMð·êÎÝ{îÞïÞ$ê¥5+6*P p#%]@. ûì™gÎùõéÕÒ´:¼'Žj¹b$ŒA¶H¢0%91.ö‹ÀžNÅ8Z%j©S»öуûažìŠU«¡ßÚ¸Q£qcGžCš;ÏcÓ–m0:qÜØ —. Ó¢ ãÆJJì“Ò¶‘ÝÛŸ¹´]º©Ü|rîan]aPe©÷‰¢ïŠUÅfIµßÓgÎ2i¼±±üK%@éÔ§˜j'rñ—…íÙäêCïµÿ¿ÿ—dÁË’ÅR©Ø²$m,Ûݹÿ0%áŸÉ7[XXIæçç‰PÓ_aL ģɮSö?Aw¯khjYXvä((±×UMráU‹£ÇݹYò’ˆÈ­—ªéééW.ú:*3-•7·~î}%ïç]D8‚œHYä!üô\°øÒ•k5j(:xã–máÜÇ_¤™€¢›·EE©S»Ü´ÚXsßša2Ëç CàùÓÐæ-ifÅ St•UÜëØµ{%‹U YPx5yÅ×ý%%&8÷Á[*î˧±“ݘ{²EEÒ229Y%3…¯5ÿ>>K—¹N™œ——ëã»ÜÑÁ^äŠËŽ`¸ï¬ÿÖyûò×s¢8¡r^Mòf_¬Z¾¾ ùñÓñSgøôIMâ}߄ݬ`ÏQƒBòMŠ «àwd%|±z™Õ‹€¡¡A'‡.ìTTTfLw¹ñâ²#„Ä f™~a” õGjBBŒ8têÈðP¥LU MáÀ /#g!.™rSaìÉ–[h¸ê9||Ëî·¸ìåI™û/ð°Ñ±[OxŽgog7mÊ$¶A?¡B¥2(óÙ,CÝe-ŠA¶¬±|%$PÜí)ë¿ËaC—l]Ù VBPUÄ%úýlŠ^RLtþÀpì–(&çÑ ` PÆ›K,þ—`¸L*Fü‚,Ù0±DÛÖ6C k©R¸}üþšš¶,KCXgwUÄE]º {àÐ1 «Nð+×øVÒ&_T­„KÊ ÙT+'’’RðZ­$XÇ0[í ÀeÀ½$KèÄ{e–¢nØÑþä¿YÓ§œ:{Òâõ­!±€åäµ´´"ž‡ò¿Ã.ûh¤j€Ë.Mmm)©?öü©ßøHEYyÀ¿}.^yôØÚ²-۬ݴÉã=‘™‘éäÐiþ799îŠ 0à:yü¡b¹#Èg—ÈÉ“ Dg^ß°eGà¥+ùc`g›~}@çkLìš[Ÿ„†Ãz£æf-zÌÑPW'º±Ä/ч…4‘ÈÍÍ[µ~óÕ· ¬£½Ý¬iSŠße–hcëè>sÚÃÇ`§“:µ¼Ýg5¨_·j](è­ð`Y2“z Þ¾yõ*âeQv„'÷wjBV]]£~ÃFpaü©–"Èž8}¶ÿ¿½ÁÑ~ÿô‚¹ÙdIèÓð“‡öBbÁ’åÛv탘K´'4,üÄÁùö]û æÒ¶sûîý0ßûØÝð¾ÿÎÝû ·¹ž³§OY¶Ø+//oÇž°Ç—÷<ˆ§dTå3õÆÇ'œ9ºîù®Ú¾{ßÔ‰c §á»·®W®¡tèØ)ßÕë÷ïØDë ÿ°°‘ž¾††f¾˜VÀø ˜Tó&HKËÀJu¼«ÍU0aƒì—¯1/_½Y³œ»JH‡Në7o‡ž¦>±:‘Äl·©ê xŒ ²¼òqSܘ‚lÀÅË;6­ÕÑá®8súâµÚ÷,`‹ÉãG»ôÂŽæÒµ;6®Þ.×È´I]g‘Av®ÛTX9ä° ãž‡Ùí`nU'# Š¢¬jTÕŽþWNÂÙ“gÎÃ}mmÉfÀøìô)%ë•èë•D[»‰‰I¤“œEbb¢¡AÉŠ¥dÖ³›¶ízýö=±B À?DÉIÉ?—¤“0Ô×KâYNˆ°`VŸ‚Á‡Êy&Ð+$€þJBÙÜÜ\ÿ —ÏÓ׃6¹èÆ=qÒ¸QÄðkLl¬‘!w9ç˜ØošÅ]ZâÃ$'ˆ¬4 =eØZœWî¸e»ÖJŠŠ™™Yv]zò•â;T×P‰)qãKL,ì²Å®¹H Ôì‚KWo4kÒ˜Œ°àôX›4jxùÚMÂÅÕë·@?¾«ÖmîêÔ™ô{͆ùêõ¿ÉùæÜÍiåÚ°š_Zzúšõ›‰ÜœÜ\Xõ6“€Àí»jYÜûME»ÖlÜ–” =Úd¨×É^6Ç@Hà*È?u¶ß^|žöû§'È ¡™ió¾ƒGvëÕ™‡î-©ÙÒ´ù¿CFvïÍ•OûKÎgjüè°L\ÿ¡£û „ý¬ˆ\/÷™ð°ËÖÁy‚ë¬Í›’E`\uè˜ÉÔw ^èD÷0¾ÚZZÇüÃh±z$€ìðÄ´žìýë0ÅJ˜¥a WXÐ->˜ðˆŸœ¡UZθžli‰¡>@ûz²Bõdÿ ÷X5@H JÀ [¥O:@e' † K+ -ÚÒ•ú‡( 1ÙÒT‡ºH êEƒ¬€ó ¯•i!æ1 *OÌby[Šñe(SŸ»™‹¶[m•Çö³šÚ5SS’U4t Úþ5† $ .a£#ߨªk&&ÄÓÚd ²P&îëg]c޼(¯—eˇB1-íñûv¥´Í,lØÂâEÈÃÈ7Ï ËÒ&Á¡@U‘€””¤Šº–±IÃÈw¯iýg ²õ›´|ó"ôÙ“ÕüfþÆ45+YÔ‘– ‘@,¯0Y9Ž|ssËjÎÎÿÄþjN›@ à8cbq$€ ²lt0 $PFdË‹#$€Ø`e£ƒyH 2À [F€X $ÀFƒ,ÌCH ”‘Ù2ÄâH 6dÙè`@H Œ0È– GH °À ËFó@e$€A¶Œ±8@H€Y6:˜‡(# ²eˆÅ‘@l0ȲÑÁ<$€@ `-#@,Ž`#€A–æ!$€ÊHƒlү߸9|i2~ ©&Ð* $P™ 0îŒP™þ³¾6𔓓SWW«_¯žKî.ÎÝq§Å?{^°v$P9 `ñ¼¼x–››÷ùóçc'NÍ™çáç°}ËF‡æÞ½z.¢Q,†À_G‡ D?¥rr²õë×óòp7vô½û¶lÛAØâØÿß!4ljÚÞ¦£§÷Âôôtj•°«ðö»ì:;5nnÖÁÞqûÎ] !Õþ;t²š´hÕÕ¹×Ùsçqœ %H ÒÀ +†S3°ß¿`å¼ ­­ì쬋þ瞇=žéæzüäiŸ¥Ë©j;wïY³~c·.NOŸuqtX³nãÎ]{µƒ‡Ž@‘ÆÝ»}ýðû.]¹J-Ž$€*- ²b85::Ú`%>!žÖÖ„qcëÕ« ¸½{º€ÂÍ[·©jGŸá¨Ã`ÀaôÈá>vò¡aHÌwŸ­¡®_HP‹£ JKÇdœšœ¬Ì—aA?R ‹@ÕʾµÀ÷xnxÕÖâ†Z¾Ï“Ð5ë6¼zý&33³¨ˆk!%5•_IBâûw® øÕÔԄ߸¸ï„ZLl,$ôõôˆC}}²øýëTS(AH " HIIª¨i›4`ªƒ,™ùëç••Uë6lÓ @”“•A-päèqÂj–«Û¬øøøÛ6[[YÂ0k³–D¨åÓÔÒÒüö-.))IKK ~!WWW‡Ðð ¹Üðú5&†,kaÙ‘Z#J¨Hð/:.&**ò-S¥d™È”È“âãÌÚÚÊ+Ö êÁ삨¨(¸Ó?xøÄÐÉÇSu @¨¬¬œ››»~ãfª!éåâ»öîÿoºë”=û€°ÿ¿}‰¬Æ,^ºlÕšu ½=‹$Š|—¯"p”˜ ¢ #P¿™Å­ Ü?ÚYZ,¿„Ðý$ú°|z š´••%æÉ._êÓ«§3í<Ù5«–ûø.2|ôLÇÍT™ë”‰EE…çÎûCœ…^µãÇ–(2¨°¨ä–¶ ÆŽuãæ-iii&S(GH ‚ À¿}Ú;T ²¥>§Áò*XY¶¿àGÖ1h`2Í«ñzÖŒéð¥õføÐ!ð%²>~ú ‰ZÆF´š(DH ²ÀÙ•íŒÐø3ešÛ‹—yyy_¾~õYâ 0cFEH T>Ø“­|ç„â‘sî^ ½yû&x5mÒxë¦ ;Q´P€@e$€A¶2ž>Ÿœ:÷ 8Š."$@!€Ã$(@H ˆYñ±DKH   ²$(@H ˆçÖÅ IDATYñ±DKH   ²$(@H ˆYñ±DKH   ²$(@H ˆYñ±DKH   ²$bÀ‚¹99i?~¤&Ã7=í²¬"!°Ú:õ Ô©& £^³š ÃfV<|ã«\˜çåæff¦Eüý#5êPQUÓÑ72®SOIIYFV¶\j­~F!†~|÷ªúµ[\•`ÿÙ‚›”þ辚†–UçZ:ÜM âbÃß ¾{ݬµµº¦SœMKK[·aóÕk׿ÅÅ)))¶iÝzøÐÁ°”—ø½¬|Eˆ˜U4ŠÐR8]¢•ª|ç¹Úy„AV̧²²Ò_„7jaÞŠ´^Ó°|Ÿ=¾ÿ,4ÈÂÊNEEv™Ú©Óf9´6D€joÚ²­šY1Ÿ 4‡*“óy€nlLôg ]ÞKÖÑ¢µtcc£?ƒmŃƒçÍ™edhËrkjhôèÖõØáÿHMØçÆÚÎÖ ïîÒ;âÕkB{.ÌóðnnÖ¾ó=½áävöNïÞ½'NŸ9G$@r¾zaÅ%¾ËÍÛXšš·Ùµg‹MȂέLò‚‚‚«×Z´µjÔ¬¥ëô™%›÷P+%Oá—Hð9™“›;{î|Ø/½M{›?÷ñ%ü!4a‡ž1ã'555oÔÔtø¨± ‰‰|h)NNNÎÌ9î„åí;wÓÖÎT–©Õ¼Uß¾s×±›3œ28qÇNpϧ¶”ÉyЄm2ÚÛØ™4hB-Åç*y hHëvÖШ9V0 ²bž››õ©‰ik&»MZ¶þj´ æ­Z¹{x‡…=…üT… àG§  vrt€xJ(¬^»Æn^»tãêŘ˜XØ·ä66V?l¶`ñ"º?zlkkÍgvýÆ-ïÞ¿<öîÍëß¾}c±IdÑúY´ò­Ûw¾|àw&$ø>¬Ó¸låjµRâÆ~iG֭ߘ˜”t÷Öµ@ÿ³ñ5G›{ý†>zð8è^]ø³Á§CK tWZZ:l·~1Ðv½¤Z SY¦Vó™1k®Û´©ÏŸ>9qäÐÓ§Ï ‹ÚRçÃ߽ȷÔR´®B8õÐÀŸ°~Ã&M̪dÅ ¹°° 5%IS»&“]MmÝÔ”dP£Uؾel˜8×ëE«6V:-^²,5õ©¹x¡7lc£  0n̨—%|üü½=çiijjkiy{yøùs·°í`c !gýÎËs8þ óÕ{æÜ¹^ž5kꪨ({yÌ#rimY´>@­üøÉS ¼<À¸’’ÒœÙ3®\¹F¡­”Ï1ÞCؘ‡l#¤j^½`Ù¾ÄqØNmÎ,·{÷ðé0µè|@ çü¹pÓ_HP-ƒ„©,S«ypä9ñßã““’õõõ–ûúÐÚgqžð¶‹`—$‹&fU ²åYFVŽÉ®¬‡) äéæÎšqå‚ÿëOîÛ“••Û"újjªDZ^^>??ŸH'&&•ìFcld˜˜ÈÝì"NHX$üάZá{òÔYH‡>} r¾Úãã ŸÖ&¡CëdÑÊacóÎNÝà¾p§OÞÅÓVÊçïaBB" ¡ª·Ü¦……ý;`p“­ "¸MNJN²E`™ÜeÝÐÀ€Öhv¶mÞxçÞýn.½:tr¼~ã&­}çutJ6-¦-È$$YAȤ†òŠ!€AVÌœ¥¤¤UÕ4òF 2ÈRQÓ5öŠá±˜‰I^ó=ævHY>šššÑ_¾ QÑ_444 ­¨¨‘7àÂEùŽv ã 3jC/˜Ï”¶¶”âÒÚdñ) ŒÝ»M À/Üöš´•29l™N¶‘LðêOš:}ØÐÁÁ÷oCÏÃSç#3µää.ë°»­Lei•ù„¦-šïÞ±5$øÁ¢ž0D[D ó´¥ddd²³³‰¬ädî4AòC"‚ijr¯üüAdÅ _NŽ£o\ûÛLvß¿z ²²ôýÙƒ‡Ad„¡4xdûmùÊ5-MM™Lrçî]aT:‰ð]ä³Ô¥G7Bnkc C“°.ötéá½È$TSÿôîµÈg Ýþø‘æ³t»MjqvÉAÜ=¼>GEA¿ûÍÛ·ðì‹Ð§­zñ"?ÒìéÜc‰ï –…6Bc©:0„ £"rÄ—ùž ¨ L”×Òe+ ç _¨‚Z$Lei•ù„S§Ï|ÿþC^^>Ä}bxPàk©@ç ›|¥7j¸s÷^ˆ³p»àé½·^‚àòYº¼— ÷ÀÏ$€AVÌðeåäôj¿ NNøN5”ð="ü‰ža-9ýx‚ë”IºtoØÔ´O¿0\°yã:ª^Éì™n0 Óà[SW—Üò¶ƒ­ ôèιð ·(O½ kÚÔÉuMêvuîiÛ©³¾¾>a™É&»'Ô\Øð±…ùàa#áFÞÕm–ƒƒ=¡C[é¸1£]z÷å{hNèÏt›¦ªªbeÛ©k÷žíÚ¶¡V´Âw)D–¦-Z 2ÜÜÜŒªÀÔ"° ½~K›ŽN][™™Â¶Á—¥jR%Nö&OmjÚ ú­]³’Pàk©@çiK-[êsåê5˜RòOÿ|£@æ­ºts±î`[ÖϘîJõ %I@ÒÆ²ÝûSJ+WdÝ•¿.ÿû54µ,,;r”„÷6?//91áéã{ ››7jÞJŽ#ess²_?{òæEXË6Öêš,ƒ¶ÂW„šâ%ùqÄèqwn^¯Ù ¶¥hghT°Õª:yÅ×ý%%&8÷ÁÛð¸/ŸÆNv×Ä1ÀÛ\êššmlì£?¾8¾&@0P«£gB%¥aŽ aÄuÊä¼¼\ßåŽ?ûÚe°‡E‘Ào0È–ËaTEU½AÓÚõ³µàIÌ+““£}Ñ«\œ@£Â044èäÐ%;'§³}'¼¹Žj•‚ÙRÀ*•*SxßR•BåŠ'0rø0øV|½åT#Ž”X‘Íâƒ/‘ÑaA$€€`d3B $€€È0ÈŠŒ "$€À +˜j $€D&€AVdtX $ ˜YÁŒP $ 2 ²"£Ã‚H Á0È f„H ‘ `DH &€AV0#Ô@H ˆLƒ¬Èè° @H@0 ²‚¡@H@ddEF‡‘@‚ `Ì5@"À +2:,ˆLƒ¬`F¢iÀÆy¹99i?~¤&Ã7=íRwQÞ8íæW¯Í*ádiQß(á5KëêW]¸hw¹œ»¼ÜÜÌÌ´èâb¢¤r·kVQUÓÑ72®SOIIö§)—Z+ÄhuÞBª:·½B.®¿³ ²â?¯a“’âÃÝWÓвêÜCKGêHˆ‹ |/øîu³ÖÖêšZLq6--m݆ÍW¯]ÿ§¤¤Ø¦uëáC[Y¶¿—¢ZükÞ!bVѶ‹ÐR¸:D+%êeõ7—à +æ³ YYé/B‚µ0oaaEZ¯iX ¾Ïßdae§¢¢F»Ù×Ôi3ŒŒŽÚ¯¯§—’šú0(xÓ–m•*ÈŠ™šC;“ó†nlLôg ]ÞKÖÑ¢µtcc£?ƒmŃƒçÍ™edh(--­©¡Ñ£[×c‡ÿ#5=nmgß I‹î.½#^½&ä¹¹¹ó<¼››µ†ï|Oo8¹½Ó»wï …ÓgÎ €œ¯ÞœÜÜÙsç7nnÖ¦½ÍŽ]{ÈQE¾áEª²i¤rTtô˜ñ“ššš7jj:|ÔØ„ÄD¾æ3µ(''gæw‚öö»ikg*ËÔjÞªoß¹ëØÍ®¸NŽ8I0$~: {öhocgÒ  •Ÿ«ä!$ !­ÛYC£æ¸{:>xˆAVÌ×@nnNLÔ§&¦­™ì6iÙ66ú#¨Ñ*˜·jåîáöþ5R‚‚>~4<$ØÉÑâ)¡°zíz[¸yíÒ«cbb׬Ûr«GŸ@âÛ·¸‹—á&øÑc[[k>³ëÖoLLJº{ëZ ÿÙƒ¨•2IÖoÜòîýûÀógïÞ¼þíÛ7^µ7o=Îg¡7uƒBÚR´M Ò6²hå[·ï|ù2"ÀïLHð}‡³låjµRâÆ~iG2=nâ¨ÃB=xt¯®‰ ü±á£ÄÔ"8;iié÷n_¿è÷$$”–-SY¦Vó™1k®Û´©ÏŸ>9qäÐÓ§Ï ‹ÚRçÃ߽ȷÔR´®B¸Ò 9p Å'$¬ß°‰E³zfaóy‡ ÀSS’4µk2ÙÕÔÖMMI&ö §êlß²ÉÀ@®‡W‹Vm¬:tZ¼dYjêRmñBo]]…qcF½ŒxEÈýü½=çiijjkiy{yøù€¼ƒ5„THœõ;/Ïáø^€4H@ÎWé¹óþdñ^T—˜$gÎ[àåY³¦®ŠŠ²—Ç Ðsþ\¸G/$h}`*ËÔj^#yNü÷øä¤d}}½å¾>´öYœ'|£-Å"$®¸!èX4«gÙr9ï2²rLveåØ6 ‡€5wÖŒ+ü_¿xzpßž¬¬¬)ÓÜHSjjªDZ^^>??ŸH'&&ic#ÃÄÄ$HC ƒ„ßù€U+|Ož: éЧOAÎçXBB"ŒNÅùrYãã :ªÂî½ûÿéÓË´EsjHhKÑ6(NÛdÈ¢•ÇÅ}ïìÔ n`á £ä]‹ó:::´EØ…äõ h »r5ÌÅ +æ“.%%­ª¦‘Ç0•A–Šš¨±W ÅLLê,ðšÿè1·CÊòÑÔÔŒþò…PˆŠþ¢¡¡iEEEˆ¼.*(Èw´ëg˜±PËØzÁ|¦´´~'퀎ŒŒLvv6¡œœÌ…Æ÷ÑÖÖ‚êø¥Ç¼xñ2 ïR³@B[ж ´ÅÙ…`<èÞmb~ᶗЧ­”ŲȤ©Ó‡ |ÿ6Tñ<ì1uú3S‹@þ5&†°óåëWZ˜ÊÒ*ó áoÛî[C‚,Zà ãN´E:O[Šåz /h‘¦&÷òÃ/ ²b¾ää8úƵ?¼yÁd÷ý«g  +Kߟ0xDFÛ‚g8±±ß–¯\ÓÒÔ”É!wîÞF ×ßE>K]zt#ä¶6Ö0VØ«§3ötéá½È$TS={,ñ]òPì 5ܹ{/ÄYèzz/¤ü§w¯E>K`Ì÷Ç4Ÿ¥¿ ÂÝúñ#ÿÄý‚"—¯¥§-År=×\B>K—÷rá^oøá%€AVÌ׃¬œœ¾Qí—¡ÁÉ ß©¦“¾G„?Ñ3¬%Ç¡Op2) ð‚C—î ›šöé7† 6o\GµÃ+™=Ó FcaÚ|kêêΚ1Èí`kC=ºsc.üÂ}\ÊS/Èšé6MUUÅʶS×î=ÛµmCZ^¶ÔçÊÕk0cáŸþ©ƒ  6mêäº&u»:÷´íÔYÿç-0Qî:aRÄés~0ÿŒÏyÚRLMà++ðp¸±m,Ì 7ò®n³J…i+7f´Kï¾|͉*˜˜¬ð] ‘¥i‹V‡ 777£:ÆÔ"° 7–6º:·23•¥{-…©,µªÄÉÁ~Âä©MM[ÁC¿µkV |-è¾Ëöµ)Z(ø{`-—s aTEU½AÓÚõ³µàIÌ+““£}Ñ«\œ@£•’€¡¡A'‡.Ù99í;áÍu¥øˆ@¢À +:;,‰Hƒ¬@D¨€YÑÙaI$€€@d"B$€€è0ÈŠÎK"$€À +* $€D'€AVtvX $ YˆP $ : ²¢³Ã’H 0È D„ H Ñ `–DH $€AV "T@H ˆNƒ¬èì°$@H@  ²¡@H@t¸ž¬èìØKÂFvyÙ™y¹™…y  kvËÊ)ÊÊ+JJâ6vr˜‹þ*dËåtæådf¥Å}3åÃÝŒäX¨CI]O­®NãNŠÊÚ2rüûr—‹h J@ƒ¬øODØÔï‘‘WW+ËK™5®«¦Ö êHNI~ûþΛ··Mg©ê˜0ÅYØ–®ƒõ¾=;yw©Á½êÄ’Ð"¨(xë*fÒ0J•žüéúúÚšíÛµÖÔÒ–‘‚¯––¦e»Öµ 4>]ß™žjL«¨ª¨1U¼dÑ‚ÿ†ý¢© ¹¹¹ó<¼››µ†ï|Oo8$t «{äèqk;ûMZtwéñê5!/((X±z­E[«FÍZºNŸ™‘‘Aµ‰$€Ê•Y1ã…']I¯¯×©m QT´äÀ£ý_%¦fÃpºu “Þ\‡!¦ŠUT”—,^è6kN^÷‰ïgõÚõßâân^»tãêŘ˜Ø5ë6¹AÁN?ìäèñ—oݾóåˈ¿3!Á÷9β•«™*E9@åDƒ¬˜ÁÂ\‚ôä¯j*ªE‚>ñZ/>,RUUÉHŽ),ä ¼šíÚ¶iß®íº›ùœóóôöœ§¥©©­¥åíåáç@*,^è­««£  0n̨—¯ùñ“§xyÔ¬©«¤¤4göŒ+W®‰¹µh AðÁ— B"åKfÁ­|QÑo¥‹ŠŠrÓ¥¹¢ßåtU̘>­oÿì:X˜sŸ›ŸÄÄDc##"mld˜˜˜Df©©AXç~äååóóó‰t\Ü÷ÎNÝHÞ‡i¤H ”+ìÉŠ/̇­¡nŸ_¶[^ëÜâ"ÈRR×—’’e¯XNNvíªî^¼©šššÑ_¾£¢¿hhh°ÑÖÖ ºwûã»WÄ7òm»>æ"$ vdÅŒÞ8Ðhdÿõ[tW=5áXWS…_HÀ!¿Ä&h6rå( ¬¸^½ºC X°x ©éܽëâ%Ëá»Èg©K_½TZkPÂôç¨(èÛ¾yûž}Ѫ¡ ò#€Ãbf ïtiÖ·~{þšºŠ¢r Ÿ-àKÖñ#-#26½¾…%¨ Sñð¡CFŽGjÎžéæ½ÐÇÎÞ $Ý»v™5c:»‘ ãÆJJìæ"$ v’6–íîܘ’ðMì¦ÿƒþ'ökhjYXvä(( ßœüÜ,xáÕUµu•jhËÊp‡aóò >ÿ—QÏiŽŠv¦—„¯5‘¨$äk\÷?–”˜àÜo¯Kq_>ì†=YñŸ& ðNW£ž‹ã#nÜ ¿—žuÔP×W3±nÔ_«?p´ˆ*3 ²årv Î*kÊ[ô­Ù¼1[ žtÁ8,.S.¸Ñ(¨Ä0È–×ÉÕ¶äjÀ·¼*@»H T8» *œ%ô *Kƒl•=uè8@UÙªp–ÐG$€ª, ²UöÔ¡ãH Td«ÂYB‘¨²0ÈVÙS‡Ž#$P`p–¤¤¤`ñ,J˜@5&PXXȲÄΓpihj×LMIVÑÐh+@³‘¨~ ÂFG¾QU×LLˆ§m=YZ,¿„ [X¼yùæYa!ög°Âl$P HIIª¨k›4Œ|W²í ²® ޼bS³¶”0 êM '‹q=¼®Þ—¶ r&€A¶œ£y$€ª7 ²Õûücë‘(gdË0šGH zÀ [½Ï?¶ r&€A¶œ£y$€ª7 ²Õûücë‘(gdË0šGH zÀ [½Ï?¶ r&€A¶œ£y$€ª7 ²Õûücë‘(gdË0šGH zÀ [½Ï?¶ r&€A¶œ£y$€ª7 ²Õûücë‘(gdË0šGH zÀ [½Ï?¶ r&€AVœ€ë7n.Nsh ªOƒléÎa{›Ž¹¹¹|e~üHëîÒ'5õÇ»WÏKgµ‘øÛ `-ݶhevêôY¾2GoiÚBUU¥t¶P j@ƒléNò„ñc÷îÿ6&‹åææ:zlÌè‘ !‡ V¯ÛÐÖÒ¶YK‹é3fgdp7Y³wìöîÝ{¢à™³~D$ /¨@Õ!€A¶tçªi“ÆÆÆ†—¯^#‹^0mѼNíZ¼†¶ïÜýòe„ß™“Á÷os8œ•kÖA®Õã'!øö-nñÒeDä}ôø‰­­uéœ@m$€ª ²¥>WãÇŽÙ½gYlϾcGâ³ròô/y5kê*))Ížåvå 7(ÛXYBH…„ŸGN.ðâ%Hƒä¥v $PEÈT?ÿ˜›9Y™/Â~¤$Vö=Ú¶i-%-ü¨]Û6wï?PWWƒž,Ÿqqߺ9“BIIIH·o×:°8ï¸bÙ’­ÛwõëûÏÓgÏ–ûúÜ¿ðÇZˆ#$PRR’*jšÆ& ˜l`e"S"ýü±²²j݆͈@™“•ÁQPš0vôÎÝ{!ÈîÙ»üØÑTÚÚZ'ÖÕÕáÍRTT424¼p鲂‚¼]ÛÍ[·_»~ÃØÈHAAÁ²#ÕJ¨üŠŠŠâb¢¢"ß2¹ŠA–‰L‰<)>ά­­¼b ^½NíÖnØtÎÏ?11ÉÆÚŠjbЀ~Þ ½=çéëéE~ü¸uÛÎõkW(û._IÄeçî‹–ø<丩FP‚@• P¿™Å­ '™\Å1Y&2%r˜H@ôayõ@2nô¨yžÞc‹'P?ãÆŒ†É^ÃFŽiѪ۬¹ÿ·w`Q\[ß‚ìÒËÒ5 Š» *vcL”ØEEcoQcÁ†¨¨±¿—ø4ÖgÔ¼DcÇŽD)TT4‚¥×]¶½³ Žë–Y:3røæÛïî¹wî=÷wfþܽsg¦o_o¢LOÐeŸAá+|¦§gôðÔ Ñê¢ Úàp80žÕæŽdµ‘Ñaê;6•BäÍ{Á¦R e‹æÄF¥%™ÖÑf#$ÀX8’elèÐq$€˜@E– QB‘`,YƆGH€ Pd™%ô Æ@‘elèÐq$€˜@E– QB‘`,YƆGH€ Pd™%ô Æ@‘elèÐq$€˜@E– QB‘`,ÙZñ¸îZh›DH Æ à³ ªynF*uw¢ï7nÔÀ¹•u1õÜ&ÍZ>òPÝ^»Ò+zºW»p°u$Pd«þ0¸·_ó£¹ ¥ÄWâgï$«v«úV±F$€hIE¶ZÂ2ì«áêõÆ>yrþÒ¬ž|õ,Ò’——·uû® /½MK322ìÔ±ãø±£»wëJ±K%³pZI€¸; &€s²Ô|*œ —üd{—U8yã…YÃÛè+^E£íoÖœùb‰øè‘þ޽t>ì½s÷¿µF;@ô'€"[M1RÙ•¿Ü¶67ðónFÝÞí¨¨-„·Ôp¹\xàìàAý÷¹ËÑ_{ôôvnÕÖÇwXâÃG„½¸¸ø‡emÚw„méòŽdÉ" IDAT@ø öžÞýÉ×ÿþÇ)¢$XÀ®ì cá+| Hk¬Â®\¼£·c–mÚ/Z²LTâü½LI™¾Ã>"ìÅÅÅ?, lÓ¾#lK—ÂW°÷ôîÿäÉS¢Àïœ"`»Š‘×®÷4ꄚø ra|J| H¿LI™_ÛÊh¢rZ j@‘¥æS×sauðëׯž&=ÌÊÌ’× e³9–Íœ[Ú;4P¿¨œD§F ÈêDT§ %?yÜè ÇCÚs¹uâh‘J% q÷“Ÿ>±°ª„ ê#D]/êÄi£Þm´”‘üÌÈÈè7x˜T"­Œ{1½˜‹«[|ì}¸ÙO½#D… Q?HT,xáK'¢º^f êÈ–Œ4ô—bn¨œ„Z#p$KÍs ð²:õ(2E ªJ‹Gˆ6±@‘ÕFíJPRPR¨O(9ƒtî>^:»Š@4ýÓщ­!Ê]E‘ý|=¡q~þËål±DñŸGg·Á7YšèótO"‘‹ßì×v¡žÞg{‚¦L350UeI¥°Éá³$ éŽÝoŠÅõûã3ÞÊz„çää™°¿r&–‰e"±Lxùñ)0òù6e­¢–Ê}¶‡x-ñü\›…Ù‚*û1 {ð¯u9¼äƒÑAã;,£¥Îêì¬ „ƒ’òJ$>.ˆíÜýF*­?pšÊ©|E¢’—“ÈXl9r9|c™åqR'•á®ò€­ÓeKæ!+½I$âƒ÷ƒ L’:7î+2{i°T¾Zm54lì¤-‹Ò^–Hk¥!ÎÏK™`Ì7P(¬D"‡õŰ#Ù’4X`ãɶíxqŽÒ­­Tù^”¬*¤ª\Uh+Ì(& àZðv(HÔŸOÛ* Ò2(²å€U—‹Vɱ,†1lLp¾ñC×ú^lޤ½}Ÿb³ç`{•Ô¯^IÅβZ½-ÂR ó°“L` [¢¤†]ºÔ³¶V(,!µðÉf› ®˜™•H8……²Í¯ÏžÓV[MÚ)XUHy»Ã/Q놱+ŠTöU¨*䣟r—]ÞÊ«ª|Y€ePdË… WœÌŠ .4~ÜÖÎCÎËXb[ÜÞλÀ0ùHÌzÈU©ú§ŸÿÓÄ©9|V¼ÉßS,¾œ0I1[2n5öô´]²¤þ¦Mz ³Ä–Ͷ[³ÆzÁÛ•+‰ùY6èìºõoÎý©ìì³gÉS§ÍhÛ®CSçVƒ}‡…Ÿ¨ñ®ÔNƒp¸».ß ÙÔŒ ó­*Np80ˆ•ÊYR[±i|µé㤤q&µhÕ6HrtåŠeGþ{ÒÿQì+æ}þŠº$FÆÒz>tðþý˜ÑcƯX¶4`ò¤ryøIaj J¹(²eFU§ j9-4¡0Çz$f£òL+¤ÇÂN*2K› Ìš1}Û¶ä+‡·íØå?q|YºSî2°ãÃÅ.ÚÜÐÐw!!¥:kkkØ­Q!(ì›9säEE¥µR)[iñÆ­Û·‡ ñÑØôÄI“ü'ÄÞ¿{?úŽ““ãš `²Ø;Q'?þwܽþýû-Yºœ°oݶ#éÉÓˆðÓ·®_yóö-aÜõ¯Ÿ$$œ=s/ŠÇã¯ÑØVMKf ‚s “Ú9xIY"‰Ld`È Jî:é²Ãä«‘S¯;lzÕÕÐ&aa–‰˜.€Gj¨úxóÖ­aÆ*[áë7IËÙˆ?¿_¼ôàþ½žÝUw®¶ï(²Õ†¶îUL(l:/εaçlÃ0+‰@aóLâ[Zw–±AaEŠSH.z”yãMŒá@;Í ûòeJüƒC‡„¾¾ƒ!’’Jâ\¸ÜÊJ$N:­Ó¼¼<ŒÂ΄Cúùó‘‘׫Kd¡åå ³üñtVé¯àÊ•7³fÉ”T˜¶¥²²²--,”w!Ó—.DtïÖ•Ï㙘˜,Y´ðúdVКUv¶¶Ó&'$ÀHVñ÷û§Ö¬\QßÎÎÔÔæ^ã±ã¿F##£%‹¾?wþ¼Æ¶jÌH(lÿa[{…UüÚìû¯[/ø¦íÜá­g m5ͧ…¿·ÓèÎõ¿b2ÅtLHÔçd33³¬eÏákVv6i™9{îÊÀe­[»ÔXï !\'[“´™ÚüÀ, ©½‡SåHlÈ{^¬‹m'ÐÓæ6§GŠYUhþVÎÉåŠKEÒÜ'YÑ™q û &6ù¢‘‰‘¡ *—~rÕëÀ¡C™Íš<<´øûù„¶6V„3xŸžN:¦ÍNø.`rÈæ­ýúôÞ´åÇ)“'ŠéÕÓ§î¬6 RIÉ\AÉMŠ[`ˆÊátê¤\[=ggŸ/JM•A"{Òss³´·o­­­Ô}¸²ùÇ„ÄGðX[È…I^r/C>‘†®A,ˆô»÷ïíl­Uzš––Ö«O²råJ´1©0õ.¨X?tî‡d}ô€Ø®\<÷ûÉP°Þ¤¦¾"¯^½,IµÙ‰Þ½{Ö«§·ùÇí±±q~#¿)kÇ*PîÃ2XÅÚX6Û&(ÈøÓÛgõš……qìì$B!±Iáí>zúvíÒùì§‹ H/fÍ]0fô¨[×.?yû׸M—ÚAk++åDa0ÞŒ¼Dâ…ª¨+©¾\BaÓô´¨ï.‘ ›LwsIeŠ‹¢R¹¨H’™)z‘V”˜’ïEþ­çùדó®=Ë»ô¢àzja,áRñ­k—N¡a0ùþñ¾vëÚ…üþÍða×M›>ûÒå«Õ×/•šQdk 5“R\Z(¹ÇIËÏóö0áX0 é}lrÎ_ÄÙbÌ3o`ÒD]™§N=Ÿ9“è¯aC—+WŒœœ@Yá·$|–,ø,Å;gÆw?íÙ ?ê³³³‹E¢¸¸ø™³ç¹"¡ˆ¯¯ÏÓ¯—š’ºyÿ"'¦P’•’“”såua\¡,j(*–ƒÂö±˜Ø´iSx‰WOOcµGŽ3ÊO%kÔ·#ÁN ÛÜÝÚôýª‡÷ só¹³g%!4ÚìdU\.·qã/†}髱]#u¬µÕPO`)/.–ääd%&‚‚µkGÔ“uêÔ³‘#Ówï~1mšâìe±êÙÛ»º Ÿ>Yç¿8|`ßµë7{÷Ô®C×ÕAë} rƒ×­^·qS·Î£ÇOrk¯¨œì¾²K¤}æŒïš úu¯>ëÛ×'ÊLñïàî6vâä6næ-\ÜÇ»·ÆJTúX1 *•¨í!ð+L2Kx%’e‹Þ$çDŧ‡'fžO-ˆÏ¿…ù¸³ nô‚O…°~Ü6b¶E¹Î&MšúeÏù‹—»öè ÛŸ.Ü÷sãÆU:èîîvøÀÞ-ÛvìÙ·_Ý¥2Z¨(ç²=»u¹vóvvzé•Dzï‰%ëüüüóa~cý óTW†«t~úÁe‡'OŸE¼Ú—×$R`f"cçs9lÅpƒÍŠåܤž}Ì'6kê¤q– Œ0›µr}’§^X›]¹ä´sû ›¼7»a¤‘1ŒPãV¸jX$”ÃD˜Pˆ,® –ª- bá÷iç¦úí øüJúP»£ÈÖäÏ¡‰²<´›«Çµ°4oÚÔ±?Ëÿü V‘S$Ü ëqxO{x[úƒr¡LYª¢@¦mwmv¨ªyëööÛ¶„°90ù ?«àO[=.§Í¡}Ÿly-•ÊRSK†òŠ?RgeÉÉŠyX+«~}ÛˆÓ¦6VÚj«GkªŠŠu,¶Ó雦*k+O£(²•¥]7ö/Ç9¤§ÇṴY¬‰×ÞðzXjæäX2 £·ò›µIV§Ÿ:€p¹—ý{ý§6¸~æ ˆ® «ød³Ó­­gNšÙÀbXmÕ&ˆmëtRê>(3¿ê7fIDATþþÃ*p¼Wm¬­6t Þ±$W§oe¨£ÜEÊÑ(Šl¹éÖÁ'P9*LMZXXÂô¬uÎx¤ÁR®j²Î¾–‡Ãm¹ïçggÏÉrrUº#ç° ìobaÁ&U„:¦ä1Ã’ûŸÎJ±º*·*ßQG]Õæê¢ÜŠlÕÂÿŒk+×qÅÒÓãÀü€™© Öjé)4~vht÷ƳÎCiï¸î´ïKÜÊv‡8f`îžË"•Näñá¾»ÊÖIL(²tˆí}€C½üG;Ük ¸ÝþÊ¿o-Ñép…€Ôr§*Ó|MÆÒܒל'•HŒ é{äè¢DE¶2‡^ÝÙEE%Ö¤º€Àx~}¨½LLËK×{~Þ݇q¬9kÖ¼ô]½§D… Q?HPdu2Á Àoçúö––ɧÏÕþ¼Á²>Ÿ_ú$’O»Š@TB@tž 8’Õ‰¨®€ßƒ††u‚RÿˆÊÁ€@¨Ïœ“¥æƒ¹H J@‘­>Ü $@ME–šæ"$€*EE¶Røpg$€5Yj>˜‹¨…È +UîŒ@ZpN‡žì3ÐPí…qZÊ£ $€tÈH{5kÁbØÒéx»î°@H ”€X$$K)DöÄñã#¾þ*/;£¨ ¯ »c$€ÐJư¹Ùsæ/i…Bì¬÷oˆ²#FބĆÕËôêéóx xÑ®Ö.b@H öÀ,4N(,$>Š,á’ïÐaµç¶Œ`<˜‡UîÃÿ‘8ÕeÞdIEND®B`‚lcrt-1.1.2/help/en_US/figures/lcrt-quick-connect.png0000644000175000017500000006761211752203002017224 00000000000000‰PNG  IHDRJ…›—ºdsBIT|dˆsRGB®ÎégAMA± üa pHYsÄÄ•+tEXtSoftwaregnome-screenshotï¿>nêIDATx^í]xTG="@BB€à”à.Á½¸¦¥ ÅŠSÜݵP TþB‘Ò–âV¼EJq+ ®I!@B üs'ì²Ù}YËf÷^¾!»ïÍܹsfÞÙ±7×!âá½7H$_µiœøgFÀ.˜¿jg’r:håŽMû³û¶@&w88f° `¸Œ#À¼y‡ç/b1ôÇmÈèâˆ9¿ÿ¥EM”Ô‹œÚ³1¼2»áÕ‹gxýò‰üËÂ0Œ€= ààì Ç "¸yáÉý˜°!ªÞ¥$J"Éï¶”ÄøJäS{À…ËÈ0éE»o˜Åòî ý¤^g_Ü Æœ¿ïK²”DÙ飸yhbßf’4 ü¬”`L…À’=7Ñ,àT(^ÀT*¥žÀK·±có:tmPP~û £×‡à· {àP³|‘7k&´F¼èEÆ„ßÒÊØ)_ d,ÙŽŽpp·(ÐÒÏ›7âϼ~ý¯^½Bll¬ qqqx/®Å#Sx ïŸ0iAX#À0Kÿ¹…áCãù•Ý&#Sц˜5{.:×OM”‚êÐçÛ D¹r܈¾w ¯ã_jeì^îs\{õV­\ W77¸Qpuƒ‹«+28;KÎŒ‰Á‹èh<~ŽèçâïóçhÚ´ *ù‰°Ã¿"îY˜2%oc•¼G~ªU¡(tȧ7mjãëU˜N#¨p8?·A:-õ›ýû¾` 8O‚’òKPÈS'¬±|VóáÑ÷5‡‚åõRù³ T¾,I êUª)¾÷:ÖÕ&Êî¿Ý‚#ÅV ¡i­Þˆ¡õ›×oäµx1¤¦¡5c õ"9R Ïªa7Å¡¸ŽŽŽ40×Ò•X7ׯÚX<œ2eC¡v?!SÊXøõp|ø~ ÐÈé<ŸþˆHAœ‰êW×÷3ßÔ“$IòÇQ±À§'­f«S_Ÿ¾ôz_…C¯e!z1K¯eLk»_ NŠí1&6.I8só1&¬<+Êý7Õ÷é³ê:ÅI.-é$ÝZå{ýJV©$ÊW‚)RâðúMÙ©HREÑ4Ô=G ôYE˜D¤×ALhÉ&§“¯%ÅÙ˜POÒ9£7¾›3þ>„ÞNÈôì6ý>™³dÅÓÂípûqŒ¬“rÃþ•A3ßÄ×èûÁÀ+¨UÄC6ŠK¿¸E:.BÙÁ»P²×Zx•i®Ö‘øç9sáZ2^Ù¡ÿ kùu¶]zãEÃÍVå ”è± e‡ìA‰ž«åwº®²_e{–’Q¼Û2^±Î¿Â=OÙTʼnõ>þŸ x÷åBÇn‘×d«ÜFèÐnË)ÙKv¨„°KŒ±)ê™u2¼Ÿ*ç†l?Bæ#ñ ì>z~ZŸ´n…³‘¹qðZ´Ô¡)봀߇“‹áýºã‹ó±ïòódÛ—>½¾U¿@žº=pêàßø¤a%lܼ]~,ø ââðRIP\Qü:®-f·lïÁ³Þ0\¹ÿRqœ•?GÞú}qõü)´i\+V­Fžz½ð´€ ú·yé²÷ø´šj[¨7NAc%õÈqô?²G™Q6+ŸÃЍëaƆK  ºGq’íQ ‰yëõÛö¥³GùFt;‰ôœÅ §Ih˜®êaªzDŽ’uE''§·Dižžÿ¢&«sF/YÏž>Ewg”Êåow ãë„—¼³úàQT<.Ü{K” ³áÌKù ª)t-ñwß*ŸËK#ÆL£ðpõŠÅþÕsqäF ®?JÐIÒúÓ/ðiŸIˆ|t]Ú}†G¢d.7<|Ĉ#ѯµ>½Ù+| õNÿv!ÜâpýÀ*ù½xí°údâ4l_<ÿ;ì<ÿq!Çeß\y±ôp$žūíÓ'‡ÿG2ÞÔYßãÍ«XÜ:²N~/Qç3¬=%ò’>{5q£Þ8ÆÜvMà ’ƒRz6.ëƒA-öCj ]£{É‘$]KzëèQ¾ˆ‰Gdt\’ð26^’-ÞdÈAM˜Dž$ô—‚Š )ÅuÛ‰bâ^%«3¹|øZRìS‹I\t¶‡‡28™œð‰Œòús±ÐÿF†fïOÔŸ¸Gñô‰«§¯ŒrïîäÏêŠì™P³€êuExÔ;¢í3h„l³¿ù÷C¯£\¾ŒðÉ쌲¹€lîIÛ„>½.Ùe¾O"Âáë™^x,¿gÏ‘gCct÷í„IÛ2 BUµÏè¸×8òŽ(uÅqñÌ!Ó­Ú¼ köaâÒ}ò»o®Ü }‰‹÷â ÏÞÄ8¾/žW ©­OŽŸò3#ê4êåk<ŠŒO1ÐýÄ¢$ éÖÆ>¡íÈn"ýç(ž˜ÄAЫ$ÁŒ3&!Kº®"Iêqº¸¸ÈíC—ž>ê&§“¯%µ±¸„_9,+´Rµu ç„|²­.¯Ÿ;}Rôö ^åO¨xG'õ(Á=KAè’—OïËÛ¹rç[ü•É(ì Ëö.åð=ÅôÌ Œ›ú Z·l ¯ŒŽ¨’W¤hÉ•QŸÞ˜ÈGR¹—·œE›+’/«üþðÁ}ÄŠáð½Hm«]PØGûÚËw<)o¤GeK@Ãrج uü‹‹¼ÞàŽÈKŸ½‰14¶^9}Òv“ÐMKØÖ\øçü#,Ús+Is¦kt/¥t*Ixžy3’¤È‚íPºt)Œ1#†{û—>—ËóƒÄСC0xÐ@ èß}ûôFÏÝ‘?_~¡ø e ¸š£ñߨó3ž=yŒ>GÀ'iQ©Õ¯"Š6 ÖþXºžîbË–¨ñïÈFT³ÎûÈàâŽÂ {&iT‰/„\!/ 62e…—§'央cUüS'ŽbÁ”þr½ט9¨\¯%<ÄN²”ʬOïýÀmRu›'g«×A~ß²aø1pDb¤{î‰ÎrIr¹‹ÕSÛãäñÃè9j6M; ÿî‹ÄJxL5çÎ"¯·Xäq.m˜„à[×1uöè7{"nŸÕK”wŽ®ÂßODŽœ¹0aáTé¿OïßÄÎË/e=kÊý«§°dú@¹¸×²Ç$¼*Õ.Ŷ Oï­~Æö5KШY+ÌXqÙK7Âß+IJ_~FÎ,à&zΉ%±=É.¹8wެÄò'¡hñ’˜ôËŒûù/´üès\ÝûîG¼@±F ßÞEˆŠ|†5[öàë5'ù0Ã3 ê&÷ƒ¡Ù{ ‚lT&› ôY%'¥´ÉÝ£trÃùò‘Íðøº²× ]2ÉP'ßÒˆŒzç¨`<;» ¯_Dè}Ø8‚y ÞÕ[¯Å\Z ¢ãñÓïëñž_aL?·Nþ ŸLΨ&~ô¼Ý°ýrPBŒÞ5ãÓé?×(¢wùÕ º¢U©„—‹>½×Å´ä.AÈaOÅ>^QÆŒ®ÈáéŒÜY\å@aŸ¤¶R‰íOü=¹8wD÷\‰C°ØJõRÌadÓ¹<Û;rx8‹iè³wÙÉX\ [±Äê,Éô–žæ­x;Ó¾æXºtÿ 7ŽlHRòaѸñ Z^o(RSvŸK˜ÆñË‘~¾ s÷šâWý#ü²h>>«š0OBí|ø¦Ç‚ï²yMü´v¼Œ¸«³;J]UçLÞ(Ùy|Ë6Ÿ³""Zì­Ë_VÌvWDüýspˆÔ«CW——ï¥<¤P‚ -âäÍâ¯L$ùݺÿ÷P¹zmÿ÷/TÊb†tåÈì(ÏÍ™Å9Dp‰ýr¸"W™Ëî'Wä÷Tß=Eo4‡‡<3fé\á+îÑð7¯§ÈS¬°kÆ/—KL1¿íæ‚ÜB§ƒ˜%ÒÉJS؉†NúôRš¬‚ä³döeu‘6eÍèŒÂÂÆ"ÙÄb¢Ð—ØVÊ#ñ5%q²P1zfùx%„,ϬPDrf‡>{}29ÁC¤Ïãí*—®†'੤9Žþg (ô9*úWÆÓЋIæ³f΀B‚)$ž‹T]§8ÉÍSzç+Ó§þC™|™ÕuõJüØí¼ô"¡G¹jT3DÜÐߣÌÓlòTúP*¡ýF1bÿdTT$îß»ƒÇ7OÃíì;ûm³îâR‡fçµ×ø÷ÒsI&í*gB)ß„m^,Œ@zE`ÕÑ0tîönMÚ£4¦LïUûKÏG›jÚ=ÊÁ'åš1ÍñDQŠ-?ÅúlA&Oï„WÅpŠ^]¤Mça‚(¯_¿Žì—æÃ1æ‰1¶rZ#yƒç1oà$8²aad«Ö,Œ@zE`å‘0T­ß %ýò˜´nÜÁ±¶ mum¢°><(×U@”Â-D®æÂÝ'D×Õ9ƒœ¬ùâ9Þ¿‹°›õæ*8Æò©è&­=VÆ0IX°7a»š©¥×û9µT’kœþëÞåzA”Ooêz›Ú(ÖÇ0Œ€5#@DÙwí[¢\:¬)^e¢´æ cÛF mþç[¢l&ÞdaF€HŠÀ޳‚(kרöfÿ¡#xòÈ-ßP})¥sgá®üm15m&¼Äšþð^Ì1u£OÌI&x¯äž¤10rZkC€&ÛÍÈõ ùõ2·ðª·¹fýŒ#î`¢L÷UÈ`¬óv&ßuV-P|&J €ÌY0öˆ@OšûŸee¢´ Μ #À¤c˜(Óqå±éŒ€u# ú”âÜZ³ ½ÁD)ZZÁ"%¬»½±uŒ#¦0Q¦)üœ9#`ë˜{EÇ2øM”ÔS…²« oÿA,Üæ!ÜÃK/22&L@µjÕP @”,Y]ºtÁÁƒÕè*‰“'OÊ›Ø5ïíÝ»Ÿ}öüüüPªT)ôë×%x®ca AÀ6hR¸·5¤ð‰ÓܼzþÙµ\2`̸ ¦Pk÷:zõê%Ým¬Y³7nÜÀкukÌ›7O’8J\¸p!Hß¹sç°oß>xxx wïÞJ“sk œ,Z²Tmƒ¾´‰¶–í¡C‡0fÌäÏŸô‚À·U«VX·nÚd%q”6¤•+W¢~ýúÈ”IønÏ– ãÆÃ‰|ò½Rü8^bt3åöaÊÔé8yJe2lI×é>ÅÓý†ù‘7)Q’¹ÉàqæÌYlÝ´7®\%š=waïî¿d/ôîÝ{˜óíwòõLUUŸõ¥¡ûó¾ÿ®^»†m›7âÀÞ=¸ÿÝAĺò3?ĆçP¹re >\üêžÄKá89QÇP öïßC“s:F@'#†E™2¥ß’e VÜ“§åuºOñÒZLJ”479eú ÔªYC«\cG€OÖ¬êk›¶lÃø±£@=Ðì¢ç2~ÜlÚ²U'úÒløóOL'•Èé OOŒ3Êàü4 :-+hÉ’%È›7/† &ç'«T©"ç,Ÿ>}ª6KIŠLs‘É…”Ê„‰'bÖ¬Yi 玠Ó}èPŒ”ÄÙ«#‡ FéÒ%1YâÁ!!!ؼy‹üN×é>ÅKIåa 1 Qª†Éõ4AôóhL›2QËö9rh}Gþ|ùÔ×òçË‹ðpÝ @úÒ<|øHèÌ›,fúÒZhCòðôôĨQ£ðÏ?ÿH¿é+V¬~Ô{öì©V§$E¾sçN²!9»Ž9‚Î;cþüùra‡…02dÀ(êY Rœ¿p1zö–Èïtî[ƒ˜„(U‹9çOà§¿“½D]Bsm!¡¡ê(Á!¡ÈªÑãL.­¾4Ù³gé1$­5T„>hJ£pá˜]kÞPI¥õC«ÞS§NÅêÕ«Q®\B£ea E 5[ƒœEÏqäð!hóÙÇò/}WšÞPûR“.MˆrØA²×ICu 9}}1tð@µÝ=ºuE@ëO´Þ˜Ñ—f@¿>(äWÍZ}€:õ"wîÜj}úÒ¦0KÆ4h6mÚ„ºuë¢`Á‚Cï ¨ÍPG©Í“&M’ÃózõêiÍg>þ\© ŽÇh  ¿7©Ùc¤äçŸ|¬°'ùV·…^adŸ9Vа#Ÿ=Å‚æ`ÀÈÉÈá›Ó ,bã ÎÛtè‚hqz¿9%£G¬Zö 7kÁ'œ›hÖÍ0æCÀ6Y3Ñ›9惙53Œ@ºE@é$£±ñ,PšÌQZ \œ#À¤9Æ2 Òôæ/(¥ù1æ»D@áî ý;€t­ YY&J ÍÙ0ö‰€Ò^¡¡ñ,ƒ*¥epæ\ûC@Áfs㺓ª-B懖‰ÒüsŒ€Ý"`h?Qi:KËDi)¤uåãyŒÚkñò? #`S˜±W)ñÆZ¼8±Ìü4fþlªÖÍS'G'(XçOÿ'+ž…°¢žçé@Ô±¸pî |²g‡££x/ÜŒÂoæ˜\¥ª_ÅÇ#** oß„Ðà[ò½nF =#P¨¨ùöQOÒÛ;+Š+ŽÜyò&{®±†…ÞB÷>ƒÀDi,’&Jï(†ÞÎÎ.ppäN¾‰ e5iˆÀ£÷,’»““3ÜÜÜDÒ<Ï ¥Eª‘3aôŒ¥•Õ^¼ðùƒW´ CK~,Œ# Zóû®®np¢³+Í L”fÕP•¯Åœä“Á¸´í{<>‹×bÎ’…`t#à(È1kþ²(÷ñHxdË-°0Œ€.^¿~ƒ ¡Q¸çV5»Í~u^˜0&J“Cj¸ÂHqfß¾o>ÂÕs±ÃÃqJFÀÎx½¬V¹¿9Š˜¦?`ZE”æY*²³Ê2º¸bN’†ÛÜ“4IV`gÐ3c‰©*&J+mXäZ–…`¬&J먶‚`¬&J+®6`¬&J먶‚`¬&J+®6`¬&J먶‚`¬£‰²`‘”O Ñu/5˜˜JOjò丌#À¨0š(JF€`l‹ell,F2*Ë0zìxqD¬ß}û qóV(Z²,jÕk€UkÖÊ{ªÞ$ýÕìYÒç+W˸”¦E@k\¸xI­/8$ÝzöF©rþ(^ª:uéŽGááêû”~ùŠU¨ó~#+UVæýßÉSX·a#ê7j¦ÖyùÊu:'ræì¹¨Tµ&Š—.þ‡àùsí·¸÷kë —Ï°QΞ;÷ðw÷_øg×ܽ{s¾ýNùà¡#0h@?œ§|¯YñNŸ>+ïݼzQýWõY•èè±ãX¿z%Μ<†&IòUI×_¡Ë—qêøaœ8z…üü0uú×Zu|ðða¬^±L¤?ŽZâË®=ðï¿û±ü÷¥8{ê8Z4oŠ‘‚ÜUòÓ‚… º€­›6àä±CâÔW̘5ÛÛ —™°+LB”ªÞ^⿚HnÚ² ãÇŽB6dÏ– ãÇÁ¦-[ÕQ\Ý\ñðÁCD<Ž@îܹðõô)z+bòÄñðõÍwwwôèÖAH•d׎­¨Q½š$3 :ÖÒ9}ÊdäÊ•SüÙåËN²w8eÒ­kçϩӬ^»„Ý9sú"S¦L>l0vîÜ­¥31™ë-G`«GÀ$DIä\Ð,}¸öæÏ—O})¾¼çScþßcÿÁChð!êÖoŒ=ÿìÕ ž—Wu"»xãÉNâÓ6íP²lE9d/Q¦GDhéôööÒJO__ÓÔö ›4—ú(T©^[k8¯×`ŽÀ0é“¥’’ûˆždHh¨:jpH(²fͪþ^®l,þù'1¤=ŒIÆj y•èO§w¿èØ¡ŽÚ‡W.à\à áBظq³gφ£÷iý(nF€°m,F”­Z4Ãä©3dŒÂ¤)Óв¹Ý~baäڵ눋‹—„¦y§§§®ß¸™ªšˆ‰‰›v»ˆ@=zì„T¥O.rû/Ú‡ÛÁÁ²÷J =´ £)¼˜c4̬€°:,F”Æ ’s“õ4‘!§¯/†¨¤I£èÕ§ŸX¥®(HæÎ™¥¾×£[W´þDkÕ[’3§O‹73QJ ½Û¶ïÿ ú’è½ß«GwT©äv;Ë!}ÿACÑHØÍÂ0¶{a´‚ú|ö{¿@Ǻb·]Ââ³vçÎ+°ŽM`¬å ñû¾|úí|p¯W›Æ0v€€Å†Þv€%‘`l&J­X.#À˜&JÓaÉšFÀF`¢´ÒŠå…+­6Ë.`¢´†jn¼É™;ù)faåÐ3CÏŽ¹…·™aú£ŸGáìúiÈs%óff·µ 0ã(Œ‘ä…;‘¸çV5»ÎAlÌK“ƒ¢òëÍDirhS¯ð•xËçed8Înœ…ð[§-â§8õVr FÀº ž¤OÁ ¨òÅ$dp÷#²W&7‰Òä§ÐÑÉ ÎÎ.ppäÙãäÔö„À›×¯ÅëıZ¯<›²üL”¦D“u1Œ€M" "Jî¾Ødõr¡FÀ”0QšMÖÅ06‰¥MV+Š`L‰¥)Ñd]Œ#`“0QÚdµr¡FÀ”ð>JS¢i„®ø¸8á¾7¯h/¿ c’œÔno´99: ‚np2ÓÛ9¼=ÈŠZ¹½xø0 ÿîùwB‚AþÃYF@7Nbïqž|ùÑ´Ekx Ÿ\šîcL…¥©4žè¨(ìØº¹óD…ÊÕÅ+ŒN&ÐÊ*ÛF€ÞÄ9ú?„ÞºÏÚw¯0¾0y™(M©á ##ŸbÑÿæ¡÷±È™+áŠ8%#`g¼zI#úaÔ¤Yì Âæë^ÌIÒp›{’6_Ó\@#àääl‘©*^õ6qű:F€°=˜(m¯N¹DŒ#`b˜(M («cÛC€‰Òöê”KÄ0&F€‰ÒÄ€²:F€°=Œ&Ê‚EJ¤ˆŠ®{¶%—ˆ`l£‰ÒVár1Œ# BÀbD¹oÿ4nÞ EK–E­z °jÍZu-Й³ç¢RÕš(^º<ú‚çÏŸ«ïSÏtÉÒßP½v=ø-)¯Óµ+WK]¤³E@k\¸xI&8$ÝzöF©rþ(^ª:uéŽGááZ:—¯X…:ï7B±Re¥mÿ<…u6¢~£fj—¯\Ql§Ê.n^Œ#`[XŒ(AúáœxåhÍŠ?púôY5’?-Xˆ   غiN;$^rwÅŒY³µ>s欼ãÊõõ£ÇŽcýê•8sòš4n„ÑcÇ«ïuíñº|Ù§ŽƉ£QÈÏS§­¥óàáÃX½b™H´Ä—]{àß÷cùïKqöÔq´hÞ#ǼөÄNÛj\F€ ,F”®n®xøà!"G wî\øzúu ¬^»ÆAΜ¾È”)†Œ;wkÕÐØÑ#à“5«ÖµÉÇÃ×7ÜÝÝÑ£[]¸¨¾¿kÇVÔ¨^M’®‡‡†„ƒk¥Ÿ>e2råÊ 777Aªd/vʤ Z×ΟJ•7¯¾³›#ÀØF¥£ð˜Üi7 ¯ä½S?ÿÇï±ÿà!4øuë7Æžöª {€†MšËá4…*Õkk “)bŽ9’ îå•E}È.^¸}UÉ©À@|Ú¦J–­(u–(S#"´tx{{i¥§/‰¯iêTb§m4 .#Àh"`4QRìÊÕ«IP½tù rçÊ¥¾^®l,þù'1´>ŒIÆj i³gφ£÷zcª 9Ä6¤Êz÷ˆŽÚáØ¡}r¸~.ðÞ¼1î GsØiHÙ8 #ÀX£‰²}Û61j¬˜s<ƒ˜ØXO‹kcо][uiú‰šk×®#..^–æÙqí¿h#ˆsnË^!- Ð‚Ž171ìv!$4TÌ_N0FL«ÄNÞe4̬€°:Œ&Êž=ºáã>”=Är*Ë0JÒçŸ~‚žÝ»ª ܤQôêÓO¬BW” 5sçÌRßëÕ£;ªTòG»ŽåP¹ÿ ¡h$â#3§O‹73QJèkÛ¾üý+£N¦5‡FÅ FÀì°+³C¬?ƒÈgO±à‡90r2røæÔŸ€c0Œ€1ƒz`ìÔ9|%· F€`Ò£‡Þii<çÍ0Œ€%`¢´Êœ#À¤k˜(Óuõ±ñŒ#` ˜(-2çÁ0é&Êt]}l<#ÀX&JK ¬/€œ¹“ŸbF€P޹«¥gÇÜÂDin„èwrtB‚…¥3wªxF€Ð=+ÿÝ ¿BEñÆÌ Þp®¿>Ìã•xm3** oß„Ðà[ñSlöBqŒ€™ žd¾ðq[¸‹CqÌ1" ½…î}‰ÒÌ•©T½£¨tgg8hœ¸¤4-Çcì7¯_‹ó!bµÎŽ0%L”¦D“u1Œ€M" "Jž£´ÉêåB1Œ€)`¢4%š¬‹`l&J›¬V.#À˜^Ì1%šF芋Cll ^Ñ6ãb7 ëNJ ^–GG¸ŠUTMW&–È—ó°>x1ÇŠê„N{ø0 ÿîùwB‚y{P uS¬d-¿Hæ¨BA’ÞY½Q¤h äΓâm€t.6ý#L/kˆ}È®®nprv6yM1QšRÃF‹=”;¶nDîüQ¡ruÑ“±LÏÉp‹Ó&åÖ +ѾËWf%/ÚÄtæÀ¿J5d̘1m k¢\mýG˜öRæÉ—M[´†·É· 1Qš¨!šBMdäS,úß<ô29så1…J›ÔñËüoÑ¡koÄÆ¼4kù¨g²ò·ÅhÔ´2gö4k^æVnë?´ɜÞh ½uŸµï"ÚÆ “BÊDiR8SÆ® ”á—@”_™(]Ä0nÙ’ùhܬEº'J{ø¦QÀ¤ý0jÒ,“»ƒà}”ÊžMŽÅ¤oÄÂà+1nËÓ9NNÎfŸ×çíAéû1°?ëiG€%‚ý!Ë%Ö%7t…@Gšû_º‚„µL”™³`ôeú®?;´^ô)ߘ9ðŽ;lWº‹lÓDY°H ué5?s+`F 5˜(™˜RS 7u˜{5'uÖP[W…²« oÿAü8uJÅ6÷ó³wï^|öÙgðóóC©R¥Ð¯_?tM%úÒS̘1eË–E¡B…ðÕW_Iß=Ö-º™rûŽ¿0eêtœ<%È2¶¤ëtŸâéf]ÃQH|Æì¹óp?, {wÿ%{œwïÞÜo¿ÓÊàÌ™³Øºin\¹ Y²ã±ÿ~øûû§Xh}÷ G+}¤4Q&.¾fC {?-X(ú ²qœl0vîÜ-“Ö­] Dˆ$7m†› Ñ-Û¶Ëïtî“ìÚ±5ªW“$Ks,ǤqXQµ˜£Á)Ê8•‘¨Ç—3gNyŠ Í)?^­áÏ?ÿÄäÉ“åÐ){öì˜2e 蚦èJOë©S§"W®\âæÌ=z4vìØ‘J -Þë¥C1R âøŒm©té’˜,Hq‹ ¤1òؼy‹üN×é>ÅKI‡!.ƒUÏv¢ŸGcÚ”‰j`ÂÅ('¾|êïùóåEx¸öbOŽ9, äÛÜŽ9‚Î;cþüùra'±è»Ÿ&F§A¦&!JÕA×P!qC {€†Mš«çaªT¯­6ù Lè lÚ¼ßÌœŽµë6Êï§NŸ–ä(?‹8Ÿ¶i‡’e+J=%ÊTÀ㈈4€Ñ|Yzyy©•»»»kÇH«”ùóç÷ŠÏš+—tCWzêÖ©S4D§P¾|ù$éÍW2óiÎ!FQÏRâü…‹Ñ³w?,X´D~§ëtßÔ¢jûçOà§¿“=G•øˆždHh¨ú{pH(²*è=šÚÆÄú6oÞŒ>}ú`Ñ¢E²îS{ßÜöY“~“¥!Êž=Žܧ^-¤†Fó3$Ô{¢_à­ÛwÀÝÝ ï׫+}öîÚ½aôî7;´Ã±CûdZj¤oh3²õ$©·¤’àà`ÐC©TèÇëäÉ“rÈ® ¡´R='§(õo8Ï ŽJ5l*–/'Í£¿ô®ëOoÚµjÑLôfgÈŽ…IS¦! es™xzzàú›Iâ˜jnVµi4±zõj”+—€‘¦è»oZ„¬_[šeû/Ú`ä˜q¸-îøøx\¾rE.訤Ž^Ó|ㇴ’—>h‰ñ“¦€®«„.hXî"ýb«|K†©\ZVq@@Æ/{èó| Ø¤:ÈÅ Û·oË:¸té’\бfIÍÖ gÑs9|Ú|ö±üKß•¦7%Æ ’=L–SÈéë‹¡ƒêÌ¢G·®hý‰zÜ”ö®I“&ÉÇzõê©G4ªP-¨ê»oj{¬]_še¯ÝQ¥’?Úuì,‡Îý E£F ÔxÕ­S[Îã´l‘ðËK= GÝ· 9tmæôi‚Lg¢”Hß¶}'±jWÁÚñ6©}#GŽ”s“5kÖ”ÁW<€#FŒPœGß¾}Q¥J¹ñ˜V½iF FÖ-ú{“š=FêA~þÉÇ {’ou§òF}óÝ4‡>sÆTyÀ,úL×T’\ú>_õ'­ŸL²Y_^JëNs¡ù™Ö HôÝWš­ÄcçbVP“|p¯²J ƒ{Ûtè‚hq"¼9%£G¬Zö‹mÜûì)ü0FNFßœæ„-MuÔc§Îáƒ{Ó´8s«B€Y³ªê° cÒlèmèr!M€ÒIFcã™ÞrÖ˜Ž`¢LÇ•gŸ¦Ë€JÓÛ'º\êä`¢ä–‘®P¸;Hÿ ]kBé 6Ö0QZeÎÃÄ(íÏÄæ²ºteº¯B;+€‚ÍæÆu'U[„lWÀÉÉI¾°a«B¯œRÍ)L”æD—u›Cû‰JÓ™Åè4Rêäè„ Ëý›†¼ÃžFf+ΖÊtðßÝð+ToÌøcÀû(W‰ù"Úƒ“zS Gû(?o÷%¢žwz¸.[èˆ4·LX¿z5m& ñ4…éi¦ã•x㊎Îû{û&„ß2»ÿkK”z’ù DÀÇmá.N¿2uÏ9,ôº÷&JK×l2ùE?ÂŽ­›PÀ¯0ÞoÜB #ÄûÈ,I ¢lÑ2À¬È¼yó·nÝÆƒ‡P©r5yî@zGA&ÎÎ.pp´Íä›×¯Å+¸±â@(ÓO/0QZQë·õ_}SA]¨è;gq¦Ò™Xƒƒ#¼½³¢H±âÈ'/Âk®|Y¯u"ÀDieõbë¿ú¦€ûу{¦P£WõèécGíé€#¨`¢äÆÀ0Œ€TDi›“\ýŒ#À˜«"Ê"%ʘ°h¬Š`Ó `UDiš"¥N‹9ÉÙœºSWJŽÍ0Æ `Q.Z²Tºš¥¿©•´ ‘äò¼zñ\jMO6¾9u›Ä@VÂ0#`0Q¾{—V¬\1£†cåª5b£çkƒà„Œ#ÀX3åþ‘%‹':´ûBì;󃇴ʙ\KuMóoâxDºõ6‘î!ÈgÈÅK—Õz_‰ ¥³…ãøª5ê tùJ8x˜ÚÇE"])¥O)OÍüãââ0ýëY þUk`ÉÒßÔy“OòæWοªt=Ñ¥{/gU¾ª¿šú4?ÇÆÆb̸‰¨P¹º cÇO]S‰.Û­¹±mŒ€= `0Qþ±b:´ÿBbÔN8 [¶|¥b¼TÃ]ú›xèK~»W/_†“Ç¡q£†’PT²@¸ º€MÖJÏ‹äwdÖœoµòM)½®®]¿ŽÍ×a﮿Aî\UÒ㫾ø²c{?¼GEÞ~ JR%Q¢{î¼ïöàvÿ½ »þÚŠ»wïáÛï~Pd»b`9"#À˜ƒˆ’zWçÎG+•ã¯æÍä÷PáÕÍX™8~¬p’•Cº¤íÖåK\¸xI­ríú 7fræô9A6tvîÜ­•¥®ôúlûSø97f´ÔOîBÇŒzç¨kÇ–?Q½ZUI΋Þ_‰E?´jý1ê7nŠÜ=æéS&‹Å›oPV —©'èï_!Uå2h€œ›lи¹ ¾9r`ðÀþŠm爌#`h M5µ˜R:ç(in¬A«6òœ…`[D æÅsüwx¯\I,|(†-Ö8—‰`Ì‚€AÛƒÌb +eFÀJ`¢´ÒŠa³FÀzà9Jë© ¶$ }±gOâáƒ0EΩh3‡oN”-Wnâň䄶Ĉ¯…Ó à(ÜtЮSŸ<¯dŽ’‰Ò4uÈZÒ1‡îGþ~bïo9ñ’è„—+ÞâäÏH~#ââý!©—ƒÎŠmd÷P½fí$%§twî„âÚ•‹ˆx!Ò0YÛ<¤/£¬Þ("ü&™Ú—¥±µÃéí­›6 m§îòM+"9)¾Ÿéí4Õ5"<úL”™Aì©Ý°j9Z~øQŒ¢££ñß±ÃÈ›ÿ=q¸Köªi‚VD?NAgNánhü«˜Ö;¦¢´ª9JzÛ……°44L&çnŠE%õ}Œ›×.D–úòâûé4%Ê ¿Av/w´iPÄ ´è‰ cÇ`ÿ7tªP·ž½Å¤¯?Š—*‡N]ºã‘˜TWɾýиy+-YtlÚª5kõÞ«×  ®^½¦Ž·~ßêÏtî“[‡QcÆË3&)Œ;^ËÕõ‚ɵDõÚõàW´¤L#Ò 1ZIGî'~^´Ä 8‘i¸tZcJV¬Š…Š£T…jxõ ·¯½;DZYŽoWÐU+éü7aG¡áí¶-eØ›6–eˆ2`ö†bóÁ˜ðeˆ³3 ÚÒ¡’®=¾B—/;âÔñÃ8qô ùù‰£Í¾Vß,N4 ΉÃy׬ø§O'øK’Ò½Úµkâø‰ÿd:~mÂä©j?=äv¢NZòÞì¹óp?, {wÿ%{ºäêaŽðï£)gΜmE¹q傼ü­pAG®ÑžÛ¶lÄá#G ÆšoŸl(^¶2Ü3y ¥â g+S Y²f3]&éPS¾÷ ¥C«Mc²eˆ2þ%þøë<"ÅŸßĽÄôeÇñ~ùܨVÌK^3D乎Óg VÍ2ù®[Q£z5µ»†áÂU„¦»W7WñöÅC¹ 8wî\øzúu¶)Ý«[»ˆI6nÚ 7á Bå®Ó}’M[¶aüØQò(µìÙ²aü¸1âšöÉä*WªLÿܼE+Í‘†%íÈž+2{xŠ}•ïlqvÎoŸì§½Ad£ %Ë”ÇW}úÉ­DÖ¶j“@ŠÚ¶‡Ü¢‘UZ®P¿‰’X„(ç¬9ƒ £ÃŒ½ˆ~ñÛŽÞÄù›òi ¼y'CjDµ˜CÃÞèçÑâìˉ2ù©À@|Ú¦ôàHqhHû8"B­zþßc¿ðÙ<àCÔ­ß{þÙ«÷ïI¡W’áæ­øfæt¬]·1!?á‚î“PcÏŸ/ŸZ_þ|yŵ/*É!ΠԔG‘/o^­4©ÁãZ?É-Ú ¡°oïn9Ç>rôØ4¥Ÿä¨MKJLɦ´ªq‹e/W¸8;âÄåGèóýQÌY„ò…¼QÞÏûÝ|E*P-æœ <Ÿ~üNöàHz÷ˆŽÚI4¼¥ûš[;Ê•-ƒÅ?ÿ$<<Ƥ c1RÌ)ª$¥{3f”¸uûáðÌ ï׫+ߦC‰É­9A#ñ=Irº¦’àPdŽÄtI¶lÚi4Ó§Žj­èa }L?4w®b¥üïÆâÅ¿ jµZ(PPÌÝ 11±1r J ¿KFŽ#¯i¦™?!*VªŠ¢ÅKcè°‘â=ów÷_Å¿Â×âÐé þUP´X)ôÏÉó(ñrÇ[ûçIßIè¯ü¬OõYŸÎÿ݇†š¡è°T¯Y+W®6 ó¦Q][„(Û7(ˆ5ãêÀ×Û ;OÞÅ•Ðg¨RŒÈM³%¹k ¡±‹D:£Çj¯†÷8×®]G\œxWÌ›¾~ÂU¢ë^1¼¦¹Î?h%£Ðã'M]WI«Í0yê ¹xDaÒ”ihÙ\g¡>hÕRí‚ÒPz–´Aàx›&5¢ì0ký}µwÃ{U\àô™3ؾun߸"Ÿ‘ofÏ‘®“÷‹è¾váÎÝ»˜=g®Æó1=t;wlÃáÿâáǘ;ožúþ?Íǹ  ©3ðä115å‚éÒÍIòyß¼*¡ ¿ ŸßÅS}Ö§sàà¡,Nõ¿pî4Ö¯YrΗž™Ò"DI»éý‹xcÛÔ÷Q©hB/Ë_üMxw6!˜BfNŸ&‰§”z·mß)‰»†&ÂmD/1'D¯B͘5sç$øå&Ñu¯nÚrÝRåžWü¥asÝ· 9”~ØA²gKÓrúú —¶u‹ÜCdÉ≚uê£Y‹P­jSÀÀ: @à_€Âò¥?cù¯ EX„•¿-ÆúÕ`ÃšåØ°v6 ‡z®_-üʯ‘¾ßjS“¦LGmá°NSÈ•±Ï»ÑȦM[@n˜i’={6Ù ¥kš¢ºOqèóŸnVß^µz-&O‡\9sJ7Ï#‡Ã_;wêÌS_Ùôét >| ¦¾K—*³¾ž®O¥Uß7ëéAôú"½™£)ñ‚׈FÓ2nðʨÍÓþ—ÂÓçÝœU#ÇÆÙ Ö®D‡®½EyNRD_è0êPÉ£0Ôß Jì­Ü¶u3>žGKTT”èÝmAÛŽ]-¶iJáâï|DeΜI.DN‹xDp$tÿÚ¥sZiŠ•* gµ]—._—Î'ÌSšËbK“¦+dÍûÅK'ïæùêÅ„]Éå©ïš>gÏÇ?ýŒÀÀÓba,3Æ Ÿöõ߯gT›É˜Ù+_‚ÆÍZO¨´#Á4b‡bùi†ª]—⛫ѠÏoZ×) #–$^ñBœôBÌñEË@DõÑ‘Oñ<ò ž?£ðnP¿½I—s®]:+Èð,Nÿw?~7G$õ“oUרw*ç¿℈ýÂYÅ‘cši4ïß^Bz¤ ñi¤shßn™§*\½xFgž åJn)J™Î²eJaáüïqüÈ>ñC0 £ÇMLF_j—‹ô£m®fzSï0µÁ\e½Œ€¥Hn_µ¤Ꙧ’»ß¢YS± n¦˜îy,Ãäi3…«ãfj”fšX¬¡¡<…©3f‰ùñêûäæyô¸I¸};DÎÏ_¾|×JŸØO\¿qSËNMÛôé$ýW¯Ý@¬È¦_½¢)¶wå.\¼lª¾«O¿³t%¾ÍϬD™Feâl+A@ÿbŽ®^›êÞAýäмAáêX_ßìÂÕq_­¡¿pãÜ<à#ÔmÐÞ^^Ø?a*BîQI¸WÖróÜà}=Ên]; wÒm…;é²ÉÆÓ§³‘ÐßG¬®—o7Íš=sfMKÔ£LÜcÕ÷]³Çmùê5ë¥å‹Ã92©G@5GIÃnõ!½rBRÜ+†ãôWØû6ˆ¿ò³¾9Ê6ºÈ!»¹¥HÉrâJÛ¶dôÈ‚UË~±Í9JÛ®:.# ɵÚ$kŽï Cbóç“Öy¤á«Þà¡7?錀ÙHíb…¡ñ[ Õ“Ò™­²t*f¢LÜ9W{AÀÜs…¶ Y Ÿ4Ï# Û e‚ÏYÛ6 ÜÅÿL‡@Úµ&ʴÞs¶uì¡—gé2¦Q›±*¢d/ŒiÔ 8[3!`º¾kJÛíAf%J¥)ž¥¼0êór¨ï¾™ž(Vke¬]ñ;Ö®\&Þë^‹Mâ½îÍ®O•…ŽòõGy¤¥¡'zs:5v„£ÄSàšbö\Ó³F&Í´h’Ö‘ç§_tħm;àƒ>Å­?AÀ‡+6ÌÑÑQlÏ&NÎ9#äc1‘ðôÉž]øTw6^a*5˜uùêP ò˜’œ¾ú_ÍÙƒ~õœQ«ç¯zÅÐ$/ñšUqòʤ‰ãà£çìGUþ”žÎ³LIôÝO.]â4—¯\A‡/»¡{×Î2°X7¦ÞpNû ïÞ Å•ËñDmªÓ±¬EóZG=Ioï¬(R¬8rçÉ+z–FøIdª’C1,D”%‹âƒˆh>ìO þ¼"Ü#ƒä!úNÒ$%:Ãqš8WïÅ‹Xð¿Õ”>"Ôw_QÒi)={÷¹}çM²X?Éåš¿%1¼Õ½}sG÷›9”ðµxÁ9æåKÄÓéC,&AÀÉÉnnn¢GiÚ°¢4mŽ)‘üÒ˜©½0RöÉ —_[°p1*‹¤ÉUÄpqr4yCL‰U×ãââäá½þUj œ8)zÑ’¤§n&z’œ;{¦š$_‰ÃgŠw]+U­‰ââtêþâð`Õ¢ÕgmÛcë¶íZY“S²*5꘤a±Ã0fèM¹ÒÃì.NÇ÷¾w8˜ò6`j’TÚB,C”ò¨´ÐäUqǶMÒûáÃG0ï;ý½ÑyßÿOœ†r Û6oĽ{ä‰Óš²ãï!|Ÿ,]ü³ÚÙÝÿiÁB]ÞO;$ŸÑ¡Á$}z÷¼þ'{*ùþǟйS¥EáxŒ#`,C”ò¨/•·DòYBŸÉ¢>Ùð矘0n,ræô…§§Æ¥•„zŠãÇŒFéR >»U²zí:‘nŒLG§K6;wɃcfqMÕ«¼yëö8ÀD©¯2,pߨUo ˜ÈYX‹¥¥¼0*ÅMÓó!}&·úäáÃGÂÉXʧ¯“'ÈQcÇ©}€«ô……=@Cq4–Êsd•êµ¥O•ôùª'¨ICôo¿û½zt“ó0,i‹€±Cï´µžs75!JKya$pœñRL¢«$"âIÌ4½†ªOƒÖ -ù*!ÏŠ)ÉgŸ|Œo„__õÁî=ÿ¨£Qº£÷É•vU ‘*iØ ¾°9¾™ó­<6¿í矛ºŽY#À‰€EˆÒR^ ‹Å‹a¡p÷IdI½¹±ã'&ˆ…?§A‹0ešð®à]Q—|ÜúCájª˜› óg‘"]R‰Dz‹ü„áÂèº ¥ºö_´nqÇávp0âãÅéÒbë ÓUBÛúô-Aß>½à"ü<³0Œ€u!`¢´”F‚vÆ´)عk7ÊT¨Œ?o‹Õ«%A¼’E4m€Zuˆ½Y^â´èþzke@¿>(äWÍZ}€:õJÏrÉIåJþX±ìWÑCœ'ɯWî¨"®µëØ%…wÈþƒ†¢‘ð©)äªà{ïȘ…`¬‹ì£Ô,6{aLÚº÷ê#}€·~NX,€©7œ[¾œ£1XÅ>Jö˜rÒ¶ •Âçò­Û·ÑB8‹baëDÀ¬CïÔz`Ô÷VŽuBh¸U…Š•ÂOó–‹@iµ‘Öpë9%#`?˜•(íFÃJJ«à´é½|9òtÇÂ0ÖŠ¥µÖ ÛÅ0Vƒ¥ÕTÂ0ÖŠ¥µÖ ÛÅ0Vƒ¥ÕT’Ö¸¸ºÁÅÕ.nîpuË(CÆÌž"dAF,Èäá…Lž¼ÓÚTÎßÂ0QZpÎÎú(^Øa¡·D¸w('„»!»‡ð÷ðøÁ}<~xÃñèâââAéXì&Jû¨g.%#À€U%{a4¢&9)#À˜ ³¥5za4’&TÌNÍL&«bL€€Y‰’ìKÏ^M€/«Hþ!àf‘Þ0;Q ä…1¥P°Ll –RvXm⇌Ž-#3Éù°IMe¨ÖUý%¿8={÷…æÙ•©Ñg®¸©!™Ôĵ¤½º¼`šËÖ˃€EˆRx16& "¢Ñmæ.ôû¸<Ü]Rï~’ºíЩ+ÆŽn·°šëîÙ¹… FフÁ—Ó2Œ€ ¦DiŒFSz<ŒŒŒÔªJ:L—üé è×W¯^Sß‹ÞG/Ϻ¤0zìxÐ5•‡„ [ÏÞ(UÎÅK•C§.ݵÜ>PoÉÒßP½v=øMð­C ‡-=B’›:ÃR©¾+W£V½(Z²,Z´Æ…‹—drUoRÕCVéÔåR•.±úÊ•’‡Ê”l ëOž<•-Ÿ>}¦U\ºN2éº>[•âÄñc° Q𨠣©=zxx$Á‘N?ÿñ§(_¾œúÞì¹óp?, {wÿ…ví¹–óíwêû]{|…._vÄ©ã‡qâèAqЯŸtq«)gΜ•Uî ¾÷½Y³ª¯‘HMä±152YØçë›îîîèÑ­ ‚.\Ô™\—WHUÂÄ6ê+—>•)ÔõËNøcÅJé"ƒ„þ.=䮿”ߕؚ¬8.#`(!JS{a4—ÇCM`§ÿ;&z‡0qÊ45¶áÂ{bþ|ùÔßÉ+cxøcõ÷Sø´M;éòH—†Ó#"´ê&GŽZßɤ¦WH]ž“«dꙩ„¼7ªH'¥¡Ï+$¥Kl£¾réóP™’-~~Q¤paÐä/ñ·bÅ ÂÍF.ù]‰­†6|NǤ‹¥©½0ZÂã! ýz ×±ÿ<¥ÆÓGô$5WÁÉ+cVÞaï~ѱC;;´O­ÏžÀšvÐ!Ù²ië4÷*»>¯É™ª¯\úm4O*[± úö$MS‰5xC´ëVÎ…gŒDÀ"DiJ/ŒtêuëOÚHw +—ÿ† 3'±w×ßè$Ìýõí°„I¿ƒ‡üŠKçOƒ¼*’/–þ7_ ™’8™ÔX¾bÆ)yÑ÷Ä¢:|édpÉ€1ãôŸEidÝqrF€°iJ”†xaœ+œqµmó©ðØyóäA† àíí…úï×ï¿,RÃväØ1Œ>TºYprr’~jZ6o†UËOUмoÿyfd§íe^ûL±zˆÀ'Œ#â²Pr6Œ#`n,C”&ô¸W ¯?nÝZ/.þ+b¤p-K¾¿é„îäDIJ÷û+¤‹’öíÚâ7q·.!w·,Œ#`;X†(Mè…1B8ëòñyçŪBsŽPU5 þ÷òäÉcÆæ kÖ­/ç,5ýH+‰C>­Ï;rÙ@в…üž’oš›œ2}jÕ¬a;­„KÂØ9!JSzaôòòÒò|Hõ—Øw5]#_-#†ÆÎí[äå²¥KðâÅ ô0H]åJâÐÜ$‘_±Rå$!Ó_úN×5EEÖä""úy4ÈS$ #ÀØ!JSza¬[§Öoܘ*ôi(L®Q'Œã'N$›6¹8±±±X¿áOøw·šŒ‰”÷ïÝ…uë7‚î«DEÖäyñ§¿“¾uXFÀ6°QšÒ ã þýÄá |÷Ãÿäð—üXGGGc_¢–6í:bëöx(¶½zõ ÷îÝÇ׳æ |¹rêšÓgóÖm(W®¬\4ÒZ *]º¶lÝn­€KÁ0:°QšÒ #Í;n\» wïÞÃ'Ÿ·C‰2P«^éîô÷¥‹Õ…íß·7¶nÛŽFM[ÈáòGŸµ‘Cï¿ÿVqœe´ˆÓþ‹dì u–-_ÁÍ‹`ì³;£7s4%^lA\w"M˸Á+£6Oûw^ s9³ƒºä"ˆ;38I¦Ä¹˜Ù‰2µX2Q¦1Žo,L”Æ"˜¾Ó+!J³½­É cú®J¶ž`Ò³eZŒófFÀT0Qš IÖÃ06‹¥ÍV-Œ`L…¥©d=Œ#`³0QÚlÕrÁFÀT0Qš IÖÃ06‹¥ÍV-Œ`L…€Y7œ›ÊHÖØm›7Êó ‘€ÖŸ’ŒÓXJ6œ3QZQ…±)iƒÀæëСko€Î[~C6ÈÿðF8ýJº’p‰þ“ðGþ}ƒ5ËeÚÔ™)sUB”<ô6%â¬+ý" Hòð…ôúõ+¼½ËׯâE/3±1/ûò… 1/¢ExŽ—ÑÏÓo9Ùrƒ`¢46NÄ0ö„¥=Õ6—•` B€‰Ò Ø8‘-#ð(ì.ââÞ^Oe®#=°åbsÙt ÀDÉ̓H„@øƒ{8sì€põ'ïI^>÷ž>yÌXÙ)L”vZñ\ì”(Zº"2yxâôѽ¸}ý"‚À=³' *ưÙ)L”vZñ\ì” GsÅËV‚§WVܽ ,Yñ^á`íöÛj˜(í·î¹ä: R,VÆ‹•–$éèÀŠ=7®}{®}.»Nˆ,säÌ GG'FÊÎ`¢´óÀÅgý0QêLjcØ8ŽŽŽòmÅ"zšôÇ#–î#2Q¦û*ä‹€O¶l¸pî´$?%B¤t&>Ù³+‰Îql‡bÙ» u›}*Þs¶¢räxùâ%Ξ9…aaŠÈ’z 9|s¢l¹ŠpswcXÓ9/££xlª¿ß"IIÂBo¡{ŸAÐI”äï8“‡|sçç­é¼1°ùŒ#:*ìn0¢££QBl K,Šˆ’NN¹zá ž=y$~iŽžbaFÀVptt€§w6)Q.®IGŠˆÒVÀàr0Œ#`*¢äÅCÐã4Œ#`W0QÚUusaFÀ˜( AÓ0Œ€]!`v¢|ú$BO•º`Š(X¤„)ÔXµ{(£UWg7èÜd ˆ$wm^­XU£€Ï‘ÅË[qü”"‰Ü¼zÑh=i¡@©íJã¥E8OFÀ°Øª·Š(» ž¨·Ås'B QFFFâÛï~Ä®Ý{p_lΔ)#ªT®ŒNÚ¡fê2Ÿ´"‘+W®búÌopâ¿“ÒS_•Jþ9b(Š3ýY†iUF½iÂÖVFSÙc*=&„šU%ƒ@º^õî7`0âÄ©Ó+þø—Οƞ;Ъ~øßü4­ì[·o£]ÇÎhÔ°ŽÚ‡ã‡÷£Q£†hß± nܼ•¦¶qæŒ#`8fŸ£4Ü´”S9v £†E¾¼yáä䟬YѲy3¬Zþ»V¢+W£V½(Z²,Z´Æ…‹—Ô÷ccc1jÌx”©PY†ÑcÇ‹£ÿü¤ÔkÐW¯^SÇ]¿áOõgºN÷““yßÿˆ®]¾D»¶Ÿ#sæÌ2Ðçn];ã»þ§N’ÜÜ¢æ5ÍÏqqq˜:ýkøW©rþU°hÉÒdó>w>ÕjÕÅÒß´1PEÖ¥GªÞ¹.,É^]÷_‰w£gΞ‹JUk¢xéòè?pž?çò5%ÛT8Ð_]ó±ÆÚŸÐ}û qóV²ÝPûYµf­z”¢ÂCÓžàtëÙ¥Êù£x©rèÔ¥;…‡kÕ÷’¥¿¡zízð+ZR]–ÄåRÒ.,\ŒÊÕj¡D™ >r bÞ¶Ysz„yßý $Ç1tI” þ÷òäÉcÆ¡lÅ*¨Y·>&O§OŸiÁ1Y‡¯o¸»»£G·.ºðnqgÓ–m?v²ùø »8=fü¸1Ø´e«L_·v-!’lÜ´nâÁÞ²m»üN×é~rò8">>Y“Ü¢kOž<1¨ª6üù'&Œ‹œ9}áééqcFiéYöÇ Œ;K-Cþ”D—]X¨ôéÂ’â躿zí:Q†1² ™2eÂðaƒ±sçnµ©úʨ8Sد™‡«›+>xˆˆÇÈ;¾ž>E§ »vlEêÕ䀇8aøÐA8xð°Vš±£GÈ‘±¢j³ÔnéóŸ›·«’Ó+@ ]%ƈ¡âaÛ¾EÎQ.[º/^¼@߃´Šìå•EýÝÍÍMxÓ‹WC£üùò©¿çÏ—áá ^ö¨ÑŸ ”Ÿ7mÞŠofNÇÚuå÷S§OËûÉIVooµÍû¤7‹§§‚êHåáÃGÂμ)¦]ü˯øø£Q®lúuéÑ……J©.,)Ž®ûaaаIs9ä¤P¥zm­¡©¾2êÎökæ1ÿÇï±ÿà!4øuë7Æžöê4á”h+Ÿ¶i‡’e+ÊòѰ˜~45%GŽúŠ¡è>M7©„>?zônˆ¯HG2tI”š%¥ãúýü ŠËh1\Nè*ñ‹ªŽЬoñ3fÌ(Itëö¢7ê†÷ëÕ•ÇoÑ*{üùe59©.”z ‰…®i’«³³3^¾|©Žñ$E“³gϲ-%Y½bvìø?/Z¢³ØºôèÂB –úâPÞGî“CNU !¨Jô•QŸ~SÛO?:‹þILƤ cå4.éÝo :Š´€Gå:xBîxH­(išm6ôÎdG0©Í—ãëG ]e›v%‰Ñ -Ü»w_ÏšƒòåÊé/ñÛ­Z4“Ãušt§0iÊ4´l®N_G ¯ižéÃZÉk´ÄøIS@×S’ýú`±XlY.‘¢¢¢dX±j ,\„¾½{©“•(^ ÿ"É’z[cÇOLQçÇ­?¶M•s¥ÏžEbÊ´Zqi8»zÅï¢Ç»óÅ\`J¢K>,ƒšBÄö_´d3·ƒƒe¯þò•+rAG%ºl£ÑÃõ7uš`jûû Û®]»Ž¸¸xIxš§Ÿ'gÍ“ÓôŒ‹Dd£ÅTˆ>IN’v1uúL„?~,Ôi¢}$´Oó".‰²ßÞØ*æ 5mbb•ñ£ÏÚÈ¡÷ß«­aCɹIZÁ¦Ó×CT§¯[§¶F·l‘@žô—†9uSXÈ¡8~ßÿÿ"{žUkÖ•«éÓfÌÄo¿,FÑ¢EÔºgL›‚»vËûÞ6Å¡<% ò-äWÍZ}€:õŠ9³ÜIÊHÃ:Zñ_ÿ禷HéÒ£ Å ¦±Wîr?)m¢áiÿACŶ©wó©ºlëÑ­+Z¢sÕÛÔö7¶õêÓO¬bW”‹NsçÌR—,9{fNŸ&~Tg¢”([Ûöàï_A/dÉéQÒ.*ùWDÓæ¨U·¼½½0x`½yqã°Ù7sŒ‡Æx ±±qhùáGè×ç+´zK¸Æke öŠoR·|Í[ôÍœÔϯ0¦6OsÅ?{î OÙAbž8…÷òçnB+*4Ÿ£Ù+OŸhû¤Q‚ƒ-ß§¤¼Çx,v%åÉ¥õZ|áN®?ˆÇÄïWÁÓ'egZzq»@€ˆr×æÕŠËÚ(àsyÜ‹é°ås2-N”­?ú8Å:}õ!¾š³ýê9£VÏ_™(SÑ–m¹‘ê‚AE”ÝOÔ‹Ö⹑ž‰ÒÚëØÚíÓÛ@tD°ØÁ½ïl ¯tIÈht›¹ ý>.wEeŠŒŒ”ŽÁj×kˆ"%Ê |¥ªèñU_:|DQzSGJK{øŒBÓÖæ•+Wñe×Â_Ž¿ ô™œ¡¥¥X²Ž‰ôX’"`ÁÅœä‰rÂ/GÝËm¼s¾¥¯¢ú Œ¸ø8¬øãWé×{ÏÎhÕ"EÇZúô{ßÚì1¶<öšþÖíÛÒZ£† ¤ëY ô¹}Ç. {,ö‹€åˆ’ü' ûC±ùà Lø² •u&eM9v £†9€wrr‚ðÇݲy3é‰P%Á!!èÖ³·ìž;ué.ÝÒ>yòþUjàéÓgZµN×+W«%¯“ Ü™³ç¢RÕš(^º¼t­ªk5^‰=útîÛ›· YeQ«^¬Z³VmŸ®{š=€ØØXŒ>¨É»#…Ñcǃ®©„â®®tI?åÓ" 5.\¼d¿­?QÉç}ÿ#ºvùíÚ~ŽÌ™3Ë@ŸéÚw?üO Ç ËöR¢L 918ë«ëÔÖƒf§6mJÏAr•®Ê‡þjæ©D‡.ŠÖ$ƒ®<¤=­süÄرmü»[ú—Ÿ÷Ýêtúêš"S©I›Òs\«†øôWs¸¯D‡.ÞãˆøødMRNºöäÉ­ë*œ kúüçæ-êûúêš"S©I«ë9PZ¡JtèÂCi>ÖÏbD™ÃË.ÎŽ8qùú|sÖ¡|!o”÷[6TCr…Hyzz`ÄPA^Û·È9ÊeK—àÅ‹è;`ZéÀ@|Ú¦J §ô4Œ !=$~~Q¤paìø{§üþ—ø[±bIP$aaаIs™ŽB•êµå°=%Qb>óüûBó€Q·~cìùg¯:;]÷4m 6æÏ—O})¾¼¬e6õ¨Uâææ¦þ±P½MGóöòJ‚˜0ô÷4…¦}TBŸ=z×>ôÕ5¥3¦R“V×s ´2•èÐ…‡Ò|¬9žÅˆ²}ƒ‚X3®|½Ý°óä]\ }†*Ų l4yR•ƒƒƒ$¾ ãFãø‰j½û DÇíä„ü+p.ð„àcÊ+Aºˆ^åÒß–ÉÏK~ý]ö®T’={6=¸O?Tt(‘”ìѧ³\Ù2XüóOb¨“&Œ•S *ÑuOÓ&Ñ» }·Á?8$YÅü-‹2ª‹ÈÆM›“D¦k5kTÓº®‰sè;Z=Q}u­ÌÓÄÒ÷(ÉE‰]x(ÉÃÚãXŒ(ß¼y ÿ"ÞØ6õ}T*šððú‹¿t]”‚Õ¦]GlݾCÎ ÑÄù½{÷ñõ¬9(_®œZÍ]º‰a·‹T‰£ÇNÐR_§vMDEEá÷eË‘Y ¯K•|·-¢ýmQÃíà`Ùã¢í!´ “’(±GŸÎ~Bÿµk×/ ýµ(—JtÝÓ´©U‹fr ‚z¿&M™†€–Í•Âj÷ñôëƒÅK–ÊijV¬Z#¯õïÛG Ÿ©Óg"üñc¦Lû´Rß×W×–ZßsØ]¿qS벺ð°dyÍ•—E^aLüfNük`݉h4-㯌Ú\íßy©Þ ç‡Åï,—âQQÏA¿àujÕÂÐ!åÜÉÎ]{0mÆLܹ{WÎÉQqâäiZ“Ô´²³Æ`É/¿"êùs´hÞÓ§L‚‹‹‹Œ£¯®S[šñS›VÉs I.ÿ›ÿ³\ÌŒŽŽV?+útèÃÃ\äe ½}3'µâWS‹˜ýÅOËw½Óë‹ýµãKl1¢4ÞTÖÀXL”ÖUæ´& ^a4gqX7#À0æCÀb‹9æ+kf,‹€%ß½¶lÉ8·”`¢ä¶Á0Œ€˜(¹‰0Œ#ÀDÉm€`ãà¥qøqjF€°˜(í ’¹ˆŒ#`L”ÆáÇ©FÀ`¢´ƒJæ"2Œ€q0Q‡§f;@€‰Ò*™‹È0Æ!ÀDi~œš`ì&J;¨d."#À‡¥qøqjF€°˜(í ’¹ˆŒ#`f?áÜ8ó8µ5#@'yǼ|‰×‹a8:8ÂU8ystÔÝg‰‹>ÚcðêµpòÎõ“a™Úc*ÀÉÑIœöï'ggÅðÁ½Š¡âˆÉ!@~}îÜ Åµ+¥‹]ò{Ä’:IzgõF‘¢%;O^cºä„ü'E>{‚ûwBð<ê©p5ÁL™:¤!~ˆ)s(T 3gÖòI¥Kej‘æøZO•ÿ„Çȼùß.+ÀÉIù¯4C™€À«Wñ:s wCCà_¥2f̘,4ÑÂÉÙàÈâ ùüŠèí}2¾I ÑOð+ˆzú%ÊUBlÌ E01Q*‚‰#¥„y(Üõ×6´íÔ ¯„§JàaàÊߣQÓfÈœÙ3Y%‘‘Oq5è4ª¿ßq1/EîQ¦mdÃî#{·Kc^÷ ŠÔº)ÿÇîÈ`š½c¥˜«â1Q¦1ŽoV¼¹Yê’S§Ñ¦]G”©P…‹—AiñðEDDh%ñÊ’EýÝMc¦zÐéâC1LÏ—/o²Y„=x€ÆÍ¤^ Õj‰y¼ðÇf-³%”;gÈ€¸ØX1”Ç´¥ qâ·,>ÙIÑ E¯eo:V£ç"ˆS%..®â£'Rƒx%z¦Î\ݧ†ÃbH½cݯr1é¨ÂÓµ ® úcEoÖ[柠ŸtG‹Ó’¬A˜(­¡Ò³ rªÑtû(«W«Ší;þÖ©³ß€!hÿE[Þ·W/œÁéG„ 6ž‰mÒ¸–=[6„„„$›Ý;´o7®]<«”‡Z_rº*¿e*ß;«îܾ.Þw¦wó“— ‚©Ç©êå¾|ñB,ô¸$IóFcÞ29M)Ý'’müa{õZ5”VÅé"ˆù…8•*5½lË ÇoæX g›ÍÇðW÷’OÙ¿O/,‹++׬E„8+FôrNŸ=‹>«_”¤y4W1dv =!¡¡3a’ÄW¥Qósr×Z æ4¿Æ½°ûxù SŤ*Þm>Åèqq[,ʼnù»ËW®`Àá:u‹%G~1?yíB ÜDå¢Ã–éŒË‹gOª³Ïî›çþ;$ˆê•è}ÆàÆåóÈ‘+¯Î^hjlÏ%†Ú§íÃùë AÈK8²g‹J“äÈ™gO@|œ˜^~TâœÁY,=IMv&Ë=J“Âi§ÊL¸ðý^X¶t18„ZˆÕç’ÔZ6kª^xž>u"¦Ïœ²«¡}§®ð¯P>x•šŸ“¹Ö¯w/øùD«>Eý†Í‘;WNuÚݺ ’EtìÜ]诊ACG¢Qƒ÷Í·èm¡&ã–1Ê,#?ÄÉCÿàèÞ¸.ˆ0gžüÈœ%«´‚VÅ©yâàn¹¢Ms•%+TÃoeg7ê+Jž…àé•çNÇý…ËçO![μÈì™>¿¢âLÎÌ8ud¯ÈÜÄBNF1JBi÷ÿµwoÕ—Yî³+³ÀjûJé<Ê;¶ M‡.x.æ”X C “‡V-ûEÌ‹¶HùÙ³ /dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive dist-hook distclean distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-local install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-local define doc-data-hook @for dir in $(DOC_LANGUAGES); do \ echo "test -z '$(1)/$$dir' || $(MKDIR_P) '$(1)/$$dir'"; \ test -z "$(1)/$$dir" || $(MKDIR_P) "$(1)/$$dir"; \ files=`for p in $(DOC_ENTITIES); do echo $$dir/$$p; done`; \ echo "$(INSTALL_DATA) $$files '$(1)/$$dir'"; \ $(INSTALL_DATA) $$files "$(1)/$$dir"; \ echo "test -z '$(1)/$$dir/figures' || $(MKDIR_P) '$(1)/$$dir/figures'"; \ test -z "$(1)/$$dir/figures" || $(MKDIR_P) "$(1)/$$dir/figures"; \ files=`for p in $(DOC_FIGURES); do echo $$dir/$$p; done` ; \ echo "$(INSTALL_DATA) $$files '$(1)/$${dir}/figures'"; \ $(INSTALL_DATA) $$files "$(1)/$${dir}/figures"; \ done endef dist-hook: $(call doc-data-hook,$(distdir)) install-data-local: $(call doc-data-hook,$(DESTDIR)$(datadir)/gnome/help/$(PACKAGE)) uninstall-local: @for d in $(DOC_LANGUAGES); do \ echo " (cd '$(DESTDIR)$(datadir)/gnome/help/$(PACKAGE)/$$d' && rm -f $(DOC_ENTITIES) $(DOC_FIGURES))"; \ (cd "$(DESTDIR)$(datadir)/gnome/help/$(PACKAGE)/$$d" && rm -f $(DOC_ENTITIES) $(DOC_FIGURES)); \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lcrt-1.1.2/help/zh_CN/0000775000175000017500000000000011752203002011403 500000000000000lcrt-1.1.2/help/zh_CN/lcrt.xml0000644000175000017500000005735211752203002013023 00000000000000 ]>
&app; 手册&manrevision; User manual for the LCRT application. 2011 牛涛 LCRT Documentation Project &legal; LCRT Documentation Team code.google.com/p/lcrt LCRT Documentation Project LCRT 用户手册 V0.9 Mar 2011 LCRT Documentation Team LCRT Documentation Project This manual describes version &appversion; of &app;. Feedback è¦æŠ¥å‘Šå…³äºŽ &app; åº”ç”¨ç¨‹åºæˆ–本手册的错误或æå‡ºå»ºè®®ï¼Œè¯·éµå¾ª GNOME å馈页中的指导。 &app; lcrt åº”ç”¨ç¨‹åº ç®€ä»‹ &app; 是一个终端仿真应用程åºï¼Œæ‚¨å¯ä»¥ä½¿ç”¨å®ƒæ¥æ‰§è¡Œä»¥ä¸‹æ“作: 通过ssh,telnet等自动连接到远程æœåŠ¡å™¨ä¸Š: 如果你是一个unix或者linux系统管ç†å‘˜ï¼Œä½ å¯ä»¥ä½¿ç”¨&app;æ¥è¿œç¨‹ç®¡ç†ä½ çš„系统。它能ä¿å­˜ä½ çš„会è¯ä¿¡æ¯ï¼Œä¾‹å¦‚æœåŠ¡å™¨åœ°å€ï¼Œç”¨æˆ·å和密ç (ä½ å¯ä»¥é€‰æ‹©æ˜¯å¦ä¿å­˜å¯†ç )。这样,在你下一次连接该æœåŠ¡å™¨çš„æ—¶å€™ï¼Œä½ å°±ä¸éœ€è¦è¾“入用户å和密ç ã€‚因此对于一个æ¯å¤©éœ€è¦é¢‘ç¹ç™»å½•到远程æœåŠ¡å™¨ä¸Šè¿›è¡Œç³»ç»Ÿç®¡ç†çš„人æ¥è¯´ï¼Œ&app;是一个éžå¸¸æœ‰ç”¨çš„工具。 一个éžå¸¸å®žç”¨çš„会è¯ç®¡ç†å·¥å…·: 如果你是一个嵌入å¼è½¯ä»¶å·¥ç¨‹å¸ˆï¼Œåœ¨è½¯ä»¶å¼€å‘的过程中,ç»å¸¸éœ€è¦ç™»å½•到嵌入å¼è®¾å¤‡ä¸Šï¼Œè¿è¡Œå¹¶è°ƒè¯•程åºï¼Œå¾ˆå¤šæ—¶å€™éœ€è¦æ‰“开多个窗å£ä»¥ä¾¿è§‚察程åºçš„ä¸åŒçš„è¿è¡Œçжæ€ï¼Œå› æ­¤ä½ å¯ä»¥ä½¿ç”¨&app;æ¥å…‹éš†å¤šä¸ªè¿žæŽ¥ã€‚&app;有许多实用的快æ·é”®æ¥å…‹éš†ï¼Œå…³é—­ï¼Œç§»åŠ¨å’Œåˆ‡æ¢æ ‡ç­¾é¡µ. 众所周知,gnome-terminal是一个éžå¸¸æµè¡Œçš„终端软件,因此我预设了一些和它一样的快æ·é”®æ¥ç®¡ç†ä¼šè¯æ ‡ç­¾ï¼Œä¾‹å¦‚CTRL+SHIFT+T克隆会è¯ï¼ŒALT+1切æ¢åˆ°ç¬¬ä¸€ä¸ªä¼šè¯ï¼ŒALT+2切æ¢åˆ°ç¬¬äºŒä¸ªä¼šè¯ç­‰ã€‚ 入门 以下几段将æè¿°å¦‚何使用 &app;. å¯åЍ &app; ä½ å¯ä»¥é€šè¿‡ä¸€ä¸‹å‡ ç§æ–¹å¼æ‰“å¼€ &app; : 应用程åºèœå• 选择 附件Lcrt. 命令行 输入命令: lcrt 查看命令行详细帮助信æ¯ï¼Œè¾“入命令: lcrt --help 第一次使用 &app; 当你第一次使用&app;的时候,它会在用户目录~/.lcrt创建一些默认é…置,例如默认的语言,会è¯é…置。当你改å˜çª—å£çš„大尿ˆ–者移动窗å£çš„ä½ç½®æ—¶ï¼Œè¿™äº›ä¿¡æ¯ä¼šåœ¨å…³é—­è½¯ä»¶å‰è‡ªåЍä¿å­˜ã€‚ 快速连接 当你第一次使用&app;的时候,软件会自动打开一个“快速连接â€çª—å£ï¼Œåœ¨æ­¤é€‰æ‹©å议,输入主机å和用户å,就å¯ä»¥æ‰“开一个新的连接,下图是“快速连接â€çª—å£ï¼š 用法 打开一个连接 在新窗å£ä¸­æ‰“开一个连接: 选择 文件连接.... 也å¯ä»¥ä½¿ç”¨å¿«æ·é”® AltC(默认快æ·é”®). 之åŽä¼šå¼¹å‡ºä¸€ä¸ªé€‰æ‹©ä¼šè¯å¯¹è¯æ¡†ï¼š åœ¨å¯¹è¯æ¡†çš„顶部,有一些éžå¸¸æœ‰ç”¨çš„æŒ‰é’®ï¼Œå¯ä»¥ç”¨æ¥åˆ›å»ºä¸€ä¸ªæ–°ä¼šè¯ï¼Œåˆ é™¤æˆ–者查找在列表框内的会è¯ã€‚åœ¨åˆ—è¡¨æ¡†å†…ï¼Œé‡Œé¢æ˜¯æ‰€æœ‰å·²ç»åˆ›å»ºçš„会è¯ä¿¡æ¯ï¼Œé€‰æ‹©å¹¶åŒå‡»ä¸€ä¸ªï¼Œå°±å¯ä»¥åœ¨æ–°çª—å£ä¸­æ‰“开一个新会è¯ã€‚ 创建一个新会è¯: 选择 文件快速连接.... 也å¯ä»¥ä½¿ç”¨å¿«æ·é”®AltQ(默认快æ·é”®). 此时会开打一个“快速连接â€å¯¹è¯æ¡†ï¼Œè¯¦è§ï¼š 在标签页中新建一个会è¯: 选择 文件在标签中连接. 也å¯ä»¥ä½¿ç”¨å¿«æ·é”®AltB(默认快æ·é”®). æ­¤æ—¶ä¼šæ‰“å¼€ä¸€ä¸ªå’Œè¿žæŽ¥ä¸€æ ·çš„å¯¹è¯æ¡†ã€‚但是当你åŒå‡»ä¸€ä¸ªä¼šè¯æ—¶ï¼Œä¼šåœ¨å½“å‰çª—å£å†…新建一个会è¯ã€‚ 管ç†ä¼šè¯ 釿–°è¿žæŽ¥ä¼šè¯: 选择 æ–‡ä»¶é‡æ–°è¿žæŽ¥. 也å¯ä»¥ä½¿ç”¨å¿«æ·é”®F5(默认快æ·é”®). 或者 Enter(åªæœ‰å½“å‰ä¼šè¯çжæ€ä¸ºâ€œæ–­å¼€è¿žæŽ¥â€æ—¶æ‰å¯ä»¥ä½¿ç”¨è¯¥å¿«æ·é”®.) å¯èƒ½ç”±äºŽæŸäº›åŽŸå› ï¼Œå½“å‰å·²ç»å»ºç«‹çš„连接会从远程æœåŠ¡å™¨ä¸Šç«¯å£ï¼Œæ­¤æ—¶å¯ä»¥ç‚¹å‡»é‡æ–°è¿žæŽ¥ èœå•项,就å¯ä»¥é‡æ–°è¿žæŽ¥åˆ°æœåŠ¡å™¨ä¸Šã€‚ å…¨éƒ¨é‡æ–°è¿žæŽ¥: 选择 文件全部é‡è¿ž. å‡å¦‚你在标签中新建了许多连接,但网络çªç„¶æ–­å¼€äº†è¿žæŽ¥ï¼Œè¿‡äº†ä¸€ä¼šå„¿åˆå¥½äº†ï¼Œé‚£ä¹ˆå½“å‰çš„æ‰€æœ‰è¿žæŽ¥éƒ½ä¼šæ–­æŽ‰ï¼Œæ­¤æ—¶ä½ å¯ä»¥ç‚¹å‡»å…¨éƒ¨é‡è¿žèœå•å°±å¯ä»¥é‡æ–°è¿žæŽ¥æ‰€æœ‰ä¼šè¯ã€‚ 断开连接: 选择 文件断开连接 当你结æŸä½ çš„工作,你想关闭当å‰è¿žæŽ¥æ—¶ï¼Œå¯ä»¥ç‚¹å‡»æ–­å¼€è¿žæŽ¥ èœå•æ¥æ–­å¼€è¿žæŽ¥ï¼Œç„¶åŽå…³é—­ä¼šè¯æ ‡ç­¾ã€‚ 全部断开: 选择 文件全部断开 在退出&app;之å‰, ä½ éœ€è¦æ–­å¼€æ‰€æœ‰å·²ç»è¿žæŽ¥çš„会è¯ï¼Œå› æ­¤ç‚¹å‡» 全部断开 èœå•å°±å¯ä»¥äº†. 克隆会è¯: 选择 文件克隆 有时候你å¯èƒ½éœ€è¦æ‰“开好几个连接到一个æœåŠ¡å™¨ä¸Šçš„è¿žæŽ¥æ¥è§‚察ä¸åŒçš„东西,此时就å¯ä»¥ä½¿ç”¨å…‹éš† èœå•æ¥ä»Žå½“å‰ä¼šè¯å…‹éš†å¤šä¸ªè¿žæŽ¥. é”定会è¯: 选择 FileLock 当你打开一个连接æ¥åšä¸€äº›äº‹æƒ…çš„æ—¶å€™ï¼Œæ­¤æ—¶å´æ¥äº†ä¸€ä¸ªç”µè¯ï¼Œä½ éœ€è¦ç¦»å¼€ä¸€ä¼šï¼Œè¿™æ—¶ä½ å¯ä»¥ä½¿ç”¨é”定会è¯åŠŸèƒ½æ¥é¿å…其他人æ“作你的远程æœåŠ¡å™¨ï¼Œç‚¹å‡»é”定 èœå•, 输入一个新的密ç ï¼Œå°±å¯ä»¥é”定当å‰ä¼šè¯ã€‚ ç®¡ç†æ ‡ç­¾ &app; 支æŒåœ¨å½“å‰çª—壿‰“开多个连接,æ¯ä¸€ä¸ªä¼šè¯éƒ½åœ¨ä¸€ä¸ªæ ‡ç­¾å†…。因此软件æä¾›äº†è®¸å¤šæœ‰ç”¨çš„å¿«æ·é”®æ¥æ–¹ä¾¿çš„ç§»åŠ¨æˆ–è€…åˆ‡æ¢æ ‡ç­¾ç­‰ã€‚ 切æ¢åˆ°ä¸‹ä¸€ä¸ªæ ‡ç­¾: 按下 CtrlPage Down 切æ¢åˆ°å‰ä¸€ä¸ªæ ‡ç­¾: 按下 CtrlPage Up 将当剿 ‡ç­¾å‘åŽç§»åЍ: 按下 CtrlShiftPage Down 将当剿 ‡ç­¾å‘å‰ç§»åЍ: 按下 CtrlShiftPage Up 这些快æ·é”®å’Œgnome-terminal的一样, 考虑到有许多人ç»å¸¸ä½¿ç”¨gnome-terminalï¼Œå®ƒçš„ä¸€äº›ç®¡ç†æ ‡ç­¾çš„å¿«æ·é”®éžå¸¸æ–¹ä¾¿ï¼Œå› æ­¤æˆ‘将它们移æ¤åˆ°&app;中. 如果你ä¸ä¹ æƒ¯ä½¿ç”¨è¿™äº›å¿«æ·é”®ï¼Œå¯ä»¥é€šè¿‡èœå•选项全局选项...å¿«æ·é”®æ¥ä¿®æ”¹å®ƒä»¬. 管ç†çª—å£ éšè—或者显示工具æ : 选择 æŸ¥çœ‹å·¥å…·æ  å·¥å…·æ é»˜è®¤çжæ€ä¸ºæ˜¾ç¤º. éšè—æˆ–è€…æ˜¾ç¤ºçŠ¶æ€æ : 选择 æŸ¥çœ‹çŠ¶æ€æ  çŠ¶æ€æ é»˜è®¤çжæ€ä¸ºæ˜¾ç¤º. 设置窗å£ä¿æŒåœ¨æœ€é¡¶ç«¯: 选择 æŸ¥çœ‹ä¿æŒåœ¨é¡¶ç«¯ 该选项默认为为选中. 免屿˜¾ç¤º: 选择 æŸ¥çœ‹å…¨å± ä¹Ÿå¯ä»¥ä½¿ç”¨å¿«æ·é”®F11. ä½¿ç”¨ä¼šè¯ é€‰æ‹©å¹¶ç²˜è´´: ä½ å¯ä»¥é€šè¿‡ä»¥ä¸‹å‡ ç§æ–¹å¼é€‰æ‹©æ–‡æœ¬: è¦ä¸€æ¬¡é€‰æ‹©ä¸€ä¸ªå­—符,请å•击è¦é€‰æ‹©çš„第一个字符,然åŽå°†é¼ æ ‡æ‹–到è¦é€‰æ‹©çš„æœ€åŽä¸€ä¸ªå­—符。 è¦ä¸€æ¬¡é€‰æ‹©ä¸€ä¸ªè¯ï¼Œè¯·åŒå‡»è¦é€‰æ‹©çš„第一个è¯ï¼Œç„¶åŽå°†é¼ æ ‡æ‹–到è¦é€‰æ‹©çš„æœ€åŽä¸€ä¸ªè¯ã€‚ è¦ä¸€æ¬¡é€‰æ‹©ä¸€è¡Œï¼Œè¯·ä¸‰å‡»è¦é€‰æ‹©çš„第一行,然åŽå°†é¼ æ ‡æ‹–到è¦é€‰æ‹©çš„æœ€åŽä¸€è¡Œã€‚ 这些æ“作的结果是选择第一项和最åŽä¸€é¡¹ä¹‹é—´çš„æ‰€æœ‰æ–‡æœ¬ã€‚对于所有的文本选择情况,当您放开鼠标按钮åŽï¼Œ&app; 都会将所有的文本å¤åˆ¶åˆ°å‰ªè´´æ¿ä¸Šã€‚ 将文本粘贴到会è¯ç»ˆç«¯ä¸­ï¼š 请执行以下æ“作之一: 在命令æç¤ºç¬¦ä¸Šå•击鼠标中键。如果没有鼠标中键,请å‚阅 X æœåŠ¡å™¨æ–‡æ¡£ï¼Œä»¥èŽ·å¾—å…³äºŽå¦‚ä½•æ¨¡ä»¿é¼ æ ‡ä¸­é”®çš„ä¿¡æ¯ é€‰æ‹©"编辑""粘贴"ï¼Œå°†æ–‡æœ¬ç²˜è´´åˆ°ç»ˆç«¯ä¸­ã€‚åªæœ‰å½“您通过选择"编辑""å¤åˆ¶"将选定文本å¤åˆ¶åˆ°å‰ªè´´æ¿ä¹‹åŽï¼Œæ­¤åŠŸèƒ½æ‰èµ·ä½œç”¨ã€‚ å¤åˆ¶å¹¶ç²˜è´´æ–‡æœ¬: 首先选择想è¦å¤åˆ¶çš„æ–‡å­—,点击编辑å¤åˆ¶å¹¶ç²˜è´´,或者按å³é”®ï¼Œé€‰æ‹©å¤åˆ¶å¹¶ç²˜è´´. 首选项 因为个性,所以我们有一个五彩缤纷的世界。因此通过é…置选项,你å¯ä»¥æŒ‰ç…§è‡ªå·±çš„习惯é…ç½®&app; 修改会è¯è®¾ç½® 查看或者修改当å‰ä¼šè¯çš„设置: 选择 选项会è¯é€‰é¡¹... 之åŽä¼šå¼¹å‡ºå¦‚ä¸‹å¯¹è¯æ¡†: åœ¨å¯¹è¯æ¡†å†…,你å¯ä»¥ä¿®æ”¹å½“å‰ä¼šè¯çš„现实,例如字体,字体颜色,背景色和其他一些设置 全局设置 全局设置分为四ç§ä¸åŒç±»åž‹çš„设置,常规,å¿«æ·é”®,终端和 åº”ç”¨ç¨‹åº è¦æ˜¾ç¤ºå…¨å±€è®¾ç½®å¯¹è¯æ¡†ï¼Œé€‰æ‹© 选项全局选项... 之åŽå°†æ˜¾ç¤ºå¦‚ä¸‹å¯¹è¯æ¡†: ç‚¹å‡»å¯¹è¯æ¡†å·¦è¾¹çš„æ ‡ç­¾æ¥é€‰æ‹©ä¸åŒçš„设置. General åœ¨å…¨å±€è®¾ç½®å¯¹è¯æ¡†å†…点击标签 常规,在这里å¯ä»¥ä¿®æ”¹: 语言支æŒ. 选择在å¯åŠ¨çš„æ—¶å€™æ˜¾ç¤ºå“ªä¸ªå¯¹è¯æ¡† 选择在å¯åŠ¨çš„æ—¶å€™æ˜¾ç¤ºå·¥å…·æ æˆ–è€…çŠ¶æ€æ  å¿«æ·é”® åœ¨å…¨å±€è®¾ç½®å¯¹è¯æ¡†å†…点击标签 å¿«æ·é”®,在这里å¯ä»¥ä¿®æ”¹å¿«æ·é”®è®¾ç½®. 终端 åœ¨å…¨å±€è®¾ç½®å¯¹è¯æ¡†å†…点击标签 终端,在这里å¯ä»¥ä¿®æ”¹: 修改会è¯ç»ˆç«¯çš„字体,字体颜色,字体大å°è®¾ç½®. 修改背景颜色. 修改滚动的行数. 修改背景图片. 注æ„: åªæœ‰å½“逿˜Žåº¦ 设置为0时,背景图片æ‰ä¼šæ˜¾ç¤º. ä¿®æ”¹é€æ˜Žåº¦. 设置终端是å¦å“铃. 点击æ¢å¤é»˜è®¤ å¤ä½æ‰€æœ‰è®¾ç½®. 所有设置会立刻. 应用软件 åœ¨å…¨å±€è®¾ç½®å¯¹è¯æ¡†å†…点击标签 应用软件,在这里å¯ä»¥ä¿®æ”¹: 当å‰è¿™äº›è®¾ç½®ä¸ä¼šç”Ÿæ•ˆï¼Œä½†æ˜¯åœ¨å°†æ¥å¯èƒ½ç”¨åˆ°ï¼Œå‘µå‘µï¼
lcrt-1.1.2/help/zh_CN/legal.xml0000644000175000017500000000770211752203002013135 00000000000000 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this link or in the file COPYING-DOCS distributed with this manual. This manual is part of a collection of GNOME manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license. Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any GNOME documentation, and the members of the GNOME Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters. DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. lcrt-1.1.2/help/zh_CN/figures/0000775000175000017500000000000011752203002013047 500000000000000lcrt-1.1.2/help/zh_CN/figures/lcrt-session-options.png0000644000175000017500000005764511752203002017632 00000000000000‰PNG  IHDRÌ­Ó.sBITÛáOà IDATx^í} €UµvwuÏšuf2Ùw2YdexÁ@ @ä!ÑÇ"‹•ßžþïñ»°(êÏsùEATð¡"ȾD‚! I†dÂd„d²ÍÖ=Ó˪ïÌÍ{oUWÕt÷TuíPÞ:÷ÜsÏùîí/§oݪ ïßó~Hø|~Ùbñe €p…À/þøŒ¨å'_ýì™]©~áìAUåa£Ì•Q( €@:ÕÝÞÙE©ju¹ñ£ûžb€„Y&KÒï]³xøàÊdç¡Tì@¸B ­0Ê*ŒÊá>h¾é¡m,¥5I–ö'ÿë"Ö¤I¯]…2@ høÕsÍýŒåªÓ¦’…èQ»vlûÑÓÏšË]Éd*o߆í'¾h€@p¸{ùæ%ŸøÔü™“<‡ðö»[ù·?_¹hJâÀûUåQ«I¸çœ~ʃ7×Õ¾¿«m7™pbõ‘ga#…è/Mét(J¥’ÉdWæÓÝÝL$’ÉÄ –·Þôì– _0ªš~v¦6j«ZI.ž²2³fe–ÕŠšbïö­´~BX”Á5müõO{Žî¨é§=‘!I²@Çïœ;–ÖÌd“©Tç¾TÃM— »vÛ?>ð@EeæSQY^QQÙvÅãíìíígžyƱuÃÊ„¶žýCâG`Öõϲ‰ïÿût«x­Ø·¢¶dJ5rùÝÍ¿ºìp»ã4:+¿üöF*ðS±••W=ÉtšÒÆxW·çH+ˆY3FÈBY$ÔÏd²­]”ŸvÇ;D»©TzëÖ­ýëà ÿøñTøËë;¸dÚ¨jjNFø\J¦2™,ýGb–ßrm¢XJxÃÆãñp8L f”)Î|ˆ|IªHWj^:£‚H pÌ/‘gX*_° ú»Ÿ9ö?÷‘ï?o;Y2¢f²¢µeó”Èúå¦V±–e¦$yàÍVÒ·ÀÛŠ ɦÕ*S#S¼áŸVv|rn¥Ó W¤˜™¬B²KæÕý ·ÿ­‰‚æôJe.=v´ÊÈ™L¶‡1ê3YbÍp8B©+gXJZÙr_[ *¢Ý É"“-ÒI—‹°^ýÎñßøëá+êïzÖÉΫå½i3YÖòVfP´#r«ØV´©†"¥Àø5¦BTj"7u¹€@X<§îËgOý¿ÞBK§gÍ©^"Ë,è2ÙÎx¢µ£Ïµª®„aTÒÅ.âPFµT ÎèHF¯tš!Y#ÞìèÛ¼ÔÆñÚ#@¿ëÛã´3¥ÏGJ'ÿ¶¶ûTs·ùQ3Y1ë$Mi¥Õʲ½M©•ôjqZ Ä»Sm±ÔÞÖ„,ÉE¡•ÚðXŠŒð¹D» ¨•™ÉÒr€aR¨ðI¥ˆI««{Öt©ÌèÕTΔ‰^ͳô Óî٤ܼ¯1œ•8ÇOŸ~«yAŸ8Òå¯gÿCýÝo*ò}T–²N2ÈMñ­5S.‘aEOxsX KI  J\H,_»÷WË·ˆPÐéU‹&/:j„Š5çs‰L’¥$UžaéÔQG;ñ†o“²ä•Ž´Ë LºÃÜsùЊíÄ ¶¹¹Ú3$¥ÀòosÓ“æ*ñg>‡äÛKÌ}T‹néÙYÅtÔ|–ëóù&Zc;ÄVâe1vAŒI¸}Qs¸´g¨=1!û¡öêÓ&SÕ]Ïm¡#ñ,J<Ëš;"ÙΫW 9q"]ï ‘Þ4¶rL[{Gu¸=™ uXÚKÁ©®¦ô¾M˜ ˜ Y ø†*bºg7…Îh ˆ™¬TÇè˜ ÅM ´cáéµ}žm$vʺ¸íÁžÛˆj) ¦&l)sX€Ò;g÷·J3'¶×œ6ùô£ÍÔ• ¿Ì𬘴2´$ ÌTxÎŒI¸qɾ÷ìî‹5ÊXðÉȨ£ZÛÚ£mÛ­y$Õ¹¿ô†{Aà”ユµÙ‹ÿy,SãŒÉÖXúÉȈH»6̺c˸gÍèóãOê…Y¦Þ³z…R@àÁ7v_qÕç›_{H ¶ywG󇿽Z§e–}ž{g/¦Ž¬žÚwŸìÔ>ù›_ýâÂãzvÒšì7Ù—Y“U— „N"Õ53?{ç ú‰m­­‡6o2ñ¨týܶoO·î´Pz^þ¯co|4û“3o ÷¨1båè93Ãb~Êndà,þÞW»¿méá;X-w†õÂ-«šª5HŠž<´oœt»tÇÕ/WT×f²™5Yõ—ÐnìÂk‡ŒœLk C† 1}F[[ëÁ²ªøÔOT®¹³èAG€9A@»»@²üØ»i®ö‰Y,ýìIB™»ïO ÚA=§bYu•löš:\©ôbšÒjª!)n2[¨ÌeÙþ|ÄK\l¹ “Ét5ËÂpØÖpršî±Í<‘‹Ög£eæ§-R[UUcÄôÇ´-O3§®³`õj’ñÔqÓSÎ<„VÑ"@÷îæGžðIÏ®oÞIF8²B¶å#Ò¶»9™˜`DÊÂÑ2ÚNëlw¶•Å[ŒPÊŠ™=»ˆ†@BàÓ'ŽºóÉ¿=׿î¯=u47À’âlËéîÝù¢ÚéH&Ò§ª:$@ ðï?L‘ýw÷ðrÁ¡xjo;>ÐHa #`f²>m·Kns €pŒ@tXݘÛ|íÀÞ7"@dG`÷Ž-¯^÷eó1†ø €@ž0— ´Ÿ®Xlú¶<Ðó ­R± éö z-D±G‰ø€èôجÚúÑó?zReUŸ%0£–$ÛÔøvõ !SŽŒD,ulü’lg£ªTÑói™{L˜—–½mV<ýÈ—}¡?ТG€ž©Ý´~õš¾þÑ“>®kI ÷ï›tÄ,zŽa<Ö狪 ­¤?—Lx[¤èL®rðXG›6F Q£Ç¬]ùº Ë5Yb(z5=ÎPÛ B €àÐ=±ìÝ1*&–$«ªB€nɺE ú@8%ÙùÇ/äVÅ2 ¥SQ²à„…⟠¿  €( ,/|Iѽýú "S:Jr­PÔYùZObÛ¢@,K ³Ž5šßOY­[¡ØJ²àÍ ¹dã§T¥,ù¯*@€GÀÉò\U-!&düˈREzåå>+ e%2(± •Yt¤2;U W”ˆšÜ8ª}‘„W©­>„@hpD²ÔRÍaEsœ[9Õ–«ªŒ)I$.Sõ¥±Qé’«ŠU¢¬6µÃ!ùFÀ)É’êÚ+sΞó€ì[‘ “Kµ6œhE£j¤Ì&—³†Ü²Ú…¤¯%ªÕ ½Ô @8"YN£*Ÿj× Èn‰¬ÀjY‰„"QYˆ¤&2¯4UFãnI蔬æ´hM«/ZÐz늠­Ü€” ŽH–ãb•Ì2NÁ¤Æ– JŠjEÆ”xÐÕÄÒÚ! *“2ºäªò2ë—ÔD›’-¥ªKÆÁ¹*D-.HVäP5¥ÕZ/>!=7§©qÕ¡-©”ùx†-:G£ÊwÚ\RÛ–„œ¥«²"8+v–zÕÄ*&çÆ%.½b­^Yþ˜•ÿ"F€^Š8tx]ÑóÊ+*„éˆdÕV•HÌ’ÙâÛ`°iÚúÑãçŸðqzîÃ׿É"j©MåbÎej[éO4+Z“8Ýj*h½•µ2…EK—Y™…1tûìöæ ïmX;kαNÂtD²dHL]‰@¥LVå\¢W¶‹‹Ɉ¸¯Ë‰s>Ô9¸oϼãv隣ò‘š ZE¤Ò±ªieËUT#$õyѱ•(—ìÛüë¢íB P4 ^Ó¼aÃpœ’¬•9‰^Eþå,F}ª¬*a¦¬äÚŽ @øË _ýw]dL^–n®å¬ÌŽo¾ôlÿ€ €À€#àˆd¥gò\•ØS $¹ýÃd™2^¦B?JfÀ Px‘,w‹±-§T‰[E9máR3YN©b>+«Øªðp G €@np±&KªK®Z‡u™2>UW HAäS+M­qAAÀÉ2žÍ1ûÕÏ™”ñ);ª|*Ö"“Í /€Ž– ¤'sóðÄEX1É¥2-ðì•eµìHm9rÎ Ô*™è‚p `ƒ€#’Ûs•®†‘Ž´D+æ¤b™‘/ç\f\b^ì.°3T  \“,‹1¬Ê³RäZ>u8ÕŠšÈd4à*öx!Yέl‰@\L°êŒ'ª| i²¥[vd¦‰LÖ IÈ®IVÊ^Ež7°UJT%hŸrž¥Z¦L6XsÞ `ƒ€;’Õ®pžåRc+OQµ™,Ïj‘ÉÚŒª€4.HÖfY€W±ùód¥õ–$O‹>“Ò0ksS£“y£j’DmèÄšjJ´#š•¬iªBQâ¤Ì{WMQÕÿ»ó—«V¿s×/~¦ëYrÕµ×3Þµ×\Å,°Å`µžHBÖŠYÚÚ8æd€¤æNœ±ÇÐÆŸœTi=$ËZ¹VÈ‚ãc¯Fún‘´1˜œqA²NÌAGB ë‹_Z-zª•µ Ý ³N_æ‰ê¶#1.Þ„ºàeÕ—tvvþæžûþüàýZËž…ÿqÃ×/\öéË/ûlEE3’5dR}[‰JrfVŒÔ›ÏjdGÅMkÜ¡š¶­PrI:e«ˆi ŠmY™‡Öy UѦhÊɘjýÉŸ$›?lûXÖÎÒæ„•šÕ”’¼×Nz«%eµ-—HUªAÕmõ #Z³ÿ&<õô³ùÈ1“'MjÞ¼å¢K>óÊ ËËËËÅNj½ðâK7lܨz¾ᒜu7uÊäùóç=ûÜòsÎ>‹9Ã]½åmíT»Î¹Du@ÄYuŒH²ü™'s PõJ \e  mu†ˆÈ‹‘:–YSApÒ6ß:–$ËßVëíõ3ùö;pöÙ—ß~‚: J2"N,±ŠäÒœc§¢Žv¢óùÍ'®ý ¿6ß 5vîžäçò¿?Æé§D‹=ö˜?ýù¡O_²Lçþþ8Þܧ„ ÕNÕ¾˜æÒ³—<óÜ߉déTŒN%#¢KVÖ¤ñRÑâr8¾ÕD¯T¸‘Ü(ú¦íTšQ\G,0#"8Ve‡PX „Ø‘ÃAôÖ£}+=ÉÆ::ºº+žþ[:²oÚœ# »b/ö_]±yÖï¡vrS+Õ®©¬LßêÈç:kËÔ´v˜æšwÖ~ýk_fåÏ_{õ¯ÿÊÅË.4Œž[À»ººûû?üá¾{= ?oÞÜßñSµ¡/÷™DÏys† «’±2(v-6W]r.avØQlÅ\Ê-€,R§›ð¹Ž¤6Ã!&¢OZ뿚žd׬|mò´™3fÏ‹DÊú߇+ )¢u—oa´{ý¸#S–â±NWÎÛ+;œ=¤fóõËjľ¹ä!·f?Y­ú5fÖ¤o ;enˆÞJ­5¦ÿáž=£FŽdÆš}äĉãŸ|ú™³—œÉ$>öø¼¹s(ɵG[[;fôèvïV«¤¸—“D‚H M‹$õEk6ÈkͪΓD2Îì3ÍÜÈlŠC™Õ+pW%¹…Ö,ZUi‘ñƒPO²{>ØuÒiKiÅÀëZ%me9™L8z ¹ÀžvYlŸ&:ÌÕXG[VŸs®À&±8™øŒ´é‹O_Öœijg¤ÖˆÚ—¨ßaÉïE*ØôÎljÌ—xF"¼‹Ï_sõm?ø!'Ù_Ý}Ïm·|WJ±hýWã¹CµÏ«˜ÛWÃQ%ªe+‰ê¶ê3“¨rÑfΔ:e§"Ô; \ _ô“£-éð¶V°håÒè¨6µ­ #Ô“l*•ŒF¢^¶0ž¯WϦ RýÛXÓNå¬xñI/u*Z£*µ_¦ÀŽÜmæ°zÊs³’·¤@i,囯gÊÇ÷Ѱa¼öú'Ü /½\S3œ2Yûp8\’Úû|ÀsdR{kR­}C .+Ë2ªš6IÈÆB²&º‘C™Ÿ¢Rï¢KÌ­{<^®CmÈ¢&S`ÐÙ+;ÑQ1Ï“DO²yê¬dͲ™Ä¦…8ûí±ŸFÔV4%);Ÿdêw@•H]RP»fúLMªÛr'™‡3çè£V­ZÍI–¬]wíÕwÞõk"Ù_ß}Ïç{7ºÚ£§­%³sæ­­bBÌy8Ü[­²¯UwÚæ’²—»TeÕ “ç @û^¨V J_)dvªY;RrÛ¤`ú Ù|AÍ)Cû=‘¾0¾ÞÚo©jY«Æ{dß~ª6gU,nJ«&épËü»$š² yÑÇO}ì‰'—žs6×!Éí?¾ã¯ÿ­¥eß)'ŸdÓÖ¾êñ'Ÿâ˪¦6(î3Åe…*A5îA"ù#á): :#¹‘+) 5@.QÝ`Qkíð™ÃBæ§4-*¢M+g< D?›x!Ùq'ó^wnÛ"z@U’„jÇMœ²sÛæ¾j‡%b-•·mnbš“¦NßÚ,o„Ô û Ažš«Kš(ÒiV7¸>ÿ²©MD›|’‰37‘4¹Ž85µS–7 ̬Ô#ª_ÑÕ&Yræâ›oýþ–­[i«,“ÐåÏ_}Õ×oüæ¿«U+Q.…ÌÜØ¼eËÊ•«~òÄ4UXD`ÕXÄVLSŒŽ÷. Õ^œøO:â‰ÆI®­² ŠÉs ¶_­;ÃÐ`:Šžáè½é‘[àq ì¡ ZRæ˜kGÄ!àùSóB²äʤ’‹Œ:UzÕFBj\>qJãV:rJU¹uÒ3¶¾·AkÍ?B>älz‰3@šFY}–¦2kÎg-k.Î6Ñ S{—&=SfÖÄo‚ÔPŠ‚×ªöY_jÔj˜L“Yൕ••W^þo·Üv»x[í¿ž»”þT $CSOy“[¿ÿC2«Þî%Âh цϺ-ˆeÖµĸìõ%¬$@8ò&¤ÖOÉ+Õ¦Ô»…䌊­V?WPu,lÎ_Uøäñ•×ìý@ìãÑï½èò/‰¾ÄìUõ†8WU ìUKµóª™,]\&Vå½hÙÖ¤Ý^’Íëî)ØW–?¶hé²Ùr Â ‚@¼³ý­WŸÿØ¢sxï$yæÑ?-½ð2ÑŸÝ;¶\uÝ—]d²<{×x™Õöž¦ÅäTìU¢Tikj X­È¿‚/:@8GÀÉŠ¹*/³VY™íùù¯åP1½UË´O–¼— TÎu{ÂsD  €È!.HV›Éª®d’Ys¡@­" £]žÏ²S¾°À›ˆK$Ôf¯þ_“Õ"!%…€ ’qQW`ÅÜ6²[&å +Ä•i X&Ûçò—ímZ%5„?#à‘dÕU¾&Û—‹5›·Hå¹<áóYªå» ¸)žÉö¹ æûÝêYUÂc«´j’P¼r*^öµ¿¢jsXÛ©8šY´±H³_ÂÆ%©-N@èy²‘C×mXÕ‚¸ÞÊk‰Où Y™ œvù>YŠ©«È¼š%Zµ{HØžÑU’ÕMNšj[’hŠËÕBÖî¬9Z1¸•\µ¦F¡ê@Š w™¬´U‹o-áŒÉäÚuI‡gµŒdµ©kpq—8HäM Š'wL.ò&¯*dìj§\Â(RËìY=AðI¤Y}†è?ŽHV$S‘gÅMb’Ë~þ“sÒª+“0§E’ð”–í.rUí…¯þ_ Œ$VRYŒy"Ñ+ ¥†ÙÓ™Z`‰|'‚ êó¾$o­xV²)žŠ 0k¢Mm§t ƒ@v’e +-°Sñb—´J«MT“J‰-c[I_<_1"çJT¥ PJÇ™ˆÉ%k¬Vä2nJÛ¯DÖ*ñIÍyïL®åYѦ¶SjËåÌI´ád @ @d'Y–®ŠI«Ux¢OT¹2—¨U¤£ò¶Rbkžú~wD‹Zb’¹RªâdDr‰Â$vSGG¥HUG+9Qõ‡{kE©jtÜUÖDrLë„@ èd'Ù G8Pþ‹´È|ÐfmŒh8aqMR-S+&”XLŒÝŠ ­äܦ€¼/‘å­”¹5›îlÚ¢ lAÇN¥Nb(-ï8a.‘RÕ0Ô¾´:öÙ‘Jšâ©¨)Æk»ê'$@ ¸èIÖ0"‰d‚GŸNáEŠ9\N¦Œ€8õ0®Ñv£e@f‡3”–£Éš= ’‚UCÑn$«²Ø]Ve®žÕŽ;„Å„€ždënjݸn匣D£…~‘¢‰º]oµ»½ÌÑÒ­¥¾HQä•Uµdªgª«¶¤©µÀ„ÜNVBTéØI«®¥~Ù©jP•X„ø=ÉÎYpÂ/>³vå?ðJð .û‚çŠ "Q¡3JÓEä*S­˜Z²S+>’º`Í™}±‰Êøª$›{žÓj¿ÌIîƒCX<;€†@ ðèI¶²ªº¬¬l៥SÞ^§è(ƒ´7™è¶¨q'vôÖ[[“¯¿´Ü¶Þ®’Š ‹ÙTqÓ¢&”ØVd(‰I%ÿxC‰Ë˜+‚ÓÊEºÔò¯$T»-ŸÚNíàFð+z’%oÍ×2G£ô$Z¿zîw¿Dš°¡ ›*«Õ&\¢VY‘än:ŒNìEêBíQ•8tj@Àϸ{vŸ#o@"’õá À% ŠËåûç¿ðí×Whu¨J+g•¯™­œ°¸¦*áU9ùô7_zÖêÔ¦/T $K kóTË.|IÔI§ž–¨Ö³4@$«¦¨¢Ä*±UƒaTË —§´"óÔܪ BÀÉRT™T$_5{%VU3\‘jÅÅJ"\vÊ VjB® Pô¸#Y‡´P ®Ø/0†•x–,3 ±-ß'+²*rÛ¢Ÿ‹%^v°ÙþÀÁW XAºÆ,‹ HZûƒ6Ú 0€¸ËdyÒjá+ër¬f² Öœè\!àŽdUnU× È3ûå®óuÖ–Ÿ‚ˆ=€‰&@w$Ë”«Ã‹`6ÁجH­°OÖFT àgœ®Éj3VU¨J(xF¦:åô*n*`»ü |@¸EÀ)ÉŠvÝæ°Œ=9ÕÒ©t¥‹¯Ï‚gÝŽôð9Ž– x~*^Ñbq‰º\+FÎØS»‹@ºÆ4±Øêóy÷€pˆ€#’å©«}«ÖЬ*1,?U™WdX•mU‰ÃP¡€(<^– ï%z@l@n  ,I6'‰Â¿H1°ÁK €€3,×d‡ÕÔíÞ¹uÔ¸‰•ÕÎLõѲ|¬[©dÂVv•þ¼g,»uh  `I² GÎÛ°våš·^íÿë¸ €@q"`I²å•Gsbqí8ªG¼×±.ý‚@*•ŠÇú¯½² IDATb©tÊ/ÁbAÀ••†a¹Êª Ô’dµÚŸ#@?¼víÚ¹icãþ}ûÓàYŸV Ü ‡šÚš†é³ÆŽïÊq¬+¸ ìw:;;››6Lœ4õÌ¥ó#Lo¿W€üK&ëV¯lÞÔTS[ »p³ÐXPõ?´VÐÒÒ²øœóho ýùßax fÏ]°fÕÊT*‰Dœ»ínqÁ¹]hB€V 2ßÚá’¾ìò+p9A€ŒÐ¼ò°>ùÄã_|åµ{?¨¯„Ÿû¥ _\ö…XGwò•å-ZºL”øÙÿô­­­í™'ýÌŸïŠÇ.»âÊ{sw ‚€sŽ›K´àw¿ùÅâ%g—E"o½úüÇÃ;Šw¶?ó蟖^x™Øõî[®ºîËX.ÈùpÀàÀ#`&±¡ô=¿ù5ÞxàV½ú÷N?·³½Õ›/l.y›LX.ð†9ZË®ø\¼„‹A@ ?s $›ßžÒ0‹wबUÖº(ZS¬úR5‹TB)lúÞ»EGüöñ:zæ’§F Ù‚’ qû£^9nnjäe•:Å*Þœ ÅSµaAóeg—]y•/ý‚SÁC ?s k²yo">"P±~Ê«D•”UÏlT’%bÙÆˆÚc%”ÉÞ•Ùc€àÈóî^¹õû·ÿáþ?Ò#±>}ɲ¿ñ5*¨xõg.dUüùÏ}ãk_U?’¼¤Â~|ÇÅiH¶g.)ÍÄ’u‚’N‹¬Àµ‘\¢Bµ3Ρ™jYRKĪÍb—˜,{ù•Wßc®à82Mnljš;ç(¶¬4çèÙtª]bêKrs'Èâ—”<êpäÄÇ$6<ÈÓRV৪Zj–„")36íH”­vt 6è#Xÿ;::ª«{™=hРöövm§ý™KÈdµæ@Ș”9Á1^SOy"s¡Ê¬J$kF¯EÏ›†žåAw|]uí~uçÏ6Z) @³B ³ººêÀþýƒ"ykkÛ AÕªU±¹-+÷€HÖhŽšH|ÇOµl(f ŒRÅ#õ§²§ØDuˆÕJ”ÍmªúÅ(IÿêΟjúc°ˆÉ!òïý†iÓÞY»ö„ã?Jí×®[×0ííœéÏ\Ârññ®FL'¦œŒéDúceIͪ?Ñ”•—S_ŒyAlâÊTÖ¾|¥À¶œSöáuï9öïl~ªóá¼ýÄïøéîÝ{è Ÿü×sU’ð¹äaž#“õš£&œÂxÊ$ßI)jVâcÕÉ,×·’g54óÂ×]¿@&´qË»¿r&»ìÂó·o߾䜥ž/^vÁŸ:O›ÉöÎ%¹¹‘É:AÉ‹O!ycF¯N2VÞV˹ªe/þé– ¼Ùñi«tèêÏ1ó¼CüÞIªL†p(ü¯~ùŸo¼L_ûòõtª0=sÉÓ\G&ë 6g´i£V(±hÛJÙJÎÚJµöÊÎB š–ùÄ‚ô/þ¼4h#—_=χž¹ä%‘ !“Íï Âú!`f,×üû‘Â^ØLTRYm⪅¹äzF#“u tˆ²ÜñŒÁ*˜—žRQò®?s ™lÁ†Lº’¾úº/áA‡@€!0ýè-l÷ŒFï\ò2‡‘ÉzA müŽ@†eù³ÿF&ë÷‘ ˆ=sÉS"ŒL6 ƒ 7Ý!`nv¼æ ×ãrˆ@fy×õ/R´ƒ /R´CÇ—uô"ÅgŸzüü‹.‰µ·z¾”ìËÈàÔ#@Ï™­4ä/ÿsÿég.qõ"Ed²·†1bĈõï¬N¥’¹µ k%ŽÍ(šWuõõ†án•Õv‰£Œðý@UUÕÔiÓ7nhl\¿.NùßaxÂa£¦¦¶aÆLšc]±çnƒdcÍ @¿éÆŒW[[—H&à.\ ‘H´²²Rû~›8@²6à *ЊAUïBœ..°&[\ã‰h€ð YŸ Ü@ ¸ÀrAq'¢ …R©T<Káª&C®0ÂFEe%­G¹2 ’u”ýŽíݵkç¦û÷íÇî¿V ü3wÔÖ4LŸ5vÜxWŽƒd]Áe¿#ÐÙÙÙÜ´a⤩g.Oׂýî.ü ôâ¸u«W6ojª©­‹„]øYè,¨úZ+hiiY|ÎyÉmâÂ..ÿX<œ=wÁšU+S©D$qî7HÖ9VÐ ´J@ßd¢;îÂËà @óÊÃH68# O#ÀÍì\š@À ^žÉ::C€=O6`NÃ]ß#à‰cA²¾W8P¢Ñ²€zîO·]ÿA&[¸E¯žµy§¡Xk£)©‰Þ‹ÆZ+\ð…î)óüþ¼ýêr\|Ëá Ì;áÔZódÊˤÉz‚ÚY#õ…ޒĆsÕx[V ¶¬¹#‹}Y騽@’CˆaO^ò©,YSí­o½øt@ÃÉæwàlhÔž‚ÅZn„DÂU»(µTÖKÒ‘ßÙëýE c ’íï°[µ·§6{Ô¶%2er^˨–É ‘m¹¹§Õ±ò¼8äü:ôy‹" c ’Í׌à¿åÕ¨JM?9ŠéªÊ›œXY•¨,ò©ÖˆÊ¼Vn¨>L’Ù^€O±!0àcêÉl~ç¡Äb< {•¸ÏÆ!fM2"ž²²sƒ6}¼ ,ðÔ»ï‰äô¦¼I½8’õ†µ—V*’‘%ö$JUù”šØ¤Ÿjb˺кkcG«!ÉzÍQm:) ºb:‘Cíjkµ.9 &hJô,®xl`½.+¯XН÷ÓhY¹TA²@sÔD¥9)-•¬ˆ)-U1B$#b+Î’ªq'>ykåIJ/u¼ü²óe pŠ#È1Éæ}Ûs«Ô=ãA«&6™¬C•(Ûa«¼c”ëèFÜ‹ë¨JÞÞ€©7@²yŸ¹,ÍÚß©´Ë‰’YæÇ¬]”’.|åhx&ëÅl!æbNxPZ+àë €d¿Ÿ´^D Ї—¯CÜBý@ ˜c ’íÇ»ij•¨2R­ªœU’Õ‚gƒ¯k.ó|ìóÁÀ©§9’Íß”€åDÀ/ËtÓý¢Pt]{"¹\¢àÅl.G¶|„€—¯C.ÝoÝ¿—Ì÷±&¹Ä"W¶zL½Å’õ†ZùL;ðßÈéG/ð5LAsnÀÇÔÛ”Ém¢Á_'øeµÀ‰¯Ð žX$œ†§.0wʺP‡*p„€—I’u-”„@8lÐmµaZ1Àƒ ›ï] ‡Ãæ¼ n=uÝÀmÐ…DÀ0Œ#F¬gu*•,d¿è«è E󪮾Þ0Üå¦î´‹Gtªªª¦N›¾qCcãúuét*èáÀÿ @9lMMmÃŒ™4ǺbÎÉ:Ç š@€~Ó;®¶¶.‘LÀ]¸("‘hee%Í1W^ƒd]Áå @+UÕÕp.–X“-qF”@  ÙÝ P`¹ 4ƹ”¢L¥RñX,…«^¥4è…‰Õ••´åª;¬+¸ ìwhoì®];7mlÜ¿o?vø}´培» ¶¦aú¬±ãÆ»r$ë .(ûÎÎÎæ¦ 'M=sé|ºìwwá_p ;Ö­^Ù¼©©¦¶.âffapž:@€Ö ZZZŸs^2A›¸°‹ËdPqŒÀì¹ Ö¬Z™J%"‘ˆãF!¬s¬  h•€¾ÉDw0Ü…—ÁA€æ•‡5(lpFž:GOárŽ4#àåù0Èdã Íà áXO_ˆàÄO €·)…L¶ð#…Kh´¬$â,T‰À®ÿ€d 4GØ{¼ùÛ¼ywÏ_F+:¤¾?Ql(5•%5ÕN°nÌ7)X罿ýêr\|Ëá(Ì;áÔZódÊˤÉz‚ÚY#-o2¡–õ$¡ÔœŸr L_äSÑ/±¹•޳8 åbØ“Î<ßcc4ˆu´÷mi Ù<Îe)µd=q¡J|«ªž‰mY­j„ä’P«£/:‰—¤£è@(²€9¦ Ù<ÎB-ij…Ì ûL–j]rÒd¦¸A-§s.Öv‘ÇàÚt ¿Ž šÏû蘂dó8¯TÖ“hTêÛ†IS¤TγÚÜ–”µù²dŸÉ#eš¾ŽýFbèwÀÇÔ“ Ù¼O.Nm"Ç©l«¥EÉ9¦#‘£xÊÊ™æ=B?v–õã¨ôÛ'O$×ï^^Éær¬lI”ªf”RCIAJWU‚æÍÕÄ–ª¬8ׯŽU  à¬[ļè[ѳ¥ÍO©JÊXIâ$ÛmJ¾Ú»á%0¿¶¡gytÅcë]YyåÀ:P|½ø˜FËÊ=  ’õšë&ö™,7—•¹‚·$Ô[+×Ñú¥—_v~ñ~è䘂dõƒ™[iVö¤îˆYê*%7l2Y‡*fÇj¦œÛ¨Ð݈àƒ{€âìzÀÇÔ› ÙBLǬ™,caQq.#_:jÉQâåBD˜>pá+0CåÆÑÏd½8’u3ÄýÖUSZ‰^Eƹœ^y—s ælËämï¯DýöÊÁ«õòu^”¥åq0Ç$›÷Y*å§RÓ©ÄÇ$Vrn-«¼Çé«Ìå‚`~#}£Ïœø1õ4§@²>›Gp'7øe¹€nºÏM@°b"à‰är @²¹Øò^¾¹t¿uÿ^2ÜÇšä‹\Ùè1õHÖnhåk2yìÀ#§½À×0͹SoS $´‰ à—Õ'¾B'8xbYlpžº@ÀÜ)ëBª@À^&HÖ´P á°A·Õ†iÅ 4l¾w5›ó*l¸õÔu·@Ã0FŒ±þÕ©T²ý¢¯¢G€fÍ«ºúzÃp—›ºÓ.z`Шªªš:múÆ ë×¥Ó© ‡ÿýƒå°55µ 3fÒëŠu8w $ë+húM7fì¸ÚÚºD2wáb ˆD¢•••4Ç\y ’u”€­TUWÀQ¸X`M¶4ÆQ 0@€dxt €@i €å‚ÒçRŠ2ÑÝÝÕOÒî/›K )ÄÚ‹€uÄ„Fب¨¨ õ(WÈ92íÊ"”À"J&[Zö¬XþôÎíÛ’IìâÀ¡R×sç$ë•RºÞ5lØðÉG4Œ3ÖUl YWpAÙïÄ:;_^±|┆s/ü¬aDüî.üóÏ=ñ× >}…½/©Têݵ«·oi®^k¸Ù_’µµC ™NnÝÒ|öù—Œ3.`®ÃÝF »+nïÂÌ£æ®_»*•J+ Y{TQ4Ò!Z%@´aó‡¿}ïæ‰‰ôù1D«±îÕvÁÇþ€^ ò‚{v;6½÷Þ箹–Ž¢Ð[¯ Yo¸¡E†Àa:ÝôÞ¦ÿøæ·víÚEG*gÞÈÀÿ\G ’u  P„ô²è¦Mï}ó[ÿù™O_òðC¡#•IÒŽ aM6³E}7­Ô{û¡øºo¦ J¸œ ¼•hM2%¾ã–ª¬ æ1x˜B ñtÝsï½W^~ùâŧQyéÒs***Iò½ï~‡NÍj÷¬{ÌÜ´Pß2Ë[‹¯øf$(’²Xð²Ö²Ä§àV7cÝ’G C¢ß¾é&ózW/¡.>ý´E?Õ#¿fÅr/&cL:ZÈK'ŒÉ¨Y=ú"Èsb\ïGt.ß|óͳfÍ:òÈ#o½õV~ÕØ­|àÂBϹE€h•ž™ŠDh¬Yà‚ÄK. ’Íí8é­ë‰¢’˜±’œ1)²´”)s†evôÝdV$¦æ /wÀªmËwf>R€øÃ^ýõ+V<ÿüó¯¾úê<ÀÜÊ‹·Ò  ²ýyËgA²šH"ý‰]ªL*ò)¯å\Im™Pdm‰yG³#é3ƒÌ‚h‡+ŸuóàƒÞxã£2*Ð)sЭÜgaÁß!€5ÙFšŒ…µüÈ]äü+q¥zÊ4KœFí‡vãÆsæÌa:Tذa+»•Û÷‚Ú  @êŽÇì½5"^ÓK{?PÛ]r2M9aL©!·¦uI¤f­Bq ÛÛÛ Äb¤²²[yq£TJѱ=\ö{Y“ÉÚcš³Z'É:“4yNÊÞ¬ñæ¼À3å¬mKJë!C(j•XËK ´"6¢KžY8”t< €5Y yiÂVÔ䑨PL?Y™ó)¯Rj`½P•X`§b/Ú¶¥&œ>}úš5kXÔT˜1c+»•—nůyÑ+óI$=¥Þÿ;,ñtå $[ˆ9#R¤D—ü”±-÷†ñ¬ ·òDU €µU¹[jbcAµY|’ .¸àûßÿþî̇ ^x!‹Ñ­¼ø)͈Ì,5³`póm·/ÿû ¬LG*“„zËd±\ßåœÈŸ2}Æö<ËjµÞ3#¼9g[{ƒZSÅ!¤m²,V`Û¹.½ôÒ­[·.\¸ª>ó™Ï\|ñÅLÇ­¼8 B„[.øô²‹¾}Ëm±ŽE >÷üŠ?=ôðMß¼‘UyC $ë 7§­<¤¢bjO‹j-§W柪 úmã›Óð¢§n’%ÇéA÷ÿ;ó‘‚p+p3 ©žT64eʤÿúæ ß¾ù¶»ïýÝàÁƒoúÖ$awÜ’N+ºj¬•ÉìYŒ×Šjjçµäµ}s­BŽb… p̵‚žëZS'Oºé›7üø'?ûÊ—¾@e.÷´$‹Ä|bÀ} r‚@:³½€›š2yÒ·?éó”nÒñÐ2Y ¡ ņ@æžÚ>;´ #,I²mñÒc’Õã)%†@foõ‡ë‰séh­¢¯Éêq’B ÞÑj/½­v{Ó»µµ# ƒhÓźHÖXÔ P<ÿ÷çìã¤vذáSŽh¨¬ªìŠuØ+‹µ YçXA3„CôÄåT*_á£_8eá"'®D"e•nW @²N°…N`ˆ‘IS¦­]õVýÈQOÏL L¨p4wŒŸ2Ý•±ÝÛßs®’uŽ4€½‘é´3Î~ú‰G^\þT2‰|6CD¿ô•œ» ’uŽ4€@$­©«»ôòkÞˀñ ¨‹‡ö}èÜs¬s¬  RÉdW²3¾ÂË@ÿÚ—À #D ìÀaž(°\PƒŒ@i @÷ Äc1oÏÊr‚6**+ —Ëý Y'ØB¿#@÷¼îÚµsÓÆÆýûö{{’‹}„á°QS[Ó0}ÖØqãí5¥Z¬+¸  €€OèììlnÚ0qÒÔ3—ÎÏÇéd2±nõÊæMM5µu70ÉútÆÀ-Ï$èåÎ]ñ$Ýôe÷¸ÏæÑÐOÐ ~F„6GÓÖ=Z+hiiY|ÎyÉD‚þòáåì¹ Ö¬Z™J%è®BçöA²Î±‚f ý[--{V,zçöm¸!Ö?‰ìÆM˜xæÙçÑæh²D«”Ãæ‰aÉ>÷°’íß £µÏˆuv¾¼bùÄ) ç^øYÃp‘nø,¸ãzHÝBýü³O^xé½ ²<±Ð‘]K%/?Ž@²–p¢"ˆ$ÓÉ­[šÏ>ÿ’Ñcz^žÄ(à³sè!߾዇oðóÇâõ3Κ@ ¢Uä°«œ8i®©Èp¬]¾ùÒË/¿ôÒ+6]ó?,ŸK`g×Ú"2YklP€@Ñ!@ {Ë­·iÃjjjŠÇã=þÄ9gŸ¥Uð&Ä_ÞpC+ Œ@ggG2A°ùI$]]]‰Dw´,ºøŒ%>öxcÉæL˜@`À0_ˆh÷—YL WÓ¦ÒIÚõÅ>t#I“ÉÔïP[[{Ö9Ÿxüñ'5Fl"¬"Çr29–Oi˜µ¹©‘É4/ðnH¢vIMìx­¨)ÙWûR;‚Ù×Ni'íöæ±Xç°aÃêëëپײò²?üpÅŠÇŸwÌ1O?óì‹Oë?, ÙþchiAË›L(q"3¡¥dš+H¼©íÈÒ-T¢F@¤Ø-[¶<¿âE1Ü·W­¢SJbGŽªgò®î®P·YììŒÅã±Gy¸½½cîܹƒ zæ¹å§ŸæèÍ46ˆ‚dmÀéo•6µ"JêÌWre-_÷×u´EÀúw7~éú/'cû óý²´:jìÛ³›"K%S{öî¡eÙÁƒuw'b±˜1è^Áú‘#gΜ …«««Ç޳ü¹gA²¾žZÒÔ YY3Y¦ÆÓX)Ÿ•°;Ë e_O8×Oúî“MP–Jwj½ûhèýÆP¤œØ3´…öo¥‰d‡ꪨ <˜ÊU•Ut̘2õàÁƒuuµcÇŽ3×`ÅÄ8û:„Æ{d²Pr%R3Y{‚³á_î#V{zeÊö}‘Ž#¹‚v€@¡èËæõ,Z˜³Ì˜Gu¡Çº„C¯š;©éÑ­­‡ˆ@ÛÚÚèé…t³,í­¦ã°¡ÃˆVGU=¸zð !Ší/Ë‚dó>ôœ:íÓI›eÑE¦FGPdÞG&K¶··–ÑU­ò ÚD@› ˆb©-+#þ6|XüÀ‡»¶mÝ÷á&›× ‡R©AÕÕ´(Û³ý½Žp÷.[ 6l!æ‘ý:€šÀJmó¬sɧ´†céèà^KïØJu§]is³A,ë¨ '>ØÓV=y7-£U]×d²®!óÐ@›Šªv²R!·Ãù—®j  âqºðÞµ¹ijÅÁòõ%ÈÞöÖúÉG&è¡°Ä¿æò€A/Œ…#¡¨‘N!£,­•W¥ªÇ$ÃëÞÙ3{QC?aÄ_ýÐQsâDñOۆѥz´RÎÊÈÚ†¢°ÿ²v PhÌ5ØÃw|Q‘a-[%Z“ÝédWª;žJt¥ñp(NÓ¾®D8œ¤UØp:a„ˆeF:Aåp¨#ݶg{GåКZÁ —hÉzAÍm›¬™,ã;QʪPìW²)Vñ<×­ŸÐAG@Ú ¢ýí­©½ÍÕÃD¯æVöÝ鶉NJd»SÉîH8Iµ„R]t±+Ôv€vÐÒ ÄªáhùÖø~ã¨þî-áQ‡…Sjò(1©¨À—8ŸªÍ%÷íyYR¶¡é¢‚Þ€@Ȥ±½Ÿt:¹ÿƒµ‰½&—†ã¡dgªåƒTY4’Øg¤è6¯tÏ˺ÂÔÆ\;ˆ„c!ZFH‡é莃ñ6Ênk}·s9õ™¬S¤<ëIù©dGb:•ø¸D­R]²Ò±’« Å„QçÁ›‡w·¤&“ñ¶P¢£¬½5¤)o¥´÷ÀÈpk¬ÕŒÚ$çt:I…*hãìÞêÝmb"ë¬GàÐ "Ð÷¡ÝáĶVïÛ˜ˆ†Ò´“«‚’؈‘J‰®1lfƒW8ܪˆ‡‰aSD¹éH:œìl«œr|xO£ý#À ’u‚t€}eiáµjÏú¡Ñ®Tyu8 E#Uá®Î½;) EˆVi;ýGW¹ø;¾MRíJ-‡RoÜ~â Ç÷û†/¬ÉdæÀM œ!Їeãûv‡º·ìŽ©h2I‡ha6Z.3ˆmé/LoöŽËFh-6DdkÞf>f¶<œ\¿3}â'N:bÚ4™« =/«Èd ´€&Åö2!qæÑóüÏ‹ã±[èA†:9 uD¬õ£ÆÖ‡ÃíC2ÏŽa/‹Ý}AÇE€'Ãô¼yó¦Ï˜Ñæ-wZ5 ä¶¼ŒÒPoÔz¸;d²î ‡¶ß +Åtu8•ô»Ÿð/GÐ}´ì½=ö„ÕbɈa ¦½TU{ëÍ æ•°ÞÖžø$ë |´ò)#2iÊ´µ«Þª9Š^íS/áVŽ †}yÅsS˜Nˆˆð0fvЊ€nQÀ©"³zaYÌB§HC/TTTžvÆÙO?ñȋ˟¢GÚÂg8éÊa'Lšò‰ó/¦—p#^ˆÐ³‚d€•à ‰Fkêê.½üÚ0íÑÁ§ ýôJïTæTÚ’E¹-e­™—ÏæøC±iœ6!¸ü€d]uß#@ß·®d§ïÝ„ƒ9F€ÖOGŒ±þÕ“'Oò@…Y½¡…~2^W_od³b  €@UUòˬhEIDATÕÔiÓ7nhl\¿Î¼s+×"îššÚ†3©£®X‡só YçXAÿ"@?çÇŒW[[—HšêÎLJ.¥VVV ÷&8ê$ë&( àhÅ ªÚãn­üEçz7®À2@ øÉߘ"" |„HÖGƒW€(>@²Å7¦ˆ!’õÑ`À Šlñ)"@ÀG€d}4pâC$[|cŠˆ€ð Y \@ øÉߘ"" |„n«Íã`Li˜µ¹©QÛ}•ÔDkÄÆ‚¶Ç’îØ±}ÓÆÆýûö;PˆùøÚš†é³ÆŸPRX!Ø|#’Í#ÂDŽŒ éhÅ›RãS‘U¹‚jDÛ6ñÇtsÓ†‰“¦ž¹t¾ó—#УB×­^Ù¼© $œq†§ ÙBŒ'Mmú)ÖÚ{Ã4%#Z›övо¶¥¥eñ9ç%»»éÏy°³ç.X³j¥s}h'€d ä]‡Ó"7!¦ŸÚuÒT“VÖÜ*«er+kÞ½lKZ%0ŒH"Ôå*jB [tÕ Ê¥ƒ@Uõ hÔ5gºnP:€æ0R)“USQ©/íré8Ìd‘Ûfð¤—:ËOn~ðþû.¼ä³TÇ }‘7ßYÒ¸úMi8p z«ÍI‹Ïw¶»E$ë1§ú<ë”’YÆ€"ŠìкUªë°yI¨ÇêÞóÄ…šÚŒþ‚ãO) |¤KV¾þ¢Ë=ê Yo¸eo%q+rz¥ÆýùiŸµmV…ìÞ_#™ìîŠkÞôÅ…jm´¬,øq#ß!’€!‘–PÕ´T•p/­ª@¬ò@RZªIV¡Z«Ë|e³8.ɺÌ«:_2\²§.ˆŒ)±*ψ¹#ܲW׊³¹Z Ò¨ð²hµ–š+_óø«°8qDT½„iQÖÓ$ë 6—D”ÒX‘OEµ¡Î¬j6m]:du“cå _KÏ= y¡O„R>ùŒsƒ6|÷ Ù< #;‰òl~׋šŒI¹sª‰¬óFMÓí[ts¹¿@—Ìj¢WRjèáò±Ö „@€!’Í×Là´(ѥ؟´, ñ¯˜±²VŒXY™)«ªµáñ|Eë3»#FŒX·fÕäÉ“ˆ4º–J¥¨I]}½C}¨‡€dåZMd:'¬§ÕáBVPuT‰kG‹±ÁÔiÓ7nhl\¿N]1° ×|vAMmÃŒ™V o€d½á†V¾F€ž?€Gøz„JÉ9§?¦J Ä €È ÙœA C@¬Š $@œ!’Í”0€Pɪ˜@€È ÙœA C@¬Š $@œ!’Í”0€PÀÍ*&ß!@wýÆc±”òÈß9š;‡Œ°QQYiOA²¹›°òƒ=æf×®n_rž_ d•¿¡}ì¸ñôìžõšŸn@²ùÁV@îèììôð’óÜõ?–øÚkj몫«ÀƒÜu ’Í–°òƒ­ô¼ä<‘H&ùéÄwVÙÚS©ÀÇ ’õÝÜ‚C@@E€'‰D’‰nµªX%¯ó‡¨ù¬ŸG¾ó­e¥H± ’-¥Y‹XƒŒ@†c‹…x DÑ„øíËï*ííí~wþ àd²^‘sÖîPË{Å×ß\9yâøéG.°WC-È$²E“Þ9Ï" $ëd°û¥óÏ{.·j¿~g÷{&þÏOþh¥@rñŠNÊÜ”ôîEmÚ·1jj…Z›ú “ؾå=æŒXVÝÓÖr!Ä&’ͬ½h«>±$[ˆÁ=ï“ç«Ý¬jÚóƒg–qa¥Ze#ߜȉÞôÅË*2‰ØÐíûǸ¼RÌfh Rå6¹õõm'LžFžKLÊbÉðã&*Ó‘ÔØ±ïÕ·tF(ªõ”û¢¡ïº ˆ |' ÙÂŒ<É>Üßù¹ï?û•‹Tµ®³ñ@eLNs"«2 ª²d™µelË9WK¾\(Ò·X¶ñUùC@žF=MœUBG¬-µb 汯5fЬ‘Ü< š|[o›c@‚`$›÷Q:æò{Ä>Ž»ÒiDm¯q²#·JFY-³µ?µ£¬ö³Ú„Bî0— ܱ,ÓŸ>{ÞÆu«x[*“„Né(9IU$a\ɪ˜„µeGª•¬1 é3Ët”tx/îüwkîñΕEl®ÔÛZ7^_áLªeR­Û“j­”íÕ´­´Bgq@+'°ŸùNMm\÷6ûýÎ ¼%“dŽÒÇ$¶¾ò´ Ìʤ҇ÿDû¢²dZuCî\>/–ÉÊ‹s à_Š„vü p><ÉæUعG “Ç–ËM¨ ÙÜ`äw«yq¡ F‹…eA²6è ôs§l?š®i‘ ’ Ü̃åˆ@8lÐmµô@!wè U86ã ÃFþbˆ!° ŽG†1bĈõï¬N¥’Ž_‰"¥xëêë #ð‰`àþtB@ UUUS§M߸¡±qý:ºQ0‹vQTS[SSÛ0c&Åô€@²AAø_üÐoç1cÇÕÖÖ%’‰â¶7ÂH$ZYYI±=dlÐGþ—´bPU]]¡]X“-º!E@@ø ¬ŸF¾ Pt€d‹nH~B$ë§Ñ€/@ Ù¢R€€ŸÉúi4à E‡H¶è† à'@²~ ø€@Ñ!’-º!E@@ø ¬ŸF¾ Pt€d‹nH~B$ë§Ñ€/@ Ù¢R€€ŸÉúi4à E‡H¶è† à'@²~ ø€@Ñ!’-º!E@@ø ¬ŸF¾ Pt€d‹nH~B$ën4 #œJ•ÄëBÝám PJ¤Ói¢‡ãEŠêQ6|DÓÚ·FX/Ñt9´È @ »{×¶áu£â’uTÚ´#ç6­_½ëR©´»–Ð@ ( vh͈†YsF’uTZyEåìùǹkm J¬É–ðà#t òH6ÿ£ J¬Ýà†‘J%í4P€0¯†¥ˆ.´H`MV KpÄÈ1ï¼õò¤©ÓÃa=|vQ€@i @ »å½#nj׆ ’ÕÂÒ#œû‘­úÇË›Þý+öÆÚÁ„: PÚP[7rôüœ¤…$«…¥GXYU}ü¿,¶Ó@@Àü ¶…•@þ!’í~h €°E$k *ýC$Û?üÐ `‹.|ÙƒÊPˆvVÄc±Tº„ž=f„ŠÊJ«mDúZ{žÉÚãSêµôÀ¡]»vnÚØ¸ß~Ú X pОèšÚš†é³ÆŽ¯>k €Hs€dýR€d³BTÒ ÍM&NšzæÒù‘HIÌ–d2±nõÊæMM5µuÕÕÕÒðb?CT¾(‰¯6$ _‚---‹Ï9/™HПÃVAW›=wÁšU+S)M¼D\’u¶ãÂWVˆJ]V J$‡å#MñÚ¬é+@ì9™¬=>¨eÐÊKê!åYƒ 2Ób†X‘HÖ È@) û/fˆ5> YklPÓ‹@æ”5¹+¼²† @tÿèd…­„fˆ*H¶x‘î¶¶mÿû¿ÂÝ ó}§á°ùf>z2½6.•|ÉE£N=5(äÛÏX,¾ì¯ªgpÊtÖÑ–~à¼í••ùî:‡öA²9¦¼ H$þ¸æ‡Ëæ|--‰ÙH »ãêk‡VU«†’IúKÓ1S¦Bò'?¿«{Ìxö›9—<8hHø“s¯íNvv§âÝ©Øß7{ðþûÍô¶ç‚áÓÇsa2qJC¦·V$Ä8³ÊÖpêk²¢çÖI†aoiÔ|ÌøÓRéxYÛ¦Õ§¯Šò°É°iÂ~ß$L’5?ª?¦„ÂÏ{þUf‘íb U›z,,°TÉZBƒŠ~"`~…ÞºeOdÝoÿyË¿óMâYưíC×Í®?1e2l"Jж…û_Ýùvõ’1×LŸÞPW[kµÇ€3sL:%!ÿ"©šýŒ¥¿Í)Ha;Á¡G¡…ב߸†É³£FѳO ûþõ×§c1ưDÊaeSgU­K"ó’#+ØÓÖl>„ŒaVo!¹É¼ØE‹t,†««i–V“ˆdi¹€£!ûÒK¬&½òðÅlx ÑJ¾ÉÊc†óœ ÀvoÅê¹c>Ö¸ç5Z½dÎ ¼óƒÖ!kL† wÑw†–®û4í{s÷ªÚ%£³0¬øʉ‡…6Ò›œš—¶’ÉC=Di[ý 7p7ÚŸþý/~13:6ÓÞÞø®\•xVb+¢qÕEÿ•Ãî¯lœ7ö_ˆaÓæ‚Qê܆¯Ó¿Eæ¿»tLw'C]©tý c*ÜNÓ¢AB^“ͤ®Ò?<"í2W™‚…ôÏp^y$Ûÿ Süèš]ñ˜ó8é+ôûU?ØS±jö¨ŸÎy솽oÜ÷öÿé¾aVýqiúR¥ÍKÉCMûßÜ·zÂéu—O™4qÈ êu”Ô\õ¢¯Ä¦wß!èÈËt*y%2ˆÄ&®ü–•Ûëd¢ÛÜE¹é€e©aèúèGÅ^ʦOWVÆwìHÑjloE縱V129¯•Ôø©Êª® `ŽäóÍÊì«jœ;ö¤D:NhÛ-¸fÖŽèß"Ù‘l:lÌ5¥pw(ðl¹ «+ÎC ù0mæÑLÈ&ŒXK±Ð)“«“Ç~Ä¥Ú¬€ˆú YWØB9;æWèí¼°ï×s'ÏO¦»Ò©DÄ2zwôcÏèNµîO¼ß–ؽ7Þ| ³Õذðôº+¦M«­­±Z% .ů ó@ü¶pŸø÷Gª¥Óì~ç[ƒe²ì¦Ãù½ï î{ûlù¸q >ºþÔSi‰–‘,SQùç1ç-,jŽ›ªSH cØÝåï=æ¸D:fn¥,–èƒÌš@,y°#¹/ž<Oµv§ÛéšE‰t{F'D[¸²zˆ;ë s ¢¬öÝ*€dÝ"V’úæU §—èÙÞ' ¿pûö÷øÜsS~úSJç*&L˜ýüóïžzjœó¬Ò§Ž+0L¦ÍšCfC”ÉÝä@]AÁçÚ?p¨µ5Y“H¤biZz%ê ‡„J÷mô—ø–öóÑš,­ °»x™¦M暨r»(S0§Ê¬9&>b1˜¢¬çY,€d³Â óR®óIeD"C‡ýø¨KŸÜoм@—,Æ ž²¯kë®-”°«Ã± ÞVsù´iÓè…Z‘hÔÊ~ì9Mkx-+HB!UBšLÈÆÏʾvt³*»„º(««Mwu%ÛÛ[·m3FŒ4oëwÿÿwÑE¡®®pw÷ä;ï$R);vðܹÉ÷Þ#3q«ªä!³&„†/‹‘¨„ÉéHÑ&çaJµÚðUa!S§Ô-ûó»?]g¼1cô¼XêÀþøöñÉbUâP:õÒU/bX:í¹–ábš…l%Eò‡ýÓBn3¹xäBÇ*kP*\âª-HÖIT “ÊqúC9)e¦”Ÿ†ÒW>¹-ô^ä…ÝÛRá6Z4 ï ™‰u§#ž6ÜYk~Kz¦tÓúÕ‡³Õ%a!}┞T}»áÍú%R’);k¡q?uÝÝ÷ Zµ*LokÙ¾rÕ™+V´¿ùææeË"]t 0´ÿ®»h]`üÏ¾í³Ÿm}è!¶F°¿¾~êOî`!›±9WB€KX¤f-ûˆÁö–IYSkë¶P™3@*ÊËÇŽ½¤íŠ'Þýõ?ºžŒTÆ¡ö^n5‰Õ$XJcY&Ë97³HЙH ÝuŠq„¹´ :Î7ÿÉá“„ëd VfswSBB*+ ‡õA²v8Í´ºJk¬ ÓŽ…®|jkèÀÔ Óê"]Úˆw¥£M§PKµöë°‡¿™oˆä—fãöµºy‘E"‘Ù¸oÍg¯¨yáE#•¢Duã '$?üР¶w Á»îêxî¹îæfö<0jÔø§Z?‚;t˜C3¢Öpì¯O àsã¬Ðçžhþõ / LùªI¯t]°“v¯…Ì;Ì|6BW3…L>K—À"›Ž›V>¿ª²R ú0ò„„:>I$¬Ò¤’àuŒkvElvŒ A¸}hw$©©>mÚÔ3BW<³%ÔyÄ t$]¿¨ØtÊ¢Ú+HNµ¤covãúUL V£@ \눵ÖÊ”+¹½çª)#b}ßÝkÿísõ/¼N&S;v°'Ÿ&çÙTs3å°tº̘QOþmèÈV½0@ÄZ+.—bÏ,X+WU(øÜXBÿïœøâ`zb¬¢E¤£VÿWE…þY±ååõ#êÆWi.¡hIuÐ9Jjà¬JôMkSuÞƒ$ë´ÒkBSZ3«³à@·ÆÖÖÔ˜ëij͡ý“V ß¾pш+2WºjÌgÝÛÌÒe®ª³:æ ˆ9êÞ_¯»üªÑ+^ ž%g9½Š…}cÇÖ?þÈ0z¬AV7roV;Y=q ˆ07®|j{¨mò‹ƒÓå¯ôQ³Ië>´Ö_UYQUUUNì²ú£³K™@²¹D¾xm¹üõFÌuƒÐÔPèò߯8eÄ% GLͬPÆæfžÙ¬¾y$1fßs×ú+®ÿÒË´nÀÂb kÃá½õõuýuØHZ%ÈêC!AÉêŒk@„¹qÅÓ[CíS_¤5Ò‘õ#&Lç °¬þ8°Ñ/€dû…t‰46¿@.&UTh9²¦¦––gë^OÏ% 2I<[+ àYcí †™u÷/ß{â©ÔÁCR8i#<~ÉCjjü†Ožás#”¾â™Í¡í#V¤GxŸi…™¬—¬€ˆÎ€d 94îËÕ¼êi4jÐúÀ°¡C"´W+*?ü%° x„òÙéKϲÜ»ek›¨ñâ6›´F‰\•L^^QI÷Úy±S€ðåe´Ï¬aÆLŠ]€H˜u’€d³b…ÃÐoç1cÇÕÖÖ%tÏÒ.V¤h+Dee¥ùØ'å@$Hˆ2Gd2YœKÐïÁªêjÀ ˜!®¾X“u”îɺà Ú@W€d]Áe €€;@²îð‚6@À YWpA à“d»bîA œ!`¼øÊk眽¤zðPgúÐ@ì´ìÞùůÞ@Û³\èîÎÞ@ àîxŒk™$ûÌò.üÔ'[´t¶·:h €°D€rØCZ®ÿÊ7ˆZI)Ì­´xÑ¿ÐùmßþV´¬¼¢¢ÏKw-¡ ú"@«$` K…Ã$ËÔNùØ @  <#@ë°bÛÿk`ŸL{Ýè9IEND®B`‚lcrt-1.1.2/help/zh_CN/figures/lcrt-connect.png0000644000175000017500000003053111752203002016070 00000000000000‰PNG  IHDRJ]꘳qsBITÛáOà IDATx^íœÕõÇ_/Û{g¥÷Ž4QTš F‰Ñ`/X"Qc‰Æèõ/ÿh4k4ƨ‘„D!jbÃ)»+ ,u—íýÕ™ÿ™w—axeæ½ÝÙÝö7,ï3ïÜsÏ=÷{ßïÝ;óÞ›1ÖU3H¶›/›#}Š}xá¯J³µˆOîºr^«‡{ò¶ â6£Éª£.!Užó¶´yhz޳™~ûú#›½ÉúèMsRþ¶FÎUOà  #F‹Ýdµ›)õûzç ›Æy“¶ÿó IÒ~AØ :êRÓ†ÀËë÷u²/7œWD,‰ÙGüíÚ R¸°8oõøýïn©…¶;ÉÕA cþ¸aÿü…?7´oǪS­m»Ê_ZýëÎíï«?æ´™HÔ‚Ô/œ=sÕC{Zê<͵bhsŸiqÃÏ7MF£Á@<ýñ¼ç8Îï÷{›×ëõû|~¿/¾f›©â›§…Šªt›p¸µçÙy,ZÐÓ &BKC-ªd… Q iXP¿cm”þ¡n#Ÿ÷~@žTDË.Ê#i ³·ŸãÚjP‰XÇšœ·ý`ý_W®´;›Ýa³Û­ ÉÜãv·µ¶¶°--óæÍ˜žl•Ô m–n °ó™ÙÖ®c*› zJ>ÒL®ùã¾MÛvK-¢g7äßË›ðóZ„“¤M&¹‘YØÊœvÈ켡}I “=Šº@ÉgßúÖQjHÔ6Û¹oѱuÚß´§)HüôT”:ÓùŒA‰o~Uÿ“I‰Ý6š $¸ÐÙ»dí#«Ê¨ôÁE#~8¥€vÞþê°h˜'EGÕ)[œ“ÝÏfïÀÇætÑ›ÄM“<Ó¶Ûí6¤m‹%àLKˆÀF²'*"ß êÒV±ßæŽLzðͬEQ±ËWm!Ë–åg2{¼Î¦›tö“ß.‡a±tõ)Ž¦Ë Å9YX»$é_^2”ög³„u‚œ8Lf;lö&ÑŸ²ºΤó‚’IÃ4?SD’·Ùl¦fdò¦ý€òIàXœwõ @.þä>gÅ4Mÿ÷±éwþ£Š= š¥ŸúQ&Ùç²Øº&‹.ã÷±ÓÕ„Ù;DÞóÇfÞ½pЫ÷P뢰iŸŒ &愾fïv%2I†Ÿ½I¯F£™¦kQÛ4Q³Å¹¸’§"|@Þ˜½»zôâ±lÊ=ÿ¬eb&mÓÞâ¦Ó '7ZlÓ“wJ\l&g¡Úfn¬”œŽÄ—È«UL² ]œSð9£Ó︠èé÷N~$NOÏ—z.°87{·¹}M­§œ²sz|&“ƒN§‘z™Èi‡£GÚ˜°éi@Þ&·×ßzjuµúŒ8Ñ I3çÐ%·hY{ßú{dmû±·Ô3¨¹Q´ WEôÉÀ3Vn/×ì⪛|¡É.5FrKqqD2:cNµ„Ù›ߦöñq8Ž4×~ìNûLØ‚s`Ÿ„-|N›‘> ÷WÍ–.&0¥ }º–ž-ZœS ÍKßÈSêäLž]œ2Ÿ$Àô¤B*Þ°½úå ¤¤èé çö;wdF(>ª.*‘íò¦‰9XŸ<7räˆû4Ì&lz¤3èFò5›„óéŽÌ ûššk‚«‡¶ K7®±Y³¢eÃ÷†ÙO®ÛéD:-×Å©[#N”f>"|&ž*“ž?#»89úàDúcÎR»¸ž'OV—Ü¢lnª §BgïÙqKf÷£ø³G·/Åi‡Y¨(p6ìä&¬ÁMQ‰l'pìº8—T3Ç¥½òÅøÌÂæ¦¦Æýû Gò™cš?}‚o¾AM 6ýzâ}k„ßðÒ"œ}q%RVË$=²xâÚíÁ?øe«wi]òŒvÕ ´Ï½§Æ¥/®}w…Êç¦ñÐ-âì:ÑK+ç½$1«½7$&& <¤¹¹©Áêt-t”¾Ú,=E@ü0lá0c¼=øƒ11«ïâÉÁ`ã°ĺ'<{ªC½«]6Mȱ"&ðSºdqn ^œŸŒk4%:“§o¨~=FÇá«°5›ÓœÎT“»>Ö àßEæ§ÁÚÇVº¶9™¢°¡`T…©k×þ#ç^Òáh;ö‘eG·87™›+÷ù}}Lf«Ñb¥Så®¶w[³Õ]c2p8£ÖáÁ@E¸bZö‹¬^ß9(KfåˆØB ðÁXèçÞ¢ï­|ûg¡f1Ó‰•@¨, 1¸åœ“〈bXç“‹óF7WÝ‚/‡¥#蘀0{¯Z‹k­èx‘:D"`INÏ]¾êËúêŠH°ƒèŽ@åá_Üz‡ðcOl §%aqº%¦†ÿè<Ô-hª«M#¼¼Ãº†V†@@˰8×òè 7èÈ»SøP´LòÖòè 7èÈ»SøP´LòÖòè 7èÈ»SøP´L ‡å½}óçøŒ]˯ä¦ká?÷ަK-m¦F—Éëã-f_‚ƒKpHަ¢Š> ­‡W§¥%æå¦ª¶ó¡è“fSÉwÔè:dòÖxorðÖlÞYà7åù¹Dßݬ:ß)DÐŽÈÛíkÙSÿá÷UÕ ­‰®æÉvóØD»?'±eT_.Ñٯڦ涽ßWÚqY3Κüù¦­$ï†ÆÖªëâMu9¯¤wš(G‚.ÛRS×t´*kè³í$úCÇ<­méE…fk̦̈z›a›ñà&¾n¿Áo6m”évÊ3oðYr†û3¦x¸‘<òn!Qf 7ˆ‰@̯ÝfwÕÖÚWÊ}òq ÿd'—Ÿ—4Þaµº}ö¯¾ÿnX^cAÚ€˜2ˆÉÙãñ{¸Qþ¬s§ˆÍ΄ÏÖÿ7«ÿÉs⌶„²wÈŸþx”a[*ªË_ý‹õÈ!×åNŸÄj5VTÕµÅ[ÛÀ¹ÜY#™7W‹r£IÛáÛàÿn“¿ÅlL>ƒwf­t¹x Ý›ÕèH5¸ê|G¿6·®vÒåèÏàyÜè'J®pë^¸Þík.®}sŸÿ=“ÙçiËKò\5mp‘ÑÜãöÒÌdvX*ÛÊlõ欔~ÉE©Îž½f›sÎÜ)4å²{( ÂuØ“×.yfvUöTOÅûvë_ãâÛï•§ÏÐt¬êÈ ¯æmÙ”Ö/ÿІõÇ,ÖœÉcš+ªë6ý·Àat é³·dÇqƒ!kÄ`šx£8›e7_yÈË 5žeHÈã- ³®‚)ÜìÁÀ™M>i°kÿ»Î”]Ö”¾o—€Š.Uxþb“÷¡æoz?äMtW±$sËySŠú54[Ž5¤Ûl6··8Íq¨_ÎôšÆÝéþ>ì~ƒ*òÛ¼ußø‰#SS“èÒëü‰‹Šµ9vðwãFΨ®;tÞ>þhs꣆ݮjÂhÄéÆhûÞ~/ýýwÓ Ò¬6KwdË×åMÍ–¦Æ|«/%5ÕhsõËݱå[[ZrZŸ¼húbä]F®Ñï(ô 8Ç””òb6Âí Ì$nºq—6ÊëñÛ ŸùæhbÂ:L ÚcTÖÀÁÖÏܦ:ºS¨»aX¦é§mî„GÜ\ Ða±Íއ뎸¬I<çhmÈMJ7¸|‹ÕBJkl3ØÌÙqÎ&Si†õ —Ëc0¤t8§ÐŠI öÖVÕj£"á:FCÍæ¯Œ¯O-LÈá›,Õû<àÖÖ?̵¥L:cH’#ø"Þ¡™%êøJûmÇ^}ÕÒx<¾±É?0#žó6{wVx«jŽù,­3fæÎ<ÃnÚn3šX½ÛâLmæ38.ãÂmœ÷f£%:Ç5˜¹r§ÿ#sã7^KvàoØ@ «Äöúª?:¿Öo58¿'KtxL&á¥O×m£yÉíIÈNLiõ×ø¼antØ™ (ÊùòëÒ9çO÷ÐLéÝdG)ÿòÔÔÑ×\ðHÅMÃÎ_7xô¤Q“h½}`yÿ1éÑ·•=~d•ñšê·Vš+Ü.aUÐÚâkh8î2¶þà‡9çLEÛ‚N•Ùõe¶¶ sÜœs”Ï’ÏŒF«Éà1úŒžï--%&×AÞçâ“q^-ú‚gGÄ&ïTû€ŠƒÍ>‚nj°¯²rT¿†>éΦ6“ÕlôÑÝÈLCÒœ)ßV®?£#¹ÈÖ7¦ÏÖmß>Àn7|õáŠ}æ•3Çñ›%{~ú†ÙÄgggZL~ǹ=nÙ0a 33ê FÏᣦêÀí¬i9íñºNgf¦‹eã 6¯ãl³«ØÔvÔDwqiýÄž`ŠO4-¿Ûàk6pá3pZ¢;¦ú¬QDÄÒ>|Aà±É»_–ñ{÷ËÖÔ?s-ŽÿÉ—¥Õ3'˜¼©©Í.“ÝÊÇYìû÷­n«ž˜Õ‰¨˜†Âá°5Öá¸[6ï+šs×®ÇçÅû?ñüꬃtRSFfªÏãiim3ïÑožÃÇšW¼àøx Ðk³ÒI޼ϗÜZÕøÜsu&SÚì³¢Fž^û$CÊí¶†?*¶øªýÖ<—ÉÀޱi….üq¦xoüLOÂ圥 ¦ÈpX Ä&ïÁ9iû|¾ãöỎ›Úê2>Ûûê†}£4¥§Æ¯ã˾«äZª rÏ5øÚo k6òþÆõß²¹Ìáp–í©¶lkjRB[ƒßéLäü|c£'-ÕÆù[I>òA¤¥®ýåu¿{ÎòÏ·­&Þï°û­$o ݯœ÷zM¯³rsÝcÓÝŽÓÎi¶&öh6£™Îûö˜ë7óIùŒl¿±™Þ0 F;oNâ,ù^ç™~ûÞˆ•y44áÓ)±É;+9wBóµ«Ë[-™%qŸÕÔþ`ëÑáeÇš,´îl¶q¼srßcÍuU»÷|?vÌHGŒ+Û¨úák0pXv6]ð§Û‹7Ô ÇâÂ9iž'm&%Ûc¸±Ï7¼¿¾iåÊxú‰Éhq{¬X.ä¶o÷nØ(ܼœŽÃËJ¿ôjü¨q1\bÞÜô­åà_9Cœ¯ÿ Þ¬‰F®…Þ2 &+oˆçM c”¡GÅN C ¶Æèðˆü ,MöŒ7ÚŠm ߘM¦VO2};5!Î;g|ÍÅç PÔ¿òxUÙŽ].ẆÁ2‰²¢±£û•mßÅÑwDü¼ßO~³Ù”˜ä ;Ÿ9Ò\QÑÃ}‘èû0³¦'LŸÖf06s¼/7ϱd‰}émŽ;nœ6­Å`¤÷¼ié/°gDó9z{îF÷!kùs†ÖÃ\Ú4.}*oJã,}8k_ΜǛ“¡mÅ!†ƒŠb›½©aúgTŸÑy­î¯ß|ÈßX¿×fæóÒýsŒ}sâmVKrRœÏï?pð0}4nŒúg|îÆøxGSS[Rr<)¼¼üøñ£µ´ž6›„–MWôtCg>òPí²G\»v™o]â:®Ñï7 d¸ãvSK‹yߌûîM^ô£#ÚltnÜVûSËVΔê/¼Ô`MŒ>x‚€êb–7e@ºÍLèKã²}´€%Á[-æÀ‡»Âf±XF b±Ð´ÛÒ Ê¾ œ³wï~Wk«Õì5p^áçb# ©øžœãZòr|KÖTRº/7¯õ«ÿz¼êˆÓáHY¸€"ºfN³Ñ§üåá,¾ïlæcvªË´Oeà]D #òS±Fø5Ý!xäða]”1MÝ)Ζ‚AÙOJ¶9Þ!ƒ“úp ñ®6ŽÞ®ïP‰……‰IIv§Ól±ˆï\Š-ú-ù>ëXcb­?yÁõÙ8Ÿp蔼;Ô¢ • bøâŠL{4áÇ6ò)”ñ‹ºˆ3ç·¥Þµ;A k tÉú9ú”GNœŽ[&D ž –wL¹Â@ &wL¸à z"yëi´+ÄDòŽ œA@O o=r˜@Þ1á‚3è‰ä­§ÑB® ð_k¡›‡ÄÎ =K€¾Bš@xyïß·'Ôn °`ÑÕ¬•¶¶¶ÒâmUÇ+9Ω]ú5DVvÎè1ãÂ:„—7¹.¾å¾°`è:o<¿\ ¾mË7…}‹Î›¿Àd¢k¿† ëÐõEØ»Òßïû®¬tÛÖÍS§‡¹¼?޽»n¤:E ¶¦zب1ô‹&š½éÚtw³Çíò¸ÚèÏÝÖênkñzÜCFŒª©ª Ûä Œ Ðó8ú%2]üO~ãyšÛé'a½ ï°X`Ó@÷É;???°HEdT)ì p c慠#âö{ñÔšb͘H¥GŽa¡¥ER=“=ÔèHÕ{vW.ol¨í?px4ºcöUÍd,Ÿù°MÞ ¥ Ы¶w—mk¬©Î)èÛÔP»ïŽhæp9yoÚ´)Ui#yÊA3v$…c¢–LjÒ^N`OYqSCÝðñgô0tĸ)mÍå{w)2‘[œÏ˜1cÍš5W_}õk¯½FûÒX¤ê°ö öÄ5¹ÔÎ.êY\3‹tqT¤Ø8€ÀéJ 5=#¯o‘3>ÑëvY,¶!£&6Ö+ßaVNÞDŠTMÚRrLÚ¦ ¡3³8‡‹ëðP%Mû§ë°¡_  ÌÜ>ô=áZßnÍ›šž©¸>—[œ³@¢ÂÙ:s¹nÇKBõ,%-•÷ìx¨ ½€@ÏÈ»€EA ç @Þ=?ȺˆäÝE`zž@ÄSkmÿ½§ç³C Ð뤩Øãˆòv¤R±„ˆŽ@MtnQyE”wûçlQ€€ @ÞZ䪈,ïö_ž©Ò ‚€ô™3ç¤ïžù+˜µLŦÅhê†U1C„ 5ß"ÏÞ»"ôܦnëb4uÃö´ Q™½£¨Ýû\ f=Úû:ë•@äÙûÄe_z¦gê¶.FS%¬*Az+Zí]"Ë[Ü߃+Ö®ùx'å²pÖðe·Í±Û„„}~î±—6¼½n;Ýsiéâ3oºô 2–­{ø¹u_—{}þéãú=}ï‚ŒÔø N¼±fëso}QQÝ4¤æS÷,10›"µ²ñë½½´ñûC59‰·ÿtÆåŒ-8ç1òg‡7> BHäÈ,Î{æ¼Ú‰ÏÛ…ÖóÇIŠŸ½¾äÓ×—©lxâÕÙˆ§^ût÷굸n«¨jdÆk~µêúM.yççô7 OÚ²ÖŸ8]Aýg}1|Y|à_+®Ü±æ®y3†ÜûÔûÌ©•Ÿ/_sçÕgî~ÿî·ŸY¼mçar>¼ñ~ŠE䃦Ocrrµ,âìÍq¾Xc©èÏZÿׯ²UOý$-ÙN‘¾õÜË~±òþÏ¢ý¿¯-]ùäeÙéNÚpÉÙÌyý+ײlVóÝ×ΘvÅKbÄGoŸ’è ·/ðÌ›ä[qØÌ•ÕUu¹‰ÿwçÜÐh*ö¡@ +D”w`vêÁMh½º¾µ0'‰eR˜›T]×Êö×µÐÓ  ·”ùß—?-Û[ÙêòR]ºmªÄ¡½/)‰ôN!ì;íZá³ýH­¼ôðEϼùåÓ¯ž”`èæsΛ:àŽž%Óƒƒ‚¦uF@FÞ=ß“Œ”¸C•ýòR(•ƒÇÒSâXNY©ñô´¨ Ušâͬ~pɬ³'%ÄY›[=#.ú}”ˆÔʘ!¹¯>r ]ããoÜýä›§Òeq°€žD>ö\ÿ¥gþ` ég yø¹ Õu-ôG; ÏÂì?š3ü×+Ö«jllv-{a#3ºÜ>»Õl·š«¿ïéµÂ °üCwNµGjå¶ÇÖоÏG÷Næ„©>P+)ÞþýÁšžÁÒSÃv»“€ªï2³wÏ.A…Öï¹vƃÏn˜yÕ+´ÁÌÁw_C7Bìw\9í±?|2÷Æ?ÓÔºtñ4f|⮹¼øñMËVç¤'ÜxéÄ5º8—XE¹VæLpÓÿ¼[~´¾¨OÚ3÷ÏêÞ´hÒ…·¾ÙÒæ9¸î.UÁ@@}Æ3§Mùôó/ë«+¤±×¬zíò³¬ê·†ˆ ²ÞúÄ»`ÑÕÌ忯¤+¥zÜmò—R¤RºRê%—þD¸òðn½#âì-\–€€ž D”·px‰ @@Ï"ŸZÓs¯;€ˆ<{cqŽèœ@dycq®ó¡Eú QÞÞ65/éÐ Ñè–+¥:'ÿ&ºlà  ÍËÕ‹eÀ©5a"h‹ä­­ñ@6  "È[E˜Ú"ykk< ¨H@7òÎÏϩۢ¬cjÎ  eº‘·–!"7Ð&È[›ã‚¬@@· ´I@‹òÞ¸qã9çœÓ·oß3Î8ã­·ÞÁ½ñÆd!ûœ9sÊÊʘÝï÷?þøã£G0`ÀÍ7ßÜÜܬMÐÈ ºŸ€å½téÒ»îºkÏž=ï¼óÎÖ­[E(_|ñŻᄏsçÎùóçßsÏ=̾bÅŠÒÒÒµk×–””8ŽÇ.EŽ @€hQÞ¤ÒãÇ×ÔÔÐIï'Ÿ|R'š¥srrâââ–,Y²}ûvf_¹rå£>š›››pÿý÷ðÁWF@‹ò~ùå—?ùä“Ù³gO›6mݺuâP¥¤—L¥Íétú|í—a¯¨¨˜9s&½Ð6vìØêêj -€#ñc=ˆTúÚk¯Ñ¤>úè#Z¥oÛ¶M&™¬¬¬5kÖЬ.ãƒ"è´8{ßrË-»wï¦ù™.ÎÒ‘†gñâÅwß}wyy9yîÚµ‹Î®Eò„z-ÎÞsçνþúëI±t2œÎœÉÉm·ÝöÜsÏ-Z´ˆVé¤Óròþ(ÞC@‹ò¾(°Á‘#G¤ñ©ÉdúY`‹äT±÷ -z Z\œcT@T!y«‚A@@‹ o-Ž rU@Þª`DÐ"È[‹£‚œ@@·*´HòÖ⨠'P…ä­ F-€¼µ8*È T!y«‚A@@‹ o-Ž rU@Þª`DÐ"È[‹£‚œ@@·*´HòÖ⨠'P…ä­ F-€¼µ8*È T!y«‚A@@‹ o-Ž rU@Þª`DÐ"È[‹£‚œ@@·*´HòÖ⨠'P…ä­ F-€¼µ8*È T!y«‚A@@‹ o-Ž rU@Þª`DÐ"È[‹£‚œ@@·*´HòÖ⨠'P…ä­ F-€¼µ8*È T!y«‚A@@‹ o-Ž rU@Þª`DÐ"È[‹£‚œ@@·*´HòÖ⨠'P…ä­ F-€¼µ8*È T!y«‚A@@‹ o-Ž rU@Þª`DÐ"È[‹£‚œ@@U¢ €@Wøû[¯K›XpÑ%Š-BÞŠˆàš péåWxÞãvÑ#ÛÓÂâ\@@¯0{ëuäwo#€Åyoqô·Àâ¼ 6º а8WDÐ,Î51 Hº‚ç]A1A@¯ðÁ˜^Gyƒ€"È[@@¯ o½ŽòE·""8€€^ @Þz9ä Š oEDp½€¼õ:rÈ @ÞŠˆàz%yVä[üIDATëuä7(€¼ÁôJòÖëÈ!oP$y+"‚è•ä­×‘CÞ  HòVDÐ+È[¯#‡¼A@‘ä­ˆ  W·^Gyƒ€"È[@@¯ o½ŽòE·""8€€^ @Þz9ä Š oEDp½€¼õ:rÈ @ÞŠˆàz%yëuä7(€¼ÁôJòÖëÈ!oP$y+"‚è•ä­×‘CÞ  HòVDÐ+È[¯#‡¼A@‘ä­ˆ  W·^Gyƒ€"È[@@¯ o½ŽòE·""8€€^ @Þz9ä Š oEDp½€¼õ:rÈ @ÞŠˆàz%yëuä7(€¼ÁôJòÖëÈ!oP$y+"‚è•ä­×‘CÞ  HòVDÐ+È[¯#‡¼A@‘ä­ˆ  W·^Gyƒ€"È[@@¯ o½ŽòE·""8€€^ @Þz9ä Š oEDp½€¼õ:rÈ @ÞŠˆàz%yëuä7(€¼ÁôJòÖëÈ!oP$y+"‚è•ä­×‘CÞ  HòVDÐ+È[¯#‡¼A@‘ä­ˆ  W·^Gyƒ€"È[@@¯ o½ŽòE·""8€€^ @Þz9ä Š oEDp½€¼õ:rÈ @ÞŠˆàz%yëuä7(€¼ÁôJòÖëÈ!oP$y+"‚è•ä­×‘CÞ  HòVDÐ+È[¯#‡¼A@‘ä­ˆ  W·^Gyƒ€"È[@@¯ o½ŽòE·""8€€^ @Þz9ä Š oEDp½€¼õ:rÈ @ÞŠˆàz%yëuä7(°(zÀ@  Øìž§ö…ÿž·Xm´+ùÇ77ÔFJòŽDvèav»cåŸ_Ž& ‹ÅÖ ò‹Fèy~¿ñu·ŒlæÌà<ï÷ùØ^à³ñ«þòZØt!ï°X`m0xŽt,H™§=ÛÅžòÂ3a³;ã"åŠSk‘ÈÀº'yë~шDòŽDvÐêÊ£^¯GLÈçóÖUWÌòVDèy5Ç•|ý™Çã¥THÛß}»¹¡>âçabº8µÖó#‡ @@‘Àà‘ãw•~SüÕG©é™u5Ç“Óú¢X ³·""8€@Ï0CGOLJI«8\NÚî7pYÓÂì­ˆ   ¤ç!£&$$¥¤g昌&ú`L1-È[@@+HáY9'>WÎ ‹seFð€¼u:pHûô'`2™8¿_¡ŸF#Çùi­Ö-¼5¬+Œ ÝI =#cǷŤ^™FIÿe%ÛÒ33ÃúD<ö~ãùåa+À Ð=ÆŸ\Z²µdëf…Ó Ÿ•3nü¤°)…—÷‚EW‡õ†@ Û8œŽÉS¦u¦9,Î;CuA@Ó oM’΀¼;CuA@ÓÂ{³”êë¢É=9%5·þƒ†íß³3Oò‰Þ9Ô“,a[Ql=4ÅyþÅ—ŠK¾ýà φ)oXrë„qc—Ütƒ¼JA ; ÈÉ›òX·úoòÙÌ^øc‡ ¥IŸ2±9DR`hE™F©(4N¨æC-T1Hámmm¯þéõ¬zK¾9*ýå½w/ºìŠk®¾Òn·+:ú‡€‚¼)‰ëï|8R*¯<±H¬ª4*¥¶4lsaßÂzJãGr {4MÿgíºI“&ôëÛ—Åijjzú™g×­ßPQY7yÒ¤«_1}ÚT*-êßoܸ±TtáçË4Š"èNÊòîÎl¨-Qù2oA/{*•k¨tÃÎÕa»&À7lühîìÙ¢ÛÏ–ÞÙ§°Ï[o¾–—›[ßÐðåW_¯xî&oòYpÁü×o„¼ÃR…±Gt¹¼åuTJ²gi™éZª^©E‚15Ê]ŒYúíö»q‡èðå×_?ÿì3qq•ëÒÓÒ.<>ý‰¥cÇŽyêw+B£Á=E Ëå:‘J»$f òŠ ªÚ¨´zØÒP#Å<^U••%Ÿ0~ü}üúš+:|ø°ÐcìÜœZ´ËtE ÐÍtóÁÉ/hÒŽDJ|Ë`LØaÕú–d¡_Þ™Íf±¡Ÿ[‘ŸŸwïŽ?yúYç,{ôñ††ÆHiÀ=N ;äMš ý{.®„cbAr 'Ekd‘eŠ"5MS·tBNJJ¼÷w~øþš]Û‹ßøÓé¼úmKO.ÝUTH§úH1an#Ðå‹sÖ“ É3¬ÒD‡|Ø*¡˜˜ìCçêИ¡ŠT}ô¨‘ÅÅ%} ‚¢_ÕõèÁûÇL˜,‘çèÑ£BS‚zŠ@ÎÞaõÔO&ZzdÎ2&á‰6TêC<÷œYÿ~ÿ1ìeW\IO«ª«éî0ÇŽU,ÿÍoÇŽ#–¾÷ÁfŸ;Kõ:L  å-͉ X|‹˜DEéFš{E%G#é°>AFñ­‡¥$M•åÀ,óçÍÙ²eÛòröôöÛnù÷{ïÏžwÁc.Yt-ΟýýÓ¬hÿ[·ÏsòS´ *‚€Z”çÑ|w%4Q?í¯þS¿Ž*¥¥Â“Öb>aµ*6'CÆHOƒš“¶é …5áp8®»æªÿ]þûRê´©Sè/´³dyüÿž$ÏÐÓéaaî!`píwÈÍÞQþVäôÀ¡Ø hX´F ›Ž½µÖmä½äÝF}ì¥ ï^:ðèvo y÷†QF{)È»—<ºÝ@Þ½a”ÑÇ^Jòî¥n÷woeô±—€¼{éÀ£Û½€Ü·ÖzCÿõÕGŽãÜ.Å}ÛõÕ/™léÞ—v‡ƒî¤Ö@Âb·< •Ò¥cŽ=²w÷κÚ:¾w(Üh4¥¦¥<,/¿€~c4¢øê„¼iÅ~ºoÏw…}‹æ-g6÷Šóû}e%[÷íÝ“š–ή`) Q|iöŠW‰"]8ÐB´¦¦fÎ…û}>úÓEÎOrĘñ¥Å[9.LD/ä­ˆHC´&§K;ú}^ åÔÅ©PeŽDD?ä-ÏG{¥¼Á@½gSì,€D~1@Þ‘Ùh²$ðbV|Ék2õ%¥ØU‘áþó™ (Ð È[/#%æI“w—üõé[$LOƒ,T*µ0éc—$¦¼Té ÐþFÊ_žƒXëÙgŸ¿îú#í×^wÃóÏ¿ èÑAÈÉ—4纓7%¬¸bíH§ØÛ§ßz+öOiKê#õ¤*}ú ì¢Ä¢èLG€ˆ} d.lÔ}i[§vPhBô”:37ú”î•W_ý×ÛW„ð«ûï»äÒ_{íÕŽ®¿W4fï(^<s mvÉßAAá)8=Ò~P+¬HjgæFº"«hØw¸]–3õˆþhŸíˆŒ“4=2&R7¶ÏZÿƒµtCè¾ýúŠÉìý~ßKn5vâ€ÁÃ/Xx1]!Ÿõ/ê?~ܸµ®ïXÚÑ} ï˜piÀ¹c/ ÙZ…ýŠÔCÚgÌxRµd Š#µ„–Ê6JÆYžºLE¥¢ƒû÷²4¨§l_軤;)ŸíðÂó«0ÿõ6Λ;G¬»ßE?¾|ÆŒéŸl\WVZüÈíYóžXºpÁ…~¸.¡Øå™œ(Åâ<:NòbC­fB÷+ì?èT µ(n<•žê,¼œð—zª•¡bÌÎa=*ìß¾Dg;ALèMÚqæ#õ,)-½÷î»Ä•ùS¿{æ–›oZ|ÅO…qãÆ¼ø<ݺ½/ãÆŽyò)º†b×Â2Œ¡ä– ŒíB¤.*Yp-Õ 8Q«$c©’#õHjëSu¼*;ûä½¢¿øòËõËH4rss*+ºã^Ñw¤!Ш¾†íq»TLnàÐ0·=ÙY™t¯è>ù¬ƒ))ɤðÌÌŒ°ý­¨¨ÈÊÊ [¤®òV—g×GŽ4c8úŠ5¡ÃFïÝY*¨wgi˜º¦™O{Òdº"1žvÏK{ÚÞ5ÖóS»&` Àa…'÷n£FŽ(¡{Eçç±Ò©SΠséW-¾< CƒA¸Wô¨‘GE ’&qæ<,í;øŽˆ_’8å+2ô’ݳ³„š GÚj‹ Eôaß}XiW¤'?i14çP‹´› B` ÌšuÖ{¬“¹ýÖ%/¾üÊÊU¯k¨w{ÜÅ¥¥·.½S,}ÿ?ž;ëìg.DZ yGÏJ3žÂ|¥òß acèoÏŽ12í3#=¶¯}ÑG°,ÒRÕ‹ z‡h°þžì "ío`‚º)0EÒÎΛ}Þ–mÅåå™±_ß¾oüé•Ï>ûüÜÙŒ›8mÙ£Ë/œ?8P¾µ¸xÎyçtUTDÚ°8…–6|Ù|¢V.ƒ‡¥P»wÓcPd2R)=Šv©+eDÝÄ¢ï`ÚûE½4<ð>ubŸR‘H@j¤æ.fdûv‡ýš«~úøo~û³¿c‘ŠŠú=ûû§¤‘YžËŸxêš«Û춤=æ yÇJ¬§ýÅIF¥Dv— Âf’p›Pz¢HºÏ|E‹|p£¶EHìdý îWØtM3ÏöÒsI>A½¾éúk… ¼aðá3ìFU^Xпb¿ÂÖ±"䉢fíz9k¶7ʉ)ê@s@v—m‹Ü-ÅîD®Ú^CÈ[‘¦¶„×rWœ ÖV/Of£øZ™¡ƒ¼eàh²HssUSŠJß]œƒ¦Â+‘d ykjè¢IFø(+¿ÓÅG±³q¨!ïˆh4X@×ý¦ï`Òõ¾{Éúœ®m.ô×ñã[‘•F'_ ¥ÝO€îÔ‘‘‘±ãÛŽówë=Ò"õ”ú›ž™i2…™‡DqPÂPS¬‡!àt:‹ÞýÝÎ;Êd® Ü#¹uQ£Â]JRÓ J}m@B™Y oEDZq •jn^~ZZ:ÝÄ@+9u}t?‡Ãz"j@ñCÞŠˆ4ä@ËQg\œ†êéTD~pì-Ï¥  c·Ž©ƒ€<È[žJA@Ç oRy·<”‚€Ž òö¸Zuܤ €iõ»ÿ¼ð‚ùq I`КÊ#?»ë^’vûâÜçíEw„×ÙX!]ˆ…€WrlAÞ«þö·E?º¤©¾¦­¥)–8ðК·ëk–Þy‰š23ÖUc .úñigùÿ<@×I·ÛÚÊÙ€DA€ÖääÅ´M;'åÍê.¼èâ(‚À@@‹èx[šÖÿ?¨ÞĸfÙIEND®B`‚lcrt-1.1.2/help/zh_CN/figures/lcrt-global-options.png0000644000175000017500000005375011752203002017400 00000000000000‰PNG  IHDRÌ­Ó.sBITÛáOà IDATx^í €U¹ï»ªgŸÉ23™ì;™,²Ê"pÁ@ ÈE¢W@/zy®pñÝËsaQÔÇuy"Š(*x¹Š ì Ȧ`HÉL˜„l’É6[÷L/ï«>3'gΩª®ªéêTWýÛ¡­>ç;ßù¾ß9õÏéÓÕÕÚ¾ÝïÆ„Çg—/_â@@ÀŸüî)ѾŒ¿øÒ§ÎîîÍ|÷sçÖVWhz¹+§0Èfúºzzi©ZS¡ïÞ'­d©ô[W/YW•î9˜Iì§gðpE@+«ÔË+õª‘ûßk»éÁ­lIkˆ,)ìþ×RÖ´!¯\9…1€„†ÀÏžib.Wž1<” ³sûÖï=ù鬱]ÐÝ›Ng²É®½PØ!òEsÒ%p÷ŠÍK>ò±…³§xNáõ·ÞùéŸ~Å¢i©ýïVWè$­†à.=óÔn:¿·k_oç^î:>餚#ÏÑ5]Ób1úËÒ_6Ëf2™t:Ý›{ôõõ¥S©t:UÛþºþÞ«žÃBÃHhþœ±QÕú£³M³¶ª•ÊÅ—ì˜y³rËjEK±wûV¦q¢0”HàŽš1qÿú'=gwÔÌ3ˉ$y çoœ7žÖXɦ3™ž½;¨†».1þÍ­ûwÿý•U¹GeUEeeyY‰mo2ÙÓÝÝÅþ×ÕuöÙg×8¢\hë9>4 =9×=Ír$½kù¯3­òµRCÞŠÚ’+ÕÉew·ýìÓ‡–!¼;ÞÑÉ g²ã^ßHü¥ØÊ**”‡ž@:›¥ec²·Ïs¦•¤¬9'ä¡<ëNæV²=½´>íKv‹~3™ì;ï¼óÇ?>T[[[WWGÏÕÕÕ•••dCkØžžž®®®ÎÎNz>î¸c3õqÚnðF„ÀQ_\A™2]##|óû‹LsçÚÇkEM¼ó““xù•¿|ç…ëù`fôšy¦çk~½MÒÓ“›‡ÝöÀ?x$ô’ŽõâÞKOi £C€V²})Yd×m;°n«ñIÕ…šÌQ<ðâV:ž;yÄÜI#D>Ôœœp=¤Xc%Ë6DS²Ëf4åT*EÛ$¬º®“ÙP Û+ 2 òl¬yÁ@¦n ÌÿÊJjÂÔ“tí† %¥#Ù]sûiª+®•jµýÍ+û/þÀ0jxí};¹€JJJ |Éxz>ë¨áÜ —WVÂ{a1°·xj(‰’=u%»fóÞo>°Ž üÇ…s/8a"üá•í¼dƘ‘5''|.¥3¹•,ýGÅl}Ë­IbiÁË6™LjšF [V–3¦åtîAâKTE¶RóèŒ 2uBàØþJf\aéøãÇÔ|ó“Çýǯ_#ñýÇm§HNÔ•¬h@mÙ|#%±~¡µC¬e+S*¹ÿÕ²=vÀIðßoþèÎf%KªÊ$›ì¹ÞVlH>­v±˜¹â ÿgU÷GçW9M v!%`¬d‘]² é+i¾ýO­”4—W:¦ÂeÇU9·’í×C&Œæ+YRMM‹ÓÒ•+,-ZÙvß[ *’ÝœÈb%ÒIWˆ´^úÆ _ýã¡ WÔ÷õ¬“ïœßÀ{3]ɲ†´neE?¢¶ŠmEŸj*ÒïÆTDQ+!qS· Âây_8wúÿ}ôÐ%´ôòœ…£ÕÈrÛf+Ùždª£{ÐjÕ½)]¯¢»HC™ÔÒuFÏô`òJ/s"«'ûÒ݃›Gml¯=z_ß•¤+S=¤åäŸÞì;ݸˆÛx¨+YqÕI–ÒN«•g{ŸR+éjñ2 ’}™ÎDfOGJM–ÊÅB+³‘‰ 9ás‰®* VÆJ–¶tCB…G&CJZSÓ¿§KÇL^ ãÜ1É«qá,=4ºz6-7ì ¯"Nà„‰Ù3o5>Ðç.£ôñ×Óÿ®¾ï7 ùut,­:É!wÅ/¤™šðiVŒ„c›b‰T!SAI ‰ÀŠ7÷ül޼rÑÔEGRùPs>—Ø!²´H•gX6sÔQso¸þ«¤¤lñJÏt•F¶qݸæ ÷ ÛÉ“&ëírsµg”D›Àнéqã*ñm>Gòõ%ÆuT‹n鿲ŠÙ¨ëYnÏç›è]± ¶?cˆ±î_4ÀŽö 5²'%d" Qa¯:c*UÝõÌz&¥—’βæŽD¶gÇšºêa'M¦Ï»bz|`[5®³«»FëJ§h–®¥Á´Lokvï&LPLм¤M~A)ÝÓ›bg5ËÄ•¬TÇ䘊-Ð O¾9èÞFb§¬‹ÛèÿI-­‚© ÛÊÀ– z¯Ù÷[¥™À¶WŸ1õÌ£¥+ü4§³â¢•Ñ’<0WÚ¼YS~{Ã’½oÛ}/V¯¨uÌGãcŽêèì*ëÜzpíÙž}Ñdì…À©ß|-o³çÿã8fÆ“í°å'Û '¢ìÚH0ëŽmãž3kЛ?©æ™zÏ! ¢@à¿íºüÊ϶½ü ˜lÛ®î¶÷ïj‘SXöxæ=t0}tÍôÁ×ÉN?ñ£¿øÙO.<¾ÿŠ@Ú“ýêÃ{s{²êvÐI¼¦~ö§î¬mšÜÙÑqpóæa“Ê6Íï|þölÇNÁ ‡ `Nà…ÿ<î†?ç¿sæmZ¿V¾]:[×§ì‹ \‚Å÷ûj÷·-;ôMV˃a½pϪ¥ê %¡'пœ'}Ý@úÆÕ/W47]ÉæödÕ¾„vãO»fØè©´×0lØðY3guvv(¯NNÿHÕÚ;C „€éÕ’çGÞÊr³ÌaËÏþEè"㪃C×'PmmeÿKñX •|¸:T©ôb¸2µT¢$Ür—PÛ²Cyˆq±í‚ÜJV§O³,kúˆæS²ôÛܹh¶¬Üxtƪ«ëõäþ¡Dƒ¶!°x†1u%kn&y_ºqn„`ãÊY„° -Ò¸·6ï8òÄzÎp}ÛrÂå”äÛ.Ðã»ÚÒ©Iz¼\++§Ë =]ÉžÎòd»ËX)³çÑ@Oœ4æÎÇÿôÌк¿æô±Ü[çÛ.ÈöíúÃçÕNG³"óe‡jŽ(ÿúáC9ôpmLfötáæCG   0V²z‰Ö–Õ÷·Ó½ÕZ”€€ptìð‘ÍG.¨¨4¹+±¹ÈnÚ°¶iìÄ…'~˜ÝO4A@¬Ð=d·µmx{Ûsæ™|EÛ\dìݽàøÓzƒ~]Ѫ”ƒ€@Ä ŒYß¶a­)ó=YÚ%ÀÖ” A@@%@7ƒµÚ\5YÕJ@@<€Èz€†&  à”DÖ))Ø€€æ|ypÔ<çh±UkËâKVë¶Pl%yðæB²‰SªR!Hñ«(‰@W²$CìÏ 4 ÿ³²‘Ê™=+ä:Èô޽ ¸™©%÷l#—¼J=p0Ì@@€ÒJV]úI%¤Sb‰j/3PÔSñ˜µÍëƒ  ‡‘ÀD–Åm%‚¬\ªµÑDQam̨SI…™1o¢¶•ìíq«~T‡öP  œ@DVÔ éØT ¹JšŠ—ZÈK¸7VB/ùÕˆŠÞLíE¦Ñºh«0P YY&C’Þ©Z™±©j¥*)“KÞ…U_d&ú”ü˜Jª¤äš«"B €€ §"+Ý2æC‹–š:UõN,aâhÚr”¨–J¬ÎJ¥ŽD3±Š•sç’³®é™¼¸â›P nö·ƒQsw*²ê-cݪ;V"ª¡©´©ZL y¡tÀ=ˆò'º½‰ÇbR¨¦Q‰6¦2ƒEË–[%Žrа¿Œš¾S‘µ¹eŒªG¢ª]Š%ª«öVÞx¹€ê„JD{ÞÄJˆÅrɿͿ.¦ý¢@ dln£fêô:Y›[Ƙê”i¡*m¦úH…ì…ËWÜX¬5õ æ)ºâ±™É,y ®ü[õ‹r0°¹Œš¦Ó•¬Ú’©Ó)zÅÈjÈËy[¦e\Fy/R‰¤†ÒK{äµj/T%¹’`/íý«dP œ€G‘åºc*@¢®‘б—¦ºÉj™ØI–"o"z°<.—RHj¹XÂ=K­Ô¼œÄ`ÊA"KÀ£ÈrrN4VÚ×r©µéHò©vÁÚªåy»¶éU  à„€Ó=Y'¾`  €ÈbJ€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€ ²>Â…k€Èb€€€Š-²Óšç8ÌFµ¤õω7Õ•ØJô)y3m¨Š%NŽy/ª+ªúwþôªÏ~ÎI^Îm®¼æÚ;ú3±_©kÓHT*aV¹©¥Ã€cÏÐaGžÍL#$o¦å¦…¬k±ÊÞ̦Ö* M¬\¡|(<þZ­“.iŒ7·¶ØXæªÉa^6½‹Uöq’%‹DÇÔ¿oB]ðcÕ/éééùÅ=÷þþûL={.ü÷ë¿ráòO\öéOUVV2'yS&31f±•ŠyST-¦`ÚPåfêÍ¡™i[›B)$é%# 3u(¶eÇ|8Lƒ—ðŠ>EWNÆÔ4úJÀG‘åq›Îª•æ„•™Õ”’¸˜Nz+v’±Ú–—HUªC5lõ„½ÙŸ O<ùô>pìÔ)SÚ6o¹è’O¾øÜŠŠŠ ±Óƒ;.¼øÒ 7ª‘°3\*gÝMŸ6uáÂO?³bé¹ç°`xHb´¼­}j×/Q9Kƒ¢Ž•¬xêñd ªQ‰‰‹£,‘h«3D$/fê,ó¦BpÒ6E P ‘e'¿ýu˜ªäDœXb•Ks޽mL':Ÿß|âÚÏ`ñ|°97ÔÜyxRœ+þòìYgžI4H?xܱÿóû?qÉrÎ}÷ÿná‚ùO<ú0+T;Uûb–ËÎ]òÔ3!‘¥—bîôRr"†dåM/5)/‡ãëÐLŒJ%À ›i§ÒŒâ6âs"±:vˆÂj ÄŽ¢·Ñ*/bˆlÞ ¸éܛ۟ºbó¼ç¡éä¦Vj ÜÒt²2{«g>×Y[ffê‡Y®}ãͯ|ù ìø³×\õùë¾xñò u½ë¼··ïW¿ùíoïý¥s¤ÜrÁ‚ùß¿ã‡jC5_3;#çÍV%¥cåPìZl®†ä¼„ùaÏb+RaJX¤N9›ô¹R›‰á‰èÁ&‡Þ`VEY‡³‡ÌlN¿¼Nì›K¼¸7û¹ÈjÕÓ˜y“Îö’…!F+•˜zcöïïÞ=fôhæü¨¹GNž<ññ'Ÿ:wÉÙ¬äÏ<º`þÅ¡Ì?Ï‚ðP¥r) S·¬ÐªÊ” B H"ë<[6‰ÅÉÄg¤>}Ysfi:#M¨]ðõ–<ð^¤›Þ™OSƒl6ÇyŸ½úªÛ¾ó].²?»ûžÛnù¦i ¼PÊÅ4~5_Q;Tÿ<`±Šrÿj:j‰êÙªD [™•¨å¢Ï‚”:e/EÔ;K\J_Œ“Ó–lx[+,¦åÒè¨>M[¡°hŠ$²®žMAŽ@=m¼™Nå¼4ù¤—:½Q•Ú/3`Ïáøjºþò+;ñ„ãŸûë õõ#i%kŸÇ%™½ûÞ{|,"µ÷&ÕÚ7”pYy–Ȩf¦)H…l,Ô!obÈâÃzCb1˜†Çóå6Tbš²hÉ :{c'6*s”øGÀw‘e3‰M qöÛ§d?¨­èJ2v>ÉÔs@-‘&ºd vÍì™™T+¶åA²BžÎ¼£Z½z Yòví5WÝy×ÏId~÷=Ÿ½úJ{n6µävÞ¼£m l˜ótx´¦Æj¾VÝ™6—ŒE\v©ÊªV^(€ö½P­˜”:¾RÊì¥é”ÈÛ‘ ÊmØ“€/"Ë%Ãô<‘N‡ÙJ§·éYªz65ã=²3¿T›³*–wej&ÙpÏü\]Ù¤¼èç?òØãË–žËm¨äöïßñLJþÔÞ¾÷ÔSN¶ik_õèãOðmÕÒ4)3ÏåeE•AP{(‘â‘xЍÁHa e¡&ÈKÔ0XÖ¦ÄD?|æ°”ùKÍ…J@ôiŒ‡@“¡ðEdÕ‰%MéeÞ4¸=?ÙÔ&¢O>ÉÄ™g:kE‡âÔ4²¼ ñ€ŸKì€5$Wêi  ÆÏJ–œ½øæ[¿½åwèRYV¢iÚg¯ºò+7ÜøÝoßjÕJ,—RfalÞ²eÕªÕ?ø¿ßƒ[™r่­˜¥˜÷#šÂw˜‚êŸõËÉ«~¬º+@Ó~M 9+–³á±õÇÀ—t¸~ ¹2í‚ÛÐ¥S¡ä°ðEd)>älz‰3@šFyÓ–ækÎg-k.Î6Ñ!3{—&=3fÞ¸OæMìWÊ‚»Uý³¾Ô¬Õ4™%óÀk«ªª®¸ì_n¹íö»~ò#^øÏç-£?Õ•ˆ©©/y“[¿ý]r«~ÝKÄh• 91MŸu'zY×N8ˆyÙÛK¬$ œ¼Ä„̆¢R}J½KYHÁ¨lMí …‚ü¨ca0ª|% rÒ Ï¿øòþ=ï‰Ý¼¸â‘EË–'º;y¡ZâkXp %ìézí¥g?´h)P-¡ª]Û·\yíŠ}ƒ˜ÀRC`  àˆ¬Tá@ú @d1@@ÀGYáÂ5€ø%²ê‡›j §oÿ 5™Imé%ÿ‡P,WmÛ&6Ö*¯i.Rj6!¡ @ üYõjµ$/A®Jj[*1½ª†—«y»³2 0Ô¸±sýµqbÕ5ÊAJ€_×ÉZi¨›dÃô‹г¨›¼ª˜ˆÕNy “HSeÏ¡(Äìø°gš7f€„€"ËtDR%UÅX’èP¡ÔСºq9SXG¢Þ‰E{Þ—-•›Æ/ù_ŠX[уi§W8E–gh*L6ùKÇ•ˆ•KÞX­¨eöýJb­ ŸÔœ÷ÎÊMuVôi•,/gÈ›i:6XP PŠ|YIM…I‚%j¥TÅňÊ% “ÔMU"UÓQÕxx´V’ªfÇCeM¤ÀLc@!€@ø"²¢,2F¦«6&4\°¸¥©ž©+”TL+)´*ç>­˜÷%ª¼•1÷fÓM[T”4_DÖ”ˆ*¤P¦ºãD¹DIU»Sû2µ±ïÈÆ‰ÔP²_Š–b¾V¹«q¢@ ¤ Id¹˜2âÒôƔ ©2?\¡L5š¼Ù‹ X5#áNò‹Ýå5æÐYÓqG!„Œ@1DVÔUUMÅÔ”²êǪ-Yšz`…ÜO^A${ÉÆI«®¥~ÙKÕ¡Zbåå Á'à—ÈŠ "I¡•2J°D­¡cª—–쥕I]°æÌ¿ØDU|5*›{Qµ_$Á!Ï !€Àa!à‹ÈrA±Q1›*Bôà %µJRR‰&o(ió`%p¦å¢\šê¯T¨v!z 8%¦–ÉNA†NÀ‘eÂF2lª¬S›ðµÊʉTî¶¡ÃìÄ^¤.ÔÕ‡Áà @ àüºwAÀÓFx  PÙâpF/ %‘èÀ#mâ€È‡3zˆ(ˆlDiƒ‡D¶8œÑ €@D @d#:ðH@ 8 ²ÅáŒ^@"J"ÑGÚ Å!‘-gô QÙˆ<Ò(ˆlq8£ˆ€ÈFtà‘6€@q@d‹Ã½€D”D6¢´AŠC"[Îè@ ¢ ²x¤  PÙâpF/ %‘èÀ#mâ€È‡3zˆ(_~H1¢,wÚ™L&™Hd²™ÃúpÐ5½²ªJ×Ý­M!²!™ ÙlvçΛ6¶ìÛ»/ ɨ"Ð4½¾¡¾yæœñ&º "ë Wp{zzÚZ7Lž2ýìe ãq kpG ‘•(t:µnͪ¶M­õ qÍE8]À ²)í´··/^z~:•¢¿ ‡ŠØ@ D ÌÌÚÕ«2™T<wž‚»Íç~aY|´Kû,ý}ú²Ëñ  P@äŠÎ/{qÚ)'ðü‹/ïßóž( /®xdѲå‰îN^¨–_DУ ÎÎΧÿó'/ÿlo2ñé˯øå/î¶1F€€+윪¨¬úõ/~²xɹåñøk/=û¡EK¹“dO—TBU»¶o¹òÚ/`»Àê ‹ØXöž_üœžƒ+â"XýÒ_N<󼞮o}²sÊÛI…íoÌÝêÓ—&Ðñ!8(5C9§üÙiÍs8F'ǦƦ!zS ¬úR-CZBKØì/ïþ=ã@àvÂ{=/úÏ)OoýYIÂHûØ•sÜÜÚÂUé«xsV(¾T†T=]¤õé+®ta S|†rNù²'KÂG*†Í_ò*QC%c5_UdÅñØÆ‰Úc)—ÐJö®Ü5x€Häó‚¾Åsë·oÿí}¿Ó4í—,¿á«_¦•ÚPΩ‹¬¨°ªÚòèUÉe—›Ùx ©Öþ¥ .”%4‰.»âÊ{hÇÁd‰Å~sßï^ùÛßW<ó^uõ¿Þÿß\¼ü"ÛPΩ‹,ÅÇÄÎê™%À‘¨šËÌX9×_1yª²j%ª­¤¼<<•cJr—ÜósÚ“ C6È L@9/~ÿû¿úå/iMÑÁ÷¾ÇÅ™ˆlÿ9¥4w^áE–Ë";àÏ’ØQ¹$…j¸\C%1Uu“Úš ±ê3ì%†Ê^vÅU÷;x€Hd™ÜØÚ:ÞQl{mÞÑsé¥éVÛÀ9%7wÂ×—¾¸rác%6:È—¥ì€¿Ts0•f©Pe¦æ¢I²Õ.J½ [ê#ˆø‹F »»»¦¦†uW[[ÛÕÕeÚõPΩ¯d™’²g.pL×Ô—<QŽy¡ª¬Jk&¯¡×MÓW éô¯+¯ùÜÏîü‘Z‹ˆ8:;$55Õû÷í«««¥òŽŽÎÚÚÕ†ªØ9UV^á`áEVÒ;þÒT Å(“Tñ™òQÕSl¢&Ìj%Éæ>Uû0–dvçMßò„1Yä®Èï÷›gÌxãÍ7O<áƒäåÍuëšgazî åœòe»€%MJ'.9™Ò‰òÇŽ%3+`¢++^N}1uæbW®òö(v©5ý«ëõšk\½á$ÀÎSõ¼8ÿŸ?òý;~¸k×nú£ƒþóyª •ðsÊÃù^ø•,—0¾e%’ÞIKÔ¼ÂÇ4:o†’[Qvó¶ …ñÁ×]?ÁJ6ƒ‰$ O@^É.¿ð‚mÛ¶-YúÏÔÕÅË?þñoº’8§äæN,üJ–/!EcéDI©••žªžd¨ÚX ±jY’%ÙØUŸý|î~‡ø ÀNfå¤ÐbÚW¿ô…üíúûò®£—¦'Nÿ9åI ¿’e*©c/mR­•±U9ëΡ5¶ð”w,ÈþôÇ? çð$…L@ @<Ÿýç”§³ªð+ÙÑ€oŒ©¯þ×Ïc 0˜;¡”¥¬éÂU)Î)×'¦/+Y×Q A dcô¯.¾ñU@¢pž–¢”þPÎ)¬dÃ3(“Ü?ÓÙ«®ý7Üè@@$0óècÚßÛæ™ÉÀ9åE.°’õB-¸mr*ûÓýV²Á#DV‚úÏ)O a¬dKpÀíB6.ò»ús×á@ àrï]?ðCŠ®‘³ýâÓO°y!0MÓëëšgͦs­7Ñí<*ˆ¬sV¶¤÷2ãÆOhhhL¥SÁ@ɈÇ˪ªªLŸÆ&'ˆ¬ œ«¢ƒê;c–XèÂK{²á[d Ù B/l„gl3™L2‘Èd3áI ™€@èš^YUEûr®‚‚ȺÂ\cº6vçΛ6¶ìÛ»WwœYÉ0®.h¨ož9gü„‰®’€ÈºÂ\ãžžž¶Ö “§L?{ÙBú 4¸"2(MôzëÖ¬jÛÔ †» IDATZßÐ×\䀳Ѭ ›Ò^A{{ûâ¥ç§St®â òX!¶R%0wþ1kW¯ÊdRñxÜyY笂nI»4öéT_ÐE| Pšèüò°‘-ÍÑ¶ŠšÝ’Øªå C!àåþ01ˆìP®-»ŸlàÂB@  ž4"бYeeå!Ëé¤"¼‹UŒ•,ýH­Í е6–’™8kEç½…wÒçný^ú×_ZïJe°àÄÓK?#/'—/"«þô·Tb£¹ê0ð¶ì€Ú²æVŠ,öee£ö‚’@ …=eÉÇ‚ñL §«ãµçŸôܼÔú"²ÅFFí%X¬åNø(¸j’¤FUa½üc[êóñ—ˆÎÌ‹¬½´Ùë i[SVÎk™Ô²gIÐy!›s¦6¥0½ÇщìZ‰@dgfáE–¿—W‡Ž¿ÓW«Dy•¤V”T^eº¶%·b¹jÃú•ü«Á”pIîò<@ ˆB03=¥Px‘e£+½—7Õ5iÕi3-¸p‹nU]vîЦ¯¯‚Ê–ø†9|O, ^RðKdE2ªR-+d²(I0)©TÂÌ$á»0]´Zi®Ÿ` (¢(}…YSi ™€ºR:QCíšÖš†Túcg’Ýâ7™0©(©¢òŠª’ŠÁ:"‚™YV^á(ÕÁF…YUæ¤e©%«å:Èȉ؊תÎäì­•Ï´ñòŽ&‰ ¨ˆèÌ,¼Èòya¯­Òôa:hÕÄf%ëP@%Évتäæ8}!ßE(9ð8?ÌLo)ø(²l5š—½•Þ©²Ë…’yæÏy»ˆ’>øŠÒh—X®!XÉzIÁG‘¥ P”ö ø~‚ꈲ^b3Ö*\/ÓÀÊÊA p¢:3ýY¦ƒ6£$-cÕUmÞ’¼lza•±]Õ¹Âá UJa˜™žÎ-ßE6TÓ¤’ Ïv}á½x#DZÃÖ×74ÏšMçZo¢ÛyYç¬mIïeÆŸÐÐИJ§(‚’%—UUUѹæ*ˆ¬+\6¦ƒêšš@‡ˆà@ z°'½1GÆ E$‘-"lt =Ø.Ϙg2™d"‘Éf“2 Ð5½²ªŠöå\‘u…+¸ÆtmìÎ;6mlÙ·w®.î8!²’%`\]ÐPßê z ˆJ“_öâ ²¥9ÚVQã.\VdPC'àåþ01ˆìÐÁÈCNc=M„%P@  ¼ZÙ€g”Ã*++rú¡Ì=á],ßE–ýŽ7ÿ5o~Àgÿ1Zqn©¿Ÿ(6”šˆÆ’™ê'”3XHÊø%ÅäøúK+ðñ]ÆQLaÁ‰§—~F^N._DÖT7Y¡©êI…Rsþ’{`ö¢žŠƒ'6·²)ýÁy¤°'Ÿ}AÈ“ŒLz‰îÎ(ÿb›/"+--Ù\â…ªðIªªÎ=±-«UP¹Thj£:]‰—lC @Dg¦/"k*š¦…l"دd©–É%MæŠ;4Õt®Å¦]p*¤ˆNäBáƒßDvfú"²ªêI2*£þ’¥(©\gM×¶dlº^–üs'¾M§Ãç˜&rdçòᣎžÁÌô”‚/"ˈsi5NU[SY”ÆŒÙHâ(¾dÇ’˜:ø°AeÃ6¢!ÊÇ“D+/)ø(²G’TuE)” ¤åª*м¹º°¥*+͵ñ¬E4 ¥OÀ_‘µ’9ÆÍt}ÊÄQÒAQCí%Ò´Ö>ŒÒÄCÐ=,z“‰RϨ¼¢ªÔS@ü*Ì̲ò 5¯¼%þЬ$yVbgUΣ禚7Io­òº ª—w4AÍq…‰@Dg¦¿"›W=i‘’™ô,Í,›•¬Ce]0·âq˜¦0åB_DÅwB6,HÇ ‚™é-E6ïJ–©°hÆÔ–†„šŠ£½"G{Fワh ³ÁJÖK þŠ,quI+É«h É+¯âå\‚¹Ú²Ž¸@ÛÏ4QÓí-K²ÖË4(ÉDt‰ˆêÌôQdE-SuM*±2°*çÓ+¯Ÿ›ˆC ר.ˆê\":4÷™@f¦§sËG‘õyÈàÞ”@x¶ è 廉°d x’¨`eë%ˆl°Æ°Ñx™è¶€.:öí!oQ¾¥HaÈUéÏLo0!²Þ¸´Un†¹<óècŠay%‚™éíÔ‚Èz2ÁlžÝ‚`òETÑ&àIe!²!›4Æ•²!K é€@`x9¹ ²¾!¢i:}­–~> 㙀@a hšfœ_šîÖ­ën;€}qèº>jÔ¨õo¬ÉdÒÅé½€@¤ЙEçWcS“®»[›º³ŽÓÒJ¶ººzúŒ™7´´¬_çá§áK+YD Å'@kØúú†æY³é\ëMt;"ëœU -é½Ì¸ñSéT Ep P²âñ²ªª*:×\e‘u…+ÐÆ´cP]SèDöd£7æÈ@ ˆ ²E„®@¢GÛáóT__oo2MWx¹˜/< ¸% —9RB]Ó+++i_ΕG®]y„ña!I§ÛÛw¯\ñäŽm[Ói\ÅuX–*ù ?÷cú¼kĈ‘Sh7n¼«®L&óÖ›k¶mi«Ù »¹¾"k¶djÓÙô;[ÚÎ½à’±ã&”LЂD ¯7iÎì£æ¯su&“Òã.v ²öTK§6£]¬aKgÀið ¾á=Pñø 7…´ëá;ë.ô8xH€Œ»‡{n}ûíÏ\} =‹…Þz‚Èzã†V !#pHN7½½éßoüÚÎ;陎»4ús5DÖ524!!Ý´éí¿öŸüÄ%=øz¦c*‚ÆÆ|Ù“U›Vöë‡âÏ}3µ„—Óo%z“\qìÀÊa§RœÆW˜ßóË_^qÙe‹ŸAÇË–-­¬¬¢’o}óôÒ¨vÿðEd) õWfylâO|s)Tk%'Ü¡©g*õÚê~& Dž@ND¿~ÓMÆç]‚ºøÌ3}øtúš#z˜· ˜bÒ³Õ…èD1™p«ÏŸ5"úxôæ›ož3gΑGyë­·òOKÝ–Gœ-Ò’Õ ýÅãt¬qÀÿ„/kYE–TOüG… "/aJÊ Ù²”Uq…e~¬Æ•É´¨Ô|Á˰jâò¹‡”àoûÛW^yeåÊ•Ï>ûìK/½tÿý÷3·å!æ†Ô¢H€6 òýy[Ïú+²4T¢ü‰#§*©¨§¼–k%s%J¶ªžL£Ù3Ù3‡\yyïÜ Š3){àn¸á†1¹ÐKÆÁmy4é!kpKÀ¯=Y'q0%e*lª¢,šj¥(ÁLRù³“¢i³qãÆyóæ±Üé`Æ ìØmy4é!ë° Û+õ%öÙéq/‚é¥}Þj™\2‰”<8YxJ ¹7Ó`Di65waWWWmm-Ë‘è%;v[nJÈ.zØ5\öy{Ù“õ]dH$KK²t»2åÍù_)Ûc‹Z-ÖaÆQ⪰:/7änÙ }ô›GCÉÆ„ö'KR(.?Ù1“EJƒW9\u’³ÈtV3gÎ\»v-+§ƒY³f±c·åªg”€@é0>ôÊ=R©TÿÑÀÿ*ñôÉ—¿"+J¤$—ü%S[>6ye‘/TÕádmUí–šØxP}†¯äãÿø·¿ýí]¹\xá…,G·åá#ƒŒ¢LÀX¥æ6 n¾íöyŽÓ3S {ém%ë×vs!cjËì™>Úë,«5 Ì oÎÕÖÞ¡©«pÒe²,vÀ.çºôÒKßyçÓN;ª>ùÉO^|ñÅÌÆmy8! àØvÁ'–_ôõ[nëIt/:í´gž]ù?>tÓ7°*o¬üY¾PUòÒ_®‰ÔÄ^ÕZ.¯¬;Õ@ Ã&65Ú’.Q/’¥tèïÿ;÷Rs[^Òd<H2ýKÙØ´iSþóÆë¿~ómwÿò×uuu7}í*a߸%Ü|Y{ãµ¢™ÚÄy-¥mßÜÔÀ,4-c¯ ÿs­éS§ÜtãõßÿÁ¾øoŸ£c^îiKÖŸÄ„v€@H ds—ðä¦MrÇíߎÇÝ¥›lùØÃϯx‚~/>б"8(qÿöÅëg‘uÎ*Жñ²²úÆÆK/»FÓý½E ) 8( ƒ{ßwÞDÖ9« [fÒéÞtOУD| 1XõDlÀ‘.€@q @d‹Ë½DŒ¶ "6àHÂK€¾/L$¼Ý+Ë ]Ó+«ªt—{@d°… €@Ð Ðw^wîܱic˾½û¼ÝÉÅ>CMÓëê›gÎ?a¢½¥T ‘u… Æ %ÐÓÓÓÖºaò”ég/[èÇ¥âétjÝšUm›Zëãnn`‘ èŒñVŠ~Ô¸7™¦/}ÙÝæÂƒc4  /:êqºHœ.a¤½‚öööÅKÏO§RôçGÄsç³võªL&Eß®tî"ëœU -éú­ööÝ+W<¹cÛV|!ÐC…à G€Än¤ÉgŸ{>]$N^i—€Ö°>),ù'ç6" ²…ðÃê)ÑÓóÂÊ“§5Ÿwá§tÝÅ?³‡5jtC"@7ë ¯’?ûôã^zù€£/æòúêÕô’±£Ç4±òÞ¾ÞXŸqØÓ“H&?üPWW÷üùókkkŸzfÅ™g8úe\¾ˆ¬é:ÔJ()8WZÉMõÚ&UTDÀú·6þÛu_H'öéÆïËÒw÷.‚IgvïÙMÛ²uuµ}}©D"¡ÇuúÎdÓèѳgÏŽÅ´šššñãÇ­xæé€Š¬©hš²!Ï»’ef|+­g¥y#v$C”£v‚!ß(|lŠV©ôM­·þ{·%¯ õŒm¡ë·²$²#GŒd|*+cuuut\]UM‚éÓ¦8p ±±aüø Ƭ¸0οa‚¼H+Y{³Ñ_2V{yeÆö}‘'&¨P Pé¢ñymÌ[®/ ›ºÐm]´ØKÆåt‹ŽŽƒ$ t÷Bú²,]cNÏ#† Y;fLM]M]í°œÄUe}Y6\:í—“6Ûâ€23z†D–Àåâ¿ñmˆjoVo?˜ùÛm'x¿ðU¬=Ù„  Pê©lrï®Xß–] =S–ÖâÙmÌ–Ukå:©-ýiôËÞe¤²qÚ‹‘Ø_3n3[¡¥×ïÈžô‘“˜1ƒŠŒ]…þ‡—ݬdK}J!~C ‰PBÒÌ£óßÏH&lg`0©œtrýêHX›ÆŒoÒ´®îîa¹{ǰ‡‰-ÚÕƒsÃ+ðÃì‚ fΚ™LÐÅ[î´k@‹ÛŠrZ†z“ÖCÝa%ë}p­éRúT4“n„ˆ | @ߣe¿kÐï[Ø- •ŒëzÝ襺Æ[Ï:]`|6ÐÚ“ÞBd½Á\«¸Ÿ2mÆ›«_£Ÿ¡§I\|| @ ûÂÊg¦1“n+á!-Ì]A@;f›Nã•Õ‹ÊâltJ:àv••Ugœuî“=üüŠ'èVná@AÐvÒ”i¹àbúQîЋ$ 'Y 0¥V/+«ol¼ô²k4º6ˆ º€~Ò;“[XÐ%Y´¶¥UkîÇg ü ±áœ.Bpù€Èº`sšg½éžˆÐ@ÀG´:jÔ¨õo¬™:uŠ)Ì}àAΛštÝݧaÙ¼la Pª««§Ï˜¹qCKËúuÆ7· ý ᮯohž5›:êMt;w‘uÎ – Á%@oçÇŸÐÐИJ7êöãA)WUU ßMpÔ DÖ&ŸíT×x¼ZË¿ì\oâú <ƒ€@ø@dÃ7¦È@ @ ² „ >Ùð)2ˆl€¡€„D6|cŠŒ@D" Á@( á#‘ ߘ"#€Èh0 €@ø@dÃ7¦È@ @|ùZí´æ9›[[L³´¯’š˜:±ñ`Úc¤ ·oß¶ic˾½ûœß øíEC}óÌ9&NŠ+$ Å!à‹È’82)¤g+Ý”ª˜žŠªÊ T'¦m‹Ã+ུµn˜¸¯D ø"²œMÓå§XkYJNL}Úû }m{{ûâ¥ç§ûúèÏy²sç³võ*çö°pNÀ/‘å²ÈC—Ÿ¦ûd©.ZYs«U-+·òæœBh,i—@×ã©X¯«Œ¨ 5ì8xÀU+ƒ@ÔT×Ô–•¹ÖL× \a•V²êRTòfº]@6W²XÛæxÒËw,~à¾{/¼äSTÇ“7~«£eÍ«Òpà%€'@¿jsòâó’=]n™^dùªSZÌ2uP”`‡q[-u6„i¬ÙïñB“Úœý1'œ >H<XõÊóžÚÅ /²’¶ÒK.¯âPÞÚçm›×À£Òj•N÷õ&M~鋪µeå奕#¢"Px‘µI^ÚBU—¥j ÷fUa•Ó²Ôd±*ªµf+_Ù-^ƒx"à»Èòýi…KѪÛ¢bJªÊWÄ¢ìBaÕA7v T~$Y­¥&ägÕËß ©1 ÂG@£MYOE–+,Å&-cE}Tl"e”×̦­'8¥ÙÈÐXùƒ¯eçÏ ùÁ Ür¢|ÊYç•fˆMÀ‘eb'IžÍªS´dJÊ™©N$±4Ý¢G_ߢ/ט-fMáŸÞ¤&ÔÐÃǦ¦Q (¼ÈrY”äRìU\uù)®XY+&¬ì˜µUK¨ÖFÇ#2ê£FZ·võÔ©SH4¦œÉd¨IcS“C{˜¸"Px‘•Ήê™ÚðBv Ú¨%®Ò«ñô37nhiY¿NÝ1°JÙ¸wA}Có¬ÙV( ‹ìP¢AÛ! ûàCdˆæ PXNßT¶Wxˆ€ÈFd ‘&€Àá!‘=<ÜÑ+€@D@d#2ÐH@àð€Èîè@ " ²h¤  px@dwô  Ùˆ 4Ò8<ðe„Ãý:$@ßúM&å–7›—¢™®é•UUºŽP)ŽžIÌY(( ºÍÍÎ;ÜþÈy@‚÷ÿ…öñ&Ò½{¼9A«@€Èj8Ì ===~伤!ò_h¯oh¬©©)é\<#‘ÅL.Ú+èÿ‘óT*J7ЂFÆ~¡=“‰J¾…DgÙ Ž bâèvbñx<ê‹Ê×ùMÔ¢ƒ¥t3…È–îØE&rãWË"“,%©d#0°Ù r‰§˜ÓØ O„R-ñ™é0üÃy™HWW—Ã(a %JÀ¯•ìÁöíöD^yuÕÔÉgyŒ½jA ·Ôò.RɆ‚û%²Dî÷\fÅoý޾·ßOýŸüÎÊ€ÊÅßþrrÌ]©?¦öbúkŒ¦ M U‡( ISضåmx¬FhZË é@l"ùÌÛ‹©s5”„ž€"KìÎÿè*ÁÕ­»¿óÔŠÏŸV¥VÙ”ˆ¿œÈ…~é‹«jÈJĆnŒ{ÀOŠÙ MQªÜ.îD{󶓦ΠÈ%%e¹äôqÓ3™±çÁHes…¢Yÿñ`æ]…: EVý ôý}=ŸùöÓ_¼è˜êŽu6 TÅä2'ª*ó KžY[¦¶\sMÅ—Šò-ÛÄŒ*ÿ8ÔªÉSgl͉#ÙÓ1‹‡‰)0KnÏkET8 Ć+U¶É•Z(Bp¶Üà9Š-²7ýâ妑ÕË5?ü¥ÈŠ¢i# êêÒT@UÊRC.¾b¹Ô/tVÅX¼Ò*çr•³4´r³¡¶“§õŠ6;P8`)'"ôEN˜z¦Œç܃+8ë…JŒ5HµDîÌìµ·VfžP>‹ìàÏ+ž[½ãO/´ýá›çèù¾“Í4Îê™ã:ÈT͵áËåXVÞ„•‹RëÊ¿MרrOÀµÊnÝÜÊ‘H¡'OkÎô?X!{!–S YŠŠÎœ hk–öf87u•+ô¦—ÞZ ¤‡ÿŸE6•øÍ3›Î;iʰšrÒÛ[~ý÷ÓŒ?aÖÈX*aÃA8öR]KJ%\7EÏ6ÊÈšscUU©JíÔ&lTŠ©ÞIDAT@Ngûå&©-•«6ÜØLRMRäf&u(XÌ_‘ýÞk¾ÿûu¿®í¾OýËêwßܼÉfòERZ¥ÒH‰«ZÓ3UISKÓB®Ñì@”`^bÚ…~ {¦ô&íþUælzë fIÏ3fM/ICé™ x‰èŠª˜™˜7 *V΄˜ùa%¦ñ¨…j‰VeåNÌ`S*üÙÑ#++ÊôW7ì¹ö¯lÙÕ¹àˆúÓëó^óÈDM;¦¡\ûøKZRIVΕ7ïx¨ÍJXCî<¯øCÀÝ;èœt®x·n´\2(F.¦¼4×6ÆžgÌžÇÌ>ú’rUƒTKüÁ¯&à¯È^ºhÚìIï¾ã•§þ±“ \uΠ /+,¢º‘ ɳR-+d®˜‹Ï¼œ$¡t®›bV1£Ü?´Ñäö»­-k©Ióœyì€bãbœdÀªx¡Ø„ÕRé¬dfXÈüPCê×-SçnÀ>8üýZ-ÝLèØæúG¿uúq3(çcg6P ûs‚€ÔM”B¦ž¼„×Jf’g.Ê¢:Ó1û3 CêB’uÓ&(ô“ûàËù3Åb·¶¬¡çœÞ­É)æ!ô’•‹U¬„›åš“:óg£¹©7¾df½p?j¿b ¶Ç~â„ïâðw%ûðãϱt.ý@¬*Vµ{Û†‡Û}Èk•)×8®n¬D’EIûD9¶ò,•›6¡B%=ìÀܾí°o>r~ëú5¤®ôÜEe¼xfþª:bm©30ž{c®È•Ï‚%¿¬€·-0¸+>Šì±—Ý#r8þ §THÚ$]ãbG.$m•œ²Zæ!ojGyýçõ ƒÂ0¶ Ü©,³Ÿ9wÁÆu«y[:¦zIÏRTE%L+Y+amÙ3ÕJÞX Ù3Ïô,Ùð^ÜÅï.×Âó†ÇÂðKd‡7NJ ¦JjZÈ{‘j­ŒíÍL[™%;´uI€½ÍwÚhãº×Ùûw~À[²’ܳô0„mpyV0fÇd2HÿDÿ¢±äZ Cî\~ ••‰”ôk¿D¶¤¡ øÀ€ìnHSY§¤`w¸äÖ±RÙ¥z¸¦Tqû…È—7zó@ÀÝn‡Ö*°b8Ù!Dó"0®”-B7é"RɆºo@d}C Ç…  i:}­–n(äîúBt}X|hšfä«ù{ûaI-²b,#;ô%¸®ë£FZÿÆšL&]á"DÊ”òmljÒu,€ 4>0„`A ººzúŒ™7´´¬_G_´° U1­aëëšgͦÜC•X„“ÈFxðŸ:½w7~BCCc* |° 0/«ªª¢Ü æŽ+ˆìaÅÎó ƒêšš|V¨àÀžlpÇ‘„€D6ƒˆ@‚K"ܱAd ! ‘ Á "à€Èwl€@@dC0ˆH@ ¸ ²ÁD Ù "R.ˆlpÇ‘„€D6ƒˆ@‚K"ܱAd ! ‘ Á "à€Èwl€@@dC0ˆH@ ¸ ²ÁD Ù "R.ˆlpÇ‘„€D6ƒˆ@‚K"ܱAd ! àTdu]Ëd"ñs¡!T¤ à+l6K’è° §?¤8bä¨Ö7_3~2~DÓ!Y˜„’)ì®[G6Žq˜S‘qäüÖõkvþí¹L&ëÐ5Ì@@ |h ;¼~TóœùSs*²•UsïÐ)Ì@@§{²à  àDÖ44§ÌE×8å;ˆÅl®70ߓŵ˜6  à€ýõæ"‹k Â…€Ø_o`.²¸–ó@ BÀ|O¶ ®á@@"‹9 >€Èú®A@"‹9 >0ÿàËÇáºÔÐÝ×’‰D&¡{°éš^YU¥ëæK‘¦0€ØŸÓY{>Q¯¥ wîܱic˾½û²ÑÐYMÓëê›gÎ?a¢zÏ9‘N ɫټˆ"mÐÓÓÓÖºaò”ég/[Gb¶¤Ó©ukVµmj­oh¬©©‘†@Ä~†¨z‰ÓFM% Ð;ÁöööÅKÏO§Rôç°U©›ÍÌÚÕ«2“|D\É;ÛÍwò6ƒAtÐ.ADÖ°|L)_›½‘&?€Ø«V²ö|PËÐÚ#u³ö¼Éˆ¬´˜!Vb‘µ"ƒr$’bB`†XóÈZ³AÍÜ”wq^yS³tòb‹Ð S…Ȇgà‘I©èëìÜú¿ÿSëK¿wªiƽHé§ éçó2™ºK.sú饒ˆßq&ÉåœTS—ã”묻3{ÿùÛªª*ýþ!²„ W^¤R©ß­ýîòy_.+‹Äl$…Ý~Õ5ëkHUcé4ýeé9wLéüøÝÞ¾qg-ö‚2tm8P;LûèükúÒ=}™d_&ñ— QaUÕèÊ5Óº„Æ#¨¡Òn/oIaõÚÍ*Û~õê·þ帯Fgó&ëSØ:RX.¯ì`@pãtáØün:=nÉÙAš ~±Ï1™èÉ}í.Ó²d³ô’ }šöÁ ®Í ä9.ár6Ò¶¹}È‚þ¥R}¿ZuK×°ÇO=39b SIa»ðêÍÉH»¦Ñ×Ù±í3WÕUU ›Jeéºcúc+ÙÜ1•Ð_¼§'sÇÞ}ü ¯Á»ÌAG¾qÐoN[i§ÀØ,ÈÐÎJNsýHЭO'@úm ².`EÙÔíÌkßGkØ×oé¬k™?îŸ4=µpü½#6S •Û´4u†U-UÙüYµ2-w2Ц m {iöŠ«†Ñ6§¤5'œPÞÔd(,“ZzÖ´\`ì̦Rzwwæ;ßÝùØ¢C5;ÓîDDüX=0mkUè±/ô_üíæe¿Û“HJ1ªª‘¼Ò­3è9«Ç5« y¹Í$a6y òvá·ÈºÂã ]‚{_¿¥»nü±'gµ¾L¬/¦õ-»¨«¦í7¯ßJµVÝlݲiòÔ6µd@dÀøK«&Å)ïK$¶~ú c6·n­;å”17Ü0îöÛËHgÙ’VÓÆ~ãM_úÒ˜›nbû³éìÍ·¾ûÄ“ãÙoÝÜj=‡,ÅsI9¯Üœù%ÙZ½fûúصoÛ¶=wÜÑôÅ/Òþ@ÙèÑ~ô£Þ·ß®9é$–`çÓO¸ï>cyÛÿñ9Ï‹˜LžÖÌÈ d•RBÇûîç?ŸI&™ËÞ+ð]…*鬤 VB㪋¡3…ÝWÕ²`ü?‘Âf £ÌyÍ_¡‹Œwé9Û—Žõf²½ô€ž3Z_6K›)yO6·t•þáe—…Ê DÒ?þê,Dvè&ü蚽Ʉó<éúÍêïì®\=wÌIOg>nÞ¿Ýûúÿé¹aNÓñY:©²ÆG=郭û^Ý»fÒ™—M›2yXmM†:J›|êE§Ä¦·Þ è™ÓK)*QA$5qYy…}²n¤S}ÆU¹/°Uª¦ëÕü ØKù̙ɪªäöíÚ¨è™0Þ*GVÎk%3þRUUW(X …b¼¡Yõ½Õ-óÇŸœÊ&éºl€6\s{Gôo ‰lŠD6«Æž’ÖË),Û.èíMòh>̘}´² #ÖR.ô’•«“Ç~Ä¥Ú¼@D{ˆ¬+¶0ÎOÀ8…^ÿÎs{>êÂt¶7›IÅumô°±»Êþ>¾nV_¦c_êÝÎÔ®=ɶý=ú†ÓÎl¼¼yÆŒ††z«]êR•M—ÀÒ*–6è ¹=Dú@wzo2} ™éèËv¦²Ý4‹RÙ®œMŒ.áÊ-Π$Dyý»5€Èº%I{ãS § н½Oyá¶mÛ7î~R/ËN9/›Ñê*G–—ÍÚß»m{÷Ë=™v:]zz³†ÂÖ_Ö|Ä õ#Ëh³Í¦‹lvSËZC:[ÖÒ_¿¥j/–Hµª±ÍHæÍÕ £º;­ds ›8xpÂ÷¾7ìŒ3Xÿ{zèÀ3ÏLûái9W9iÒÜgŸ}ëôÓ“\g•ޏ4pì€1™1g¹=„(·v“u…‚5.º~à`GGº>•Ê$²´õJÒ©i)¢Ò÷^'ý¥Þ'…¥ëùhO–vØ·ø1M›Üg¢Ê×íxF¹cªÌ™g@ ô ˆÅL`ltdDy_ç"x€ÈæÅ ã£\ç“JLJþá1—>¾=ÙŽ>²W7moï;û{·Ðz„}:œÈ)ìõ—͘1ƒ~P+^Vfå¿yμ֖µ¼–H…4Bj Y²B6~VþMG7¯±+ ÔEycC¶·7ÝÕÕ±u«>jT킬ß}=ôöEÅz{µ¾¾©wÞI¢R>~|Ýüùé·ß&cáV]ÅSfMˆ†˜/Ë‘¤„•Ó3•ˆñ³rž¦Tkš¾ZX@ äêÔÆå¿ë‡ëô¿Í» ‘Ù¿/¹mr{wºT•4”žIzéS/RXzÙÿ!XN‹i²)öO …ÍÊÅg^È¡qVy“R9ðWm!²6$Q%L*ÇËZ“Òʔ֧±ìo½nßÖŒÖI›tΛD_6¾ñ´3F:[ÃgIÿ”n]¿æÐªDGY°=iJª½Ýðæ=‰”Å”·Ø„Ÿ¾îî{jW¯Öè×Z¶m£µêì•+»^}uóòåñ^ú 0¶ï®»h_`â¼õSŸêxðA¶G°¯©iúî`)¹9_"ÀKX¦F-{ˆÉ“±I­mØBeÁ€TVTŒ;vIçå½õó¿÷>¯J¤b]Új«!°´Œe+Y®¹¹M‚žTføÎSõ#Œ­1pž¸ñOŸ$Ü&w ±2š»›©¼@ÙCd%vxY´»J{¬Í3ŽˆÅ®xâØþéÏÕÕj´»Hm${³e­§Ò–jí÷a¹3D ‹—R³ÀíkÍZøRÇçþöÞµŸº¼þ¹çõL†ªO<1ýþû:­a.!Ø×]ÝÏ<Ó×ÖÆÎÉýcÆL|òÑáM£x@‡44WÔ¯Žã  >7Ή}æ±¶ŸïŸô\m­W y¥Ï{è굘ñc=§Os¹õ,}ßtüŒŠ…ÕUUbÒ‡–ý#$ÔñI"±b(¤I%áuÌ5¿!D6?#X·7펗ÅëFΘ1ý¬ØåOm‰õñ}?’>¿¨Ütꢆ˩œjÉÆÞíÆõ«™Xp3n#–¨µV®\•ÛG®ºÒãúÑ÷Þýæ¿|¦é¹çµt:³};»ó YrÍ´µÑ–^î7nÌã>z”U/ ˆX+²âåRî>¡`ÉZ…ª¢àsc ý¼=v`òóutÇX=F›HG­ùÏÊJó{ÅVTV4jœ8qB•±…b²TSRgUbl¦>Õà=”@d=@‹^šÒ&³:újlC}½±o@:ÛÛ7eåÈm§-uyî“®z㋳î}æé²PÕyó$®ÇúåÏ×]våØ•Ï‘ÎR°\^ѽãÇ7=úðº­AÞ0 •o^?y#q D˜W<±-Ö9õùÚ:úø+{ÔÜ#GSâfÚ믮ª¬®®®  ìòÆcæ¡en€È’|x}¹<‡@”•Å}ƒØôXì²çß­)‘ˆ2Gä¬de"x- ÷ƒÕ55À fˆ«Ó{²®pÁ@܀ȺãkpE"ë ŒA@Àˆ¬;^°W ²®pÁ@Ü0D¶7Ñí®¬A@œПñå¥ç.©©îÌV  ù ´ïÚñù/]OÛ¿]êëËß  ô%ÜÊÙ§VÚ±¿½§«ÃAs˜€€X 5ìÁýí×}ñ«$­d¤ñ[+-^ôOôú¶¯­¬¼¢²rÐîZ:C€€À`´K@LaéàÈ2³S?t"ˆ€x&@û°bÛÿ|ñ]­×`°IEND®B`‚lcrt-1.1.2/help/zh_CN/figures/lcrt-quick-connect.png0000644000175000017500000004455011752203002017210 00000000000000‰PNG  IHDRJ…õ-3sBITÛáOà IDATx^í]|TÅöN6 $4éB‡ÐEDDiQl bAþ J—&MPQŸ>ËÓ' ‚i"*"EAé iÒB‡ôÝÿ·;a2ܶwwg7wwÏöw÷Ì™3ç|3ß¹íÜÈs§ÿ‰>Ï<ÐQüIÛ„!D¼óù÷¢·ÑüÇ tºšeíÙÎE Š´ÅQHä*!@8ìÙWÒ³0=)d›ñÉw ȵ˿ÄÖÛ¯M˜Ô¯c©bq¹éíçñMx„@!k‹‰µÅ•:âÀ¸¯|qœÄ⌟ý|P:×Iì A¹J„ ïÿxÀÇXžº# ¢‹—;~ôðŒ'°Pw.ίfåæÚ™Wη}Ä—ªÞ!ðáʃwu»·IªÞUG­­þýŸÅ_>ѾzÎù ²ÔNªwéÐvÁ¸YWÎe]>ËMGU¾¹H½»m‘¶ÈHLðü9»Ýž›››åúdggçæääææMÛj;±Ñk·¨¢1ÉÏ:£RßêÄÔ?y]µ\-Ñ´ §¦© ¡±¾q,Tª‡¨Õ f¥ó»Wè)¸•7¨uÇ·.zBß/w¯j;gï\»=ýì1”p1%+üqøüçóæÅƹ>±q…bcc¢£Aó¬ÌÌô«W¯°W®têtgóÄ’1B]·~‚ôýðÀûåïÚ?apÏê>÷ãžh_”@GOSQ‘ir;hnÝÖ}šfš^„FU€@®Ã©23+Ûk4bÁi—Xˆ‰Š¸šéš½/¥gaNÎμ*ÚµÛÿý÷Â…ß-Z´X±bø.\¸pll,t0o§§§_¹råòåËønÞ¼™=> ‹{¯Ý¢Šz4²R,{ùON¶?f¶WT¿¥I-&a:ü'¾Û§2×gEšjÐù,n«k‰6õb!¹1˜½³s”ôÞuä®ÃÎsa½ZWáÕürÛõ«”¬_¹¤hÕa„3 ¶söfKnQz{$v999X„ƒÒ6› jЄ­Ì±ÈyKã¨Ô@°½š­K½ÄÙÈ6úÏ9òöC˜åí¯¶8÷¸HEÈùOTÇÏO7œ°Eq¦ÉKÁX¦Æt˜5EsL5nñü–äâ̦/ÑQ]N={o?xvâ‚]gL¯ú=[UÂÆWŽrIÍrEDÜPFØâò\»kövmÙٜεAnLòŒÛ™™™‘‘‘àvt´KK×´‡Š «¨.¶JÛ²xeÁæ‰}š«­ÍÛx龦y=}gƒL3–o`×ðÆýåPÊ: šcælbÊœ±h’ͯ´aò¢±8ïâü(v¢{´N€aâõ7‡éR±8‡„¥GÞSÛS¿þ“I4•F®&³ 6{ƒô×­®gÒN&ƒÃ˜ŸaôŽŠŠÂ2zcÛÅ|œç^÷¬©Š|=FK½ÙˆµL유]NH‘™_l¹Ê hþ>¹õ/O‹ú¼•™÷–üÎ:ÎÃ1öQ¯ÉyÑ=)q|›6¼CÀ9{«è}Wã2C»%¿º869±± a׿åÕû×ìÇDFIíÙ|ŒŒÂt͹‰š-ÎùJE ¼‹Þ4{{×§njýúr«a Ï2~*æO‘½˜?EMNQ¦Ã²ÆDMpsø•Lœ0Íÿ`±_oÏà;üTs›©±jPîÖ€nstÓ›ÆÅ •zqŽ*%îœôú²üKâøyw“²ê“p®Å¹Öìž™séêu§ì gåØlq8ö2’cáFlütÑÛ–™{õúêÆ‘P©yÄÅ6«¥IÚÛ’ŠsM¨{œœÐ¨ÑÑ\S±Ë@E.Y1¢þ&®È;Ô5µ †ŠŠñc>@ÒddfÛ/gØÏ\ÊQ¹(ÔS+•a‡Þ8cŽZÎÙ‹o[ÞAÖ5;v;8\¤HÞ¶±Ê®mÛy!ŸH\ ÏUVWûH¯hU)j5 íªíkäkŠ/šÅÏFòe{·)Nìê½Æ¸Nù» ~¯žÆaš^G•ò`üS°Å+ÿ8óþÊC"RøùTûjí”VÇ꜉lÃIoLÌJ~:ì Ô1|8Ì&l|ã z$t£lÎó鮎̫T®b»œ¦¬®n™$>#ÀHË †Ÿ+Gå“–›çD7:LÕVרÌ—¬ü+¢CÍü]–h‘OÝÌ ¦ìÒô9¼ð6²?‘ÛOßQ Eïýxß`8~*Ϊ›¢wú±íÅ ¿¹ ΨEØ¢®MÝq7\¾rµHä•ÜoãZ7N³EÚ³Rg÷½ý=8ÅÙ¤bdk?eóªÑy ¿m²ó¤7û(Ž·Ù%.M¼Û9ÍrMØDÑÉJß™D4¨Ôp-ãÙš_]]­L·°»C<â“y¿;ªuh蜮±ñÃʼnšWXÈŸ½A_PXô çôÞó§÷r‰­PÑÒMï‰*ŸQ(âòÅ+,¶§ŸõÕÝC ^ N˜w׎ÄE2\Ù ׌iÞv¢óŸØÅÃcq›íDMÅ2ž+Ã&7 }ŤÍ$¬.Ô¼ˆ…ª(Àå)õì]£\‘þªA³C£¼¥86˜E®³aùçÜÁ™È6\ÇÞêŹP-ªH|GÞ-Z¦ÊåK—.bIÞó¹l1ܥ޳co«†¯øÃYôJdž›Øq‰[ÏnÍ­æ+]Kpû¢5æ_8[ïšw±]¯Q’»E oî½^7®(î]AyG×4®þèÎÞê‰^¬\¡]ÿâe«aßP¼x‰Úµj_¾|éBLá̤nq;ÞU·A ^¾êV7§ÝÞùüŸóÊÖÒ?\ Ec•—»¸WiºÚÒ0Å|à­À¦è•?y›l*VLÈžFíœÀ¯aqnS.ÎóíFÚJ&·qàU×Óc8Žq~.G%.oË<賓ï'®®_Š]³r}QžŽþµzf5 Lyc˜W»þs·!G©¿ô‰Þ çD›÷;Ùþá‡VªTièС˜c[¶l‰ãð .° Š €#mÅG Ô®]»Æ?}útuI¬‰žôÂ#%ê¿{C4¨÷ò¤)K–,=räÈâÅK° ä(UW)‰1zOoÕŒùU‘¤tS%J”9räO?ýô×_Í;÷êÕ«ýúõc­Aá˜ê£ðmýúõ}ûö}çwpŽMºÛd0ðà¥#1‡7¨÷Î{ô0èÝ÷?Ä6$ÀïéÍf]cÕS±b€Ùž¬Y³æË/¿¼aÃE»Ez.^¼xàÀï¿ÿ~ãÆõtHnEœ‡Þ®;[´þb¢£G}¡iãxŽolC¢©éÊŒÏ{z{ÁXÍÉÏ64WïÁÈÿ{ï½wÉ’%§OŸÆƒ¢ÇŸ2§Iò• ŠŒùºI“&ÍŸ??%Å9èD¨Î‹+Ï”ãÝ>#†½ð@¯žøÆ¶±¾ÄÀ}¢·Áb›Mãê^“áã Œ©Áƒ/Z´èÖ[o­^½z·nݰ8÷ݼ7®û6a¬ÜÛµkÇί\¹b\…J-ƒ€ö¼-Nј±ï¿·§á¼Íîl•9}{vaLDSœ™!W/ËÕÜfÕù¾º¢eúLב֮f±AØ«®Â…š¥j}’æð†ÞâÌŒ–Œù©Yª)4ï4iVC@òA³¤ð¼¡·¤¦É !*hßÕâUt2׿Do¯ú€*×!`Q~½iœ¾"À®‹ùjÅU_êäM³·”>!#„€dbÊ”fo98’•°F€ÝÍ"iY_œÞ½¥ô  wä.ªe¡Iô6dd’ËÛñþ@úzȘuq#3)Á›ÆôñT.ͧ ‘~”-ªjõšlÛ$÷iž B€\5Fàò…³Æ &K1…ìÞ¹=±L›Mμ+ÇŠIïƒT-66îŽ;;¯øvÑš•ßÑBƒ´ýçvZu—-],žó ¡ñ ɵë.\XŠA¢·{£¢£ã{÷íi£ÅŽ{¸ÂMãÌ©$†'å}£ðŠèmªkðŠï¬ÜtSª¤f/^²½MuMNvvVVf.ήYó ©© HÉòà$®- ƒX0JñUŽ)®XÖ¦î‹gŽþ¹löÙÃ;ì92såX6dr¬@°EG'Ti”ÒsDñÒ0ê|÷èíÃŒôôÔïVø«ÓMåm¶H÷Hƒð »Ý±ûèÝKg·~r¦”ƒA¢·û~Èuäž>°©¸Ýg¥{mÒ ¼EgnëÍi¿mýY'qéT°‰®pD`MNó¶ ¤HÅW0Ì$½=îÍw yl…*þG€è팩B € zðÔ,!àˆÞþǘZ  Ÿèmœ¢\,Å6ÿÓŒÔØ”f„€1>Ñ›¥4æ SÊ&¤Û1އJ B€#àñuo5÷³´I«û@–µe’ቀÇôV°œTó™•m¨X+ŒhÚ Ï _ðiq®×0_‡›Y32‹{ÍÝ8·ëµKrB€FoMúi yó(¥y›†#!à?<^œÃi5'^&Ä<¬ °‰8Kk¢–æ”î?\È2!xCo‘išìeBÅ^À,q¡ÇƒêTDšxCoMCzB·³.ŸçÌïôš&9!æH;öq4IiXsò×ìb»&,$$ 9{ëqUO®XäxIE„!àÓ[=‹Š5“5%jGÕ¾¢!µ‚ÚIB@DÀcz›§ÓTèkV7/¤Î#óøåØÛ|ó¤IþC€èí?lÉ2!PÀ½ ¸¨yBÀ½=Æöرcס „@A @ô6zdòË#µ UR!|Bà ƒÍ'Bei†d9dA;x/Léš-wÝÔ”Ù‚2.9_cpìR¹Z­’^&Oôv?6ðΧ†]Ÿß±pú¶õÛ$æ vß0i„˜·«7iyß(¼ÓNJèDo÷0â}nxçÓ­Ïü[Ö»#Ü7IኀÎ$KÊ Æ!ÑÛÔ8¢›‚‰”,†Z³X‡;„€<ˆÞò°$K„€Å z[¬CÈB@DoyX’%BÀb½-Ö!ä! :sn K\‡ÌÊÊÌÅÍtëš)ÀHÉ+"#pî³ÀµX¯ê++ɱ¢´Z¿qU,-íôÏ+W;r8777´‚£h,„@TTTÅÊU:u(åÒ7ÑÛ}ïf¤§¯ûye•êÉÝ{=b³E¹¯@„€WØí¹lÛ´ê‡å½z?ž•›î•ë*½Ýc˜ëÈýûÐÎ=*CE÷Ú¤Aø€@™²å& $ëþH:µf¢+X“Ó¼m)Rñ¨¨h‰€Do_ûƒê–E€èmÙ®!Ç_ zûŠ Õ',‹€7§ÖÔ©ÎÅðÔY™¾Z.ÖR§C·,dä!,x9{ƒ«ìqòmù^@O®‡‘ñîC¯É B@€7³·yE¢*¶Õ“¹[óí’&!@/é­Ç[¦jCA½WHÔ ÔU„!à^Ò›óVÍLO`¸=nëÉ=mŽô ðAÀKz›œ4Ðd¥â O6€‹ŠOð’Þ"o 8¬·8g^Š¥Ø6润)O£%}B ¬ð’Þ¾,ÎÕDå;ÅžB­V}CÁ>"à%½}lU¬®^¢³RƒEÄÖÉ!Âx|Ý[s íQKÓš&ÜÞ5¡iŠ„„@˜ göfGÎ"dfx+®½‰½a2à(Ì@"འH+ž3PÓ‹M}˜­ ¼ZAÏÉ B€!àÙâ\Í1Q·ÕjÆpkêk íP)!@ˆxFoÂŽ ‚¢wu¹Jx†ÑÛ3¼H›"ˆÞAÔYä*!àDoÏð"mB ˆ z›è,¼;"* 9¨M¨’ !๹9l>™*½Ý#‰÷ÂT­^ùå½{mÒ ¼ElÝÏ?&Õ¨å4—xv[‹·nw=¼óéŽ;;¯øvÑš•ßIÌAÜ ÷~@óvåªÕ»õ|ï´“bžèíF¼Ï ï|êÝ·¿¬wG¸o’4‡ݞ““%åc€èmjn)ï|2Õ)’ coI@’BÀz½­×'ä! ¢·$ É !`=èØÛTŸàLfVVf..W8Lé‘’MÞUVDm‹´ÅÆÅÙl4mXb½ÝwΫ¥¥þyåŠcG‡Þ…±Úõæäȹži‹OˆO®U·BÅJ‘‘‘î‘ ¬Fpì£q•- ×bq½Æwx$˜ðÝ ‹[ÈHO_÷óÊ*Õ“»÷z$ôÞò½ôëy½F qWÆ®í[ìOOH,R¤ˆ¥º5XöѸô]±r•N{àZ¬ï—LjÞîa®#÷ïC:÷|¨ü Ýk¡¸•™!Åñú)MwlÛ‚k·R¬I4,ûhÜûŒû#Wý°¼WïÇ}¿Kô61„X“‡Þ¼-DŽ3 rN*`òq8ì&0 ´Jí£Ë”-7aø )÷PÑ)@3j¯`ž}tTT´¬S<4{Ì`³V«Ò&oY‹kÁ¼Þ½ƒ·ï¤yîb·œÅ¹+Ò" wC´8÷@ñ‡0Dïî\ó¡aò–ôgb ùÊ M¡ùHSÏè>àÜ“hZuôÔýª–èÕ%y0"€ ö¼‹Õ}-JÔ¥,^=y0¢áWŸ=>öfoñ{Ë_5û•^fà ¤žÔ ÐQ³Hl3«ÇdÈÍT7@`ÕªUï¼óΦM› .|ûí·7®téÒÐד˜²l‘Çô#ñ‚¬Š^Çð}‡z'bYCñ‘;"BÝõ"áÕ`ªõ¡ã;·aä½÷Þëß¿ÿ7Þ˜žž>sæÌ,X°À@®öÍúoèÍÁU°Q­^ðSô+äb½êÖÇ4ø<Ô¹0¶yËÄÒ¬iSuDºEîö¼[Ù†&{ÕÍK¼*óæÍcf‹-:f̘zõ걟zrc¬YêÙ±·1(º]Ëz—ï&`Ÿq^üf2‰Ȫ^±bÅ9sæ`Ç_µjÕŽ;îÚµ‹YÎÌÌ:th×gذaøÉäzú¸{aêÔ©5ªQ£Æ3Ï}:÷SSÿÍ7ßܱcÇŠ+¶oß7yòäKt`ø°6làbøV.Ç6$£ÔwoÅ]<ï}OͲéÁÓZ\{çñãNjŊôä^7øŠÞ,Îá%c8‡•oð9VMf·} 9?«›¬úX‘¦>Ösçνᆠ3jÔ¨:@M³9¿ ñ¤—Þ#%#†™:ýµ—'My²ï£§lݺíÃ?iØ äö\<¯p,:¦[WÅ‘ ^ÑíPqÛ„y…õë×?÷Üs8OJJkéÉÍ[¶‚¦ÇôVóV3 E*všU Tô«&áõêXθFqÞ•?/}æÌ™*Uª0O°ŸÜ+M}LõmÛ¶å:RžÊ”‹CLLÌÈa/‚áï¼÷³Ü´I $ûÒ8ŠøØ`Â@vúâÅ‹1oôÑG)))b8zr_B.ºÓ›u÷Õ$Û¡oÀp±Gùv wᲠǼ}äÈ‘jÕªÁàáÇ-—-[vÉ’%åË—7Vó{©óÈZ÷œXLtôÈ¡/L>c˶íM§`]}]3yAðþ5Ic3j案$fì>ø`þüùÉÉÉfä~ï?4à1½áƒš¨øŠE|×À¨«`²øSÝ©Mø/MvëÖmìØ±¸Ê‚úØèÞ½»±¡>}úàTܤI“pîmÿþýo¼ñ®ÄWñG©Î‰óü¦¢cbF {áëoÝó¯îØ6 °A3çéMs/¯^À2aÂÔj×®¯»oß>œEד{ÑDWñ†Þpšó“mpÞŠñ°>PtÓd\eÛ¢«"~8@90bĈѣG·nݵºté2|øpãêÏ>ûìÛo¿Ý«W/¬ÒkÖ¬‰ƒ@c}¿•ºîH5ü`ƾÿÞžN7šnìh6¢7Šƒ‡×U*M³ÆBœûÔTГk*[\è%½•b:¹ªIl±oøÞ׸ŸÄ´^O¾ŠÀâì÷ ×Gᕞ>Rr} $ +4j<¬àaPûà½ÅÎPóKÔE Œ4ÔBµ$¨±¶²ó²µrŒaè›gôC€Â"d·ßæQðfmnÞ:iz†ÑÛ3¼BT›øšKôÍ~õ(*'¹%ͺ’Ìxä>)ë"@ôÖ…&Ì ˆ˜!ØáDïìTCb©Z<®¦UAÖ2@˶O2¼ý#* YÄ}2ʸG®JiÊ›GJ¤4LF,…;øöýÛRA‰ÎàÍ>U«×Ä@Ë: ÇàÞºŸLªQË!cOD³·‰¾ž¿‰`tTd̺¸g£oÓi£ Åxk×wv^ñí¢5+¿“•EÜñ`Þ®\µz·žâh¾Û'z»Çïøñú¤˜w_!Ø4._8+Åe,}wïÜžX¦ŒÍf9”ðF>¼µ«wßþRÞþ!.=#¼Ã)'Ë÷ŒÁ¾åºA/æ”ËŽß;ˆjÔª»lébïê*j9ߟ\»ž¢“bP®Æ÷·vÉuÉßÖˆÞû`TgNý£’y/ÀêwæZðÉVïC æšDoS½Â;þâÅK˜‚€”‚³ôN®Û0uÏNE€j!—`C µM5„€ï˜¥7h©&³ºy®&ÒØLEµ)’„€Xñ†!QuB€`x@o“ëj“jÔ„!àoL-Îù´1uj´&÷wç‘}BÀSôf¬Ö;[Æ0P3¹ƒ0ö•J BÀ#´é•‘‘ºgÛÅóiv»óA¢Öí»xdT­,Nû¿¬\ªV !@x€ÍY¢Tbr½Æ…bãÔÕµé½ïŽ2å+5¹év$cu2®J{?Nû®¨ý !@x€Ýn?r`ï_{ÿ¨Û¨¹ºº6½/œ=ÝøÆvYWÕ¸„Zë`¬ä%î) Ü£"B L(Y*þÀÞšÁjŸ9ÇšœÏÛŠjŒ·œÕìB·ZÇø$œ¦+$$/À-Àì Z]W›Þj=‘ÕŠ[d8S#n«$ !x´çj?‡ù·ZI8±ùî€ÉùZ˜¯É 阥7fÌÔä§Z¨–Hw „€1ÐÛØ•†-ééé;¶m=}ê¤A&3œÊ)[®|£”&qž< ŽÓ™v‡ÝRØÚ"m±qqz'§,å*ÑÛRÝ”Îlݼ±JÕ¤;îêj³! óF ‡Ã‘›“ö\¿œ)ÄöîÚ±u˦›Z·1$ª?~lÿ¾=çΞsX†áΔ ñɵêV¨)2aÑ IDATXÉúµ½M6RÓEàlÚ™;»ôp¿Íu%LwØŽ¬Ì '­ñßùË)­]¿á®Ú×o4McQp u/vº6±N,ì§vmßr`j|Bb‘"E4=·Ž0pô¾rå Þ®jÈÉY` m‹ŠB†0#ƒ\jòh™ ³iii»ôÀBFÆ[V?¥éŽm[-°ÍzÓšz_L;jÜø†[ªU©T«^Sc5‹—*^ŠjqoCÀ=ÌüÈš›#!g¨D4à’uŒã’Co´±ù£¾z-í>–ýשœñ³?×S yˆ!€ÅøéÇËÞé{`,÷ºïv$ZpžTŽ4z#Ü÷¸^ï~ýg[êéé߯ÔNã~w®Èßã]¼xñ¶·´ž0~LbB‚ÒýÀíÔÝÛNýûâ…³ÕkÖóÑk»­Å'kycˆ¯Ù»Ö ðB¶§Íÿ>uîê“Ó~Ô³qáBnöãx•7þ~úayL¡˜ÑcÆ™kŽ´,‡¸½o×Ö‹igÊWªzéÂÙƒûw»N«Ñ§`ð/½Çýw}™R…hŸl2¸Ò‰‰ã^½fí/Ð?|äÈ“ýÔOiV§~Ê£?u&-Y½fmÇ»»Öª×è–ví?_ð…ž°]û;SS÷³Ò¯¾þ†m@9¶³²²FŽÛ°I üzi,~2¬#>üè7µi—TË9ídfe >ªnÃ&-ojóŸ÷?d:ôm€@ê®m—.œ«×ôƪ5êÔoÒ*ýòÅ¿÷ÿi o¢Èyú]ü«\5ÉàkBG]Q!ñò§ÅVJ¥÷õݰzëÑÅëŒ{¬¥ÍÍÌ}{üZâO?óøclùý×ÖÕHJš4å¦7äÅჟ´sÛ¦s?ݶ-ïB‹ZئMëß7nB•'NŽ{yÎÛcû·ß7¶m{ 6^›9ëÄÉ“«~üë…ãÇÿ™ñú܉íÛw,]ôõ}»!y}Öì´³g×þüã²% ]¿ÁG*bÄ'–®Ó¨Eá¢H®]¨vÃæ%JKçÈ¡¿4ÿôª\­†^QhË¥Ò;'ãÓïþ¸tñRDN†#;cÊœßok\¡UíRøiDpi┩·´¾ú?,_zóM­bccq@>ìÅÁëÖýÊŒÄÆÅž>u·:T¨pÃ+S&ê oms Ȍ҅‹ÇÅÆ.Yö-¶!‹–,ûÒH,Ê”.=vÌèEKò3L¼4j8?òÿfñ®6nÌh“Q„³Z™*+^"òÚ=::&>±ŒÏ€(ú"@WÍ?WC™G×6ØÑÿVBº”=úó9 @Iï ¶ï÷>SW]MÏX¶áàϽp_]‡=nÃÁªX9_½ruòÄñÐß²uë}<\¯QSȱ<>{î3òÎ[³×¬ûåînÿºõöŽ+Z¥'Ä®aóÖ­(]´xé«Ó¦|ñåB§ÍmÛ Ç.¨V©\™Õ­R¹RZZþK¶Ê–-Ëäø>s&­r¥J\Ëi#(É·CûÅ?æ “ˆT†¤rµšøƒÿfجv áûÒ–Ì3çeKÅжmÜ{fàì ‡N^n\#¾qR¼ë6&÷œWS( ôüè‘ÃÛµmS¬X1,­qÌR5üà?ÿÆ „1zãúµ«…¸£^úíòÂ…ãnkwëì·þýÃ+«V©Â^•˜˜xäèÑjU«¢îá#GtNÔ—.¯}÷a†t·fUª;IË>‡ºN²ˆíËQM¦À7”Ê ãnšÑn­BAæìÝ»}õcÚ–‹û~óñ}G/¶¬ƒ.¾ãó8˜ÌÌL,ª ÅÆ‚W£^Çëzþ…ýûÿÊÎÎqÞ÷6vMaÛ6·àˆý_Ý»¢n÷n]ÆN˜ ³Óµó]/OšŠÓuø›0qr·.wkú×½k—IS¦ájÐ×Ô!!psËš #o³ôð!$Ž%ÇჩìÏe[¡Ã$Îo¥S¯)¨5ÕÆMJ\ÍZþ#söÝš%Ç/›t[ÿ7~Û´ïl³Z ¾ÜÜ3mÊdPëØ³Ï•+Wöé'gÏÀóÎíûô÷á#Õ«W›9c:CXSxkÛ63gÍîÒÙI]|Ož:ýV×y5|†¾0xìø‰ì,zç»:½8äy&W|¿0ø¹‘/mÝööâÅŠ=ùDߟW¯ÑT#á§ÿ}7À T©ž9†o»˜Á¾™?âv€=´Bs2é½hùjRïqq§ì]”æ„ÛíG½2G•ŽÚã×}´Oo¶ ¢2ÆŠf5…õêÖáã,šø:ÎØM›:  ßž*ThÆôWðÇÔú=õ„ÛXÂP!''»Ï0CºŽÃœÿ±‰G/°)üsà-â^¼ivðtŠU&Ùÿ§ó¥w5ë4ä Mö ¼:Û0}¯{*:¦×u\Q½›õýHtýF"B€{² ›ËDÌIjçcN¾_û`ù®]†ðaŒå¼7öÿ)>”æ¬È%5ë4º¶­4èƒo–®*‡Þ%óN/[:Vr.`÷RpÇ“ë6Jݳƒ}3¡(Á¶x&W}VW-!Q››àšÆF,…±z[*$r&´`çºÄ˜ØÜëH®›"Ðo{ÞqÆ tu]„ĉÝ̶©‚/"z|n¸Æ²äz)©»·çñ×áܾöáTW°UDã\M¬Ëò#³ oèúm7®Z¬˜èm±!w¸2¾0Ù¾]ÛØ6ßະm…2—+­ú²Âž#w¢7ñÉâ¨çîpÐð›è]àc…p‡@аÉ] /'zrjÐ\s·µøm-o Á$zÂC…Ž­Í}è‚ÀÑ›2¥úÐMá\ÕyåÛbñ[Í]xäÐ;À™Rõ2–êÉu£§? ðÅÜOD«]»ßãu#xgnJÅÃãü|¸×¦dUDº§K‘2ŸÅ’å›ÚŽzî¥2¥ÏÕ=0É}=¢¸)Õ»¦ñ–ŸÒ¥KïÞ¹½ZµªÖ¡^Õ—Ë”±Ù¤qÇ;|ÌÔ’é¢u2¥j>£ÂáÉ¿wß¾>=ùÔ}ñg/Ò x2?©f­}{÷ìٽ˗Gå:ì| Q|Brí:,q€\ãҭɤ÷µ»ó0wTÛŸ¶ýƒL©K'75“&áa9odMlÓúf–)Õ8fžÀÈgª§|úô$BU—¢‰‘/IHˆoÙ¢9+=yòÔwæg\ãGVŸé‡å}ç»ïzý·ú?ý$ºÔÖH"" qqNÀúˆ€LzËÍ”ŠÀ¢££322£Î;/†Êóœ=v,1Q÷…deÊ”F"Ô¤êÕ0õº·gB|üÓÏ |mÚÔ;ÚߎRh.üb>òº)4Q:ãõÙ¯Îxçá ì#ÜT$2çr3¥…ºuj¿÷ÁÁpL­//â˜:_{0ù•usæBÕüôìñ¯ 'áE%/^š8ù:r‚·ï¿ûïa#Gùµ3zï‡1zÌ߇çääàjVïÌ ¦ñúá DÏì_¨PŒf+$$¬‰€LzóL©Ík9§S–)B¯/ZN<ñû~D†óž÷?È^?ÀAlÞ¬i§»»ÝrkûøøRCžÿ?=pŸ4°FR»ºvo{û*TP¨µhÞlîœ_1 ìíÿôS-›7{ø‘¾xqÂÿ ~±ƒÅïs®^­öz­œ°&2çr3¥¯úõêâT6îá‡`Ûì"9Ž„˜ò»YøFLL νáOÔoz©S»öo¿ä%x}¦ÿÓøS÷®« ~îY)¨‹HBXiC6$3¥â’Øü/¾:ô÷ß8µfå^$ßMäÐ;T3¥Ö¨]¿RÅŠo¾1÷WhÂGBBÀÊÈ¡·•#ôÅ7ã{×}±Lu @“R@¦&‚A€è]0¸S«„@ zdj‚(èØ»`p½V ÅÆ¹r‡»9Î÷ì©^!zQ[<"¢·Å;(Ü«S3éäÑCf…¦5Ò‘…-Îe!IvË!8z#Sªå¢'‡F@Îâ<À™R °G(Ic‚OM{Š€z£UKeJõ…ÐÓ§ÝPèõ©I£7Úö%S*¿?̻ԥ,‹‰YZÝØò¥Q#xÊ/pñ¨Š[.¹Uð¨9MeEt¿&Já&”{ìÍ^“ÿ}êÜUdJÔ³qáBÈEïþƒ” }}⥑üHKŒ¿ûv¯ü~yÍ5<ûœûöHƒiüKož)Õ †H]úô€A3_›ÆÒ#ué´×f6¿±u‘\™CêR–ùŒDêÒ–7·½té·ì HÀöÜ ©©û™0++käè±xh£^‹ŸL~øÈ‘'û ¨ŸÒ¬Ný”G 9˜™Óà‡ýï¦6í’j93±efe >ªnÃ&-ojƒÇÂAݹóæßÒ®}­z:wë±{ÏŸÐg+ |ó%†fhLSlZÏC¤4å•f-oNiÖòý?Òlm?:.\ä>CÒ¢Õ-è9`•RéíC¦T_R—/^\Ä)\Þú÷»§0ák3g8yrÕßýôÃrìf¼þ“?ñô3?öÈ–ßݸa]¤$†Ù¾}ž3ÇB’×g͆A¤d]¶dá¯ë7¸íà ¿ýþÕüyÛ7ÿvgÇØ›@Ÿ­“Ùâ‚U×ÌÊʊĦõ†mÔFH¼È<µæK¦TßS—ò“IX|þoΧã'NþìçÂ5--­Jåʬ‡55-í,ÛÞ²uëÔi¯éééˆ/([6?¡"Ò°òStšIW}9“I’ñJ=8ô²²BSlZÏC½ô¯ê†’’ª'׬‰•^öðÝŠï›6mR¡Â P3p@m„$Á‹€ÌÙ[Ì”:ã‹]kÄ7NŠÇíÇÎ?w¤.}õ•)H]úãÊŸ˜.R—nX·š­iÙ93&G Äèè–ºôÁûïWÆâ³ßÓOnÚ¼…%&&"­*ÛFÖÔ„kÓò€AÏ?ÒçadbÂ"|çÖzï ,]:¿:·£nÔ#‰^h #z²ô¯&[|ü±G?úß(øñ'XP°Z&0Ù©Y™ôö1Sª¬Ô¥8ÓöÁ‡ápšÞµó]/OšŠ3gø›0qr·.yÉÌ333ãbc ÅÆ‚´£^§×CÝ»vaYYQvôÔŒå¸V÷׃\G/+«Âˆž‡šé_MpSmÛ´¾|ùò's>Ãû»ŽÉM:`•Z™ôö=Sª/©Kù±÷­oݸq2(1ô‡¾0GÝíÚ߉¿òåʽ8äy&Ÿ6e2x[¿QÓ{?Ú¬Y½®zaðsX´n{û]»ãrºžš±üé'ŸèÖã^~æÜ +«hGÏCÍô¯Š&D;8ƒ8aÒ”§žÈ›ºQdÒã ¨ÔúD¶¹¹Õš_ÖŸ?“ÿþ-8ýËÊ¥í»>qõ²ÉpSªx×ZŽ=âËW;5Œ+U$÷\‹²R²=Õ &á®]:›tÔüŠÀî­¿U©QÇL‡ÿú³^“Íh’Žy2Ó¯lúuUëö×½åÏð=5p°´SkÉ”J©KÍ÷:irè-kZvÛ”ºÔ-D¤@päÐ;`€ò«_k‘"‚™§Ö‚òœIˆÞ!Ù­!àD€èMã€YˆÞ!Ûµ!@ô¦1@„,DïíZ Œ½)S*6B Àȹî>™RÜ=Ô!à rè (Sª/Ý@u  ÞpÎëL©¨{æÌ™7Þú÷Ï?¯9yêT‘"…S5êûhŸv·¶Eð|ý·~øq%r*-Z¤e‹öy¸õÍ71° O†ã¡±~O=ÁáãOn!OKÛ[ZO?†åfœîŠóÇ #›…€Üco/3¥"yH{@ ÄyŸýo×öÍ«~XìJB€Ï ç†dçdÏýôã?ÿ؆,¨ÈöæÛï¸-‚ž?ùlîçcF@zCl‹³,ȾS(fô݇½ ªW¨]B@ þ¥·ÉL©3gÍ~ðûðs¥ŠcbbâãKÝ~[»ÿû>‹pýo¿ö"2"EEEašír÷]Ÿö‰Û"(¬^³j?Ú§7 ®Y»Nv(ã^½fí/ê"’!€€Tz{›)uÕê5={ôÐC³YÓ¦#FE td/QèAó“Oç"Ý6z?üàÿæ|¦i_L±¦©@BB xJoo3¥ž;w.11/3) äyW¬ï¾ýfÅŠ†Ó¨iËÖ·ÞŽŒHûÜ`fРGÝ`oíú)ØYàÛp7Øé™®^¹Š$­ÆîQ)!¤ÈÇ‚î½ÿa¼Í ïèBâÞO>ú€ðÏÀ{Å:têŒ5ö=½Àâü­Ù¯ÍÁIµÞ)âïóðƒs>›kÒ!B™‹óEËW3Pz·ˆˆ‹ˆ;}dT“0áíÓ¦NÒTÆ«‚ðçQÑ¢¯¿Pë·¿ý6üA®·2ד«M‘„ ¤Ñ;0™RƒSr’°rè°L©AÜ ‚™ÇÞA09I„DïðékŠ4ì z‡]—SÀáƒÑ;|úš" ;ˆÞa×åpø @ôŸ¾¦HâwØu9>½Ã§¯)Ò°C€èv]N‡DïðékŠ4ìsSjØÁF w°?Ñ;°x‡jk‘»ÝÉcŸ±••™Á~" €“ÙGlá"¡½eã¢coËv 9FøŠÑÛW©>!`YˆÞ–íš tìÌÉãÙÙYÜõœœìsgNe$!á4Ñ;$ºÑ2A¤úgûok³²œ©¯Áí½;7]8Ö2Þ…#tj-ìºÜ¯×jÐôÏ·mXŸXæ\Ú©â%ªÖ¨í×ɸ4{€CE#€„óu5/Q*áÄÑ¿Áíj5ëÒkž<Q^š½åaI–\€Ïµ6+V¢Tb™ò¶H.Œ0…Ñ» åvÁð²å+]» Ê‘Z<6Zœ[¼ƒÈ=BÀ{ˆÞÞcG56›Íž›ëÈH»=ku7jT,‚[*œai,±téÝ;·½уÿ»¶oM,SÆ@‡Š¤# }ìm³a_KgD¤£š›4m¹cû–í[603|Ùrå›4mšhT8ÇÂjº Mï’¥J§þ±©\…*tUC5Š`d¥\{g«;dr3Ó¯¸Ó¡r·O?\*±œfmz׬—’º{ûñßVã) Íj$$+ €y»D|éäºy¯ÄV¸¤MïB±qõé±{+ôù@ø€Zó<ªJX¢·µû‡¼#|@€èíxT•°6ÚÇÞ^ø|áü93µJ–Š7£F:„!à;Òè W~X<ߨ¡Ýî7V@iõäºS÷¸Uc ~RV›…DÓ%·®ªM©c4££®¥‰€¦)MM=ƒša’0HIo@ðäñz@|0S·H¯ “+†¬‚iâOF6…‚ÕÝPÛQ4„êj ªë·…RTa‹6Õ>«Õ܆¯iÐ ݆@ Ž€dz{bDªIÂ:7®9y-ÍRMǘ¦º9Me3jn›VÂm8Ïm*ê*œä±¨}P´Ñ”±YM(H,X‚Þ&G°×˜ša×a­°Ÿ"U hãÖ15…˜DÁI…¼”Ûç šŽñVÍ)Z5Îpµcnc!… BÀôÖÄË`ä)h ¨®&‰1‹Xu‘0šM{Ô¨:"5å4[QW„ÄŒÿÌ=î$Ûƒb–Å(Ä*jMMOH\XˆÞžw= Õ“•ž¦8Öõt¸\M±ºf©Z(¶bPÊ-óXXE…âšhMIQ®§ãR"¬Boqàòm¶a@V“G¯-®)nh*«i#J$äþ‹!CGtŒWQ[Õ  àÆ LT§¢àEÀôfW1 Õ£YD™+‹B‡/ªk6ª)dí¹yËâ5hNÿ©ØYp¹BŸ;ãÖmR",AoïÆ–¢–b¼*è§I Í*êÎ3O{ÍVôª‹jVäž°Rñ[ÓI…¾Z…3ÆíjZ a!d7¥šŽŒ´øæ|Ðë>³qïv4zöÝÊy8ŒušúŠ 45««…ÌÇG­@’A@òìíõ½+€êQšÑX]Q1AéMžœÉf(­©£r?ÕŽiú É[n“•jÆ.¶k Æ‘Qûƒ"æ’¦}5¤$ RdÒÛÌ=§naÇ"ßÖÄjvqãj°"fP“«zdPpCtIlNä‰&™kòŠWä¥L¢é›ØŠB úÜO‰f™)†û6ƒ‰Âyú,D¶¹¹Õš_ÖŸ?s"X<&? BÀ-'zjàà ;öv)„G€èMƒYˆÞ!Ûµ!@ô¦1@„,DïíZ Œ zÓ B¢wÈv-F½i !‹Ñ;d»–#ˆÞ4E€è²]KDo„@È"@ôÙ®¥À€ÒûÊzu; 9B pH{ÞûbÚQc¯7lÜR­J¥Zõš«QiA!@o‰+(äý×®4zÃÅÍõÕst÷±ì¿N匟ý¹ž“³4Š (b‰u53"¨í¨é…m†ƒ€½%Ny…ÐŒºÛL-qThšu«à¶–ÚõP ¼D&½á}{zªcØ–zzú÷+µ‹SéID>3²1Mq›ª° Ø°^ÑëžÆDaJso¢çjˆÉýú–8ƒ®Œ°+*ª{™õ‚˜F”x×GêÁÆÛUqûz#Í;|¯%™Þ…O§Î¥?9í‡!÷7-|i—±»f QÐÞ`@ -nP¤±žn{N¯"ÉÔ"êÑÏúBÑL¨îw^m –qGs³Ü”hSm_᪞qqH(tØOó­Ô ñ;½Çýw}™R…hŸ¼è7ô6 €XÇóqÀJÅ>Pt* ;z][Pý¤í0A 8ëÖ©É£ 7¢¦Ÿ‚{£‹ûÃuظ ±!›ÞŽëfïÕÛŽ-^wૉwÛ"õ:H[.v°‚è  ‰ºÃPKÁpn–·¥è]VEÛ?’š@@³›X=>ﱋդKy³LMTæ®.R«‰}­ÐW»m"V‹ªÈ¦wNƧ?îï~sÕâEbÀô)s~¿­q…VµKEäd`ÐÁêþV˜Rôÿ©® k¬”·Ë•C©w1—^ê:My-uu&Ѭ%:ÏûB±‹½P4¨6ÂÇ Š4·ÕOm$0Éôž±`ûÌ/w}¹úÀÜQmÚöÏÏ-ÜÔaÏ6†õ"CJÄK„OìcckÆà—[¦R4ºš'\M]$ç¥llð‘À2eQMtÀ ’+ªDª¹»Q8fP=E’é]¶Tl¡hÛÆ½gÎÞpèäåÆ5â'ÅG\¿bW‡'RNAcˆ¬'ÄþàÛL_,R4g@o^‹mhªCs‰Ø/€‚÷‚Cƒ"Ž¡Âä\‚êl›)sû 9÷©)ƃæðà4Kƒ´%Ó»wûêcÎ8? IDATu*—è7kÃ÷›‘§ïNVŸK7ƒïN±/}Æ»V¡#ª©‹4[çj¢MMMj" ¦±¦„b˜éMÞ**²Ÿ¢¦Á°Q×定Bˆ^°.—|SªÃao–¿lÒmÍk% ¶fµ aæC;€õ™ùº¢¦AG¨y×Õò½Îõˆfêv ¸­V6ءÎZ?¸$’gïEËW³ø{·ˆˆ‹ˆ;}dTQô êª÷ßÜ ZY,¶q±Rq0ë{H*ûõ-qšýå–Ìj…„µ¦ù^`FD}µÄÌÀ3ßb4eÒ»YßDo|Âcÿ5»ßÀ ïWµŽfO+ì«u¸$µø¨EB€ÐC€è­‡ É  G€èô]Hz½õ!9!ô½ƒ¾ )B@¢·2$'‚¢wÐw!@è!@ôÖC†ä„@Ð#@ôú.¤=ˆÞzÈœzˆÞAß…! ‡Ñ[’AÑ;è» ô zë!CrB è z}R„€2³µèµArYØíöÌŒ »Ã.Ë õíØ"m±qq6›ö<”“••™kÏU½üÊú‘yåadD”-*66.*ÚsM)yåU’Œ€Ãá8~üØþ}{Î=‡ì”’­[Ò\d¤->!>¹VÝ +EF*ßtcÏͽrùâ‰cG®\¾`·+_ngÉ€|uÊf‹,Z¬dÕµcbc¾[sDo·YE!==ý@êÞ*U“:um—››³kû–ûSã‹)¢è‰ŒôôSÿ‹O,Û¨Ek½éÝ*'É,ߨwìïuSšg妻µ£Ä- A¡€®MKKëØ¥GnNþ‚Âg߬ŸÒtǶ-v»F¼¹ŽÜKÏ5hvSv&^q³wDDd•¤ZëW}©s´¢œèíû œ¬É£¢¢rsܼÔ)pù¿%Ä«{$âˆÀšÜ5o‡ ··3^óG"DoÿP¹-`$‡Ï`vŽg¹ð…—5¢wõ·‹Ýa4äÃ(T?ŒDíë ~hˆLZÊU“DñS!A©(a â·Õ#4íßÏß-u?‹ ”M·/M‘foiPÊ&o¿LiGý®â›âܾ¾-QGÔD•ÊÕjøÇ13ÁšÑñ ÚuúXêúþ†USEÜ\‰„²ÏžäšseQ̓æå©½åa8K’G3wüÈ¡ý`©ë»&¾¾L(ʯ©qþr,pÐ -•H(~â{ñÜÿt{¨ŸÂ™„m°}WãUÀüqž5Jô.@ð½lZ:‡ªT«)ºÒâ'ûÆÆa'Ïó>ê¦E‰ºÔË-PO¼ *ÛæÌ;5ó!a:˜ÉY•‚å6ü$z[`(yäV˲ç‡^÷×*Õ“¯“ˆÍ9(ýe»†<}ÙŽ9ò‡Ms€ó%·°Dw®Õ9ó9{ùLŽR¦Ì¾¹¦¹åk½åcJ•TÇd.ì Ô¥!;'3Èɦh”¸D§e6cc 5Q‡Õ*Ø œèd÷if9oÒ’ö©Y§¡Ú–8Ec{ÿŸ;™ŽØ4«(Jä:ÆZŒŽ)¤vO”àf¾©÷ðÝrG—„²AT0öì©cø›ã?×ý¸”ÉÙñ6ä .„Š*Æþ{Zc÷àq¢·§ð†š>§. ¼U a3Í]C¤æ0 Š/ÂAc¾@—sÎ3}Æö„è]€à{Õ4Î_ùóp´fÝFû÷ìp²wÏ ÿ\M3<7®?2ר⣨@Ï×1³ oqb‡ˆ­>mŽŠ~ÉÝBKôv ‘µ\'Öü5ä“릤îÙûø‡ñ­E\‡‰ÎøÃ1Øô¨Gõç #`¸8·8±™{tךG}m eç.ù¤uòv÷vnÛLˆïZiݾ3¸vò(šÀvb¹Jš.B¥ V‹±ŠL¢iÁ[¡[@ò ½½¹€ê9ÉíAÿ—òš-XENó“óY±qEµ¾?$Do êo›2æý”·ö;2‡æ:ócFúå$V #1ײ£"^D­­Ì¡¹v;Ô»Qk¢’ê§Ò#A#€$[¥K—Þ½s›+¯ [’†ø7"E¼‰eÊØló2~/™päÀ^0¼À{'0 Ò#í+Y*ÑÔî&>¨™¨E*€@áÂ…“jÖÚ·wϞݻt³ €_~lÒ™ç<>!¹vÄ®nÙüñÔêáƒûþ9zÈ|vAµ ’`Þ.V"—!ñþ3n½Í d ,Ao¨P1!!i-áP@œ@F÷¸¸8õ; Ð8ÞÔlþ š´2™8 þú½‡óš,3ï0€+Do¿÷‡Ä°>/¬Êæ/Ñ~ЙÂ(7“Í?èâ’å0{ËB’ì–C€èm¹.!‡Y½e!IvË!@ô¶\—C„€,ˆÞ²$;„€åpÒ;+ãªåü"‡BÀgl‹-ìÒù®"ÅJølŠ „€%H;ylÐ ÃAí¼Å¹É›`,á;9Aú¸Þvž÷qÒ{Áüù½î½çÒù´ô+—ôkQ !@XÌÛϧ=7dH _#Ïþ‡¹Üëþû±ñÊ„ÑÈ,»y­ùG*°&‡ŒqùôfšÝº÷PU!!@8Þýýо<˜v¥šIEND®B`‚lcrt-1.1.2/aclocal.m40000664000175000017500000011615711750112277011260 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT]) ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .]) ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.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.11.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, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 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, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 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_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 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, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR lcrt-1.1.2/COPYING0000664000175000017500000000124511750112142010431 00000000000000This 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 lcrt-1.1.2/Makefile.am0000664000175000017500000000114511750112142011431 00000000000000SUBDIRS = language src help pixmaps gnome EXTRA_DIST = AUTHORS NEWS ChangeLog COPYING README Doxyfile uninstall-local: rm -rf $(DESTDIR)$(datadir)/$(PACKAGE) rm -rf $(DESTDIR)$(datadir)/gnome/help/$(PACKAGE) # Build ChangeLog from GIT history ChangeLog: @if test -f $(top_srcdir)/.git/HEAD; then \ git log --stat > $@; \ fi dist: ChangeLog .PHONY: ChangeLog doc DOC_TOOLS = doxygen dot doc: @for i in $(DOC_TOOLS);\ do \ which $$i >/dev/null; \ if [ $$? -ne 0 ]; then \ echo "Doc tool '$$i' isn't found,please install it and try again."; \ exit 1; \ fi \ done @doxygen Doxyfile lcrt-1.1.2/depcomp0000775000175000017500000004426711750112142010766 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the 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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # 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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the 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:: \1 \\:p' >> "$depfile" echo " " >> "$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: lcrt-1.1.2/src/0000775000175000017500000000000011752203002010241 500000000000000lcrt-1.1.2/src/csettings.h0000664000175000017500000000172511750112142012344 00000000000000#ifndef __LCRT_CSETTINGS_H__ #define __LCRT_CSETTINGS_H__ #include void lcrt_settings_on_applybutton_clicked(GtkButton *button, gpointer user_data); void lcrt_settings_on_cancelbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_settings_on_okbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_settings_on_button_background_image_clicked(GtkButton *button, gpointer user_data); gboolean lcrt_settings_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data); void lcrt_settings_terminal_font_button_clicked(GtkFontButton *widget, gpointer user_data); void lcrt_settings_terminal_color_button_clicked(GtkColorButton *widget, gpointer user_data); void lcrt_settings_terminal_on_restore_default_clicked(GtkButton *widget, gpointer user_data); void lcrt_settings_terminal_on_transparent_value_changed(GtkButton *widget, gpointer user_data); int lcrt_file_choose_dialog(GtkWidget *parent, const char *prompt, char *file); #endif lcrt-1.1.2/src/ilock.h0000664000175000017500000000276311750112142011445 00000000000000#ifndef __LCRT_ILOCK_H__ #define __LCRT_ILOCK_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_ILOCK_TABLE "ilock" enum { LCRT_K_LOCK_TITLE, LCRT_K_UNLOCK_TITLE, LCRT_K_LOCK_TIP, LCRT_K_UNLOCK_TIP, LCRT_K_PASSWORD, LCRT_K_REPASSWORD, LCRT_K_CANCEL, LCRT_K_OK, LCRT_K_ERROR, LCRT_K_ERR_MSG, LCRT_K_NUMBER }; #define LCRT_K_NAME \ "k_lock_title", \ "k_unlock_title", \ "k_lock_tip", \ "k_unlock_tip", \ "k_password", \ "k_repassword", \ "k_cancel", \ "k_ok", \ "k_error", \ "k_err_msg" #define LCRT_K_VALUE \ "Lock Session", \ "Unlock Session", \ "Enter password for session and will be used \nwhen unlock the session.", \ "Enter password to unlock the session.", \ "Password: ", \ "Retype password:", \ "Cancel", \ "OK", \ "Password not match!", \ "There is no memory to create dialog" struct lcrtc_lock { struct lcrt_config db; const char *name[LCRT_K_NUMBER]; char value[LCRT_K_NUMBER][LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_lock { struct lcrt_terminal *parent; GtkWidget *dialog; GtkWidget *entry_password; GtkWidget *entry_repassword; struct lcrtc_lock config; const char *(*get_db)(struct lcrt_lock *llock); const char *(*get_tb)(struct lcrt_lock *llock); }; struct lcrt_lock *lcrt_create_dialog_lock(struct lcrt_terminal *parent); void lcrt_destroy_lock(struct lcrt_lock *llock); #endif lcrt-1.1.2/src/ioptions.c0000664000175000017500000001612711750112142012202 00000000000000#include #include #include #include #include #include #include "assert.h" #include "iwindow.h" #include "imenubar.h" #include "debug.h" #include "mkconfig.h" #include "ioptions.h" #include "coptions.h" #include "isettings.h" int lcrt_options_create_config(struct lcrt_options *loptions); int lcrt_options_load_config(struct lcrt_options *loptions); int lcrt_options_init_config(struct lcrt_options *loptions); struct lcrt_options *lcrt_options_create_menuitem(struct lcrt_menubar *parent) { struct lcrt_options *loptions; GtkWidget *o_menuitem; GtkWidget *o_menuitem_menu; GtkWidget *o_session_options; GtkWidget *image238; GtkWidget *o_global_options; GtkWidget *o_separator_2; GtkWidget *o_auto_save_options; GtkWidget *o_save_settings_now; //GtkAccelGroup *accel_group = parent->parent->w_accel; loptions =(struct lcrt_options *)calloc(1,sizeof(struct lcrt_options)); assert(loptions); lcrt_options_init_config(loptions); lcrt_options_load_config(loptions); loptions->parent = parent; o_menuitem = gtk_menu_item_new_with_mnemonic (loptions->config.value[LCRT_O_MENUITEM]); loptions->o_menuitem = o_menuitem; gtk_widget_show (o_menuitem); o_menuitem_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (o_menuitem), o_menuitem_menu); o_session_options = gtk_image_menu_item_new_with_mnemonic (loptions->config.value[LCRT_O_SESSION_OPTIONS]); loptions->o_session_options = o_session_options; gtk_widget_show (o_session_options); gtk_container_add (GTK_CONTAINER (o_menuitem_menu), o_session_options); g_signal_connect ((gpointer) o_session_options, "activate", G_CALLBACK (lcrt_options_on_session_options_activate), loptions); image238 = gtk_image_new_from_stock ("gtk-properties", GTK_ICON_SIZE_MENU); gtk_widget_show (image238); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (o_session_options), image238); o_global_options = gtk_menu_item_new_with_mnemonic (loptions->config.value[LCRT_O_GLOBAL_OPTIONS]); loptions->o_global_options = o_global_options; gtk_widget_show (o_global_options); gtk_container_add (GTK_CONTAINER (o_menuitem_menu), o_global_options); g_signal_connect ((gpointer) o_global_options, "activate", G_CALLBACK (lcrt_options_on_global_options_activate), loptions); o_separator_2 = gtk_separator_menu_item_new (); gtk_widget_show (o_separator_2); gtk_container_add (GTK_CONTAINER (o_menuitem_menu), o_separator_2); gtk_widget_set_sensitive (o_separator_2, FALSE); o_auto_save_options = gtk_check_menu_item_new_with_mnemonic (loptions->config.value[LCRT_O_AUTO_SAVE_OPTIONS]); loptions->o_auto_save_options = o_auto_save_options; gtk_widget_show (o_auto_save_options); gtk_container_add (GTK_CONTAINER (o_menuitem_menu), o_auto_save_options); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (o_auto_save_options), parent->parent->w_settings->auto_save_config); g_signal_connect ((gpointer) o_auto_save_options, "activate", G_CALLBACK (lcrt_options_on_auto_save_options_activate), loptions); o_save_settings_now = gtk_menu_item_new_with_mnemonic (loptions->config.value[LCRT_O_SAVE_SETTINGS_NOW]); loptions->o_save_settings_now = o_save_settings_now; gtk_widget_show (o_save_settings_now); gtk_container_add (GTK_CONTAINER (o_menuitem_menu), o_save_settings_now); g_signal_connect ((gpointer) o_save_settings_now, "activate", G_CALLBACK (lcrt_options_on_save_settings_now_activate), loptions); return loptions; } void lcrt_options_destroy_menuitem(struct lcrt_options *loptions) { gtk_widget_destroy(loptions->o_menuitem); if (loptions) free(loptions); } static const char *lcrt_options_get_db_name(struct lcrt_options *loptions) { return loptions == NULL ? NULL : loptions->config.db.db_name; } static const char *lcrt_options_get_tb_name(struct lcrt_options *loptions) { return loptions == NULL ? NULL : loptions->config.db.db_table; } int lcrt_options_init_config(struct lcrt_options *loptions) { char db_name[256]; int i; static char *name[LCRT_O_NUMBER] = {LCRT_O_NAME}; static char *value[LCRT_O_NUMBER] = {LCRT_O_VALUE}; static int shortcut[LCRT_O_NUMBER][2] = {LCRT_O_SHORTCUT}; if (loptions == NULL) return EINVAL; memset(&loptions->config, 0, sizeof(struct lcrtc_options)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&loptions->config.db, db_name, LCRT_IOPTIONS_TABLE); for (i = 0; i < LCRT_O_NUMBER; i++) { loptions->config.name[i] = name[i]; strncpy(loptions->config.value[i], value[i], sizeof(loptions->config.value[i])); loptions->config.shortcut[i][0] = shortcut[i][0]; loptions->config.shortcut[i][1] = shortcut[i][1]; } loptions->get_db = lcrt_options_get_db_name; loptions->get_tb = lcrt_options_get_tb_name; return 0; } int lcrt_options_load_config(struct lcrt_options *loptions) { int rv, i; if (loptions == NULL) return EINVAL; rv = loptions->config.db.select(&loptions->config.db, "SELECT * FROM %s", loptions->get_tb(loptions)); if (rv == LCRTE_NO_TABLE) { //lcrt_options_create_config(loptions); return LCRTE_NO_CONFIG; } for (i = 0; i < LCRT_O_NUMBER && rv == LCRTE_OK; i++) { strncpy(loptions->config.value[i], loptions->config.db.get_text_col(&loptions->config.db, 1), sizeof(loptions->config.value[i])); rv = loptions->config.db.get_row(&loptions->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)loptions->get_db(loptions)), loptions->get_tb(loptions), loptions->config.name[i], loptions->config.value[i], loptions->config.shortcut[i][0], loptions->config.shortcut[i][1]); } return rv; } int lcrt_options_create_config(struct lcrt_options *loptions) { int i; if (loptions == NULL) return EINVAL; loptions->config.db.exec(&loptions->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255), \ shortcut INTEGER, \ shortcut_mask INTEGER)", loptions->get_tb(loptions)); for (i = 0; i < LCRT_O_NUMBER; i++) { loptions->config.db.exec(&loptions->config.db, "INSERT INTO %s VALUES('%s', '%s', %d, %d)", loptions->get_tb(loptions), loptions->config.name[i], loptions->config.value[i], loptions->config.shortcut[i][0], loptions->config.shortcut[i][1]); } loptions->config.db.close(&loptions->config.db); return 0; } lcrt-1.1.2/src/ssh.h0000664000175000017500000000035011750112142011127 00000000000000#ifndef __LCRT_SSH_H__ #define __LCRT_SSH_H__ #include #include "protocol.h" extern struct lcrt_protocol_callback lcrt_protocol_ssh2_callbacks; extern struct lcrt_protocol_callback lcrt_protocol_ssh1_callbacks; #endif lcrt-1.1.2/src/ifile.h0000664000175000017500000000450311750112142011426 00000000000000#ifndef __LCRT_IFILE_H__ #define __LCRT_IFILE_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_IFILE_TABLE "ifile" enum { LCRT_F_MENUITEM, LCRT_F_CONNECT, LCRT_F_QUICK_CONNECT, LCRT_F_CONNECT_IN_TAB, LCRT_F_RECONNECT, LCRT_F_RECONNECT_ALL, LCRT_F_DISCONNECT, LCRT_F_DISCONNECT_ALL, LCRT_F_CLONE_SESSION, LCRT_F_LOCK_SESSION, LCRT_F_PRINT, LCRT_F_PRINT_SETUP, LCRT_F_LOG_SESSION, LCRT_F_RECENT_SESSION, LCRT_F_EXIT, LCRT_F_NUMBER }; #define LCRT_F_NAME \ "f_menuitem", \ "f_connect", \ "f_quick_connect", \ "f_connect_in_tab", \ "f_reconnect", \ "f_reconnect_all", \ "f_disconnect", \ "f_disconnect_all", \ "f_clone_session", \ "f_lock_session", \ "f_print", \ "f_print_setup", \ "f_log_session", \ "f_recent_session", \ "f_exit" #define LCRT_F_VALUE \ "_File", \ "_Connect ...", \ "_Quick Connect ...", \ "Connect in Ta_b", \ "Reconnect", \ "Reconnect _All", \ "_Disconnect", \ "Disc_onnect All", \ "Clo_ne Session", \ "Loc_k Session ...", \ "_Print", \ "Print Set_up ...", \ "_Log Session", \ "Recent Session", \ "E_xit" #define LCRT_F_ICONS \ "", \ "lcrt-connect.png", \ "lcrt-quick-connect.png", \ "lcrt-connect-in-tab.png", \ "lcrt-reconnect.png" struct lcrtc_file { struct lcrt_config db; const char *name[LCRT_F_NUMBER]; char value[LCRT_F_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_F_NUMBER][2]; }; struct lcrt_file { struct lcrt_menubar *parent; GtkWidget *f_menuitem; GtkWidget *f_connect; GtkWidget *f_quick_connect; GtkWidget *f_connect_in_tab; GtkWidget *f_reconnect; GtkWidget *f_reconnect_all; GtkWidget *f_disconnect; GtkWidget *f_disconnect_all; GtkWidget *f_clone_session; GtkWidget *f_lock_session; GtkWidget *f_print; GtkWidget *f_print_setup; GtkWidget *f_log_session; GtkWidget *f_recent_session; GtkWidget *f_exit; struct lcrtc_file config; const char *(*get_db)(struct lcrt_file *lfile); const char *(*get_tb)(struct lcrt_file *lfile); }; struct lcrt_file *lcrt_file_create_menuitem(struct lcrt_menubar *parent); void lcrt_file_destroy_menuitem(struct lcrt_file *lfile); #endif lcrt-1.1.2/src/message.c0000664000175000017500000000327111750112142011756 00000000000000#include #include #include "support.h" #include "message.h" void lcrt_message_warning(GtkWidget *window, const char *format, ...) { GtkWidget *dialog; va_list args; char msg[4096]; va_start(args, format); vsprintf(msg, format, args); va_end(args); dialog = gtk_message_dialog_new(GTK_WINDOW(window), 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, msg,NULL); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } void lcrt_message_error(GtkWidget *window, const char *format, ...) { GtkWidget *dialog; va_list args; char msg[4096]; va_start(args, format); vsprintf(msg, format, args); va_end(args); dialog = gtk_message_dialog_new(GTK_WINDOW(window), 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, msg,NULL); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } gboolean lcrt_message_choose(GtkWidget *window, GtkMessageType type, const char *format, ...) { GtkWidget *dialog; int choose; va_list args; char msg[4096]; va_start(args, format); vsprintf(msg, format, args); va_end(args); dialog = gtk_message_dialog_new(GTK_WINDOW(window), 0, type, GTK_BUTTONS_OK_CANCEL, msg,NULL); choose = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); if (choose == GTK_RESPONSE_OK) return TRUE; return FALSE; } void lcrt_message_info(GtkWidget *window, const char *format, ...) { GtkWidget *dialog; va_list args; char msg[4096]; va_start(args, format); vsprintf(msg, format, args); va_end(args); dialog = gtk_message_dialog_new(GTK_WINDOW(window), 0, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, msg,NULL); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } lcrt-1.1.2/src/iterminal.c0000664000175000017500000002135711752201077012333 00000000000000/* * Copyright(c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 15 Jan 2011 04:01:41 PM CST * File Name: iCreateWindow.c * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include #include "debug.h" #include "support.h" #include "user.h" #include "message.h" #include "iwindow.h" #include "iterminal.h" #include "cterminal.h" #include "inotebook.h" #include "isettings.h" #include "itoolbar.h" #include "cstatusbar.h" #include "ssh.h" #include "telnet.h" #include "rlogin.h" #include "serial.h" #include "shell.h" #include "protocol.h" int lcrt_create_terminal(struct lcrt_notebook *parent) { GtkWidget *scrolledwindow; GtkWidget *terminal; GtkWidget *label_title; GtkWidget *hbox_title; GtkWidget *eventbox; GtkWidget *button_close; GtkWidget *button_image; //GtkAccelGroup *accel_group = parent->parent->w_accel; struct lcrt_settings *lsettings = parent->parent->w_settings; struct lcrt_terminal *lterminal; char *err; lterminal = (struct lcrt_terminal *)calloc(1, sizeof(struct lcrt_terminal)); if (lterminal == NULL) { err = "Create terminal error"; goto out; } debug_print("terminal_addr = %p\n", lterminal); lterminal->parent = parent; lterminal->connected = FALSE; lterminal->signal_connected = FALSE; lterminal->user = parent->parent->current_user; list_add(<erminal->brother, &parent->child); terminal = vte_terminal_new(); lterminal->terminal = VTE_TERMINAL(terminal); debug_print("create VTETerminal = %p\n", lterminal->terminal); lterminal->ops = lcrt_protocol_get_callback(lterminal->user->protocol); scrolledwindow = gtk_scrolled_window_new(NULL, vte_terminal_get_adjustment(VTE_TERMINAL(terminal))); lterminal->scrolledwindow = scrolledwindow; gtk_widget_show(scrolledwindow); gtk_container_add(GTK_CONTAINER(lterminal->parent->notebook), scrolledwindow); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); debug_print("create scrolledwindow = %p\n", lterminal->scrolledwindow); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK (parent->notebook), scrolledwindow, TRUE); gtk_notebook_set_tab_detachable(GTK_NOTEBOOK (parent->notebook), scrolledwindow, TRUE); hbox_title = gtk_hbox_new (FALSE, 2); GTK_WIDGET_UNSET_FLAGS (hbox_title, GTK_CAN_FOCUS); gtk_widget_show (hbox_title); gtk_notebook_set_tab_label (GTK_NOTEBOOK (parent->notebook), scrolledwindow, hbox_title); eventbox = gtk_event_box_new (); gtk_widget_show (eventbox); GTK_WIDGET_UNSET_FLAGS (eventbox, GTK_CAN_FOCUS); gtk_box_pack_start (GTK_BOX (hbox_title), eventbox, FALSE, FALSE, 0); gtk_event_box_set_visible_window(GTK_EVENT_BOX(eventbox), FALSE); label_title = gtk_label_new (NULL); lterminal->label = label_title; gtk_widget_set_size_request (label_title, -1, 15); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_DISCONNECT); gtk_widget_show (label_title); GTK_WIDGET_UNSET_FLAGS (label_title, GTK_CAN_FOCUS); gtk_container_add(GTK_CONTAINER(eventbox), label_title); g_signal_connect ((gpointer) eventbox, "button_press_event", G_CALLBACK (lcrt_terminal_on_label_title_button_press_event), lterminal); button_close = gtk_toggle_button_new (); gtk_widget_show (button_close); gtk_box_pack_start (GTK_BOX (hbox_title), button_close, FALSE, FALSE, 0); gtk_widget_set_size_request (button_close, 20, 20); GTK_WIDGET_UNSET_FLAGS (button_close, GTK_CAN_FOCUS); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button_close), TRUE); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (button_close), TRUE); gtk_button_set_relief( GTK_BUTTON(button_close), GTK_RELIEF_NONE ) ; button_image = create_pixmap(NULL, "lcrt-delete.png"); gtk_widget_set_size_request (button_image, 20, 20); gtk_widget_show (button_image); gtk_container_add (GTK_CONTAINER (button_close), button_image); g_signal_connect ((gpointer) button_close, "clicked", G_CALLBACK (lcrt_terminal_on_button_close_clicked), lterminal); //vte_terminal_set_backspace_binding(VTE_TERMINAL(terminal), VTE_ERASE_ASCII_BACKSPACE); gtk_widget_show(terminal); GTK_WIDGET_SET_FLAGS(terminal, GTK_CAN_FOCUS); gtk_container_add(GTK_CONTAINER(scrolledwindow), terminal); //lcrt_terminal_fork(lterminal); if (lterminal->ops && lterminal->ops->connect) lterminal->ops->connect(lterminal); debug_print("terminal = %p, font = %s\n", lterminal->terminal, lsettings->lt_t_font); vte_terminal_set_font_from_string(lterminal->terminal, lsettings->lt_t_font); debug_where(); vte_terminal_set_color_foreground(VTE_TERMINAL(lterminal->terminal), &lsettings->lt_t_fcolor); vte_terminal_set_color_background(VTE_TERMINAL(lterminal->terminal), &lsettings->lt_t_bcolor); if (lsettings->lt_t_transparent != 0) vte_terminal_set_background_transparent(VTE_TERMINAL(lterminal->terminal), TRUE); vte_terminal_set_background_saturation(VTE_TERMINAL(lterminal->terminal), (double)lsettings->lt_t_transparent / 100.0); vte_terminal_set_scrollback_lines(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_scrolllines); vte_terminal_set_background_image_file(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_backimage); vte_terminal_set_audible_bell(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_bell); g_signal_connect(GTK_OBJECT(terminal), "child-exited", G_CALLBACK(lcrt_terminal_on_child_exited), lterminal); g_signal_connect(GTK_OBJECT(terminal), "contents-changed", G_CALLBACK(lcrt_terminal_on_contents_changed), lterminal); g_signal_connect(GTK_OBJECT(terminal), "selection-changed", G_CALLBACK(lcrt_terminal_on_selection_changed), lterminal); g_signal_connect ((gpointer) terminal, "button_press_event", G_CALLBACK (lcrt_terminal_on_button_press_event), lterminal); gtk_notebook_set_current_page(GTK_NOTEBOOK(parent->notebook), gtk_notebook_page_num(GTK_NOTEBOOK(parent->notebook), scrolledwindow)); return 0; out: lcrt_message_warning(parent->parent->window, err); return -errno; } int lcrt_terminal_set_status(struct lcrt_terminal *lterminal, char *label_name, lcrt_terminal_status_t status) { struct lcrt_toolbar *ltoolbar = lterminal->parent->parent->w_toolbar; char buf[256]; gboolean sensitive; char *title = (label_name == NULL) ? lterminal->user->name : label_name; if (lterminal == NULL) return EINVAL; switch (status) { case LCRT_TERMINAL_DISCONNECT: case LCRT_TERMINAL_CHILD_EXIT: sprintf(buf, "%s", title); sensitive = TRUE; break; case LCRT_TERMINAL_CONNECTED: sprintf(buf, "%s", title); sensitive = FALSE; break; default: sprintf(buf, "%s", lterminal->user->name); sensitive = TRUE; break; } gtk_label_set_markup(GTK_LABEL(lterminal->label), buf); lterminal->connected = status; if (lterminal != lterminal->parent->current_terminal) goto out; gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_RECONNECT], sensitive); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_DISCONNECT], !sensitive); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_COPY], FALSE); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_PASTE], !sensitive); out: return LCRTE_OK; } void lcrt_destroy_terminal(struct lcrt_terminal *lterminal) { if (lterminal == NULL) return; debug_where(); if (lterminal->ops && lterminal->ops->disconnect) { lterminal->ops->disconnect(lterminal); } debug_where(); debug_print("scrolledwindow = %p\n", lterminal->scrolledwindow); gtk_widget_destroy(lterminal->scrolledwindow); debug_where(); if (lterminal->child_pid > 0) { kill(lterminal->child_pid, SIGKILL); lterminal->child_pid = 0; } debug_print("terminal_del = %p\n", lterminal); list_del(<erminal->brother); debug_where(); free(lterminal); } lcrt-1.1.2/src/cterminal.h0000664000175000017500000000236511750112142012320 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 15 Jan 2011 05:26:59 PM CST * File Name: cterminal.h * * Description: */ #ifndef _LCRT_CTERMINAL_H #define _LCRT_CTERMINAL_H #include #include #include #include void lcrt_terminal_on_commit(VteTerminal *widget, gchar *text, guint length, gpointer user_data); void lcrt_terminal_on_child_exited(VteTerminal *vteterminal, gpointer user_data); void lcrt_terminal_on_contents_changed(VteTerminal *vteterminal, gpointer user_data); void lcrt_terminal_on_selection_changed(VteTerminal *vteterminal, gpointer user_data); gboolean lcrt_terminal_on_label_title_button_press_event(GtkWidget*widget, GdkEventButton *event, gpointer user_data); gboolean lcrt_terminal_on_button_press_event(GtkWidget*widget, GdkEventButton *event, gpointer user_data); void lcrt_terminal_on_button_close_clicked(GtkButton *button, gpointer user_data); gboolean lcrt_terminal_has_selection(struct lcrt_window *lwindow); void lcrt_terminal_set_connected_status(struct lcrt_terminal *lterminal); #endif lcrt-1.1.2/src/cmkdir.c0000664000175000017500000000565211750112142011610 00000000000000/** * @file cmkdir.c *

License

* Copyright (c) 2012 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version $Id * @date Mon 30 Apr 2012 05:23:43 PM CST * * @brief */ //#define __LCRT_DEBUG__ #include #include #include #include "iconnect.h" #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "imkdir.h" #include "cmkdir.h" void lcrt_mkdir_on_okbutton_clicked(GtkButton *button, gpointer user_data) { debug_where(); struct lcrt_mkdir *lmkdir = (struct lcrt_mkdir *)user_data; struct lcrt_connect *lconnect = lmkdir->parent; struct lcrt_window *lwindow = lconnect->parent; const char *name = gtk_entry_get_text(GTK_ENTRY(lmkdir->entry_mkdir)); GtkTreeIter same; struct lcrtc_user *user; struct lcrt_user *luser = &lconnect->parent->u_config; GtkTreeIter *root, parent, child, grandson; GtkTreeStore *treestore; debug_where(); if (lcrt_connect_find_folder(lconnect, &same, name)) { lcrt_message_info(lconnect->c_connect, lmkdir->config.value[LCRT_M_ERROR]); return; } debug_where(); root = &lconnect->c_treeiter; treestore = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(lconnect->c_treeview))); if ((user = lcrtc_user_create()) == NULL) { /* * FIXME: There is no more memory, how can * we handle this exception ? */ return; } debug_where(); lcrtc_user_set_data( user, name, NULL, LCRT_PROTOCOL_UNKNOWN, NULL, NULL, NULL, -1, TRUE, name, 1 ); debug_where(); lcrtc_user_ref(user); lcrt_user_add(&lwindow->u_config, user); if (lcrt_window_get_auto_save(lwindow)) { lcrt_user_save_one(&lwindow->u_config, user); } debug_where(); gtk_tree_store_append(treestore, &parent, root); gtk_tree_store_set(treestore, &parent, 0, user->folder, 1, PANGO_WEIGHT_BOLD, -1); debug_where(); lcrt_mkdir_on_cancelbutton_clicked(NULL, user_data); debug_where(); } void lcrt_mkdir_on_cancelbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_mkdir *lmkdir = (struct lcrt_mkdir *)user_data; gtk_widget_destroy(lmkdir->dialog); lcrt_destroy_mkdir(lmkdir); } void lcrt_mkdir_on_name_changed(GtkEditable *editable, gpointer user_data) { struct lcrt_mkdir *lmkdir = (struct lcrt_mkdir *)user_data; if (gtk_entry_get_text_length(GTK_ENTRY(editable)) > 0) gtk_widget_set_sensitive(lmkdir->okbutton, TRUE); else gtk_widget_set_sensitive(lmkdir->okbutton, FALSE); } gboolean lcrt_mkdir_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { lcrt_mkdir_on_cancelbutton_clicked(NULL, user_data); return FALSE; } lcrt-1.1.2/src/list.h0000664000175000017500000001473611750112142011322 00000000000000#ifndef __LIST_H #define __LIST_H /* * Simple doubly linked list implementation. * * Some of the internal functions (“__xxxâ€) are useful when * manipulating whole lists rather than single entries, as * sometimes we already know the next/prev entries and we can * generate better code by using them directly rather than * using the generic single-entry routines. */ struct list_head { struct list_head *next, *prev; }; /* *init the head node,point to itself */ #define LIST_HEAD_INIT(name) { &(name), &(name) } #define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name) static inline void INIT_LIST_HEAD(struct list_head *list) { list->next = list; list->prev = list; } /* * Insert a new entry between two known consecutive entries. * * This is only for internal list manipulation where we know * the prev/next entries already! */ static inline void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next) { next->prev = new; new->next = next; new->prev = prev; prev->next = new; } /** * list_add – add a new entry * @new: new entry to be added * @head: list head to add it after * * Insert a new entry after the specified head. * This is good for implementing stacks. */ static inline void list_add(struct list_head *new, struct list_head *head) { __list_add(new, head, head->next); } /** * list_add_tail – add a new entry * @new: new entry to be added * @head: list head to add it before * * Insert a new entry before the specified head. * This is useful for implementing queues. */ static inline void list_add_tail(struct list_head *new, struct list_head *head) { __list_add(new, head->prev, head); } /* * Delete a list entry by making the prev/next entries * point to each other. * * This is only for internal list manipulation where we know * the prev/next entries already! */ static inline void __list_del(struct list_head *prev, struct list_head *next) { next->prev = prev; prev->next = next; } /** * list_del – deletes entry from list. * @entry: the element to delete from the list. * Note: list_empty on entry does not return true after this, the entry is in an undefined state. */ static inline void list_del(struct list_head *entry) { __list_del(entry->prev, entry->next); entry->next = (void *) 0; entry->prev = (void *) 0; } /** * list_del_init – deletes entry from list and reinitialize it. * @entry: the element to delete from the list. */ static inline void list_del_init(struct list_head *entry) { __list_del(entry->prev, entry->next); INIT_LIST_HEAD(entry); } /** * list_move – delete from one list and add as another’s head * @list: the entry to move * @head: the head that will precede our entry */ static inline void list_move(struct list_head *list, struct list_head *head) { __list_del(list->prev, list->next); list_add(list, head); } /** * list_move_tail – delete from one list and add as another’s tail * @list: the entry to move * @head: the head that will follow our entry */ static inline void list_move_tail(struct list_head *list, struct list_head *head) { __list_del(list->prev, list->next); list_add_tail(list, head); } /** * list_empty – tests whether a list is empty * @head: the list to test. */ static inline int list_empty(struct list_head *head) { return head->next == head; } static inline void __list_splice(struct list_head *list, struct list_head *head) { struct list_head *first = list->next; struct list_head *last = list->prev; struct list_head *at = head->next; first->prev = head; head->next = first; last->next = at; at->prev = last; } /** * list_splice – join two lists * @list: the new list to add. * @head: the place to add it in the first list. */ static inline void list_splice(struct list_head *list, struct list_head *head) { if (!list_empty(list)) __list_splice(list, head); } /** * list_splice_init – join two lists and reinitialise the emptied list. * @list: the new list to add. * @head: the place to add it in the first list. * * The list at @list is reinitialised */ static inline void list_splice_init(struct list_head *list, struct list_head *head) { if (!list_empty(list)) { __list_splice(list, head); INIT_LIST_HEAD(list); } } /** * list_entry – get the struct for this entry * @ptr: the &struct list_head pointer. * @type: the type of the struct this is embedded in. * @member: the name of the list_struct within the struct. */ #define list_entry(ptr, type, member) \ ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) /** * list_for_each - iterate over a list * @pos: the &struct list_head to use as a loop counter. * @head: the head for your list. */ #define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); \ pos = pos->next) /** * list_for_each_prev - iterate over a list backwards * @pos: the &struct list_head to use as a loop counter. * @head: the head for your list. */ #define list_for_each_prev(pos, head) \ for (pos = (head)->prev; pos != (head); \ pos = pos->prev) /* * list_for_each_safe - iterate over a list safe against removal of list entry * @pos: the &struct list_head to use as a loop counter. * @n: another &struct list_head to use as temporary storage * @head: the head for your list. */ #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next) /** * list_for_each_entry - iterate over list of given type * @pos: the type * to use as a loop counter. * @head: the head for your list. * @member: the name of the list_struct within the struct. */ #define list_for_each_entry(pos, head, member) \ for (pos = list_entry((head)->next, typeof(*pos), member); \ &pos->member != (head); \ pos = list_entry(pos->member.next, typeof(*pos), member)) /** * list_for_each_entry_safe – iterate over list of given type safe against removal of list entry * @pos: the type * to use as a loop counter. * @n: another type * to use as temporary storage * @head: the head for your list. * @member: the name of the list_struct within the struct. */ #define list_for_each_entry_safe(pos, n, head, member) \ for (pos = list_entry((head)->next, typeof(*pos), member), \ n = list_entry(pos->member.next, typeof(*pos), member); \ &pos->member != (head); \ pos = n, n = list_entry(n->member.next, typeof(*n), member)) #endif lcrt-1.1.2/src/cfind.h0000664000175000017500000000076011750361516011435 00000000000000#ifndef __LCRT_CRENAME_H__ #define __LCRT_CRENAME_H__ #include void lcrt_find_on_prev_button_clicked(GtkButton *button, gpointer user_data); void lcrt_find_on_next_button_clicked(GtkButton *button, gpointer user_data); void lcrt_find_on_cancelbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_find_on_name_changed(GtkEditable *editable, gpointer user_data); gboolean lcrt_find_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); #endif lcrt-1.1.2/src/protocol.c0000664000175000017500000000407111750112142012172 00000000000000/** * @file protocol.c *

License

* Copyright (c) 2011-2012 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version $Id * @date Wed 10 Aug 2011 01:30:13 PM CST * * @brief Here, list all the protocols we support. When you want to add a new * protocol, you should give a structure name with lcrt_protocol_XX_callbacks, * this structure contain some callback,like receive,connect,show and etc, you * should complete this functions. */ #include #include "protocol.h" #include "ssh.h" #include "telnet.h" #include "rlogin.h" #include "serial.h" #include "shell.h" #define LCRT_INSTALL_PROTOCOL(support_protocol) &lcrt_protocol_##support_protocol##_callbacks static struct lcrt_protocol_callback lcrt_protocol_null_callbacks = { .protocol = LCRT_PROTOCOL_UNKNOWN, .receive = NULL, .connect = NULL, .disconnect = NULL, .show = NULL, .create = NULL, .changed = NULL, }; /** * list the protocol we support */ static struct lcrt_protocol_callback *lcrt_protocol_callbacks[LCRT_PROTOCOL_UNKNOWN] = { LCRT_INSTALL_PROTOCOL(ssh2), LCRT_INSTALL_PROTOCOL(ssh1), LCRT_INSTALL_PROTOCOL(telnet), LCRT_INSTALL_PROTOCOL(telnet_ssl), LCRT_INSTALL_PROTOCOL(rlogin), LCRT_INSTALL_PROTOCOL(serial), LCRT_INSTALL_PROTOCOL(shell), /** Add new protocol after this */ [LCRT_PROTOCOL_UNKNOWN - 1] = LCRT_INSTALL_PROTOCOL(null) }; /** * @brief Get callbacks from protocol * @param protocol protocol list in lcrt_protocol_t * @return If found, return the callback matched, * otherwise,return unknown protocol callback. */ struct lcrt_protocol_callback *lcrt_protocol_get_callback(lcrt_protocol_t protocol) { int i; for (i = 0; i < LCRT_PROTOCOL_UNKNOWN; i++) { if (lcrt_protocol_callbacks[i]->protocol == protocol) return lcrt_protocol_callbacks[i]; } return lcrt_protocol_callbacks[LCRT_PROTOCOL_UNKNOWN - 1]; } lcrt-1.1.2/src/cqconnect.c0000664000175000017500000000577611750112142012323 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 22 Jan 2011 06:33:56 PM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include "iwindow.h" #include "cwindow.h" #include "iqconnect.h" #include "debug.h" #include "user.h" #include "message.h" #include "cqconnect.h" #include "iterminal.h" #include "ssh.h" #include "telnet.h" #include "rlogin.h" #include "serial.h" #include "shell.h" void lcrt_qconnect_on_button_connect_clicked(GtkButton *button, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; struct lcrt_window *lwindow = lqconnect->parent; struct lcrtc_user *user = NULL; debug_where(); if (lqconnect->ops && lqconnect->ops->create) { debug_where(); user = lqconnect->ops->create(lqconnect); } if (user) { lwindow->q_status = GTK_RESPONSE_OK; lcrt_qconnect_on_button_cancel_clicked(NULL, lqconnect); if (lcrt_window_get_auto_save(lwindow)) { lcrt_user_save_one(&lwindow->u_config, user); } debug_print("qconnecting...\n"); debug_where(); } else { fprintf(stderr, "connect faild...\n"); lwindow->q_status = GTK_RESPONSE_CANCEL; } return; } void lcrt_qconnect_on_entry_hostname_changed(GtkWidget *widget, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; if (gtk_entry_get_text_length(GTK_ENTRY(widget)) > 0) gtk_widget_set_sensitive(lqconnect->q_bt_connect, TRUE); else gtk_widget_set_sensitive(lqconnect->q_bt_connect, FALSE); } void lcrt_qconnect_on_button_cancel_clicked (GtkButton *button, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; debug_where(); gtk_widget_destroy(lqconnect->q_connect); lcrt_destroy_qconnect(lqconnect); } gboolean lcrt_qconnect_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) { lcrt_qconnect_on_button_cancel_clicked(NULL, user_data); return FALSE; } void lcrt_qconnect_on_protocol_changed(GtkComboBox *widget, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; const char *str_port[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_PORT}; const char *proto = gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget)); const char *str_proto[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_NAME}; lqconnect->nproto = lcrt_user_get_protocol(proto); debug_where(); debug_print("protocol: %s\n", str_proto[lqconnect->nproto]); if (lqconnect->q_vbox_spec) { gtk_widget_destroy(lqconnect->q_vbox_spec); lqconnect->q_vbox_spec = NULL; } lqconnect->ops = lcrt_protocol_get_callback(lqconnect->nproto); if (lqconnect->ops && lqconnect->ops->show) lqconnect->ops->show(lqconnect); } lcrt-1.1.2/src/cstatus.c0000664000175000017500000000323111750112142012014 00000000000000#include #include #include #include #include #include #include #include #include "iwindow.h" #include "cwindow.h" #include "istatus.h" #include "debug.h" #include "mkconfig.h" void lcrt_status_on_activate(GtkStatusIcon *status_icon, gpointer user_data) { struct lcrt_status *lstatus = (struct lcrt_status *)user_data; struct lcrt_window *lwindow = lstatus->parent; debug_where(); if (lwindow->hide == FALSE) gtk_widget_hide(lwindow->window); else { gtk_window_deiconify(GTK_WINDOW(lwindow->window)); gtk_widget_show(lwindow->window); } lwindow->hide = !lwindow->hide; } gboolean lcrt_status_on_button_press_event( GtkStatusIcon *status_icon, GdkEventButton *event, gpointer user_data) { struct lcrt_status *lstatus = (struct lcrt_status *)user_data; if (event->type == GDK_BUTTON_PRESS && event->button == BUTTON_RIGHT) { GtkWidget *popup_menu = lcrt_status_create_popup_menu(lstatus); gtk_menu_popup (GTK_MENU(popup_menu), NULL, NULL, NULL, NULL, event->button, event->time); debug_where(); } return FALSE; } void lcrt_status_on_show_window_active(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_status *lstatus = (struct lcrt_status *)user_data; if (lstatus->parent->hide == TRUE) lcrt_status_on_activate(NULL, lstatus); } void lcrt_status_on_quit_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_status *lstatus = (struct lcrt_status *)user_data; lcrt_window_on_delete_event(NULL, NULL, lstatus->parent); } lcrt-1.1.2/src/mkconfig.h0000664000175000017500000000244611751624073012153 00000000000000#ifndef __LCRT_CONFIG_H__ #define __LCRT_CONFIG_H__ #include #define LANGUAGE_DIR "etc/language" #define DEFAULT_LANGUAGE_DB "en_US.db" #define LANGUAGE_DB_NAME "language.db" #define LANGUAGE_DB_TABLE "language" #define LCRT_CONFIG_NAME_LEN 64 #define LCRT_CONFIG_VALUE_LEN 256 struct lcrt_config { char db_name[256]; char db_table[64]; sqlite3 *db; sqlite3_stmt *db_res; int db_rv; int db_columns; int (*open)(struct lcrt_config *config); int (*exec)(struct lcrt_config *config, const char *format, ...); int (*select)(struct lcrt_config *config, const char *format, ...); int (*get_row)(struct lcrt_config *config); const char *(*get_text_col)(struct lcrt_config *config, int column); int (*get_int_col)(struct lcrt_config *config, int column); int (*close)(struct lcrt_config *config); int (*changes)(struct lcrt_config *config); int (*finalize)(struct lcrt_config *config); }; int lcrt_config_load(); int lcrt_config_init(struct lcrt_config *config, const char *db_name, const char *db_table); const char *lcrt_config_get_local_dir(); const char *lcrt_config_get_language(); int lcrt_config_save_language(char *language_name); const struct lcrt_support_language *lcrt_get_languages(); #endif lcrt-1.1.2/src/lang.c0000664000175000017500000000052211751625564011271 00000000000000#include static struct lcrt_support_language lcrt_support_languages[LCRT_SUPPORT_LANGUAGE] = { {"English", "en_US.db"}, {"简体中文", "zh_CN.db"}, {"Deutsch", "de_DE.db"}, }; const struct lcrt_support_language *lcrt_get_languages() { return (const struct lcrt_support_language *)lcrt_support_languages; } lcrt-1.1.2/src/chelp.c0000664000175000017500000001021311750112142011417 00000000000000#include #include #include #include #include #include #include #include #include #include "message.h" #include "debug.h" #include "ihelp.h" #include "iabout.h" #include "mkconfig.h" #include "foperate.h" #ifdef HAVE_CONFIG_H #include "config.h" #else #error "missing config.h" #endif #define DOWNLOAD_PAGE "http://lcrt.googlecode.com/files" static gboolean open_url(GtkWindow * parent, const char *uri, guint32 user_time, GError ** error) { GdkScreen *screen; if (parent) screen = gtk_widget_get_screen(GTK_WIDGET(parent)); else screen = gdk_screen_get_default(); return gtk_show_uri(screen, uri, user_time, error); } void lcrt_help_show_help(const char *topic, struct lcrt_help *lhelp) { char *uri = NULL, *url; int i; char help_path[3][256]; char language[32], *p; strcpy(language, basename((char *)lcrt_config_get_language())); p = strchr(language, '.'); if (p) *p = '\0'; snprintf(help_path[0], 256, LCRT_HELP_DIR"/%s/lcrt.xml", language); snprintf(help_path[1], 256, "%s/help/%s/lcrt.xml", getenv("PWD"), language); snprintf(help_path[2], 256, "%s/../help/%s/lcrt.xml", getenv("PWD"), language); for (i = 0; i < 3; i++) { if (access(help_path[i], F_OK | R_OK) == 0) { uri = help_path[i]; break; } } if (uri == NULL) { lcrt_message_error(lhelp->parent->parent->window, lhelp->config.value[LCRT_H_MISSING_DOC]); return; } if (topic) { url = g_strdup_printf("ghelp://%s?%s", uri, topic); } else { url = g_strdup_printf("ghelp://%s", uri); } open_url(GTK_WINDOW(lhelp->parent->parent->window), url, gtk_get_current_event_time(), NULL); g_free(url); } void lcrt_help_on_help_activate(GtkMenuItem * menuitem, gpointer user_data) { struct lcrt_help *lhelp = (struct lcrt_help *)user_data; lcrt_help_show_help(NULL, lhelp); } void lcrt_help_on_home_page_activate(GtkMenuItem * menuitem, gpointer user_data) { struct lcrt_help *lhelp = (struct lcrt_help *)user_data; open_url(GTK_WINDOW(lhelp->parent->parent->window), "http://code.google.com/p/lcrt", gtk_get_current_event_time(), NULL); } gboolean lcrt_help_check_update(gpointer user_data) { struct lcrt_help *lhelp = (struct lcrt_help *)user_data; int m,n,t; char command[256] = "wget "DOWNLOAD_PAGE"/version.h -O /tmp/version.h >/dev/null 2>&1"; int fd; system(command); if ((fd = open("/tmp/version.h", O_RDONLY)) == -1) { return FALSE; } memset(command, '\0', 256); read(fd, command, 32); close(fd); lcrt_fremove("/tmp/version.h"); if (sscanf(command, "%d.%d.%d", &m, &n, &t) != 3) { lcrt_message_error(lhelp->parent->parent->window, lhelp->config.value[LCRT_H_CHECK_UPDATE_ERR]); return FALSE; } sprintf(command, "%d.%d.%d", m, n, t); if (strcmp(command, PACKAGE_VERSION) <= 0) { lcrt_message_info(lhelp->parent->parent->window, lhelp->config.value[LCRT_H_NO_NEW_VERSION]); } else { gtk_show_about_dialog(GTK_WINDOW(lhelp->parent->parent->window), "version", command, "comments", lhelp->config.value[LCRT_H_NEW_VERSION], "website", DOWNLOAD_PAGE, NULL); #if 0 lcrt_message_info(lhelp->parent->parent->window, lhelp->config.value[LCRT_H_NEW_VERSION], command, DOWNLOAD_PAGE); #endif } return FALSE; } void lcrt_help_on_download_page_activate(GtkMenuItem * menuitem, gpointer user_data) { #if 0 struct lcrt_help *lhelp = (struct lcrt_help *)user_data; open_url(GTK_WINDOW(lhelp->parent->parent->window), "http://code.google.com/p/lcrt/downloads/list", gtk_get_current_event_time(), NULL); #else gtk_timeout_add(1, lcrt_help_check_update, user_data); #endif } void h_on_about_activate(GtkMenuItem * menuitem, gpointer user_data) { lcrt_abount_dialog(user_data); } lcrt-1.1.2/src/imenubar.c0000664000175000017500000000430211750112142012130 00000000000000#include #include #include #include #include #include #include #include "iwindow.h" #include "imenubar.h" #include "ifile.h" #include "iedit.h" #include "iview.h" #include "ioptions.h" #include "ihelp.h" #include "debug.h" struct lcrt_menubar * lcrt_create_menubar(struct lcrt_window *parent) { debug_where(); struct lcrt_menubar *lmenubar; GtkWidget *menubar; lmenubar = (struct lcrt_menubar *)calloc(1, sizeof(struct lcrt_menubar)); if (lmenubar == NULL) return NULL; lmenubar->parent = parent; menubar = gtk_menu_bar_new(); lmenubar->menubar = menubar; gtk_widget_show (menubar); debug_where(); lmenubar->m_file = lcrt_file_create_menuitem(lmenubar); assert(lmenubar->m_file); gtk_container_add(GTK_CONTAINER(menubar), lmenubar->m_file->f_menuitem); debug_where(); lmenubar->m_edit = lcrt_edit_create_menuitem(lmenubar, FALSE); assert(lmenubar->m_edit); gtk_container_add(GTK_CONTAINER(menubar), lmenubar->m_edit->e_menuitem); debug_where(); lmenubar->m_view = lcrt_view_create_menuitem(lmenubar); assert(lmenubar->m_view); gtk_container_add(GTK_CONTAINER(menubar), lmenubar->m_view->v_menuitem); debug_where(); lmenubar->m_options = lcrt_options_create_menuitem(lmenubar); assert(lmenubar->m_options); gtk_container_add(GTK_CONTAINER(menubar), lmenubar->m_options->o_menuitem); debug_where(); lmenubar->m_help = lcrt_help_create_menuitem(lmenubar); assert(lmenubar->m_help); gtk_container_add(GTK_CONTAINER(menubar), lmenubar->m_help->h_menuitem); return lmenubar; } void lcrt_destroy_menubar(struct lcrt_menubar *lmenubar) { debug_where(); if (lmenubar == NULL) return; lcrt_file_destroy_menuitem(lmenubar->m_file); lmenubar->m_file = NULL; lcrt_edit_destroy_menuitem(lmenubar->m_edit); lmenubar->m_edit = NULL; lcrt_view_destroy_menuitem(lmenubar->m_view); lmenubar->m_view = NULL; lcrt_options_destroy_menuitem(lmenubar->m_options); lmenubar->m_options = NULL; lcrt_help_destroy_menuitem(lmenubar->m_help); lmenubar->m_help = NULL; free(lmenubar); } lcrt-1.1.2/src/cstatusbar.c0000664000175000017500000000221611750361323012512 00000000000000#include #include "istatusbar.h" #include "debug.h" void lcrt_statusbar_set_message(struct lcrt_statusbar *lstatusbar, const char *format, ...) { unsigned int id; char buffer[1024]; va_list args; if (lstatusbar == NULL) return; va_start(args, format); vsnprintf(buffer, sizeof(buffer), format, args); va_end(args); id = gtk_statusbar_get_context_id(GTK_STATUSBAR(lstatusbar->statusbar), buffer); gtk_statusbar_push(GTK_STATUSBAR(lstatusbar->statusbar), id, buffer); } void lcrt_statusbar_set_user(struct lcrt_statusbar *lstatusbar, struct lcrtc_user *user) { char *proto[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_NAME}; if (user == NULL) return; if (!user->is_folder) lcrt_statusbar_set_message(lstatusbar, "[%s] %s@%s %d", proto[user->protocol], user->username, user->hostname, user->port); else lcrt_statusbar_set_message(lstatusbar, "[FOLDER]: %s", user->folder); } lcrt-1.1.2/src/clock.h0000664000175000017500000000051011750112142011423 00000000000000#ifndef __LCRT_CLOCK_H__ #define __LCRT_CLOCK_H__ #include void lcrt_lock_on_cancelbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_lock_on_okbutton_clicked(GtkButton *button, gpointer user_data); gboolean lcrt_lock_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data); #endif lcrt-1.1.2/src/ilogin.h0000664000175000017500000000330711750112142011620 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:35 AM CST * * * Description: */ #ifndef __LCRT_ILOGIN_H__ #define __LCRT_ILOGIN_H__ #include #include #include "mkconfig.h" #define LCRT_ILOGIN_TABLE "ilogin" enum { LCRT_L_LOGIN, LCRT_L_INFO, LCRT_L_AGAIN, LCRT_L_USERNAME, LCRT_L_PASSWORD, LCRT_L_REMEMBER, LCRT_L_OKBUTTON, LCRT_L_CANCELBUTTON, LCRT_L_ERR_MSG, LCRT_L_NUMBER }; #define LCRT_L_NAME \ "l_login", \ "l_info", \ "l_again", \ "l_username", \ "l_password", \ "l_remember", \ "l_okbutton", \ "l_cancelbutton", \ "l_err_msg" #define LCRT_L_VALUE \ "Login", \ "Input username & password:",\ "Username or password error:", \ "Username:", \ "Password:", \ "Remember ?", \ "OK", \ "Cancel", \ "There is no memory to create dialog" #define LCRT_L_SHORTCUT \ {0, 0} struct lcrtc_login { struct lcrt_config db; const char *name[LCRT_L_NUMBER]; char value[LCRT_L_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_L_NUMBER][2]; }; struct lcrt_login { struct lcrt_terminal *parent; GtkWidget *login; GtkWidget *l_username; GtkWidget *l_password; GtkWidget *l_remember; struct lcrtc_login config; const char *(*get_db)(struct lcrt_login *llogin); const char *(*get_tb)(struct lcrt_login *llogin); }; struct lcrt_login *lcrt_create_login(struct lcrt_terminal *parent, int again); void lcrt_destroy_login(struct lcrt_login *llogin); #endif lcrt-1.1.2/src/itoolbar.c0000664000175000017500000001315111750112142012143 00000000000000#include #include #include #include #include #include #include #include "support.h" #include "iwindow.h" #include "imenubar.h" #include "debug.h" #include "mkconfig.h" #include "itoolbar.h" #include "ctoolbar.h" #include "cfile.h" int lcrt_toolbar_create_config(struct lcrt_toolbar *ltoolbar); int lcrt_toolbar_load_config(struct lcrt_toolbar *ltoolbar); int lcrt_toolbar_init_config(struct lcrt_toolbar *ltoolbar); int lcrt_toolbar_create_toolitem(struct lcrt_toolbar *ltoolbar); struct lcrt_toolbar *lcrt_create_toolbar(struct lcrt_window *parent) { struct lcrt_toolbar *ltoolbar; GtkWidget *toolbar; //GtkAccelGroup *accel_group = parent->w_accel; ltoolbar =(struct lcrt_toolbar *)malloc(sizeof(struct lcrt_toolbar)); assert(ltoolbar); lcrt_toolbar_init_config(ltoolbar); lcrt_toolbar_load_config(ltoolbar); ltoolbar->parent = parent; toolbar = gtk_toolbar_new (); ltoolbar->toolbar = toolbar; gtk_widget_set_size_request (toolbar, -1, 30); gtk_container_set_border_width (GTK_CONTAINER (toolbar), 0); //gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar), GTK_ORIENTATION_HORIZONTAL); gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH); gtk_widget_show (toolbar); lcrt_toolbar_create_toolitem(ltoolbar); return ltoolbar; } void lcrt_destroy_toolbar(struct lcrt_toolbar *ltoolbar) { debug_where(); gtk_widget_destroy(ltoolbar->toolbar); if (ltoolbar) free(ltoolbar); } int lcrt_toolbar_create_toolitem(struct lcrt_toolbar *ltoolbar) { GtkWidget *icon; int i; static const char *toolitem_icon[LCRT_B_NUMBER] = {LCRT_B_ICONS}; typedef void (*callbacks)(GtkWidget *widget, gpointer data); callbacks callback[LCRT_B_NUMBER] = {LCRT_B_CALLBACK}; assert(ltoolbar); for (i = 0; i < LCRT_B_NUMBER; i++) { icon = create_pixmap (NULL, toolitem_icon[i]); ltoolbar->toolitem[i] = gtk_toolbar_append_element ( GTK_TOOLBAR (ltoolbar->toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, NULL, ltoolbar->config.value[i], NULL, icon, GTK_SIGNAL_FUNC (callback[i]), ltoolbar); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (ltoolbar->toolitem[i]), TRUE); GTK_WIDGET_UNSET_FLAGS (ltoolbar->toolitem[i], GTK_CAN_FOCUS); if (i == 2 || i == 4 || i == 6) gtk_toolbar_append_space (GTK_TOOLBAR (ltoolbar->toolbar)); } gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_RECONNECT], FALSE); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_DISCONNECT], FALSE); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_COPY], FALSE); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_PASTE], FALSE); return LCRTE_OK; } static const char *lcrt_toolbar_get_db_name(struct lcrt_toolbar *ltoolbar) { return ltoolbar == NULL ? NULL : ltoolbar->config.db.db_name; } static const char *lcrt_toolbar_get_tb_name(struct lcrt_toolbar *ltoolbar) { return ltoolbar == NULL ? NULL : ltoolbar->config.db.db_table; } int lcrt_toolbar_init_config(struct lcrt_toolbar *ltoolbar) { char db_name[256]; int i; static char *name[LCRT_B_NUMBER] = {LCRT_B_NAME}; static char *value[LCRT_B_NUMBER] = {LCRT_B_VALUE}; assert(ltoolbar); memset(<oolbar->config, 0, sizeof(struct lcrtc_toolbar)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(<oolbar->config.db, db_name, LCRT_ITOOLBAR_TABLE); for (i = 0; i < LCRT_B_NUMBER; i++) { ltoolbar->config.name[i] = name[i]; strncpy(ltoolbar->config.value[i], value[i], sizeof(ltoolbar->config.value[i])); } ltoolbar->get_db = lcrt_toolbar_get_db_name; ltoolbar->get_tb = lcrt_toolbar_get_tb_name; return 0; } int lcrt_toolbar_load_config(struct lcrt_toolbar *ltoolbar) { int rv, i; assert(ltoolbar); rv = ltoolbar->config.db.select(<oolbar->config.db, "SELECT * FROM %s", ltoolbar->get_tb(ltoolbar)); if (rv == LCRTE_NO_TABLE) { //lcrt_toolbar_create_config(ltoolbar); return LCRTE_NO_CONFIG; } for (i = 0; i < LCRT_B_NUMBER && rv == LCRTE_OK; i++) { strncpy(ltoolbar->config.value[i], ltoolbar->config.db.get_text_col(<oolbar->config.db, 1), sizeof(ltoolbar->config.value[i])); rv = ltoolbar->config.db.get_row(<oolbar->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)ltoolbar->get_db(ltoolbar)), ltoolbar->get_tb(ltoolbar), ltoolbar->config.name[i], ltoolbar->config.value[i]); } return rv; } int lcrt_toolbar_create_config(struct lcrt_toolbar *ltoolbar) { int i; if (ltoolbar == NULL) return EINVAL; ltoolbar->config.db.exec(<oolbar->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255))", ltoolbar->get_tb(ltoolbar)); for (i = 0; i < LCRT_B_NUMBER; i++) { ltoolbar->config.db.exec(<oolbar->config.db, "INSERT INTO %s VALUES('%s', '%s')", ltoolbar->get_tb(ltoolbar), ltoolbar->config.name[i], ltoolbar->config.value[i]); } ltoolbar->config.db.close(<oolbar->config.db); return 0; } lcrt-1.1.2/src/rlogin.c0000664000175000017500000001125411750112142011624 00000000000000/* * Copyright (c) 2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 07 Aug 2011 05:54:28 PM CST * File Name : rlogin.c * * Description: */ #include #include #include "iterminal.h" #include "iqconnect.h" #include "cqconnect.h" #include "user.h" #include "debug.h" #include "rlogin.h" struct lcrt_rlogin_if { GtkWidget *hostname; GtkWidget *username; }; static void lcrt_rlogin_receive(struct lcrt_terminal *lterminal) { } static int lcrt_rlogin_connect(struct lcrt_terminal *lterminal) { } static void lcrt_rlogin_disconnect(struct lcrt_terminal *lterminal) { } static void lcrt_rlogin_show(struct lcrt_qconnect *lqconnect) { GtkWidget *vbox; GtkWidget *vbox_spec; GtkWidget *hbox2; GtkWidget *label_hostname; GtkWidget *entry_hostname; GtkWidget *hbox4; GtkWidget *label_username; GtkWidget *entry_username; GtkWidget *hbox3; struct lcrt_window *parent; static struct lcrt_rlogin_if slrlogin, *lrlogin = &slrlogin; memset(lrlogin, 0, sizeof(struct lcrt_rlogin_if)); lqconnect->private_data = lrlogin; parent = lqconnect->parent; vbox = GTK_DIALOG (lqconnect->q_connect)->vbox; vbox_spec = gtk_vbox_new (FALSE, 0); lqconnect->q_vbox_spec = vbox_spec; gtk_widget_show (vbox_spec); gtk_box_pack_start (GTK_BOX (vbox), vbox_spec, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), vbox_spec, 1); gtk_widget_set_size_request (vbox_spec, -1, 210); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox2, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox2, -1, 25); label_hostname = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_HOSTNAME]); gtk_widget_show (label_hostname); gtk_box_pack_start (GTK_BOX (hbox2), label_hostname, FALSE, FALSE, 0); gtk_widget_set_size_request (label_hostname, 90, 30); gtk_misc_set_alignment (GTK_MISC (label_hostname), 0, 0.5); entry_hostname = gtk_entry_new_with_max_length(HOSTNAME_LEN); lrlogin->hostname = entry_hostname; gtk_widget_show (entry_hostname); gtk_box_pack_start (GTK_BOX (hbox2), entry_hostname, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_hostname, 220, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_hostname), 9679); g_signal_connect ((gpointer) entry_hostname, "changed", G_CALLBACK (lcrt_qconnect_on_entry_hostname_changed), lqconnect); hbox4 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox4); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox4, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox4, -1, 30); label_username = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_USERNAME]); gtk_widget_show (label_username); gtk_box_pack_start (GTK_BOX (hbox4), label_username, FALSE, FALSE, 0); gtk_widget_set_size_request (label_username, 90, 30); gtk_misc_set_alignment (GTK_MISC (label_username), 0, 0.5); entry_username = gtk_entry_new_with_max_length(USERNAME_LEN); lrlogin->username = entry_username; gtk_widget_show (entry_username); gtk_box_pack_start (GTK_BOX (hbox4), entry_username, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_username, 220, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_username), 9679); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox3, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox3, -1, 135); if (lqconnect->flag == LCRT_QCONNECT_SESSION_OPTION) { struct lcrtc_user *user; if ((user = lcrt_user_find_by_name(&parent->u_config, lqconnect->uname)) != NULL) { gtk_window_set_focus(GTK_WINDOW(lqconnect->q_connect), lrlogin->hostname); gtk_entry_set_text(GTK_ENTRY(lrlogin->hostname), user->hostname); gtk_entry_set_text(GTK_ENTRY(lrlogin->username), user->username); gtk_entry_set_text(GTK_ENTRY(lqconnect->q_et_default_command), user->command); } } else { gtk_window_set_focus(GTK_WINDOW(lqconnect->q_connect), lrlogin->hostname); gtk_widget_set_sensitive(lqconnect->q_bt_connect, FALSE); } } static struct lcrtc_user *lcrt_rlogin_create(struct lcrt_qconnect *lqconnect) { } struct lcrt_protocol_callback lcrt_protocol_rlogin_callbacks = { .protocol = LCRT_PROTOCOL_RLOGIN, .receive = lcrt_rlogin_receive, .connect = lcrt_rlogin_connect, .disconnect = lcrt_rlogin_disconnect, .show = lcrt_rlogin_show, .create = lcrt_rlogin_create, .changed = NULL, }; lcrt-1.1.2/src/ihelp.c0000664000175000017500000001440411750112142011433 00000000000000#include #include #include #include #include #include #include #include "iwindow.h" #include "imenubar.h" #include "debug.h" #include "mkconfig.h" #include "ihelp.h" #include "chelp.h" int lcrt_help_create_config(struct lcrt_help *lhelp); int lcrt_help_load_config(struct lcrt_help *lhelp); int lcrt_help_init_config(struct lcrt_help *lhelp); struct lcrt_help *lcrt_help_create_menuitem(struct lcrt_menubar *parent) { struct lcrt_help *lhelp; GtkWidget *h_menuitem; GtkWidget *h_menuitem_menu; GtkWidget *h_help; GtkWidget *h_home_page; GtkWidget *h_download_page; GtkWidget *h_separator_1; GtkWidget *h_about; GtkAccelGroup *accel_group = parent->parent->w_accel; lhelp =(struct lcrt_help *)calloc(1, sizeof(struct lcrt_help)); assert(lhelp); lcrt_help_init_config(lhelp); lcrt_help_load_config(lhelp); lhelp->parent = parent; h_menuitem = gtk_menu_item_new_with_mnemonic (lhelp->config.value[LCRT_H_MENUITEM]); lhelp->h_menuitem = h_menuitem; gtk_widget_show (h_menuitem); h_menuitem_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (h_menuitem), h_menuitem_menu); h_help = gtk_menu_item_new_with_mnemonic (lhelp->config.value[LCRT_H_HELP]); lhelp->h_help = h_help; gtk_widget_show (h_help); gtk_container_add (GTK_CONTAINER (h_menuitem_menu), h_help); gtk_widget_add_accelerator (h_help, "activate", accel_group, lhelp->config.shortcut[LCRT_H_HELP][0], (GdkModifierType) lhelp->config.shortcut[LCRT_H_HELP][1], GTK_ACCEL_VISIBLE); g_signal_connect ((gpointer) h_help, "activate", G_CALLBACK (lcrt_help_on_help_activate), lhelp); h_home_page = gtk_menu_item_new_with_mnemonic (lhelp->config.value[LCRT_H_HOME_PAGE]); lhelp->h_home_page = h_home_page; gtk_widget_show (h_home_page); gtk_container_add (GTK_CONTAINER (h_menuitem_menu), h_home_page); g_signal_connect ((gpointer) h_home_page, "activate", G_CALLBACK (lcrt_help_on_home_page_activate), lhelp); h_download_page = gtk_menu_item_new_with_mnemonic (lhelp->config.value[LCRT_H_DOWNLOAD_PAGE]); lhelp->h_download_page = h_download_page; gtk_widget_show (h_download_page); gtk_container_add (GTK_CONTAINER (h_menuitem_menu), h_download_page); g_signal_connect ((gpointer) h_download_page, "activate", G_CALLBACK (lcrt_help_on_download_page_activate), lhelp); h_separator_1 = gtk_separator_menu_item_new (); gtk_widget_show (h_separator_1); gtk_container_add (GTK_CONTAINER (h_menuitem_menu), h_separator_1); gtk_widget_set_sensitive (h_separator_1, FALSE); h_about = gtk_menu_item_new_with_mnemonic (lhelp->config.value[LCRT_H_ABOUT]); lhelp->h_about = h_about; gtk_widget_show (h_about); gtk_container_add (GTK_CONTAINER (h_menuitem_menu), h_about); g_signal_connect ((gpointer) h_about, "activate", G_CALLBACK (h_on_about_activate), lhelp); return lhelp; } void lcrt_help_destroy_menuitem(struct lcrt_help *lhelp) { gtk_widget_destroy(lhelp->h_menuitem); if (lhelp) free(lhelp); } static const char *lcrt_help_get_db_name(struct lcrt_help *lhelp) { return lhelp == NULL ? NULL : lhelp->config.db.db_name; } static const char *lcrt_help_get_tb_name(struct lcrt_help *lhelp) { return lhelp == NULL ? NULL : lhelp->config.db.db_table; } int lcrt_help_init_config(struct lcrt_help *lhelp) { char db_name[256]; int i; static char *name[LCRT_H_NUMBER] = {LCRT_H_NAME}; static char *value[LCRT_H_NUMBER] = {LCRT_H_VALUE}; static int shortcut[LCRT_H_NUMBER][2] = {LCRT_H_SHORTCUT}; assert(lhelp); memset(&lhelp->config, 0, sizeof(struct lcrtc_help)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lhelp->config.db, db_name, LCRT_IHELP_TABLE); for (i = 0; i < LCRT_H_NUMBER; i++) { lhelp->config.name[i] = name[i]; strncpy(lhelp->config.value[i], value[i], sizeof(lhelp->config.value[i])); lhelp->config.shortcut[i][0] = shortcut[i][0]; lhelp->config.shortcut[i][1] = shortcut[i][1]; } lhelp->get_db = lcrt_help_get_db_name; lhelp->get_tb = lcrt_help_get_tb_name; return 0; } int lcrt_help_load_config(struct lcrt_help *lhelp) { int rv, i; assert(lhelp); rv = lhelp->config.db.select(&lhelp->config.db, "SELECT * FROM %s", lhelp->get_tb(lhelp)); if (rv == LCRTE_NO_TABLE) { //lcrt_help_create_config(lhelp); return LCRTE_NO_CONFIG; } for (i = 0; i < LCRT_H_NUMBER && rv == LCRTE_OK; i++) { strncpy(lhelp->config.value[i], lhelp->config.db.get_text_col(&lhelp->config.db, 1), sizeof(lhelp->config.value[i])); rv = lhelp->config.db.get_row(&lhelp->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)lhelp->get_db(lhelp)), lhelp->get_tb(lhelp), lhelp->config.name[i], lhelp->config.value[i], lhelp->config.shortcut[i][0], lhelp->config.shortcut[i][1]); } return rv; } int lcrt_help_create_config(struct lcrt_help *lhelp) { int i; assert(lhelp); lhelp->config.db.exec(&lhelp->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255), \ shortcut INTEGER, \ shortcut_mask INTEGER)", lhelp->get_tb(lhelp)); for (i = 0; i < LCRT_H_NUMBER; i++) { lhelp->config.db.exec(&lhelp->config.db, "INSERT INTO %s VALUES('%s', '%s', %d, %d)", lhelp->get_tb(lhelp), lhelp->config.name[i], lhelp->config.value[i], lhelp->config.shortcut[i][0], lhelp->config.shortcut[i][1]); } lhelp->config.db.close(&lhelp->config.db); return 0; } lcrt-1.1.2/src/ilock.c0000664000175000017500000002361511750112142011437 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:22 AM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "ilock.h" #include "clock.h" int lcrt_lock_create_config(struct lcrt_lock *llock); int lcrt_lock_load_config(struct lcrt_lock *llock); int lcrt_lock_init_config(struct lcrt_lock *llock); struct lcrt_lock *lcrt_create_dialog_lock(struct lcrt_terminal *parent) { struct lcrt_lock *llock; GtkWidget *dialog_lock; GtkWidget *dialog_vbox; GtkWidget *vbox; GtkWidget *label_tip; GtkWidget *hbox1; GtkWidget *label_password; GtkWidget *entry_password; GtkWidget *hbox2; GtkWidget *label_repassword; GtkWidget *entry_repassword; GtkWidget *dialog_action_area; GtkWidget *cancelbutton; GtkWidget *alignment1; GtkWidget *hbox3; GtkWidget *image1; GtkWidget *label4; GtkWidget *okbutton; GtkWidget *alignment2; GtkWidget *hbox4; GtkWidget *image2; GtkWidget *label5; GtkAccelGroup *accel_group; int title, tip; title = parent->locked == FALSE ? LCRT_K_LOCK_TITLE : LCRT_K_UNLOCK_TITLE; tip = parent->locked == FALSE ? LCRT_K_LOCK_TIP : LCRT_K_UNLOCK_TIP; accel_group = gtk_accel_group_new (); llock =(struct lcrt_lock *)calloc(1, sizeof(struct lcrt_lock)); if (llock == NULL) goto err; lcrt_lock_init_config(llock); lcrt_lock_load_config(llock); llock->parent = parent; dialog_lock = gtk_dialog_new(); llock->dialog = dialog_lock; gtk_widget_set_size_request(dialog_lock, 300, 155); gtk_window_set_transient_for(GTK_WINDOW(dialog_lock), GTK_WINDOW(llock->parent->parent->parent->window)); gtk_window_set_title (GTK_WINDOW (dialog_lock), llock->config.value[title]); gtk_window_set_position (GTK_WINDOW (dialog_lock), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (dialog_lock), FALSE); gtk_window_set_type_hint (GTK_WINDOW (dialog_lock), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (dialog_lock), FALSE); g_signal_connect ((gpointer) dialog_lock, "delete_event", G_CALLBACK (lcrt_lock_on_window_delete), llock); dialog_vbox = GTK_DIALOG(dialog_lock)->vbox; gtk_widget_show(dialog_vbox); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dialog_vbox), vbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 2); label_tip = gtk_label_new(llock->config.value[tip]); gtk_widget_show(label_tip); gtk_box_pack_start(GTK_BOX(vbox), label_tip, FALSE, FALSE, 0); gtk_widget_set_size_request(label_tip, 285, 48); gtk_misc_set_alignment(GTK_MISC(label_tip), 0, 0.5); hbox1 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox), hbox1, TRUE, TRUE, 0); label_password = gtk_label_new(llock->config.value[LCRT_K_PASSWORD]); gtk_widget_show(label_password); gtk_box_pack_start(GTK_BOX(hbox1), label_password, FALSE, FALSE, 0); gtk_widget_set_size_request(label_password, 115, -1); gtk_misc_set_alignment(GTK_MISC(label_password), 0.01, 0.5); entry_password = gtk_entry_new(); llock->entry_password = entry_password; gtk_widget_show(entry_password); gtk_box_pack_start(GTK_BOX(hbox1), entry_password, TRUE, TRUE, 0); gtk_entry_set_visibility(GTK_ENTRY(entry_password), FALSE); gtk_entry_set_invisible_char(GTK_ENTRY(entry_password), 9679); gtk_entry_set_max_length (GTK_ENTRY (entry_password), LCRT_PASSWORD_LEN); hbox2 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox2); gtk_box_pack_start(GTK_BOX(vbox), hbox2, TRUE, TRUE, 0); if (parent->locked == FALSE) { label_repassword = gtk_label_new(llock->config.value[LCRT_K_REPASSWORD]); gtk_widget_show(label_repassword); gtk_box_pack_start(GTK_BOX(hbox2), label_repassword, FALSE, FALSE, 0); gtk_widget_set_size_request(label_repassword, 115, -1); gtk_misc_set_alignment(GTK_MISC(label_repassword), 0.01, 0.5); entry_repassword = gtk_entry_new(); llock->entry_repassword = entry_repassword; gtk_widget_show(entry_repassword); gtk_box_pack_start(GTK_BOX(hbox2), entry_repassword, TRUE, TRUE, 0); gtk_entry_set_visibility(GTK_ENTRY(entry_repassword), FALSE); gtk_entry_set_invisible_char(GTK_ENTRY(entry_repassword), 9679); gtk_entry_set_max_length (GTK_ENTRY (entry_repassword), LCRT_PASSWORD_LEN); } dialog_action_area = GTK_DIALOG(dialog_lock)->action_area; gtk_widget_show(dialog_action_area); gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area), GTK_BUTTONBOX_END); cancelbutton = gtk_button_new(); gtk_widget_show(cancelbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_lock), cancelbutton, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS(cancelbutton, GTK_CAN_DEFAULT); alignment1 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment1); gtk_container_add(GTK_CONTAINER(cancelbutton), alignment1); hbox3 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox3); gtk_container_add(GTK_CONTAINER(alignment1), hbox3); image1 = gtk_image_new_from_stock("gtk-cancel", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image1); gtk_box_pack_start(GTK_BOX(hbox3), image1, FALSE, FALSE, 0); label4 = gtk_label_new_with_mnemonic(llock->config.value[LCRT_K_CANCEL]); gtk_widget_show(label4); gtk_box_pack_start(GTK_BOX(hbox3), label4, FALSE, FALSE, 0); okbutton = gtk_button_new(); gtk_widget_show(okbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_lock), okbutton, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS(okbutton, GTK_CAN_DEFAULT); gtk_widget_add_accelerator(okbutton, "clicked", accel_group, GDK_Return, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); alignment2 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment2); gtk_container_add(GTK_CONTAINER(okbutton), alignment2); hbox4 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox4); gtk_container_add(GTK_CONTAINER(alignment2), hbox4); image2 = gtk_image_new_from_stock("gtk-ok", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image2); gtk_box_pack_start(GTK_BOX(hbox4), image2, FALSE, FALSE, 0); label5 = gtk_label_new_with_mnemonic(llock->config.value[LCRT_K_OK]); gtk_widget_show(label5); gtk_box_pack_start(GTK_BOX(hbox4), label5, FALSE, FALSE, 0); g_signal_connect((gpointer)cancelbutton, "clicked", G_CALLBACK(lcrt_lock_on_cancelbutton_clicked), llock); g_signal_connect((gpointer)okbutton, "clicked", G_CALLBACK(lcrt_lock_on_okbutton_clicked), llock); gtk_dialog_run(GTK_DIALOG(dialog_lock)); return llock; err: lcrt_message_error(parent->parent->parent->window, llock->config.value[LCRT_K_ERR_MSG]); return NULL; } void lcrt_destroy_lock(struct lcrt_lock *llock) { if (llock) free(llock); } static const char *lcrt_lock_get_db_name(struct lcrt_lock *llock) { return llock->config.db.db_name; } static const char *lcrt_lock_get_tb_name(struct lcrt_lock *llock) { return llock->config.db.db_table; } int lcrt_lock_init_config(struct lcrt_lock *llock) { char db_name[256]; int i; static char *name[LCRT_K_NUMBER] = {LCRT_K_NAME}; static char *value[LCRT_K_NUMBER] = {LCRT_K_VALUE}; assert(llock); memset(&llock->config, 0, sizeof(struct lcrtc_lock)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&llock->config.db, db_name, LCRT_ILOCK_TABLE); for (i = 0; i < LCRT_K_NUMBER; i++) { llock->config.name[i] = name[i]; strncpy(llock->config.value[i], value[i], sizeof(llock->config.value[i])); } llock->get_db = lcrt_lock_get_db_name; llock->get_tb = lcrt_lock_get_tb_name; return 0; } int lcrt_lock_load_config(struct lcrt_lock *llock) { int rv, i; assert(llock); rv = llock->config.db.select(&llock->config.db, "SELECT * FROM %s", llock->get_tb(llock)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_lock_create_config(llock); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_K_NUMBER && rv == LCRTE_OK; i++) { strncpy(llock->config.value[i], llock->config.db.get_text_col(&llock->config.db, 1), sizeof(llock->config.value[i])); rv = llock->config.db.get_row(&llock->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)llock->get_db(llock)), llock->get_tb(llock), llock->config.name[i], llock->config.value[i]); } return rv; } int lcrt_lock_create_config(struct lcrt_lock *llock) { int i; assert(llock); llock->config.db.exec(&llock->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255))", llock->get_tb(llock)); for (i = 0; i < LCRT_K_NUMBER; i++) { llock->config.db.exec(&llock->config.db, "INSERT INTO %s VALUES('%s', '%s')", llock->get_tb(llock), llock->config.name[i], llock->config.value[i]); } llock->config.db.close(&llock->config.db); return 0; } lcrt-1.1.2/src/user.h0000664000175000017500000000630611750112142011317 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 15 Jan 2011 04:33:36 PM CST * * Description: */ #ifndef __LCRT_USER_H__ #define __LCRT_USER_H__ #include #include "mkconfig.h" #include "list.h" #include "protocol.h" #define LCRT_MAX_LABEL 100 #ifndef __GTK_H__ #define FALSE (0) #define TRUE !(FALSE) typedef int boolean; #else typedef gboolean boolean; #endif #define LCRT_USER_CONFIG_DIR "etc/user" #define LCRT_USER_DB "user.db" #define LCRT_USER_TABLE "user" #define HOSTNAME_LEN 128 #define USERNAME_LEN 64 #define PASSWORD_LEN 64 #define DEFAULT_COMMAND_LEN 512 #define DIRNAME_LEN 64 enum { LCRT_USER_NAME, LCRT_USER_HOSTNAME, LCRT_USER_PROTOCOL, LCRT_USER_USERNAME, LCRT_USER_PASSWORD, LCRT_USER_PORT, LCRT_USER_DEFAULT_COMMAND, LCRT_USER_FOLDER, LCRT_USER_IS_FOLDER, LCRT_USER_CONFIG_NUMBER }; struct lcrtc_user { char name [HOSTNAME_LEN + 1]; char hostname[HOSTNAME_LEN + 1]; lcrt_protocol_t protocol; char username[USERNAME_LEN + 1]; char password[PASSWORD_LEN + 1]; unsigned int port; char command[DEFAULT_COMMAND_LEN + 1]; char folder[DIRNAME_LEN + 1]; int is_folder; int used; int dirty; struct list_head brother; }; struct lcrt_user { struct lcrt_config db; struct list_head child; const char *(*get_db)(struct lcrt_user *luser); const char *(*get_tb)(struct lcrt_user *luser); }; int lcrt_user_init_config(struct lcrt_user *luser); int lcrt_user_load_config(struct lcrt_user *luser); int lcrt_user_save_config(struct lcrt_user *luser); int lcrt_user_add(struct lcrt_user *luser, struct lcrtc_user *user); void lcrt_user_del(struct lcrtc_user *user); int lcrtc_user_ref(struct lcrtc_user *user); int lcrtc_user_unref(struct lcrtc_user *user); int lcrtc_user_is_dirty(struct lcrtc_user *user); int lcrtc_user_refresh(struct lcrtc_user *user); lcrt_protocol_t lcrt_user_get_protocol(const char *proto); struct lcrtc_user *lcrtc_user_create(void); void lcrtc_user_destroy(struct lcrtc_user *user); int lcrtc_user_set_data( struct lcrtc_user *user, const char *name, const char *hostname, lcrt_protocol_t protocol, const char *username, const char *password, const char *command, int port, int dirty, const char *folder, int is_folder); void lcrtc_user_dump(struct lcrtc_user *user, const char *func_name); int lcrt_user_save_one(struct lcrt_user *luser, struct lcrtc_user *user); int lcrt_user_destroy_config(struct lcrt_user *luser); struct lcrtc_user *lcrt_user_find_by_name(struct lcrt_user *luser, const char *name); int lcrt_user_del_one(struct lcrt_user *luser, struct lcrtc_user *user, int del_from_db); int lcrt_user_del_folder(struct lcrt_user *luser, struct lcrtc_user *user, int del_from_db); int lcrt_user_rename(struct lcrt_user *luser, struct lcrtc_user *user, char *new_name, int update_to_db); int lcrt_exec_check(lcrt_protocol_t prot); struct lcrt_window; int lcrt_user_find_unused_label(struct lcrt_window *lwindow, const char *keyword /* in */, char *label /* out */); #endif lcrt-1.1.2/src/cabout.c0000664000175000017500000000145211750112142011606 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Wed 02 Mar 2011 08:08:32 PM CST * * Description: */ #include void lcrt_about_url_hook(GtkAboutDialog *about, const char *link, gpointer user_data) { gtk_show_uri(gtk_widget_get_screen(GTK_WIDGET(about)), link, gtk_get_current_event_time(), NULL); } void lcrt_about_email_hook(GtkAboutDialog * about, const char *email_address, gpointer user_data) { char *escaped, *uri; escaped = g_uri_escape_string(email_address, NULL, FALSE); uri = g_strdup_printf("mailto:%s", escaped); g_free(escaped); lcrt_about_url_hook(about, uri, user_data); g_free(uri); } lcrt-1.1.2/src/istatus.h0000664000175000017500000000252711750112142012036 00000000000000#ifndef __LCRT_ISTATUS_H__ #define __LCRT_ISTATUS_H__ #include #include "mkconfig.h" #include "iwindow.h" #include "user.h" #define LCRT_ISTATUS_TABLE "istatus" enum { LCRT_S_TOOLTIP, LCRT_S_SHOW_WINDOW, LCRT_S_QUIT, LCRT_S_WINDOW_EXIT, LCRT_S_SESSION_DISCONNECT, LCRT_S_NUMBER }; #define LCRT_S_NAME \ "s_tooltip", \ "s_show_status", \ "s_quit", \ "s_window_exit", \ "s_session_disconnect" #define LCRT_S_VALUE \ "Linux Remote login Tool", \ "Main Window", \ "Quit", \ "There are %d session connected, do you want to quit ?", \ "Do you wish to disconnect from %s ?" struct lcrtc_status { struct lcrt_config db; const char *name[LCRT_S_NUMBER]; char value[LCRT_S_NUMBER][LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_status { struct lcrt_window *parent; GtkStatusIcon *status; GtkWidget *popup; struct lcrtc_status config; const char *(*get_db)(struct lcrt_status *lstatus); const char *(*get_tb)(struct lcrt_status *lstatus); }; struct lcrt_status *lcrt_create_status(struct lcrt_window *parent); void lcrt_destroy_status(struct lcrt_status *lstatus); int lcrt_status_save_config(struct lcrt_status *lstatus); GtkWidget* lcrt_status_create_popup_menu(struct lcrt_status *lstatus); void lcrt_destroy_status(struct lcrt_status *lstatus); #endif lcrt-1.1.2/src/ctoolbar.h0000664000175000017500000000201411750112142012136 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 10:18:51 PM CST * File Name: ctoolbar.h * * Description: */ #ifndef __LCRT_CTOOLBAR_H__ #define __LCRT_CTOOLBAR_H__ #include void lcrt_toolbar_on_connect_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_toolbar_on_quick_connect_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_toolbar_on_connect_in_tab_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_toolbar_on_reconnect_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_toolbar_on_disconnect_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_toolbar_on_copy_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_toolbar_on_paste_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_toolbar_on_terminal_activate(GtkWidget *toolitem, gpointer user_data); #endif lcrt-1.1.2/src/cview.h0000664000175000017500000000121311750112142011446 00000000000000#ifndef __LCRT_CVIEW_H__ #define __LCRT_CVIEW_H__ #include void lcrt_view_on_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_view_on_menubar_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_view_on_toolbar_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_view_on_session_tabs_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_view_on_status_bar_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_view_on_always_on_top_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_view_on_full_screen_activate(GtkMenuItem *menuitem, gpointer user_data); #endif lcrt-1.1.2/src/itoolbar.h0000664000175000017500000000370011750112142012147 00000000000000#ifndef __LCRT_ITOOLBAR_H__ #define __LCRT_ITOOLBAR_H__ #include #include "mkconfig.h" #include "iwindow.h" #include "list.h" #define LCRT_ITOOLBAR_TABLE "itoolbar" enum { LCRT_B_CONNECT, LCRT_B_QUICK_CONNECT, LCRT_B_CONNECT_IN_TAB, LCRT_B_RECONNECT, LCRT_B_DISCONNECT, LCRT_B_COPY, LCRT_B_PASTE, LCRT_B_TERMINAL, LCRT_B_NUMBER }; #define LCRT_B_NAME \ "b_connect", \ "b_quick_connect", \ "b_connect_on_tab", \ "b_reconnect",\ "b_disconnect", \ "b_copy", \ "b_paste", \ "b_terminal" #define LCRT_B_VALUE \ "Connect", \ "Quick connect", \ "Conect in tab", \ "Reconnect current session", \ "Disconnect current session", \ "Copy", \ "Paste", \ "Open a terminal" #define LCRT_B_ICONS \ "lcrt-connect.png", \ "lcrt-quick-connect.png", \ "lcrt-connect-in-tab.png", \ "lcrt-reconnect.png", \ "lcrt-disconnect.png", \ "lcrt-copy.png", \ "lcrt-paste.png", \ "lcrt-terminal.png" #define LCRT_B_CALLBACK \ lcrt_toolbar_on_connect_activate, \ lcrt_toolbar_on_quick_connect_activate, \ lcrt_toolbar_on_connect_in_tab_activate, \ lcrt_toolbar_on_reconnect_activate,\ lcrt_toolbar_on_disconnect_activate,\ lcrt_toolbar_on_copy_activate,\ lcrt_toolbar_on_paste_activate,\ lcrt_toolbar_on_terminal_activate struct lcrt_toolitem { struct lcrt_toolbar *parent; }; struct lcrtc_toolbar { struct lcrt_config db; const char *name[LCRT_B_NUMBER]; char value[LCRT_B_NUMBER][LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_toolbar { struct lcrt_window *parent; GtkWidget *toolbar; GtkWidget *toolitem[LCRT_B_NUMBER]; struct lcrtc_toolbar config; const char *(*get_db)(struct lcrt_toolbar *ltoolbar); const char *(*get_tb)(struct lcrt_toolbar *ltoolbar); }; struct lcrt_toolbar *lcrt_create_toolbar(struct lcrt_window *parent); void lcrt_destroy_toolbar(struct lcrt_toolbar *ltoolbar); #endif lcrt-1.1.2/src/ioptions.h0000664000175000017500000000273611750112142012210 00000000000000#ifndef __LCRT_IOPTIONS_H__ #define __LCRT_IOPTIONS_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_IOPTIONS_TABLE "ioptions" enum { LCRT_O_MENUITEM, LCRT_O_SESSION_OPTIONS, LCRT_O_GLOBAL_OPTIONS, LCRT_O_AUTO_SAVE_OPTIONS, LCRT_O_SAVE_SETTINGS_NOW, LCRT_O_NUMBER }; #define LCRT_O_NAME \ "o_menuitem", \ "o_session_options", \ "o_global_options", \ "o_auto_save_options", \ "o_save_settings_now" #define LCRT_O_VALUE \ "_Options", \ "_Session Options ...", \ "_Global Options ...", \ "_Auto Save Options", \ "Save Settings _Now" #define LCRT_O_SHORTCUT \ {0, 0}, \ {0, 0}, \ {0, 0}, \ {0, 0}, \ {0, 0} struct lcrtc_options { struct lcrt_config db; const char *name[LCRT_O_NUMBER]; char value[LCRT_O_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_O_NUMBER][2]; }; struct lcrt_options { struct lcrt_menubar *parent; GtkWidget *o_menuitem; GtkWidget *o_session_options; GtkWidget *o_global_options; GtkWidget *o_keyboard_shortcuts; GtkWidget *o_auto_save_options; GtkWidget *o_save_settings_now; struct lcrtc_options config; const char *(*get_db)(struct lcrt_options *loptions); const char *(*get_tb)(struct lcrt_options *loptions); }; struct lcrt_options *lcrt_options_create_menuitem(struct lcrt_menubar *parent); void lcrt_options_destroy_menuitem(struct lcrt_options *loptions); #endif lcrt-1.1.2/src/telnet.c0000664000175000017500000003513611750420162011636 00000000000000/* * Copyright (c) 2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 07 Aug 2011 05:08:19 PM CST * File Name : telnet.c * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include "iterminal.h" #include "iwindow.h" #include "user.h" #include "iqconnect.h" #include "cqconnect.h" #include "iterminal.h" #include "ilogin.h" #include "debug.h" #include "telnet.h" struct lcrt_telnet_if { GtkWidget *hostname; GtkWidget *username; GtkWidget *firewall; GtkWidget *port; }; struct lcrt_telnet_tm { struct lcrt_login *login; }; static void lcrt_telnet_receive(struct lcrt_terminal *lterminal) { struct lcrt_window *lwindow = lterminal->parent->parent; VteTerminal *vteterminal = lterminal->terminal; struct lcrt_telnet_tm *ttelnet = (struct lcrt_telnet_tm *)lterminal->private_data; struct lcrtc_user *user = lterminal->user; char *text; text = vte_terminal_get_text(vteterminal, NULL, NULL, NULL); if (lcrt_check_space_string(text)) { debug_print("text null\n"); return; } #if 0 debug_print("++++++++++++++++++++++++CONTENTS++++++++++++++++++++++++\n"); debug_print("%s", text); debug_print("++++++++++++++++++++++++CONTENTS++++++++++++++++++++++++\n"); #endif if (strstr(text, "Connection refused") != NULL) { lcrt_message_error(lwindow->window, lcrt_terminal_get_config(lterminal, LCRT_TM_CONNECTION_REFUSED)); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); return; } if (strstr(text, "Connection closed") != NULL) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); return; } if (strstr(text, "Login incorrect") != NULL) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); ttelnet->login = lcrt_create_login(lterminal, TRUE); } if (strstr(text, "login:") != NULL && (lterminal->connected & LCRT_TERMINAL_SEND_USERNAME) == 0) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); if (strlen(user->username) == 0) { ttelnet->login = lcrt_create_login(lterminal, FALSE); debug_where(); } debug_where(); lterminal->connected |= LCRT_TERMINAL_SEND_USERNAME; vte_terminal_feed_child(vteterminal, user->username, strlen(user->username)); vte_terminal_feed_child(vteterminal, LCRT_TERMINAL_SEND_CMD, strlen(LCRT_TERMINAL_SEND_CMD)); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); return; } if (strstr(text, "Password:") != NULL) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); if (strlen(user->password) == 0) { struct lcrt_login *login = lcrt_create_login(lterminal, FALSE); ttelnet->login = login; debug_where(); } debug_where(); lterminal->connected |= LCRT_TERMINAL_SEND_PASSWORD; vte_terminal_feed_child(vteterminal, user->password, strlen(user->password)); vte_terminal_feed_child(vteterminal, LCRT_TERMINAL_SEND_CMD, strlen(LCRT_TERMINAL_SEND_CMD)); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); return; } if (lterminal->connected == (LCRT_TERMINAL_SEND_USERNAME | LCRT_TERMINAL_SEND_PASSWORD) || strlen(user->username) == 0) lcrt_terminal_set_connected_status(lterminal); } static int lcrt_telnet_connect(struct lcrt_terminal *lterminal) { lcrt_protocol_t protocol; struct lcrtc_user *user; char *argv[5], *work_dir; char hostname[256], port[32]; char *dep_prog[] = {LCRT_DEP_PROG}; int dep = -1; char tmp[32]; struct lcrt_telnet_tm *ttelnet; #if VTE_CHECK_VERSION(0, 26, 0) char path[512]; #endif if (lterminal == NULL) return EINVAL; ttelnet = (struct lcrt_telnet_tm *)calloc(1, sizeof(struct lcrt_telnet_tm)); if (ttelnet == NULL) return -ENOMEM; lterminal->private_data = ttelnet; vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); user = lterminal->user; argv[0] = dep_prog[LCRT_DEP_TELNET]; strcpy(hostname, user->hostname); argv[1] = hostname; sprintf(port, "%d", user->port); argv[2] = port; argv[3] = NULL; work_dir = "."; if (lcrt_exec_check(user->protocol) != 0) { lcrt_message_info(lterminal->parent->parent->window, lterminal->parent->config.value[LCRT_TM_CONNECTION_PROG_NOT_FOUND], argv[0]); return LCRTE_NOT_FOUND; } #if VTE_CHECK_VERSION(0, 26, 0) lcrt_echeck(argv[0], path); argv[0] = path; vte_terminal_fork_command_full( VTE_TERMINAL(lterminal->terminal), VTE_PTY_DEFAULT, work_dir, argv, NULL, 0, NULL, NULL, <erminal->child_pid, NULL); #else lterminal->child_pid = vte_terminal_fork_command(VTE_TERMINAL(lterminal->terminal), argv[0], argv, NULL , work_dir, FALSE, FALSE, FALSE); #endif debug_print("child_pid = %d\n", lterminal->child_pid); lcrt_statusbar_set_user(lterminal->parent->parent->w_statusbar, lterminal->user); debug_where(); return LCRTE_OK; } void lcrt_telnet_disconnect(struct lcrt_terminal *lterminal) { if (lterminal->connected) { vte_terminal_feed_child(lterminal->terminal, LCRT_TERMINAL_EXIT_CMD, strlen(LCRT_TERMINAL_EXIT_CMD)); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_DISCONNECT); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); } if (lterminal->private_data) { free(lterminal->private_data); lterminal->private_data = NULL; } } static void lcrt_telnet_show(struct lcrt_qconnect *lqconnect) { GtkWidget *vbox; GtkWidget *vbox_spec; GtkWidget *hbox2; GtkWidget *label_hostname; GtkWidget *entry_hostname; GtkWidget *hbox4; GtkWidget *label_username; GtkWidget *entry_username; GtkWidget *hbox3; GtkWidget *label_firewall; GtkWidget *combobox_firewall; GtkWidget *label_port; GtkWidget *entry_port; GtkWidget *vbox3; char *firewall[LCRT_FIREWALL_NUMBER] = {LCRT_FIREWALL_NAME}; int i; struct lcrt_window *parent; const char *str_port[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_PORT}; static struct lcrt_telnet_if sltelnet, *ltelnet = &sltelnet; memset(ltelnet, 0, sizeof(struct lcrt_telnet_if)); lqconnect->private_data = ltelnet; parent = lqconnect->parent; vbox = GTK_DIALOG (lqconnect->q_connect)->vbox; vbox_spec = gtk_vbox_new (FALSE, 0); lqconnect->q_vbox_spec = vbox_spec; gtk_widget_show (vbox_spec); gtk_box_pack_start (GTK_BOX (vbox), vbox_spec, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), vbox_spec, 1); gtk_widget_set_size_request (vbox_spec, -1, 210); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox2, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox2, -1, 25); label_hostname = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_HOSTNAME]); gtk_widget_show (label_hostname); gtk_box_pack_start (GTK_BOX (hbox2), label_hostname, FALSE, FALSE, 0); gtk_widget_set_size_request (label_hostname, 90, 30); gtk_misc_set_alignment (GTK_MISC (label_hostname), 0, 0.5); entry_hostname = gtk_entry_new_with_max_length(HOSTNAME_LEN); ltelnet->hostname = entry_hostname; gtk_widget_show (entry_hostname); gtk_box_pack_start (GTK_BOX (hbox2), entry_hostname, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_hostname, 220, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_hostname), 9679); g_signal_connect ((gpointer) entry_hostname, "changed", G_CALLBACK (lcrt_qconnect_on_entry_hostname_changed), lqconnect); hbox4 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox4); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox4, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox4, -1, 30); label_username = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_USERNAME]); gtk_widget_show (label_username); gtk_box_pack_start (GTK_BOX (hbox4), label_username, FALSE, FALSE, 0); gtk_widget_set_size_request (label_username, 90, 30); gtk_misc_set_alignment (GTK_MISC (label_username), 0, 0.5); entry_username = gtk_entry_new_with_max_length(USERNAME_LEN); ltelnet->username = entry_username; gtk_widget_show (entry_username); gtk_box_pack_start (GTK_BOX (hbox4), entry_username, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_username, 220, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_username), 9679); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox3, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox3, -1, 25); label_firewall = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_FIREWALL]); gtk_widget_show (label_firewall); gtk_box_pack_start (GTK_BOX (hbox3), label_firewall, FALSE, FALSE, 0); gtk_widget_set_size_request (label_firewall, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_firewall), 0, 0.5); combobox_firewall = gtk_combo_box_entry_new_text (); ltelnet->firewall = combobox_firewall; gtk_widget_show (combobox_firewall); gtk_box_pack_start (GTK_BOX (hbox3), combobox_firewall, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_firewall, 110, 25); debug_where(); for (i = 0; i < LCRT_FIREWALL_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_firewall), firewall[i]); } gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_firewall)->child), FALSE); debug_where(); label_port = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_PORT]); gtk_widget_show (label_port); gtk_box_pack_start (GTK_BOX (hbox3), label_port, FALSE, FALSE, 0); gtk_widget_set_size_request (label_port, 50, 30); gtk_misc_set_alignment (GTK_MISC (label_port), 0, 0.49); entry_port = gtk_entry_new (); ltelnet->port = entry_port; gtk_widget_show (entry_port); gtk_box_pack_start (GTK_BOX (hbox3), entry_port, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_port, 60, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_port), 9679); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox3); gtk_box_pack_start (GTK_BOX (vbox_spec), vbox3, TRUE, TRUE, 0); gtk_widget_set_size_request (vbox3, 200, 105); gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_firewall), 0); if (lqconnect->flag == LCRT_QCONNECT_SESSION_OPTION) { struct lcrtc_user *user; char tmp[32]; if ((user = lcrt_user_find_by_name(&parent->u_config, lqconnect->uname)) != NULL) { gtk_window_set_focus(GTK_WINDOW(lqconnect->q_connect), ltelnet->hostname); gtk_entry_set_text(GTK_ENTRY(ltelnet->hostname), user->hostname); gtk_entry_set_text(GTK_ENTRY(ltelnet->username), user->username); sprintf(tmp, "%d", user->port); gtk_entry_set_text(GTK_ENTRY(ltelnet->port), tmp); gtk_entry_set_text(GTK_ENTRY(lqconnect->q_et_default_command), user->command); } } else { gtk_window_set_focus(GTK_WINDOW(lqconnect->q_connect), ltelnet->hostname); gtk_widget_set_sensitive(lqconnect->q_bt_connect, FALSE); } gtk_entry_set_text(GTK_ENTRY(ltelnet->port), str_port[lqconnect->nproto]); //gtk_entry_set_editable(GTK_ENTRY(ltelnet->port), FALSE); } static struct lcrtc_user *lcrt_telnet_create(struct lcrt_qconnect *lqconnect) { lcrt_protocol_t protocol = lqconnect->nproto; struct lcrt_window *lwindow = lqconnect->parent; struct lcrt_telnet_if *ltelnet = (struct lcrt_telnet_if *)lqconnect->private_data; const char *hostname; struct lcrtc_user *user; int i = 1; char name[HOSTNAME_LEN + 256]; debug_where(); hostname = gtk_entry_get_text(GTK_ENTRY(ltelnet->hostname)); strcpy(name, hostname); if (lqconnect->flag != LCRT_QCONNECT_SESSION_OPTION) { if ((user = lcrtc_user_create()) == NULL) { /* * FIXME: There is no more memory, how can * we handle this exception ? */ return; } lcrt_user_find_unused_label(lwindow, hostname, name); lcrtc_user_set_data( user, name, hostname, protocol, gtk_entry_get_text(GTK_ENTRY(ltelnet->username)), NULL, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), atoi(gtk_entry_get_text(GTK_ENTRY(ltelnet->port))), TRUE, lqconnect->folder, 0 ); lcrtc_user_ref(user); lcrt_user_add(&lwindow->u_config, user); lcrt_window_set_current_user(lwindow, user); if (lqconnect->flag == LCRT_QCONNECT_IN_TAB) { lcrt_create_terminal(lwindow->w_notebook); } } else { if ((user = lcrt_user_find_by_name(&lwindow->u_config, lqconnect->uname)) != NULL) { lcrtc_user_set_data( user, lqconnect->uname, hostname, protocol, gtk_entry_get_text(GTK_ENTRY(ltelnet->username)), NULL, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), atoi(gtk_entry_get_text(GTK_ENTRY(ltelnet->port))), TRUE, NULL, -1 ); } } lcrtc_user_dump(user, __func__); return user; } struct lcrt_protocol_callback lcrt_protocol_telnet_callbacks = { .protocol = LCRT_PROTOCOL_TELNET, .receive = lcrt_telnet_receive, .connect = lcrt_telnet_connect, .disconnect = lcrt_telnet_disconnect, .show = lcrt_telnet_show, .create = lcrt_telnet_create, .changed = NULL }; struct lcrt_protocol_callback lcrt_protocol_telnet_ssl_callbacks = { .protocol = LCRT_PROTOCOL_TELNET_SSL, .receive = lcrt_telnet_receive, .connect = lcrt_telnet_connect, .disconnect = lcrt_telnet_disconnect, .show = lcrt_telnet_show, .create = lcrt_telnet_create, .changed = NULL }; lcrt-1.1.2/src/ifind.c0000664000175000017500000002376711750361516011452 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:22 AM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "iedit.h" #include "imenubar.h" #include "ifind.h" #include "cfind.h" int lcrt_find_create_config(struct lcrt_find *lfind); int lcrt_find_load_config(struct lcrt_find *lfind); int lcrt_find_init_config(struct lcrt_find *lfind); struct lcrt_find *lcrt_create_dialog_find(void *parent, int flag) { struct lcrt_find *lfind; GtkWidget *dialog_find; GtkWidget *dialog_vbox; GtkWidget *vbox; GtkWidget *label; GtkWidget *entry; GtkWidget *dialog_action_area; GtkWidget *cancelbutton; GtkWidget *alignment1; GtkWidget *hbox1; GtkWidget *image1; GtkWidget *label2; GtkWidget *prev_button; GtkWidget *next_button; GtkWidget *alignment2; GtkWidget *hbox2; GtkWidget *image2; GtkWidget *label3; struct lcrt_connect *parent_connect; struct lcrt_window *parent_window; lfind =(struct lcrt_find *)calloc(1, sizeof(struct lcrt_find)); if (lfind == NULL) goto err; lcrt_find_init_config(lfind); lcrt_find_load_config(lfind); lfind->parent = parent; lfind->flag = flag; dialog_find = gtk_dialog_new(); lfind->dialog = dialog_find; gtk_widget_set_size_request(dialog_find, 280, 105); switch (lfind->flag) { case LCRT_FIND_FCONNECT: parent_connect = (struct lcrt_connect *)lfind->parent; lfind->parent_window = parent_connect->c_connect; break; case LCRT_FIND_FEDIT: parent_window = (struct lcrt_window *)lfind->parent; lfind->parent_window = parent_window->window; break; default: printf("%s: unkown flag\n", __func__); return; } gtk_window_set_transient_for(GTK_WINDOW(dialog_find), GTK_WINDOW(lfind->parent_window)); gtk_window_set_modal (GTK_WINDOW (dialog_find), TRUE); gtk_window_set_title (GTK_WINDOW (dialog_find), lfind->config.value[LCRT_I_TITLE]); gtk_window_set_position (GTK_WINDOW (dialog_find), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (dialog_find), FALSE); gtk_window_set_type_hint (GTK_WINDOW (dialog_find), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (dialog_find), FALSE); dialog_vbox = GTK_DIALOG(dialog_find)->vbox; gtk_widget_show(dialog_vbox); gtk_widget_set_size_request(dialog_vbox, 200, 150); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dialog_vbox), vbox, TRUE, TRUE, 0); switch (lfind->flag) { case LCRT_FIND_FCONNECT: label = gtk_label_new(lfind->config.value[LCRT_I_TIP_CONNECT]); break; case LCRT_FIND_FEDIT: label = gtk_label_new(lfind->config.value[LCRT_I_TIP_EDIT]); break; } gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); gtk_widget_set_size_request(label, -1, 30); gtk_misc_set_alignment(GTK_MISC(label), 0.01, 0.5); entry = gtk_entry_new(); lfind->entry_find = entry; gtk_widget_show(entry); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); gtk_widget_set_size_request(entry, -1, 30); gtk_entry_set_invisible_char(GTK_ENTRY(entry), 9679); GTK_WIDGET_SET_FLAGS (entry, GTK_CAN_DEFAULT); dialog_action_area = GTK_DIALOG(dialog_find)->action_area; gtk_widget_show(dialog_action_area); gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area), GTK_BUTTONBOX_END); cancelbutton = gtk_button_new(); gtk_widget_show(cancelbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_find), cancelbutton, GTK_RESPONSE_CANCEL); alignment1 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment1); gtk_container_add(GTK_CONTAINER(cancelbutton), alignment1); hbox1 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox1); gtk_container_add(GTK_CONTAINER(alignment1), hbox1); gtk_widget_set_size_request(hbox1, 50, -1); image1 = gtk_image_new_from_stock("gtk-cancel", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image1); gtk_box_pack_start(GTK_BOX(hbox1), image1, FALSE, FALSE, 0); label2 = gtk_label_new_with_mnemonic(lfind->config.value[LCRT_I_CANCEL]); gtk_widget_show(label2); gtk_box_pack_start(GTK_BOX(hbox1), label2, FALSE, FALSE, 0); prev_button = gtk_button_new(); lfind->prev_button = prev_button; gtk_widget_set_sensitive(prev_button, FALSE); gtk_widget_show(prev_button); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_find), prev_button, GTK_RESPONSE_OK); alignment2 = gtk_alignment_new(0.1, 0.1, 0, 0); gtk_widget_show(alignment2); gtk_container_add(GTK_CONTAINER(prev_button), alignment2); hbox2 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox2); gtk_container_add(GTK_CONTAINER(alignment2), hbox2); gtk_widget_set_size_request(hbox2, 50, -1); image2 = gtk_image_new_from_stock("gtk-go-back", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image2); gtk_box_pack_start(GTK_BOX(hbox2), image2, FALSE, FALSE, 0); label3 = gtk_label_new_with_mnemonic(lfind->config.value[LCRT_I_PREV]); gtk_widget_show(label3); gtk_box_pack_start(GTK_BOX(hbox2), label3, FALSE, FALSE, 0); next_button = gtk_button_new(); lfind->next_button = next_button; gtk_widget_set_sensitive(next_button, FALSE); gtk_widget_show(next_button); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_find), next_button, GTK_RESPONSE_OK); alignment2 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment2); gtk_container_add(GTK_CONTAINER(next_button), alignment2); hbox2 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox2); gtk_container_add(GTK_CONTAINER(alignment2), hbox2); gtk_widget_set_size_request(hbox2, 50, -1); image2 = gtk_image_new_from_stock("gtk-go-forward", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image2); gtk_box_pack_start(GTK_BOX(hbox2), image2, FALSE, FALSE, 0); label3 = gtk_label_new_with_mnemonic(lfind->config.value[LCRT_I_NEXT]); gtk_widget_show(label3); gtk_box_pack_start(GTK_BOX(hbox2), label3, FALSE, FALSE, 0); g_signal_connect((gpointer)dialog_find, "delete_event", G_CALLBACK(lcrt_find_on_delete_event), lfind); g_signal_connect((gpointer)cancelbutton, "clicked", G_CALLBACK(lcrt_find_on_cancelbutton_clicked), lfind); g_signal_connect((gpointer)prev_button, "clicked", G_CALLBACK(lcrt_find_on_prev_button_clicked), lfind); g_signal_connect((gpointer)next_button, "clicked", G_CALLBACK(lcrt_find_on_next_button_clicked), lfind); g_signal_connect ((gpointer) entry, "changed", G_CALLBACK (lcrt_find_on_name_changed), lfind); gtk_dialog_run(GTK_DIALOG(dialog_find)); return lfind; err: lcrt_message_error(lfind->parent_window, lfind->config.value[LCRT_I_ERR_MSG]); return NULL; } void lcrt_destroy_find(struct lcrt_find *lfind) { if (lfind) free(lfind); } static const char *lcrt_find_get_db_name(struct lcrt_find *lfind) { return lfind->config.db.db_name; } static const char *lcrt_find_get_tb_name(struct lcrt_find *lfind) { return lfind->config.db.db_table; } int lcrt_find_init_config(struct lcrt_find *lfind) { char db_name[256]; int i; static char *name[LCRT_I_NUMBER] = {LCRT_I_NAME}; static char *value[LCRT_I_NUMBER] = {LCRT_I_VALUE}; assert(lfind); memset(&lfind->config, 0, sizeof(struct lcrtc_find)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lfind->config.db, db_name, LCRT_IFIND_TABLE); for (i = 0; i < LCRT_I_NUMBER; i++) { lfind->config.name[i] = name[i]; strncpy(lfind->config.value[i], value[i], sizeof(lfind->config.value[i])); } lfind->get_db = lcrt_find_get_db_name; lfind->get_tb = lcrt_find_get_tb_name; return 0; } int lcrt_find_load_config(struct lcrt_find *lfind) { int rv, i; assert(lfind); rv = lfind->config.db.select(&lfind->config.db, "SELECT * FROM %s", lfind->get_tb(lfind)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_find_create_config(lfind); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_I_NUMBER && rv == LCRTE_OK; i++) { strncpy(lfind->config.value[i], lfind->config.db.get_text_col(&lfind->config.db, 1), sizeof(lfind->config.value[i])); rv = lfind->config.db.get_row(&lfind->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)lfind->get_db(lfind)), lfind->get_tb(lfind), lfind->config.name[i], lfind->config.value[i]); } return rv; } int lcrt_find_create_config(struct lcrt_find *lfind) { int i; assert(lfind); lfind->config.db.exec(&lfind->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255))", lfind->get_tb(lfind)); for (i = 0; i < LCRT_I_NUMBER; i++) { lfind->config.db.exec(&lfind->config.db, "INSERT INTO %s VALUES('%s', '%s')", lfind->get_tb(lfind), lfind->config.name[i], lfind->config.value[i]); } lfind->config.db.close(&lfind->config.db); return 0; } lcrt-1.1.2/src/isettings.h0000664000175000017500000001704211750112142012351 00000000000000#ifndef __LCRT_ISETTINGS_H__ #define __LCRT_ISETTINGS_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_ISETTINGS_TABLE "isettings" #define LCRT_SETTINGS_CONFIG_DIR "etc/settings" #define LCRT_SETTINGS_DB "settings.db" enum { LCRT_T_DIALOG_SETTINGS, /*general settings*/ LCRT_T_G_NB_GENERAL, LCRT_T_G_LB_LANGUAGE_SUPPORT, LCRT_T_G_LB_LANGUAGE_SUPPORT_NOTE, LCRT_T_G_LB_CURRENT_LANGUAGE, LCRT_T_G_LB_DIALOG, LCRT_T_G_RB_CONNECT, LCRT_T_G_RB_QUICK_CONNECT, LCRT_T_G_RB_NONE, LCRT_T_G_LB_VIEW, LCRT_T_G_CB_SHOW_TOOLBAR, LCRT_T_G_CB_SHOW_STATUSBAR, /*keybinding settings*/ LCRT_T_K_NB_KEYBINDINGS, LCRT_T_K_LB_KEYBOARD_SHORTCUT, LCRT_T_K_LB_KEYBOARD_SHORTCUTS_NOTE, LCRT_T_K_CB_ENABLE_F10, /*terminal settings*/ LCRT_T_T_NB_TERMINAL, LCRT_T_T_LB_TERMINAL_SETTINGS, LCRT_T_T_LB_TERMINAL_NOTE, LCRT_T_T_LB_FONT, LCRT_T_T_LB_FOREGROUND_COLOR, LCRT_T_T_LB_BACKGROUND_COLOR, LCRT_T_T_LB_BACKGROUND_IMAGE, LCRT_T_T_LB_TRANSPARENT, LCRT_T_T_TP_TRANSPARENT, LCRT_T_T_LB_SCROLLBACK_LINES, LCRT_T_T_CB_BELL, LCRT_T_T_BT_RESTORE_DEFAULT, /*application settings*/ LCRT_T_A_NB_APPLICATION, LCRT_T_A_LB_APPLICATION, LCRT_T_A_LB_APPLICATION_NOTE, LCRT_T_A_LB_SHELL, LCRT_T_A_LB_SSH, LCRT_T_A_LB_TELNET, LCRT_T_LB_APPLYBUTTON, LCRT_T_LB_CANCELBUTTON, LCRT_T_LB_OKBUTTON, LCRT_T_ERR_MSG, LCRT_T_NUMBER }; #define LCRT_T_NAME \ "dialog_settings", \ /*general settings*/ \ "g_nb_general", \ "g_lb_language_support", \ "g_lb_language_support_note", \ "g_lb_current_language", \ "g_lb_dialog", \ "g_rb_connect", \ "g_rb_quick_connect", \ "g_rb_none", \ "g_lb_view", \ "g_cb_show_toolbar", \ "g_cb_show_statusbar", \ /*keybinding settings*/ \ "k_nb_keybindings", \ "k_lb_keyboard_shortcut", \ "k_lb_keyboard_shortcuts_note", \ "k_cb_enable_f10", \ /*terminal settings*/ \ "t_nb_terminal", \ "t_lb_terminal_settings", \ "t_lb_terminal_note", \ "t_lb_font", \ "t_lb_foreground_color", \ "t_lb_background_color", \ "t_lb_background_image", \ "t_lb_transparent", \ "t_tp_transparent", \ "t_lb_scrollback_lines", \ "t_cb_bell", \ "t_bt_restore_default", \ /*application settintgs*/ \ "a_nb_application", \ "a_lb_application", \ "a_lb_application_note", \ "a_lb_shell", \ "a_lb_ssh", \ "a_lb_telnet", \ "lb_applybutton", \ "lb_cancelbutton", \ "lb_okbutton", \ "error_msg" #define LCRT_T_VALUE \ "Global options", \ /*general settings*/ \ "General", \ "Language support", \ "Select language support, and will be effect on \nnext time.", \ "Current language:", \ "Dialog", \ "Show connect dialog on startup", \ "Show quick connect dialog on startup", \ "None", \ "View", \ "Show toolbar", \ "Show statusbar", \ /*keybinding settings*/ \ "Keybindings", \ "Keyboard shortcuts", \ "Here you can change keyboard shortcuts for\nvarious actions.", \ "Enable the menu shortcut key(F10 by default)", \ /*terminal settings*/ \ "Terminal", \ "Terminal settings", \ "These settings for the virtual terminal emulator \nwidget(VTE)only apply if the VTE library could be \nloaded.", \ "Terminal font:", \ "Font color:", \ "Background color:", \ "Background image:", \ "Transparent ", \ "Notice: only transparent is set to 0, the background image can be displayed.", \ "Scrollback lines:", \ "Terminal bell", \ "Reset", \ /*application settintgs*/ \ "Application", \ "Applications", \ "As you known, lcrt will invoke local application\nwhen you open a connect such as ssh, so in here,\nyou can config it.", \ "shell:", \ "ssh:", \ "telnet:", \ "Apply", \ "Cancel", \ "OK", \ "There is no memory to create dialog" typedef enum { LCRT_LT_SHOW_DIALOG_NONE, LCRT_LT_SHOW_DIALOG_CONNECT, LCRT_LT_SHOW_DIALOG_QUICK_CONNECT, }lcrt_lt_show_dialog_t; enum { LCRT_LT_G_SHOW_DIALOG, LCRT_LT_G_SHOW_TOOLBAR, LCRT_LT_G_SHOW_STATUSBAR, LCRT_LT_T_FONT, LCRT_LT_T_FCOLOR, LCRT_LT_T_BCOLOR, LCRT_LT_T_SCROLLLINES, LCRT_LT_T_BACKIMAGE, LCRT_LT_T_TRANSPARENT, LCRT_LT_T_BELL, LCRT_LT_A_SHELL, LCRT_LT_A_SSH, LCRT_LT_A_TELNET, LCRT_LT_AUTO_SAVE_CONFIG, /*options->auto save config*/ LCRT_LT_ENABLE_F10, LCRT_LT_NUMBER, }; #define LCRT_LT_NAME \ "lt_g_show_dialog", \ "lt_g_show_toolbar", \ "lt_g_show_statusbar", \ "lt_t_font", \ "lt_t_fcolor", \ "lt_t_bcolor", \ "lt_t_scrolllines", \ "lt_t_backimage", \ "lt_t_transparent", \ "lt_t_bell", \ "lt_a_shell", \ "lt_a_ssh", \ "lt_a_telnet", \ "lt_auto_save_config", \ "lt_enable_f10" #define LCRT_LT_CONFIG \ "3", \ "1", \ "1", \ " ", \ "00000000 AAAA AAAA AAAA", \ "00000000 0000 0000 0000", \ "1000", \ " ", \ "0", \ "1", \ "/bin/bash", \ "/usr/bin/ssh", \ "/usr/bin/telnet", \ "1", \ "1" struct lcrtc_settings { struct lcrt_config db; struct lcrt_config ldb; const char *name[LCRT_T_NUMBER]; char value[LCRT_T_NUMBER][LCRT_CONFIG_VALUE_LEN]; char local[LCRT_LT_NUMBER][LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_settings { struct lcrt_window *parent; GtkWidget *dialog_settings; GtkWidget *notebook; /*general settings*/ GtkWidget *g_nb_general; GtkWidget *g_cb_language; GtkWidget *g_rb_connect; GtkWidget *g_rb_quick_connect; GtkWidget *g_rb_none; GtkWidget *g_cb_show_toolbar; GtkWidget *g_cb_show_statusbar; /*keybinding settings*/ GtkWidget *k_nb_keybindings; GtkWidget *k_tv_shortcurts; GtkWidget *k_cb_enable_f10; /*terminal settings*/ GtkWidget *t_nb_terminal; GtkWidget *t_bt_foreground_color; GtkWidget *t_bt_font; GtkWidget *t_bt_background_color; GtkWidget *t_cb_bell; GtkObject *t_sb_scrollback_lines_adj; GtkWidget *t_et_background_image; GtkWidget *t_bt_background_image; GtkObject *t_hl_transparent; GtkWidget *t_bt_restore_default; /*application settings*/ GtkWidget *a_nb_application; GtkWidget *a_et_ssh; GtkWidget *a_et_telnet; GtkWidget *a_bt_telnet; GtkWidget *a_bt_shell; GtkWidget *a_et_shell; GtkWidget *a_bt_ssh; lcrt_lt_show_dialog_t lt_g_show_dialog; int lt_g_show_toolbar; int lt_g_show_statusbar; char lt_t_font[128]; GdkColor lt_t_fcolor; GdkColor lt_t_bcolor; int lt_t_scrolllines; char lt_t_backimage[256]; int lt_t_transparent; int lt_t_bell; char lt_a_shell[256]; char lt_a_ssh[256]; char lt_a_telnet[256]; int auto_save_config; int enable_f10_key; gboolean session; struct lcrtc_settings config; const char *(*get_db)(struct lcrt_settings *lsettings); const char *(*get_tb)(struct lcrt_settings *lsettings); const char *(*get_ldb)(struct lcrt_settings *lsettings); const char *(*get_ltb)(struct lcrt_settings *lsettings); }; struct lcrt_settings *lcrt_create_settings(struct lcrt_window *parent); void lcrt_destroy_settings(struct lcrt_settings *lsettings); int lcrt_settings_convert_local_config(struct lcrt_settings *lsettings); int lcrt_settings_init_local_config(struct lcrt_settings *lsettings); int lcrt_settings_save_local_config(struct lcrt_settings *lsettings); #endif lcrt-1.1.2/src/irename.h0000664000175000017500000000243311750112142011756 00000000000000#ifndef __LCRT_IRENAME_H__ #define __LCRT_IRENAME_H__ #include #include #include "mkconfig.h" #include "iwindow.h" #define LCRT_IRENAME_TABLE "irename" enum { LCRT_R_TITLE, LCRT_R_TIP, LCRT_R_CANCEL, LCRT_R_OK, LCRT_R_ERROR, LCRT_R_ERR_MSG, LCRT_R_NUMBER }; #define LCRT_R_NAME \ "r_title", \ "r_tip", \ "r_cancel", \ "r_ok", \ "r_error", \ "r_err_msg" #define LCRT_R_VALUE \ "Rename", \ "Enter new name:", \ "Cancel", \ "OK", \ "There has a same one, try an another!", \ "There is no memory to create dialog" struct lcrtc_rename { struct lcrt_config db; const char *name[LCRT_R_NUMBER]; char value[LCRT_R_NUMBER][LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_rename { struct lcrt_window *parent; gboolean rename_terminal; char rename[256]; GtkWidget *dialog; GtkWidget *entry_rename; GtkWidget *okbutton; GtkTreeIter *iter; struct lcrtc_rename config; const char *(*get_db)(struct lcrt_rename *lrename); const char *(*get_tb)(struct lcrt_rename *lrename); }; struct lcrt_rename *lcrt_create_dialog_rename(struct lcrt_window *parent, GtkWindow *window, const char *name, gboolean popup); void lcrt_destroy_rename(struct lcrt_rename *lrename); #endif lcrt-1.1.2/src/debug.h0000664000175000017500000000122511750112142011422 00000000000000#ifndef __LCRT_DEBUG_H__ #define __LCRT_DEBUG_H__ #include #include #include enum { LCRTE_OK = 0, LCRTE_INVAL, LCRTE_NOT_FOUND = 1000, LCRTE_NO_TABLE, LCRTE_NO_CONFIG, LCRTE_NOT_SUPPORT, }; #ifdef __LCRT_DEBUG__ #define debug_where() \ printf("###FILE: %-16s ###LINE: %-4d ###FUC: %s\n", \ __FILE__, __LINE__, __FUNCTION__); static inline void debug_print(const char *format, ...) { va_list args; va_start(args, format); vprintf(format, args); va_end(args); } #else #define debug_where() static inline void debug_print(const char *format, ...) { } #endif #endif lcrt-1.1.2/src/iaccels.c0000664000175000017500000002676011751624073011761 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:22 AM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iaccels.h" #include "caccels.h" #include "isettings.h" #include "foperate.h" int lcrt_accels_create_local_config(struct lcrt_accels *laccels); int lcrt_accels_load_config(struct lcrt_accels *laccels); int lcrt_accels_init_config(struct lcrt_accels *laccels); int lcrt_accels_add_entry(GtkTreeStore *tree, char name[][LCRT_CONFIG_VALUE_LEN], int key[][2], int number); struct lcrt_accels *lcrt_create_accels(struct lcrt_window *parent) { GtkWidget *tree_view; GtkTreeViewColumn *column; GtkCellRenderer *cell_renderer; GtkTreeStore *tree; struct lcrt_accels *laccels; laccels =(struct lcrt_accels *)calloc(1, sizeof(struct lcrt_accels)); if (laccels == NULL) goto err; lcrt_accels_init_config(laccels); lcrt_accels_load_config(laccels); laccels->parent = parent; tree_view = parent->w_settings->k_tv_shortcurts; laccels->tree_view = tree_view; /* Column 1 */ cell_renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(laccels->config.value[LCRT_KB_ACTION], cell_renderer, "text", ACTION_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); /* Column 2 */ cell_renderer = gtk_cell_renderer_accel_new(); g_object_set(cell_renderer, "editable", TRUE, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK, NULL); g_signal_connect(cell_renderer, "accel-edited", G_CALLBACK(lcrt_accels_on_edited), laccels); column = gtk_tree_view_column_new(); gtk_tree_view_column_set_title(column, laccels->config.value[LCRT_KB_SHORTCUT_KEY]); gtk_tree_view_column_pack_start(column, cell_renderer, TRUE); gtk_tree_view_column_set_cell_data_func(column, cell_renderer, lcrt_accels_set_data, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column); tree = gtk_tree_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER); lcrt_accels_add_entry(tree, &laccels->config.value[LCRT_KB_FILE], &laccels->config.key[LCRT_KB_FILE], 4); lcrt_accels_add_entry(tree, &laccels->config.value[LCRT_KB_EDIT], &laccels->config.key[LCRT_KB_EDIT], 3); lcrt_accels_add_entry(tree, &laccels->config.value[LCRT_KB_SESSION], &laccels->config.key[LCRT_KB_SESSION], 6); gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(tree)); g_object_unref(tree); gtk_tree_view_expand_all(GTK_TREE_VIEW(tree_view)); return laccels; err: lcrt_message_error(parent->window, laccels->config.value[LCRT_KB_ERR_MSG]); return NULL; } int lcrt_accels_add_entry(GtkTreeStore *tree, char name[][LCRT_CONFIG_VALUE_LEN], int key[][2], int number) { GtkTreeIter parent_iter; GtkTreeIter iter; int j; gtk_tree_store_append(tree, &parent_iter, NULL); gtk_tree_store_set(tree, &parent_iter, ACTION_COLUMN, name[0], -1); for (j = 1; j <= number; j++) { gtk_tree_store_insert_with_values(tree, &iter, &parent_iter, -1, ACTION_COLUMN, name[j], KEYVAL_COLUMN, key[j], -1); } return 0; } void lcrt_destroy_accels(struct lcrt_accels *laccels) { if (laccels->parent->w_settings->auto_save_config && laccels->dirty) lcrt_accels_save_local_config(laccels); if (laccels) free(laccels); } static const char *lcrt_accels_get_ldb_name(struct lcrt_accels *laccels) { return laccels == NULL ? NULL : laccels->config.ldb.db_name; } static const char *lcrt_accels_get_ltb_name(struct lcrt_accels *laccels) { return laccels == NULL ? NULL : laccels->config.ldb.db_table; } static const char *lcrt_accels_get_db_name(struct lcrt_accels *laccels) { return laccels->config.db.db_name; } static const char *lcrt_accels_get_tb_name(struct lcrt_accels *laccels) { return laccels->config.db.db_table; } int lcrt_accels_init_language_config(struct lcrt_accels *laccels) { char db_name[256]; int i; static char *name[LCRT_KB_NUMBER] = {LCRT_KB_NAME}; static char *value[LCRT_KB_NUMBER] = {LCRT_KB_VALUE}; assert(laccels); memset(&laccels->config, 0, sizeof(struct lcrtc_accels)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&laccels->config.db, db_name, LCRT_IACCELS_TABLE); for (i = 0; i < LCRT_KB_NUMBER; i++) { laccels->config.name[i] = name[i]; strncpy(laccels->config.value[i], value[i], sizeof(laccels->config.value[i])); } laccels->get_db = lcrt_accels_get_db_name; laccels->get_tb = lcrt_accels_get_tb_name; return 0; } int lcrt_accels_init_local_config(struct lcrt_accels *laccels) { char db_name[256]; int i; int key[LCRT_KB_NUMBER][2] = {LCRT_KB_KEY}; snprintf(db_name, sizeof(db_name), "%s/%s/", lcrt_config_get_local_dir(), LCRT_ACCELS_CONFIG_DIR); lcrt_fmkdir(db_name); strcat(db_name, LCRT_ACCELS_DB); lcrt_config_init(&laccels->config.ldb, db_name, LCRT_IACCELS_TABLE); for (i = 0; i < LCRT_KB_NUMBER; i++) { laccels->config.key[i][0] = key[i][0]; laccels->config.key[i][1] = key[i][1]; debug_print("name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", laccels->config.name[i], laccels->config.value[i], laccels->config.key[i][0], laccels->config.key[i][1]); } laccels->get_ldb = lcrt_accels_get_ldb_name; laccels->get_ltb = lcrt_accels_get_ltb_name; return 0; } int lcrt_accels_init_config(struct lcrt_accels *laccels) { assert(laccels); memset(&laccels->config, 0, sizeof(struct lcrtc_accels)); lcrt_accels_init_language_config(laccels); lcrt_accels_init_local_config(laccels); return LCRTE_OK; } int lcrt_accels_load_language_config(struct lcrt_accels *laccels) { int rv, i; assert(laccels); rv = laccels->config.db.select(&laccels->config.db, "SELECT * FROM %s", laccels->get_tb(laccels)); debug_where(); if (rv == LCRTE_NO_TABLE) { return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_KB_NUMBER && rv == LCRTE_OK; i++) { strncpy(laccels->config.value[i], laccels->config.db.get_text_col(&laccels->config.db, 1), sizeof(laccels->config.value[i])); rv = laccels->config.db.get_row(&laccels->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)laccels->get_db(laccels)), laccels->get_tb(laccels), laccels->config.name[i], laccels->config.value[i]); } laccels->config.ldb.close(&laccels->config.ldb); return rv; } int lcrt_accels_load_local_config(struct lcrt_accels *laccels) { int rv, i; char *name[LCRT_KB_NUMBER] = {LCRT_KB_NAME}; assert(laccels); rv = laccels->config.ldb.select(&laccels->config.ldb, "SELECT * FROM %s", laccels->get_ltb(laccels)); debug_where(); if (rv == LCRTE_NO_TABLE) { lcrt_accels_create_local_config(laccels); return LCRTE_NO_CONFIG; } laccels->config.ldb.finalize(&laccels->config.ldb); debug_where(); for (i = 0; i < LCRT_KB_NUMBER; i++) { rv = laccels->config.ldb.select(&laccels->config.ldb, "SELECT * FROM %s WHERE name='%s'", laccels->get_ltb(laccels), laccels->config.name[i]); if (rv == LCRTE_NOT_FOUND) { /* maybe this is the new entry which i added */ laccels->config.ldb.finalize(&laccels->config.ldb); continue; } else if (rv != LCRTE_OK) { /* We found an error, but we also can use the defualt configuration */ fprintf(stderr, "Fail to select data from database.\n"); laccels->config.ldb.finalize(&laccels->config.ldb); continue; } laccels->config.key[i][0] = laccels->config.ldb.get_int_col(&laccels->config.ldb, 1); laccels->config.key[i][1] = laccels->config.ldb.get_int_col(&laccels->config.ldb, 2); laccels->config.ldb.finalize(&laccels->config.ldb); debug_print("[%-10s|%-10s]: name = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)laccels->get_ldb(laccels)), laccels->get_ltb(laccels), name[i], laccels->config.key[i][0], laccels->config.key[i][1]); } laccels->config.ldb.close(&laccels->config.ldb); return rv; } int lcrt_accels_load_config(struct lcrt_accels *laccels) { lcrt_accels_load_language_config(laccels); lcrt_accels_load_local_config(laccels); return LCRTE_OK; } int lcrt_accels_create_local_config(struct lcrt_accels *laccels) { int i; char *name[LCRT_KB_NUMBER] = {LCRT_KB_NAME}; assert(laccels); laccels->config.ldb.exec(&laccels->config.ldb, "CREATE TABLE %s( \ name VARCHAR(%d) PRIMARY KEY, \ key INTEGER, \ mask INTEGER)", laccels->get_ltb(laccels), LCRT_CONFIG_NAME_LEN); for (i = 0; i < LCRT_KB_NUMBER; i++) { laccels->config.ldb.exec(&laccels->config.ldb, "INSERT INTO %s VALUES('%s', %d, %d)", laccels->get_ltb(laccels), name[i], laccels->config.key[i][0], laccels->config.key[i][1]); } laccels->config.ldb.close(&laccels->config.ldb); return 0; } int lcrt_accels_save_local_config(struct lcrt_accels *laccels) { int i; char *name[LCRT_KB_NUMBER] = {LCRT_KB_NAME}; if(laccels == NULL) return EINVAL; debug_where(); for (i = 0; i < LCRT_KB_NUMBER; i++) { laccels->config.ldb.exec(&laccels->config.ldb, "UPDATE %s SET key=%d, mask=%d WHERE name='%s'", laccels->get_ltb(laccels), laccels->config.key[i][0], laccels->config.key[i][1], name[i]); if (laccels->config.ldb.changes(&laccels->config.ldb) == 0) { laccels->config.ldb.exec(&laccels->config.ldb, "INSERT INTO %s VALUES('%s', %d, %d)", laccels->get_ltb(laccels), name[i], laccels->config.key[i][0], laccels->config.key[i][1]); debug_where(); } debug_print("[%-10s|%-10s]: name = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)laccels->get_ldb(laccels)), laccels->get_ltb(laccels), name[i], laccels->config.key[i][0], laccels->config.key[i][1]); } laccels->config.ldb.close(&laccels->config.ldb); return LCRTE_OK; } lcrt-1.1.2/src/serial.h0000664000175000017500000000274511750112142011623 00000000000000#ifndef __LCRT_SERIAL_H__ #define __LCRT_SERIAL_H__ #include #include "protocol.h" #include #define LCRT_SERIAL_PORT_NUMBER 7 #define LCRT_SERIAL_PORT \ "/dev/console", \ "/dev/ttyS0", \ "/dev/ttyS1", \ "/dev/ttyS2", \ "/dev/ttyUSB0", \ "/dev/ttyUSB1", \ "/dev/ttyUSB2", #define LCRT_SERIAL_BAUD_RATE_NUMBER 14 #define LCRT_SERIAL_BAUD_RATE_TABLE \ {0, "110", B110}, \ {1, "300", B300}, \ {2, "600", B600}, \ {3, "1200", B1200}, \ {4, "2400", B2400}, \ {5, "4800", B4800}, \ {6, "9600", B9600}, \ {7, "19200", B19200}, \ {8, "38400", B38400}, \ {9, "57600", B57600}, \ {10, "115200", B115200}, \ {11, "230400", B230400}, \ {12, "460800", B460800}, \ {13, "921600", B921600}, #define LCRT_SERIAL_DATA_BITS_NUMBER 4 #define LCRT_SERIAL_DATA_BITS_TABLE \ {0, "5", CS5}, \ {1, "6", CS6}, \ {2, "7", CS7}, \ {3, "8", CS8} #define LCRT_SERIAL_PARITY_NUMBER 5 #define LCRT_SERIAL_PARITY_TABLE \ {0, "None", 0}, \ {1, "Odd", 0}, \ {2, "Even", 0}, \ {3, "Mark", 0}, \ {4, "Space", 0} #define LCRT_SERIAL_STOP_BITS_NUMBER 3 #define LCRT_SERIAL_STOP_BITS_TABLE \ {0, "1", 0}, \ {1, "1.5", 0}, \ {2, "2", 0} #define LCRT_SEROAL_FLOW_CONTROL_NUMBER 2 #define LCRT_SEROAL_FLOW_CONTROL_TABLE \ {0, "Software", 0}, \ {1, "Hardware", 0} #define SERIAL_COMBOBOX_WIDTH 220 extern struct lcrt_protocol_callback lcrt_protocol_serial_callbacks; #endif lcrt-1.1.2/src/user.c0000664000175000017500000003705611751624073011334 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 22 Jan 2011 12:00:18 AM CST * * * Description: */ #include #include #include #include #include #include #include "foperate.h" #include "iwindow.h" #include "user.h" #include "debug.h" int lcrt_user_create_config(struct lcrt_user *luser); static const char *lcrt_user_get_db_name(struct lcrt_user *luser) { return luser->db.db_name; } static const char *lcrt_user_get_db_table(struct lcrt_user *luser) { return luser->db.db_table; } int lcrt_user_init_config(struct lcrt_user *luser) { char db_name[256]; if (luser == NULL) return EINVAL; memset(luser, 0, sizeof(struct lcrt_user)); snprintf(db_name, sizeof(db_name), "%s/%s/", lcrt_config_get_local_dir(), LCRT_USER_CONFIG_DIR); lcrt_fmkdir(db_name); strcat(db_name, LCRT_USER_DB); lcrt_config_init(&luser->db, db_name, LCRT_USER_TABLE); INIT_LIST_HEAD(&luser->child); luser->get_db = lcrt_user_get_db_name; luser->get_tb = lcrt_user_get_db_table; return 0; } int lcrt_user_destroy_config(struct lcrt_user *luser) { struct lcrtc_user *user; struct list_head *pos, *tmp; if (luser == NULL) return EINVAL; list_for_each_safe(pos, tmp, &luser->child) { user = list_entry(pos, struct lcrtc_user, brother); lcrtc_user_destroy(user); } return LCRTE_OK; } int lcrt_user_load_config(struct lcrt_user *luser) { int rv; struct lcrtc_user *user; const char *default_command; const char *default_folder; const char *proto[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_NAME}; if (luser == NULL) return EINVAL; debug_print("SQL:SELECT * FROM %s\n", luser->get_tb(luser)); rv = luser->db.select(&luser->db, "SELECT * FROM %s", luser->get_tb(luser)); if (rv == LCRTE_NO_TABLE) { lcrt_user_create_config(luser); return LCRTE_NO_CONFIG; } while (rv == LCRTE_OK) { user = lcrtc_user_create(); if (user == NULL) return ENOMEM; strncpy(user->name, luser->db.get_text_col(&luser->db, LCRT_USER_NAME), HOSTNAME_LEN); strncpy(user->hostname, luser->db.get_text_col(&luser->db, LCRT_USER_HOSTNAME), HOSTNAME_LEN); user->protocol = luser->db.get_int_col(&luser->db, LCRT_USER_PROTOCOL); strncpy(user->username, luser->db.get_text_col(&luser->db, LCRT_USER_USERNAME), USERNAME_LEN); strncpy(user->password, luser->db.get_text_col(&luser->db, LCRT_USER_PASSWORD), PASSWORD_LEN); user->port = luser->db.get_int_col(&luser->db, LCRT_USER_PORT); default_command = luser->db.get_text_col(&luser->db, LCRT_USER_DEFAULT_COMMAND); if (default_command != NULL) { strncpy(user->command, default_command,DEFAULT_COMMAND_LEN); } else { strcpy(user->command, ""); } default_folder = luser->db.get_text_col(&luser->db, LCRT_USER_FOLDER); if (default_folder != NULL) { strncpy(user->folder , default_folder, DIRNAME_LEN); } else { strcpy(user->folder, ""); } user->is_folder = luser->db.get_int_col(&luser->db, LCRT_USER_IS_FOLDER); lcrtc_user_refresh(user); lcrt_user_add(luser, user); rv = luser->db.get_row(&luser->db); debug_print("[%-10s|%-10s]:%s %s %s@%s -p %d && %s [%s]\n", luser->get_db(luser), luser->get_tb(luser), user->name, proto[user->protocol], user->username, user->hostname, user->port, user->command, user->folder); } return rv; } int lcrt_user_rename(struct lcrt_user *luser, struct lcrtc_user *user, char *new_name, int update_to_db) { int rv = LCRTE_OK; struct lcrtc_user *child; char name[DIRNAME_LEN + 1]; /* if we are not a folder */ if (!user->is_folder) { /* only update structure in memory */ if (!update_to_db) { strcpy(user->name, new_name); return LCRTE_OK; } /* update new name to database */ rv = luser->db.exec(&luser->db, "UPDATE %s SET name='%s' WHERE name='%s'", luser->get_tb(luser), new_name, user->name); if (luser->db.changes(&luser->db) == 1) { strcpy(user->name, new_name); return LCRTE_OK; } } else { strcpy(name, user->folder); /* If we want update the name of a folder, we should update all it's * children. so search in user list, if user->folder match with new_name, * update user too. */ list_for_each_entry(child, &luser->child, brother) { if (strcmp(name, child->folder) != 0) continue; if (!update_to_db) { if (child->is_folder) { strcpy(child->name, new_name); } strcpy(child->folder, new_name); continue; } if (!child->is_folder) { rv = luser->db.exec(&luser->db, "UPDATE %s SET folder='%s' WHERE name='%s'", luser->get_tb(luser), new_name, child->name); } else { rv = luser->db.exec(&luser->db, "UPDATE %s SET name='%s', folder='%s' WHERE name='%s'", luser->get_tb(luser), new_name, new_name, child->name); } if (luser->db.changes(&luser->db) == 1) { if (child->is_folder) { strcpy(child->name, new_name); } strcpy(child->folder, new_name); } } } luser->db.close(&luser->db); return rv; } int lcrt_user_save_one(struct lcrt_user *luser, struct lcrtc_user *user) { luser->db.exec(&luser->db, "ALTER TABLE %s ADD COLUMN command VARCHAR(512) DEFAULT NULL", luser->get_tb(luser)); luser->db.exec(&luser->db, "ALTER TABLE %s ADD COLUMN folder VARCHAR(64) DEFAULT NULL", luser->get_tb(luser)); luser->db.exec(&luser->db, "ALTER TABLE %s ADD COLUMN is_folder INTERGER DEFAULT 0", luser->get_tb(luser)); luser->db.exec(&luser->db, "UPDATE %s SET protocol=%d, hostname='%s', username='%s', password='%s', port=%d, command='%s', folder='%s', is_folder='%d' WHERE name='%s'", luser->get_tb(luser), user->protocol, user->hostname, user->username, user->password, user->port, user->command, user->folder, user->is_folder, user->name); if (luser->db.changes(&luser->db) == 0) { luser->db.exec(&luser->db, "INSERT INTO %s VALUES('%s', '%s', %d, '%s', '%s', %d, '%s', '%s', %d)", luser->get_tb(luser), user->name, user->hostname, user->protocol, user->username, user->password, user->port, user->command, user->folder, user->is_folder); } return LCRTE_OK; } int lcrt_user_del_one(struct lcrt_user *luser, struct lcrtc_user *user, int del_from_db) { if (del_from_db) { luser->db.exec(&luser->db, "DELETE FROM %s WHERE name='%s'", luser->get_tb(luser), user->name); } lcrtc_user_destroy(user); luser->db.close(&luser->db); return LCRTE_OK; } int lcrt_user_del_folder(struct lcrt_user *luser, struct lcrtc_user *folder, int del_from_db) { struct lcrtc_user *user; struct list_head *pos, *tmp; char name[DIRNAME_LEN + 1]; strcpy(name, folder->folder); list_for_each_safe(pos, tmp, &luser->child) { user = list_entry(pos, struct lcrtc_user, brother); if (strcmp(user->folder, name) == 0) { if (del_from_db) { luser->db.exec(&luser->db, "DELETE FROM %s WHERE folder='%s'", luser->get_tb(luser), name); } lcrtc_user_destroy(user); } } luser->db.close(&luser->db); return LCRTE_OK; } int lcrt_user_save_config(struct lcrt_user *luser) { struct lcrtc_user *user; list_for_each_entry(user, &luser->child, brother) { lcrt_user_save_one(luser, user); } luser->db.close(&luser->db); return 0; } int lcrt_user_create_config(struct lcrt_user *luser) { struct lcrtc_user *user; assert(luser); luser->db.exec(&luser->db, "CREATE TABLE %s( \ name V ARCHAR(128) PRIMARY KEY, \ hostname VARCHAR(128) NOT NULL, \ protocol INTEGER DEFAULT 0, \ username VARCHAR(64) DEFAULT NULL, \ password VARCHAR(64) DEFAULT NULL, \ port INTERGER DEFAULT 0, \ command VARCHAR(512) DEFAULT NULL, \ folder VARCHAR(64) DEFAULT NULL, \ is_folder INTERGER DEFAULT 0)", luser->get_tb(luser)); debug_where(); list_for_each_entry(user, &luser->child, brother) { luser->db.exec(&luser->db, "INSERT INTO %s VALUES('%s', '%s', %d, '%s', '%s', %d, '%s', '%s', %d)", luser->get_tb(luser), user->name, user->hostname, user->protocol, user->username, user->password, user->port, user->command, user->folder, user->is_folder); } debug_where(); luser->db.close(&luser->db); return 0; } int lcrt_user_add(struct lcrt_user *luser, struct lcrtc_user *user) { if (luser && user) { list_add(&user->brother, &luser->child); return LCRTE_OK; } else { return EINVAL; } } void lcrt_user_del(struct lcrtc_user *user) { if (user) list_del(&user->brother); } struct lcrtc_user *lcrtc_user_create(void) { struct lcrtc_user *user; user = (struct lcrtc_user *)calloc(1, sizeof(struct lcrtc_user)); if (user == NULL) return NULL; INIT_LIST_HEAD(&user->brother); return user; } int lcrtc_user_ref(struct lcrtc_user *user) { if (user == NULL) return EINVAL; user->used++; return LCRTE_OK; } int lcrtc_user_unref(struct lcrtc_user *user) { if (user == NULL) return EINVAL; if (user->used > 0) user->used--; return LCRTE_OK; } int lcrtc_user_is_dirty(struct lcrtc_user *user) { if (user == NULL || user->dirty == FALSE) return 0; return 1; } int lcrtc_user_refresh(struct lcrtc_user *user) { if (user) user->dirty = FALSE; return LCRTE_OK; } void lcrtc_user_destroy(struct lcrtc_user *user) { debug_print("destroy_user = %p\n", user); if (user == NULL) return; lcrtc_user_unref(user); if (user->used == 0) { list_del(&user->brother); free(user); } } struct lcrtc_user *lcrt_user_find_by_name(struct lcrt_user *luser, const char *name) { struct lcrtc_user *user; list_for_each_entry(user, &luser->child, brother) { if (strcmp(user->name, name) == 0) return user; } return NULL; } int lcrtc_user_set_data( struct lcrtc_user *user, const char *name, const char *hostname, lcrt_protocol_t protocol, const char *username, const char *password, const char *command, int port, int dirty, const char *folder, int is_folder) { if (user == NULL) return EINVAL; if (name == NULL) name = hostname; if (name != NULL) strncpy(user->name, name, HOSTNAME_LEN); if (hostname != NULL) strncpy(user->hostname, hostname, HOSTNAME_LEN); if (protocol != LCRT_PROTOCOL_UNKNOWN) user->protocol = protocol; if (username != NULL) strncpy(user->username, username, USERNAME_LEN); if (password != NULL) strncpy(user->password, password, USERNAME_LEN); if (port != -1) user->port = port; if (command != NULL) { strncpy(user->command, command, DEFAULT_COMMAND_LEN); } if (is_folder != -1) user->is_folder = is_folder; if (folder != NULL) strncpy(user->folder, folder, DIRNAME_LEN); user->dirty = dirty; return LCRTE_OK; } lcrt_protocol_t lcrt_user_get_protocol(const char *proto) { char *str_proto[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_NAME}; int i; for (i = 0; i < LCRT_PROTOCOL_NUMBER; i++) { if (strcmp(str_proto[i], proto) == 0) return i; } return LCRT_PROTOCOL_UNKNOWN; } void lcrtc_user_dump(struct lcrtc_user *user, const char *func_name) { #ifdef __LCRT_DEBUG__ const char *proto[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_NAME}; if (user == NULL) return; debug_print("==========%s=================\n", func_name); debug_print("protocol: %s\n", proto[user->protocol]); debug_print("hostname: %s\n", user->hostname); debug_print("username: %s\n", user->username); debug_print("password: %s\n", user->password); debug_print("==========================="); int i; for (i = 0; i < strlen(func_name); i++) debug_print("="); debug_print("\n"); #endif } int lcrt_exec_check(lcrt_protocol_t prot) { int rv, i; static int exist[LCRT_DEP_NUMBER] = {-1, -1, -1}; char *dep_prog[] = {LCRT_DEP_PROG}; char path[512]; if (exist[LCRT_DEP_SSH] == -1) { for (i = 0; i < LCRT_DEP_NUMBER; i++) { exist[i] = lcrt_echeck(dep_prog[i], path); } } switch (prot) { case LCRT_PROTOCOL_SSH2: case LCRT_PROTOCOL_SSH1: rv = exist[LCRT_DEP_SSH]; break; case LCRT_PROTOCOL_TELNET: case LCRT_PROTOCOL_TELNET_SSL: rv = exist[LCRT_DEP_TELNET]; break; case LCRT_PROTOCOL_RLOGIN: rv = exist[LCRT_DEP_RLOGIN]; break; case LCRT_PROTOCOL_SHELL: rv = exist[LCRT_DEP_SHELL]; break; case LCRT_PROTOCOL_SERIAL: default: rv = -1; break; } return rv; } /** * @brief find a new label like keyword. * @param lwindow main window structure * @param [in] keyword the keyword for search * @param [out] label return the new unused label we found * @return 0 ok, otherwise is error */ int lcrt_user_find_unused_label(struct lcrt_window *lwindow, const char *keyword /* in */, char *label /* out */) { int i; if (!lwindow || !keyword || !label) return LCRTE_INVAL; strcpy(label, keyword); if (lcrt_user_find_by_name(&lwindow->u_config, keyword) != NULL) { for (i = 1; i <= LCRT_MAX_LABEL; i++) { sprintf(label, "%s (%d)", keyword, i); if (lcrt_user_find_by_name(&lwindow->u_config, label) == NULL) return LCRTE_OK; }; } return LCRTE_OK; } lcrt-1.1.2/src/cterminal.c0000664000175000017500000001537111750112142012314 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 15 Jan 2011 05:06:01 PM CST * File Name: cterminal.c * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include "user.h" #include "iterminal.h" #include "debug.h" #include "ilogin.h" #include "message.h" #include "iwindow.h" #include "inotebook.h" #include "imenubar.h" #include "ifile.h" #include "iedit.h" #include "cedit.h" #include "ipopup.h" #include "istatus.h" #include "itoolbar.h" #define RESET void lcrt_terminal_on_commit(VteTerminal *widget, gchar *text, guint length, gpointer user_data) { //struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; } gboolean lcrt_terminal_on_key_press_event(GtkWidget*widget, GdkEventKey *event, gpointer user_data) { struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; debug_where(); if (event->type == GDK_KEY_PRESS && event->keyval == GDK_Return) { debug_print("reconnect...\n"); if (lterminal->ops && lterminal->ops->connect) lterminal->ops->connect(lterminal); } return FALSE; } void lcrt_terminal_on_child_exited(VteTerminal *vteterminal, gpointer user_data) { debug_where(); struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; debug_where(); if (lterminal->connected != LCRT_TERMINAL_CONNECTED) return; lterminal->child_pid = 0; debug_where(); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_CHILD_EXIT); g_signal_connect ((gpointer) lterminal->terminal, "key-press-event", G_CALLBACK (lcrt_terminal_on_key_press_event), lterminal); debug_where(); gtk_window_set_focus(GTK_WINDOW(lterminal->parent->parent->window), GTK_WIDGET(lterminal->terminal)); debug_where(); lterminal->signal_connected = TRUE; debug_print("child exit\n"); } int lcrt_check_space_string(const char *text) { if (text == NULL) return TRUE; const char *p = text; while ((*p == ' ' || *p == '\n') && *p != '\0') p++; if (*p != '\0') return FALSE; else return TRUE; } void lcrt_terminal_on_emulation_changed(VteTerminal *vteterminal, gpointer user_data) { debug_print("emulation_changed\n"); debug_where(); } void lcrt_terminal_set_connected_status(struct lcrt_terminal *lterminal) { struct lcrt_window *lwindow = lterminal->parent->parent; debug_print("Login success\n"); lterminal->connected =TRUE; debug_where(); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_CONNECTED); if (lterminal->signal_connected) { gtk_signal_disconnect_by_func(GTK_OBJECT(lterminal->terminal), G_CALLBACK(lcrt_terminal_on_key_press_event), lterminal); lterminal->signal_connected = FALSE; } gtk_window_set_focus(GTK_WINDOW(lwindow->window), GTK_WIDGET(lterminal->terminal)); if (lterminal->save_passwd) { lcrt_user_save_one(&lwindow->u_config, lwindow->current_user); } if (strlen(lterminal->user->command) != 0) { vte_terminal_feed_child(lterminal->terminal, lterminal->user->command, strlen(lterminal->user->command)); vte_terminal_feed_child(lterminal->terminal, "\n", 1); } } void lcrt_terminal_on_contents_changed(VteTerminal *vteterminal, gpointer user_data) { debug_where(); struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; struct lcrtc_user *user = lterminal->user; lcrt_protocol_t protocol = user->protocol; if (lterminal->connected == TRUE) return; lcrtc_user_dump(user, __func__); if (lterminal->ops && lterminal->ops->receive) lterminal->ops->receive(lterminal); } gboolean lcrt_terminal_on_label_title_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; debug_where(); if (event->type == GDK_BUTTON_PRESS && event->button == BUTTON_RIGHT) { struct lcrt_popup *lpopup = lcrt_create_popup_menu(lterminal); gtk_menu_popup (GTK_MENU(lpopup->popup_menu), NULL, NULL, NULL, NULL, event->button, event->time); debug_print("Create popup menu\n"); } return FALSE; } gboolean lcrt_terminal_on_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; debug_where(); if (event->type == GDK_BUTTON_PRESS && event->button == BUTTON_RIGHT && lterminal->connected == LCRT_TERMINAL_CONNECTED) { struct lcrt_edit *ledit = lcrt_edit_create_menuitem(lterminal->parent->parent->w_menubar, TRUE); g_signal_connect ((gpointer) ledit->e_menuitem, "deactivate", G_CALLBACK(lcrt_edit_on_popup_menu_deactivate), ledit); gtk_menu_popup (GTK_MENU(ledit->e_menuitem), NULL, NULL, NULL, NULL, event->button, event->time); debug_print("Create popup menu for terminal = %p\n", ledit); } return FALSE; } void lcrt_terminal_on_selection_changed(VteTerminal *vteterminal, gpointer user_data) { struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; struct lcrt_toolbar *ltoolbar = lterminal->parent->parent->w_toolbar; gboolean selected = vte_terminal_get_has_selection(lterminal->terminal); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_COPY], selected); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_PASTE], lterminal->connected == LCRT_TERMINAL_CONNECTED); } void lcrt_terminal_on_button_close_clicked(GtkButton *button, gpointer user_data) { debug_where(); struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; int rv = TRUE; if (lterminal->user->protocol != LCRT_PROTOCOL_SHELL && lterminal->connected == LCRT_TERMINAL_CONNECTED) { rv = lcrt_message_choose(lterminal->parent->parent->window, GTK_MESSAGE_WARNING, lterminal->parent->parent->w_status->config.value[LCRT_S_SESSION_DISCONNECT], lterminal->user->hostname); } if (rv == TRUE) lcrt_destroy_terminal(lterminal); } gboolean lcrt_terminal_has_selection(struct lcrt_window *lwindow) { if (lwindow == NULL || lwindow->w_notebook == NULL || lwindow->w_notebook->current_terminal == NULL) return FALSE; return vte_terminal_get_has_selection(lwindow->w_notebook->current_terminal->terminal); } lcrt-1.1.2/src/irename.c0000664000175000017500000002137411750112142011756 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:22 AM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "irename.h" #include "crename.h" int lcrt_rename_create_config(struct lcrt_rename *lrename); int lcrt_rename_load_config(struct lcrt_rename *lrename); int lcrt_rename_init_config(struct lcrt_rename *lrename); struct lcrt_rename *lcrt_create_dialog_rename( struct lcrt_window *parent, GtkWindow *window, const char *name, gboolean rename_terminal) { struct lcrt_rename *lrename; GtkWidget *dialog_rename; GtkWidget *dialog_vbox; GtkWidget *vbox; GtkWidget *label; GtkWidget *entry; GtkWidget *dialog_action_area; GtkWidget *cancelbutton; GtkWidget *alignment1; GtkWidget *hbox1; GtkWidget *image1; GtkWidget *label2; GtkWidget *okbutton; GtkWidget *alignment2; GtkWidget *hbox2; GtkWidget *image2; GtkWidget *label3; lrename =(struct lcrt_rename *)calloc(1, sizeof(struct lcrt_rename)); if (lrename == NULL) goto err; lcrt_rename_init_config(lrename); lcrt_rename_load_config(lrename); lrename->parent = parent; lrename->rename_terminal = rename_terminal; if (rename_terminal == TRUE) strncpy(lrename->rename, gtk_label_get_text(GTK_LABEL(parent->w_notebook->current_terminal->label)), sizeof(lrename->rename)); else strncpy(lrename->rename, name, sizeof(lrename->rename)); dialog_rename = gtk_dialog_new(); lrename->dialog = dialog_rename; gtk_widget_set_size_request(dialog_rename, 240, 105); gtk_window_set_transient_for(GTK_WINDOW(dialog_rename), (window != NULL ? window : GTK_WINDOW(parent->window))); gtk_window_set_modal (GTK_WINDOW (dialog_rename), TRUE); gtk_window_set_title (GTK_WINDOW (dialog_rename), lrename->config.value[LCRT_R_TITLE]); gtk_window_set_position (GTK_WINDOW (dialog_rename), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (dialog_rename), FALSE); gtk_window_set_type_hint (GTK_WINDOW (dialog_rename), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (dialog_rename), FALSE); dialog_vbox = GTK_DIALOG(dialog_rename)->vbox; gtk_widget_show(dialog_vbox); gtk_widget_set_size_request(dialog_vbox, 190, 105); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dialog_vbox), vbox, TRUE, TRUE, 0); label = gtk_label_new(lrename->config.value[LCRT_R_TIP]); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); gtk_widget_set_size_request(label, -1, 30); gtk_misc_set_alignment(GTK_MISC(label), 0.01, 0.5); entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry), lrename->rename); lrename->entry_rename = entry; gtk_widget_show(entry); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); gtk_widget_set_size_request(entry, -1, 30); gtk_entry_set_invisible_char(GTK_ENTRY(entry), 9679); GTK_WIDGET_SET_FLAGS (entry, GTK_CAN_DEFAULT); dialog_action_area = GTK_DIALOG(dialog_rename)->action_area; gtk_widget_show(dialog_action_area); gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area), GTK_BUTTONBOX_END); cancelbutton = gtk_button_new(); gtk_widget_show(cancelbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_rename), cancelbutton, GTK_RESPONSE_CANCEL); alignment1 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment1); gtk_container_add(GTK_CONTAINER(cancelbutton), alignment1); hbox1 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox1); gtk_container_add(GTK_CONTAINER(alignment1), hbox1); image1 = gtk_image_new_from_stock("gtk-cancel", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image1); gtk_box_pack_start(GTK_BOX(hbox1), image1, FALSE, FALSE, 0); label2 = gtk_label_new_with_mnemonic(lrename->config.value[LCRT_R_CANCEL]); gtk_widget_show(label2); gtk_box_pack_start(GTK_BOX(hbox1), label2, FALSE, FALSE, 0); okbutton = gtk_button_new(); lrename->okbutton = okbutton; gtk_widget_show(okbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_rename), okbutton, GTK_RESPONSE_OK); alignment2 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment2); gtk_container_add(GTK_CONTAINER(okbutton), alignment2); hbox2 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox2); gtk_container_add(GTK_CONTAINER(alignment2), hbox2); image2 = gtk_image_new_from_stock("gtk-ok", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image2); gtk_box_pack_start(GTK_BOX(hbox2), image2, FALSE, FALSE, 0); label3 = gtk_label_new_with_mnemonic(lrename->config.value[LCRT_R_OK]); gtk_widget_show(label3); gtk_box_pack_start(GTK_BOX(hbox2), label3, FALSE, FALSE, 0); g_signal_connect((gpointer)dialog_rename, "delete_event", G_CALLBACK(lcrt_rename_on_delete_event), lrename); g_signal_connect((gpointer)cancelbutton, "clicked", G_CALLBACK(lcrt_rename_on_cancelbutton_clicked), lrename); g_signal_connect((gpointer)okbutton, "clicked", G_CALLBACK(lcrt_rename_on_okbutton_clicked), lrename); g_signal_connect ((gpointer) entry, "changed", G_CALLBACK (lcrt_rename_on_name_changed), lrename); gtk_dialog_run(GTK_DIALOG(dialog_rename)); return lrename; err: lcrt_message_error(parent->window, lrename->config.value[LCRT_R_ERR_MSG]); return NULL; } void lcrt_destroy_rename(struct lcrt_rename *lrename) { if (lrename) free(lrename); } static const char *lcrt_rename_get_db_name(struct lcrt_rename *lrename) { return lrename->config.db.db_name; } static const char *lcrt_rename_get_tb_name(struct lcrt_rename *lrename) { return lrename->config.db.db_table; } int lcrt_rename_init_config(struct lcrt_rename *lrename) { char db_name[256]; int i; static char *name[LCRT_R_NUMBER] = {LCRT_R_NAME}; static char *value[LCRT_R_NUMBER] = {LCRT_R_VALUE}; assert(lrename); memset(&lrename->config, 0, sizeof(struct lcrtc_rename)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lrename->config.db, db_name, LCRT_IRENAME_TABLE); for (i = 0; i < LCRT_R_NUMBER; i++) { lrename->config.name[i] = name[i]; strncpy(lrename->config.value[i], value[i], sizeof(lrename->config.value[i])); } lrename->get_db = lcrt_rename_get_db_name; lrename->get_tb = lcrt_rename_get_tb_name; return 0; } int lcrt_rename_load_config(struct lcrt_rename *lrename) { int rv, i; assert(lrename); rv = lrename->config.db.select(&lrename->config.db, "SELECT * FROM %s", lrename->get_tb(lrename)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_rename_create_config(lrename); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_R_NUMBER && rv == LCRTE_OK; i++) { strncpy(lrename->config.value[i], lrename->config.db.get_text_col(&lrename->config.db, 1), sizeof(lrename->config.value[i])); rv = lrename->config.db.get_row(&lrename->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)lrename->get_db(lrename)), lrename->get_tb(lrename), lrename->config.name[i], lrename->config.value[i]); } return rv; } int lcrt_rename_create_config(struct lcrt_rename *lrename) { int i; assert(lrename); lrename->config.db.exec(&lrename->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255))", lrename->get_tb(lrename)); for (i = 0; i < LCRT_R_NUMBER; i++) { lrename->config.db.exec(&lrename->config.db, "INSERT INTO %s VALUES('%s', '%s')", lrename->get_tb(lrename), lrename->config.name[i], lrename->config.value[i]); } lrename->config.db.close(&lrename->config.db); return 0; } lcrt-1.1.2/src/rlogin.h0000664000175000017500000000025611750112142011631 00000000000000#ifndef __LCRT_RLOGIN_H__ #define __LCRT_RLOGIN_H__ #include #include "protocol.h" extern struct lcrt_protocol_callback lcrt_protocol_rlogin_callbacks; #endif lcrt-1.1.2/src/istatusbar.h0000664000175000017500000000130011750112142012507 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 11:32:42 PM CST * File Name: istatusbar.h * * Description: */ #ifndef __LCRT_ISTATUSBAR_H__ #define __LCRT_ISTATUSBAR_H__ #include "iwindow.h" struct lcrtc_statusbar { struct lcrt_config db; }; struct lcrt_statusbar { struct lcrt_window *parent; GtkWidget *statusbar; struct lcrtc_statusbar config; }; struct lcrt_statusbar *lcrt_create_statusbar(struct lcrt_window *parent); void lcrt_destroy_statusbar(struct lcrt_statusbar *lstatusbar); #endif lcrt-1.1.2/src/imenubar.h0000664000175000017500000000121511750112142012135 00000000000000#ifndef __LCRT_IMENUBER_H__ #define __LCRT_IMENUBER_H__ #include #include "iwindow.h" #define LCRT_MENUBAR_CONFIG_DIR "etc/menubar" #define LCRT_MENUBAR_DB "menubar.db" struct lcrt_file; struct lcrt_edit; struct lcrt_view; struct lcrt_options; struct lcrt_help; struct lcrt_menubar { struct lcrt_window *parent; GtkWidget *menubar; struct lcrt_file *m_file; struct lcrt_edit *m_edit; struct lcrt_view *m_view; struct lcrt_options *m_options; struct lcrt_help *m_help; }; struct lcrt_menubar * lcrt_create_menubar(struct lcrt_window *parent); void lcrt_destroy_menubar(struct lcrt_menubar *lmenubar); #endif lcrt-1.1.2/src/cmenubar.c0000664000175000017500000000044511750112142012126 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 11:58:22 PM CST * * * Description: */ #include lcrt-1.1.2/src/Makefile.am0000664000175000017500000000314511750112142012222 00000000000000bin_PROGRAMS = lcrt lcrt_SOURCES = lcrt.c \ iwindow.c iwindow.h \ cwindow.c cwindow.h \ imenubar.c imenubar.h \ cmenubar.c cmenubar.h \ ifile.c ifile.h \ cfile.c cfile.h \ iedit.c iedit.h \ cedit.c cedit.h \ iview.c iview.h \ cview.c cview.h \ ioptions.c ioptions.h \ coptions.c coptions.h \ ihelp.c ihelp.h \ chelp.c chelp.h \ itoolbar.c itoolbar.h \ ctoolbar.c ctoolbar.h \ inotebook.c inotebook.h \ cnotebook.c cnotebook.h \ istatusbar.c istatusbar.h \ cstatusbar.c cstatusbar.h \ iterminal.c iterminal.h \ cterminal.c cterminal.h \ istatus.c istatus.h \ cstatus.c cstatus.h \ ipopup.c ipopup.h \ cpopup.c cpopup.h \ ilogin.c ilogin.h \ clogin.c clogin.h \ iqconnect.c iqconnect.h \ cqconnect.c cqconnect.h \ iconnect.c iconnect.h \ cconnect.c cconnect.h \ ilock.c ilock.h \ clock.c clock.h \ irename.c irename.h \ crename.c crename.h \ imkdir.c imkdir.h \ cmkdir.c cmkdir.h \ ifind.c ifind.h \ cfind.c cfind.h \ isettings.c isettings.h \ csettings.c csettings.h \ iabout.c iabout.h \ cabout.c cabout.h \ iaccels.c iaccels.h \ caccels.c caccels.h \ foperate.c foperate.h \ mkconfig.c mkconfig.h \ message.c message.h \ support.c support.h \ protocol.c protocol.h \ user.c user.h \ serial.c serial.h \ ssh.c ssh.h \ telnet.c telnet.h \ rlogin.c rlogin.h \ shell.c shell.h \ lang.c \ list.h \ debug.h INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/language \ $(LCRT_LIB_DEPS_CFLAGS) lcrt_LDADD = \ $(LCRT_LIB_DEPS_LIBS) lcrt_CFLAGS = \ -DLCRT_INSTALL_DIR="\"$(datadir)/$(PACKAGE)\"" \ -DLCRT_HELP_DIR="\"$(datadir)/gnome/help/$(PACKAGE)\"" lcrt-1.1.2/src/protocol.h0000664000175000017500000000705511750112142012204 00000000000000/* * Copyright (c) 2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : Niu Tao * Created Time: Wed 10 Aug 2011 01:28:31 PM CST * File Name : protocol.h * * Description: */ #ifndef __LCRT_PROTOCOL_H__ #define __LCRT_PROTOCOL_H__ typedef enum { LCRT_PROTOCOL_SSH2, LCRT_PROTOCOL_SSH1, LCRT_PROTOCOL_TELNET, LCRT_PROTOCOL_TELNET_SSL, LCRT_PROTOCOL_RLOGIN, LCRT_PROTOCOL_SERIAL, LCRT_PROTOCOL_SHELL, LCRT_PROTOCOL_NUMBER, LCRT_PROTOCOL_UNKNOWN }lcrt_protocol_t; /** default port of protocol */ #define LCRT_PROTOCOL_PORT \ "22", \ "22", \ "23", /** #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "iqconnect.h" #include "debug.h" #include "message.h" #include "cqconnect.h" #include "serial.h" int lcrt_qconnect_init_config(struct lcrt_qconnect *lqconnect); int lcrt_qconnect_load_config(struct lcrt_qconnect *lqconnect); int lcrt_qconnect_create_config(struct lcrt_qconnect *lqconnect); int lcrt_create_qconnect( struct lcrt_window *parent, GtkWindow *window, lcrt_qconnect_flag_t flag, const char *uname, const char *folder) { struct lcrt_qconnect *lqconnect; debug_where(); GtkWidget *quick_connect; GtkWidget *vbox; GtkWidget *hbox1; GtkWidget *label_protocol; GtkWidget *combobox_protocol; GtkWidget *label_default_command; GtkWidget *entry_default_command; GtkWidget *hbox9; GtkWidget *checkbutton_show_quick_connect_on_startup; GtkWidget *hbox6; GtkWidget *fixed2; GtkWidget *checkbutton_save_session; GtkWidget *checkbutton_open_in_a_tab; GtkWidget *dialog_action_area; GtkWidget *button_connect; GtkWidget *button_cancel; GtkAccelGroup *accel_group; GtkWidget *hbox7; GtkWidget *hbox8; GtkWidget *fixed1; int i; static const char *proto[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_NAME}; debug_where(); lqconnect = (struct lcrt_qconnect *)calloc(1, sizeof(struct lcrt_qconnect)); if (lqconnect == NULL) goto err; lqconnect->parent = parent; lqconnect->flag = flag; lqconnect->uname = uname; if (folder) strncpy(lqconnect->folder, folder, DIRNAME_LEN); debug_where(); lcrt_qconnect_init_config(lqconnect); lcrt_qconnect_load_config(lqconnect); accel_group = gtk_accel_group_new (); quick_connect = gtk_dialog_new (); gtk_widget_set_size_request (quick_connect, 320, 380); gtk_window_set_transient_for(GTK_WINDOW(quick_connect), window != NULL ? window : GTK_WINDOW(lqconnect->parent->window)); gtk_widget_show(quick_connect); lqconnect->q_connect = quick_connect; vbox = GTK_DIALOG (lqconnect->q_connect)->vbox; if (flag == LCRT_QCONNECT_SESSION_OPTION) gtk_window_set_title (GTK_WINDOW (quick_connect), lqconnect->config.value[LCRT_Q_SESSION_OPTION]); else gtk_window_set_title (GTK_WINDOW (quick_connect), lqconnect->config.value[LCRT_Q_CONNECT]); gtk_window_set_modal(GTK_WINDOW(quick_connect), TRUE); gtk_window_set_position (GTK_WINDOW (quick_connect), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (quick_connect), FALSE); //gtk_window_set_type_hint (GTK_WINDOW (quick_connect), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (quick_connect), FALSE); g_signal_connect ((gpointer) quick_connect, "delete_event", G_CALLBACK (lcrt_qconnect_on_window_delete), lqconnect); vbox = GTK_DIALOG (quick_connect)->vbox; gtk_widget_show(vbox); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox), hbox1, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), hbox1, 0); gtk_widget_set_size_request (hbox1, -1, 30); label_protocol = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_PROTOCOL]); gtk_widget_show (label_protocol); gtk_box_pack_start (GTK_BOX (hbox1), label_protocol, FALSE, FALSE, 0); gtk_widget_set_size_request (label_protocol, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_protocol), 0, 0.5); combobox_protocol = gtk_combo_box_entry_new_text (); lqconnect->q_cb_protocol = combobox_protocol; gtk_widget_show (combobox_protocol); gtk_box_pack_start (GTK_BOX (hbox1), combobox_protocol, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_protocol, SERIAL_COMBOBOX_WIDTH, 25); g_signal_connect ((gpointer) combobox_protocol, "changed", G_CALLBACK (lcrt_qconnect_on_protocol_changed), lqconnect); for (i = 0; i < LCRT_PROTOCOL_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_protocol), proto[i]); } gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_protocol)->child), FALSE); if (flag == LCRT_QCONNECT_SESSION_OPTION) gtk_widget_set_sensitive(combobox_protocol, FALSE); //lcrt_qconnect_create_nonserial_window(lqconnect); //lcrt_qconnect_create_serial_window(lqconnect); hbox9 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox9); gtk_box_pack_start (GTK_BOX (vbox), hbox9, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), hbox9, 2); gtk_widget_set_size_request (hbox9, -1, 30); label_default_command = gtk_label_new(lqconnect->config.value[LCRT_Q_LB_DEFAULT_COMMAND]); gtk_widget_show (label_default_command); gtk_box_pack_start (GTK_BOX (hbox9), label_default_command, FALSE, FALSE, 0); gtk_widget_set_size_request (label_default_command, 90, 30); gtk_misc_set_alignment (GTK_MISC (label_default_command), 0, 0.5); entry_default_command = gtk_entry_new_with_max_length(DEFAULT_COMMAND_LEN); lqconnect->q_et_default_command = entry_default_command; gtk_widget_show (entry_default_command); gtk_box_pack_start (GTK_BOX (hbox9), entry_default_command, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_default_command, 220, 30); hbox7 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox7); gtk_box_pack_start (GTK_BOX (vbox), hbox7, FALSE, FALSE, 0); gtk_box_reorder_child (GTK_BOX (vbox), hbox7, 3); hbox8 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox8); gtk_box_pack_start (GTK_BOX (hbox7), hbox8, TRUE, TRUE, 0); fixed1 = gtk_fixed_new (); gtk_widget_show (fixed1); gtk_box_pack_start (GTK_BOX (hbox8), fixed1, FALSE, FALSE, 0); gtk_widget_set_size_request (fixed1, 15, -1); debug_where(); checkbutton_show_quick_connect_on_startup = gtk_check_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_CB_SHOW_QCONNECT]); lqconnect->q_cb_show_qconnect = checkbutton_show_quick_connect_on_startup; gtk_widget_show (checkbutton_show_quick_connect_on_startup); gtk_box_pack_start (GTK_BOX (hbox8), checkbutton_show_quick_connect_on_startup, FALSE, FALSE, 0); hbox6 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox6); gtk_box_pack_start (GTK_BOX (vbox), hbox6, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), hbox6, 4); fixed2 = gtk_fixed_new (); gtk_widget_show (fixed2); gtk_box_pack_start (GTK_BOX (hbox6), fixed2, FALSE, FALSE, 0); gtk_widget_set_size_request (fixed2, 15, -1); checkbutton_save_session = gtk_check_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_CB_SAVE_SESSION]); lqconnect->q_cb_save_session = checkbutton_save_session; gtk_widget_show (checkbutton_save_session); gtk_box_pack_start (GTK_BOX (hbox6), checkbutton_save_session, FALSE, FALSE, 0); gtk_widget_set_size_request (checkbutton_save_session, 150, -1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_save_session), TRUE); checkbutton_open_in_a_tab = gtk_check_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_CB_OPEN_IN_A_TAB]); lqconnect->q_cb_open_in_a_tab = checkbutton_open_in_a_tab; gtk_widget_show (checkbutton_open_in_a_tab); gtk_box_pack_start (GTK_BOX (hbox6), checkbutton_open_in_a_tab, FALSE, FALSE, 0); dialog_action_area = GTK_DIALOG (quick_connect)->action_area; gtk_widget_show (dialog_action_area); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area), GTK_BUTTONBOX_END); button_cancel = gtk_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_BT_CANCEL]); lqconnect->q_bt_cancel = button_cancel; gtk_widget_show (button_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (quick_connect), button_cancel, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (button_cancel, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) button_cancel, "clicked", G_CALLBACK (lcrt_qconnect_on_button_cancel_clicked), lqconnect); if (flag == LCRT_QCONNECT_SESSION_OPTION) button_connect = gtk_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_BT_OK]); else button_connect = gtk_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_BT_CONNECT]); lqconnect->q_bt_connect = button_connect; gtk_widget_show (button_connect); gtk_dialog_add_action_widget (GTK_DIALOG (quick_connect), button_connect, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (button_connect, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) button_connect, "clicked", G_CALLBACK (lcrt_qconnect_on_button_connect_clicked), lqconnect); gtk_widget_add_accelerator(button_connect, "clicked", accel_group, GDK_Return, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); debug_where(); gtk_window_add_accel_group (GTK_WINDOW (quick_connect), accel_group); /* quick connect dialog is created for modify session options */ if (flag == LCRT_QCONNECT_SESSION_OPTION) { struct lcrtc_user *user; if ((user = lcrt_user_find_by_name(&parent->u_config, uname)) != NULL) { gtk_combo_box_set_active(GTK_COMBO_BOX(lqconnect->q_cb_protocol), user->protocol); } } else { /* by default, we select ssh2 protocol */ gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_protocol), LCRT_PROTOCOL_SSH2); } debug_where(); int ret; do { ret = gtk_dialog_run(GTK_DIALOG(quick_connect)); debug_where(); } while (parent->q_status == GTK_RESPONSE_CANCEL); return ret; err: lcrt_message_error(parent->window, lqconnect->config.value[LCRT_Q_ERR_MSG]); return GTK_RESPONSE_DELETE_EVENT; } void lcrt_destroy_qconnect(struct lcrt_qconnect *lqconnect) { if (lqconnect) free(lqconnect); } static const char *lcrt_qconnect_get_db_name(struct lcrt_qconnect *lqconnect) { return lqconnect->config.db.db_name; } static const char *lcrt_qconnect_get_tb_name(struct lcrt_qconnect *lqconnect) { return lqconnect->config.db.db_table; } int lcrt_qconnect_init_config(struct lcrt_qconnect *lqconnect) { char db_name[256]; int i; static char *name[LCRT_Q_NUMBER] = {LCRT_Q_NAME}; static char *value[LCRT_Q_NUMBER] = {LCRT_Q_VALUE}; static int shortcut[LCRT_Q_NUMBER][2] = {LCRT_Q_SHORTCUT}; assert(lqconnect); memset(&lqconnect->config, 0, sizeof(struct lcrtc_qconnect)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lqconnect->config.db, db_name, LCRT_IQCONNECT_TABLE); for (i = 0; i < LCRT_Q_NUMBER; i++) { lqconnect->config.name[i] = name[i]; strncpy(lqconnect->config.value[i], value[i], sizeof(lqconnect->config.value[i])); lqconnect->config.shortcut[i][0] = shortcut[i][0]; lqconnect->config.shortcut[i][1] = shortcut[i][1]; } lqconnect->get_db = lcrt_qconnect_get_db_name; lqconnect->get_tb = lcrt_qconnect_get_tb_name; return 0; } int lcrt_qconnect_load_config(struct lcrt_qconnect *lqconnect) { int rv, i; assert(lqconnect); rv = lqconnect->config.db.select(&lqconnect->config.db, "SELECT * FROM %s", lqconnect->get_tb(lqconnect)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_qconnect_create_config(lqconnect); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_Q_NUMBER && rv == LCRTE_OK; i++) { strncpy(lqconnect->config.value[i], lqconnect->config.db.get_text_col(&lqconnect->config.db, 1), sizeof(lqconnect->config.value[i])); rv = lqconnect->config.db.get_row(&lqconnect->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)lqconnect->get_db(lqconnect)), lqconnect->get_tb(lqconnect), lqconnect->config.name[i], lqconnect->config.value[i], lqconnect->config.shortcut[i][0], lqconnect->config.shortcut[i][1]); } return rv; } int lcrt_qconnect_create_config(struct lcrt_qconnect *lqconnect) { int i; assert(lqconnect); lqconnect->config.db.exec(&lqconnect->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255), \ shortcut INTEGER, \ shortcut_mask INTEGER)", lqconnect->get_tb(lqconnect)); for (i = 0; i < LCRT_Q_NUMBER; i++) { lqconnect->config.db.exec(&lqconnect->config.db, "INSERT INTO %s VALUES('%s', '%s', %d, %d)", lqconnect->get_tb(lqconnect), lqconnect->config.name[i], lqconnect->config.value[i], lqconnect->config.shortcut[i][0], lqconnect->config.shortcut[i][1]); } lqconnect->config.db.close(&lqconnect->config.db); return 0; } lcrt-1.1.2/src/ssh.c0000664000175000017500000010557411750420215011143 00000000000000/* * Copyright (c) 2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 07 Aug 2011 05:01:18 PM CST * File Name : ssh.c * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include "iterminal.h" #include "iqconnect.h" #include "cqconnect.h" #include "ilogin.h" #include "debug.h" #include "ssh.h" /* authentication for ssh */ enum { LCRT_AUTH_PASSWD = 0, LCRT_AUTH_PUBLICKEY, LCRT_AUTH_KEYBOARD, LCRT_AUTH_GSSAPI, LCRT_AUTH_RSA, LCRT_AUTH_TIS, LCRT_AUTH_NUMBER }; struct lcrt_ssh_if { GtkWidget *hostname; GtkWidget *username; GtkWidget *firewall; GtkWidget *port; GtkWidget *passwd; GtkWidget *publickey; GtkWidget *keyboard; GtkWidget *gssapi; GtkWidget *rsa; GtkWidget *tis; GtkListStore *authliststore; GtkWidget *authtreeview; GtkWidget *properties; GtkWidget *ext[5]; }; struct lcrt_ssh_tm { int again; /**< the counter of try again to connect with remote */ int username_changed; /**< the flag to mark user change the username */ struct lcrt_login *login; /**< when create a new session, user should use login dialog to enter username and password */ }; static void lcrt_authentication_passwd_callback(struct lcrt_qconnect *lqconnect); static void lcrt_authentication_publickey_callback(struct lcrt_qconnect *lqconnect); static void lcrt_authentication_ketboard_callback(struct lcrt_qconnect *lqconnect); static void lcrt_authentication_gssapi_callback(struct lcrt_qconnect *lqconnect); static void lcrt_authentication_rsa_callback(struct lcrt_qconnect *lqconnect); static void lcrt_authentication_tis_callback(struct lcrt_qconnect *lqconnect); /* * because the third filed will be changed every time, so * this structure can not be used by more objects at same time */ struct __lcrt_ssh_auth { int auth; void (*callback)(struct lcrt_qconnect*lqconnect); struct lcrt_qconnect *user_data; }; static struct __lcrt_ssh_auth g_lcrt_ssh_auth[LCRT_AUTH_NUMBER] = { {TRUE, lcrt_authentication_passwd_callback, NULL}, {TRUE, lcrt_authentication_publickey_callback, NULL}, {TRUE, lcrt_authentication_ketboard_callback, NULL}, {TRUE, lcrt_authentication_gssapi_callback, NULL}, {TRUE, lcrt_authentication_rsa_callback, NULL}, {TRUE, lcrt_authentication_tis_callback, NULL}, }; static void lcrt_ssh_receive(struct lcrt_terminal *lterminal) { VteTerminal *vteterminal = lterminal->terminal; struct lcrt_window *lwindow = lterminal->parent->parent; struct lcrt_ssh_tm *tssh = (struct lcrt_ssh_tm *)lterminal->private_data; struct lcrtc_user *user = lterminal->user; char *text; debug_where(); debug_print("VTETerminal %p contents changed\n", vteterminal); text = vte_terminal_get_text(vteterminal, NULL, NULL, NULL); if (lcrt_check_space_string(text)) { debug_print("text null\n"); return; } #if 0 debug_print("++++++++++++++++++++++++CONTENTS++++++++++++++++++++++++\n"); debug_print("%s", text); debug_print("++++++++++++++++++++++++CONTENTS++++++++++++++++++++++++\n"); #endif if (strstr(text, "Connection timed out") != NULL) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); lcrt_message_error(lwindow->window, lcrt_terminal_get_config(lterminal, LCRT_TM_CONNECTION_TIMEOUT)); return; } if (strstr(text, "Connection refused") != NULL) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); lcrt_message_error(lwindow->window, lcrt_terminal_get_config(lterminal, LCRT_TM_CONNECTION_REFUSED)); return; } if (strstr(text, "Permission denied") != NULL) { tssh->again++; debug_print("Password or username error, try again %d\n", tssh->again); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); if (tssh->again >= 3) { //vte_terminal_feed(lterminal->terminal, "connect field\n", strlen("connect field\n")); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_DISCONNECT); lcrt_message_error(lterminal->parent->parent->window, lcrt_terminal_get_config(lterminal, LCRT_TM_CONNECTION_FAILED)); tssh->again = 0; return; } struct lcrt_login *login = lcrt_create_login(lterminal, TRUE); tssh->login = login; if (tssh->username_changed == TRUE) { kill(lterminal->child_pid, SIGKILL); lterminal->child_pid = 0; tssh->username_changed = FALSE; if (lterminal->ops && lterminal->ops->connect) lterminal->ops->connect(lterminal); return; } //lcrt_terminal_fork(lterminal); debug_where(); //return; } char password_alert[256]; sprintf(password_alert, "%s@%s's password:", user->username, user->hostname); if (strstr(text, password_alert) != NULL) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); /* * there is no password or username, we should create * a dialog to get username and password */ if (strlen(user->password) == 0 || strlen(user->username) == 0) { /* || (lterminal->connected == LCRT_TERMINAL_CONNECTING)) {*/ debug_print("Enter username or password\n"); tssh->login = lcrt_create_login(lterminal, FALSE); debug_where(); } debug_print("Auto send username and password\n"); if (tssh->username_changed == TRUE) { kill(lterminal->child_pid, SIGKILL); lterminal->child_pid = 0; tssh->username_changed = FALSE; if (lterminal->ops && lterminal->ops->connect) lterminal->ops->connect(lterminal); return; } vte_terminal_feed_child(vteterminal, user->password, strlen(user->password)); vte_terminal_feed_child(vteterminal, LCRT_TERMINAL_SEND_CMD, strlen(LCRT_TERMINAL_SEND_CMD)); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_CONNECTING); debug_where(); return; } if (strstr(text, "Are you sure you want to continue connecting") != NULL) { vte_terminal_feed_child(vteterminal, LCRT_TERMINAL_YES_CMD, strlen(LCRT_TERMINAL_YES_CMD)); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); lterminal->connected = LCRT_TERMINAL_WAIT_RETURN; debug_where(); return; } if (lterminal->connected == LCRT_TERMINAL_WAIT_RETURN) { vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); lterminal->connected = LCRT_TERMINAL_DISCONNECT; return; } #if 0 if (lterminal->connected == LCRT_TERMINAL_CONNECTING || lterminal->connected != LCRT_TERMINAL_WAIT_RETURN) #endif lcrt_terminal_set_connected_status(lterminal); return; } static int lcrt_ssh_connect(struct lcrt_terminal *lterminal) { lcrt_protocol_t protocol; struct lcrtc_user *user; char *argv[5], *work_dir; char hostname[256], port[32]; char *dep_prog[] = {LCRT_DEP_PROG}; int dep = -1; char tmp[32]; struct lcrt_ssh_tm *tssh; #if VTE_CHECK_VERSION(0, 26, 0) char path[512]; #endif if (lterminal == NULL) return -EINVAL; tssh = (struct lcrt_ssh_tm *)calloc(1, sizeof(struct lcrt_ssh_tm)); if (tssh == NULL) return -ENOMEM; lterminal->private_data = tssh; vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); user = lterminal->user; argv[0] = dep_prog[LCRT_DEP_SSH]; argv[1] = protocol == LCRT_PROTOCOL_SSH2 ? "-2" : "-1"; if (strlen(user->username) == 0) { strcpy(hostname, user->hostname); } else { sprintf(hostname, "%s@%s", user->username, user->hostname); } sprintf(port, "-p %d", user->port); argv[1] = hostname; argv[2] = port; argv[3] = NULL; work_dir = "."; if (lcrt_exec_check(protocol) != 0) { lcrt_message_info(lterminal->parent->parent->window, lterminal->parent->config.value[LCRT_TM_CONNECTION_PROG_NOT_FOUND], argv[0]); return -LCRTE_NOT_FOUND; } #if VTE_CHECK_VERSION(0, 26, 0) lcrt_echeck(argv[0], path); argv[0] = path; vte_terminal_fork_command_full( VTE_TERMINAL(lterminal->terminal), VTE_PTY_DEFAULT, work_dir, argv, NULL, 0, NULL, NULL, <erminal->child_pid, NULL); #else lterminal->child_pid = vte_terminal_fork_command(VTE_TERMINAL(lterminal->terminal), argv[0], argv, NULL , work_dir, FALSE, FALSE, FALSE); #endif debug_print("child_pid = %d\n", lterminal->child_pid); lcrt_statusbar_set_user(lterminal->parent->parent->w_statusbar, lterminal->user); debug_where(); return LCRTE_OK; } void lcrt_ssh_disconnect(struct lcrt_terminal *lterminal) { if (lterminal->connected) { vte_terminal_feed_child(lterminal->terminal, LCRT_TERMINAL_EXIT_CMD, strlen(LCRT_TERMINAL_EXIT_CMD)); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_DISCONNECT); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); } if (lterminal->private_data) { free(lterminal->private_data); lterminal->private_data = NULL; } } static void __lcrt_set_authentication_func( GtkCellRendererToggle *cell, const gchar *path_str, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; GtkTreePath *path; GtkTreeIter iter; struct __lcrt_ssh_auth *lcrt_ssh_auth; GtkTreeModel *model = GTK_TREE_MODEL(lssh->authliststore); path = gtk_tree_path_new_from_string (path_str); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, 0, &lcrt_ssh_auth, -1); //change record state lcrt_ssh_auth->auth = !lcrt_ssh_auth->auth; debug_where(); gtk_tree_model_row_changed (model, path, &iter); gtk_tree_path_free (path); gtk_widget_set_sensitive(lssh->properties, lcrt_ssh_auth->auth); } static void __lcrt_qconnect_create_ssh_authentication( GtkListStore *store, const gchar *text, struct __lcrt_ssh_auth *auth) { GtkTreeIter iter; gtk_list_store_append (store, &iter); //*brecord = !*brecord; gtk_list_store_set (store, &iter, 0, auth, 1, text, -1); } static void __lcrt_qconnect_create_ssh2_authentication(struct lcrt_qconnect *lqconnect) { struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; GtkListStore *store = lssh->authliststore; int i; for (i = 0; i < LCRT_AUTH_NUMBER; i++) { g_lcrt_ssh_auth[i].auth = TRUE; g_lcrt_ssh_auth[i].user_data = lqconnect; } __lcrt_qconnect_create_ssh_authentication(store, lqconnect->config.value[LCRT_Q_CB_PASSWD], &g_lcrt_ssh_auth[LCRT_AUTH_PASSWD]); __lcrt_qconnect_create_ssh_authentication(store, lqconnect->config.value[LCRT_Q_CB_PUBLICKEY], &g_lcrt_ssh_auth[LCRT_AUTH_PUBLICKEY]); __lcrt_qconnect_create_ssh_authentication(store, lqconnect->config.value[LCRT_Q_CB_KEYBOARD], &g_lcrt_ssh_auth[LCRT_AUTH_KEYBOARD]); __lcrt_qconnect_create_ssh_authentication(store, lqconnect->config.value[LCRT_Q_CB_GSSAPI], &g_lcrt_ssh_auth[LCRT_AUTH_GSSAPI]); } static void __lcrt_qconnect_create_ssh1_authentication(struct lcrt_qconnect *lqconnect) { struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; GtkListStore *store = lssh->authliststore; int i; for (i = 0; i < LCRT_AUTH_NUMBER; i++) { g_lcrt_ssh_auth[i].auth = TRUE; g_lcrt_ssh_auth[i].user_data = lqconnect; } __lcrt_qconnect_create_ssh_authentication(store, lqconnect->config.value[LCRT_Q_CB_PASSWD], &g_lcrt_ssh_auth[LCRT_AUTH_PASSWD]); __lcrt_qconnect_create_ssh_authentication(store, lqconnect->config.value[LCRT_Q_CB_RSA], &g_lcrt_ssh_auth[LCRT_AUTH_RSA]); __lcrt_qconnect_create_ssh_authentication(store, lqconnect->config.value[LCRT_Q_CB_TIS], &g_lcrt_ssh_auth[LCRT_AUTH_TIS]); } static void __lcrt_toggled_authentication( GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) { gboolean *selected; gtk_tree_model_get (model, iter, 0, &selected, -1); g_object_set (cell, "active", *selected, NULL); } /* start functions for authentication password */ void lcrt_ssh_password_on_cancelbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; debug_where(); gtk_widget_destroy(lssh->ext[0]); } static gboolean lcrt_ssh_password_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) { lcrt_ssh_password_on_cancelbutton_clicked(NULL, user_data); return FALSE; } void lcrt_ssh_password_on_okbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; struct lcrtc_user *user; if (strcmp(gtk_entry_get_text(GTK_ENTRY(lssh->ext[1])), gtk_entry_get_text(GTK_ENTRY(lssh->ext[2]))) != 0) { lcrt_message_error(lssh->ext[0], lqconnect->config.value[LCRT_Q_PPW_UNMATCH]); return; } if ((user = lcrt_user_find_by_name(&lqconnect->parent->u_config, lqconnect->uname)) == NULL) { lcrt_message_error(lssh->ext[0], "Can not find user %s.\n", lqconnect->uname); return; } lcrtc_user_set_data( user, NULL, NULL, LCRT_PROTOCOL_UNKNOWN, NULL, gtk_entry_get_text(GTK_ENTRY(lssh->ext[1])), NULL, -1, 1, NULL, -1 ); lcrt_ssh_password_on_cancelbutton_clicked(NULL, lqconnect); if (lcrt_window_get_auto_save(lqconnect->parent)) { lcrt_user_save_one(&lqconnect->parent->u_config, user); } debug_where(); return; } void lcrt_ssh_auth_password_dialog(struct lcrt_qconnect *lqconnect) { GtkWidget *dialog_password; GtkWidget *dialog_vbox1; GtkWidget *label_info; GtkWidget *vbox1; GtkWidget *table1; GtkWidget *label_spassword; GtkWidget *label_cpassword; GtkWidget *entry_spassword; GtkWidget *entry_cpassword; GtkWidget *checkbutton_remember; GtkWidget *dialog_action_area1; GtkWidget *cancelbutton; GtkWidget *okbutton; GtkAccelGroup *accel_group; struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; accel_group = gtk_accel_group_new (); debug_where(); dialog_password = gtk_dialog_new (); lssh->ext[0] = dialog_password; gtk_window_set_transient_for(GTK_WINDOW(dialog_password), GTK_WINDOW(lqconnect->parent->window)); gtk_window_set_title (GTK_WINDOW (dialog_password), lqconnect->config.value[LCRT_Q_PTITLE]); gtk_window_set_modal(GTK_WINDOW(dialog_password), TRUE); gtk_window_set_position (GTK_WINDOW (dialog_password), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (dialog_password), FALSE); //gtk_window_set_type_hint (GTK_WINDOW (dialog_password), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (dialog_password), FALSE); g_signal_connect ((gpointer) dialog_password, "delete_event", G_CALLBACK (lcrt_ssh_password_on_window_delete), lqconnect); dialog_vbox1 = GTK_DIALOG (dialog_password)->vbox; gtk_widget_show (dialog_vbox1); gtk_widget_set_size_request (dialog_vbox1, 320, 139); label_info = gtk_label_new (lqconnect->config.value[LCRT_Q_PPROMPT]); gtk_widget_show (label_info); gtk_box_pack_start (GTK_BOX (dialog_vbox1), label_info, FALSE, FALSE, 0); gtk_widget_set_size_request (label_info, 40, 30); gtk_misc_set_alignment (GTK_MISC (label_info), 0.5, 0.5); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0); table1 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (vbox1), table1, FALSE, FALSE, 0); label_spassword = gtk_label_new (lqconnect->config.value[LCRT_Q_PSTORE_PASSWORD]); gtk_widget_show (label_spassword); gtk_table_attach (GTK_TABLE (table1), label_spassword, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (label_spassword, 140, 30); gtk_misc_set_alignment (GTK_MISC (label_spassword), 0, 0.5); entry_spassword = gtk_entry_new (); lssh->ext[1]= entry_spassword; gtk_widget_show (entry_spassword); gtk_table_attach (GTK_TABLE (table1), entry_spassword, 1, 2, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (entry_spassword, 160, 30); gtk_entry_set_visibility(GTK_ENTRY(entry_spassword),FALSE); gtk_entry_set_invisible_char (GTK_ENTRY (entry_spassword), 9679); label_cpassword = gtk_label_new (lqconnect->config.value[LCRT_Q_PCONFIRM_PASSWORD]); gtk_widget_show (label_cpassword); gtk_table_attach (GTK_TABLE (table1), label_cpassword, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (label_cpassword, 140, 30); gtk_misc_set_alignment (GTK_MISC (label_cpassword), 0, 0.5); entry_cpassword = gtk_entry_new (); lssh->ext[2]= entry_cpassword; gtk_widget_show (entry_cpassword); gtk_entry_set_visibility(GTK_ENTRY(entry_cpassword),FALSE); gtk_table_attach (GTK_TABLE (table1), entry_cpassword, 1, 2, 1, 2, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (entry_cpassword, 160, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_cpassword), 9679); dialog_action_area1 = GTK_DIALOG (dialog_password)->action_area; gtk_widget_show (dialog_action_area1); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); cancelbutton = gtk_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_PCANCEL]); gtk_widget_show (cancelbutton); gtk_dialog_add_action_widget (GTK_DIALOG (dialog_password), cancelbutton, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (cancelbutton, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) cancelbutton, "clicked", G_CALLBACK (lcrt_ssh_password_on_cancelbutton_clicked), lqconnect); okbutton = gtk_button_new_with_mnemonic(lqconnect->config.value[LCRT_Q_POK]); gtk_widget_show (okbutton); gtk_dialog_add_action_widget (GTK_DIALOG (dialog_password), okbutton, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT); gtk_widget_add_accelerator(okbutton, "clicked", accel_group, GDK_Return, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); g_signal_connect ((gpointer) okbutton, "clicked", G_CALLBACK (lcrt_ssh_password_on_okbutton_clicked), lqconnect); gtk_window_add_accel_group (GTK_WINDOW (dialog_password), accel_group); gtk_widget_show(dialog_password); gtk_dialog_run(GTK_DIALOG(dialog_password)); return; err: lcrt_message_error(lqconnect->q_connect, lqconnect->config.value[LCRT_Q_ERR_MSG]); } static void lcrt_authentication_passwd_callback(struct lcrt_qconnect *lqconnect) { debug_where(); lcrt_ssh_auth_password_dialog(lqconnect); } /* end functions for authentication password */ static void lcrt_authentication_publickey_callback(struct lcrt_qconnect *lqconnect) { debug_where(); } static void lcrt_authentication_ketboard_callback(struct lcrt_qconnect *lqconnect) { debug_where(); } static void lcrt_authentication_gssapi_callback(struct lcrt_qconnect *lqconnect) { debug_where(); } static void lcrt_authentication_rsa_callback(struct lcrt_qconnect *lqconnect) { debug_where(); } static void lcrt_authentication_tis_callback(struct lcrt_qconnect *lqconnect) { debug_where(); } static void lcrt_ssh_on_button_properties_clicked(GtkButton *button, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; GtkTreeIter iter; GtkTreeModel *model; GtkTreeView *treeview = GTK_TREE_VIEW (lssh->authtreeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; char *value; struct __lcrt_ssh_auth *lcrt_ssh_auth; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, &lcrt_ssh_auth, -1); if (lcrt_ssh_auth->auth == TRUE && lqconnect->flag == LCRT_QCONNECT_SESSION_OPTION) lcrt_ssh_auth->callback(lcrt_ssh_auth->user_data); } } void lcrt_ssh_on_authentication_selection_changed(GtkWidget *widget, gpointer user_data) { struct lcrt_qconnect *lqconnect = (struct lcrt_qconnect *)user_data; struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; GtkTreeIter iter; GtkTreeModel *model; GtkTreeView *treeview = GTK_TREE_VIEW (lssh->authtreeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; gboolean *selected; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, &selected, -1); gtk_widget_set_sensitive(lssh->properties, *selected); } else { gtk_widget_set_sensitive(lssh->properties, FALSE); } } static void lcrt_ssh_show(struct lcrt_qconnect *lqconnect) { GtkWidget *vbox; GtkWidget *vbox_spec; GtkWidget *hbox2; GtkWidget *label_hostname; GtkWidget *entry_hostname; GtkWidget *hbox4; GtkWidget *label_username; GtkWidget *entry_username; GtkWidget *hbox3; GtkWidget *label_firewall; GtkWidget *combobox_firewall; GtkWidget *label_port; GtkWidget *entry_port; GtkWidget *frame; GtkWidget *alignment; GtkWidget *hbox_frame; GtkWidget *vbox_frame; GtkWidget *vbox3; GtkWidget *checkbutton_passwd; GtkWidget *vscrollbar; GtkWidget *vbox2; GtkWidget *button_properties; GtkWidget *fixed3; GtkWidget *label_frame; GtkWidget *tree_view; GtkWidget *scrolledwindow; GtkListStore *list_store; GtkCellRenderer *cell; GtkTreeSelection *selection; char *firewall[LCRT_FIREWALL_NUMBER] = {LCRT_FIREWALL_NAME}; int i; struct lcrt_window *parent; const char *str_port[LCRT_PROTOCOL_NUMBER] = {LCRT_PROTOCOL_PORT}; static struct lcrt_ssh_if slssh, *lssh = &slssh; memset(lssh, 0, sizeof(struct lcrt_ssh_if)); lqconnect->private_data = lssh; parent = lqconnect->parent; vbox = GTK_DIALOG (lqconnect->q_connect)->vbox; vbox_spec = gtk_vbox_new (FALSE, 0); lqconnect->q_vbox_spec = vbox_spec; gtk_widget_show (vbox_spec); gtk_box_pack_start (GTK_BOX (vbox), vbox_spec, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), vbox_spec, 1); gtk_widget_set_size_request (vbox_spec, -1, 210); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox2, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox2, -1, 25); label_hostname = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_HOSTNAME]); gtk_widget_show (label_hostname); gtk_box_pack_start (GTK_BOX (hbox2), label_hostname, FALSE, FALSE, 0); gtk_widget_set_size_request (label_hostname, 90, 30); gtk_misc_set_alignment (GTK_MISC (label_hostname), 0, 0.5); entry_hostname = gtk_entry_new_with_max_length(HOSTNAME_LEN); lssh->hostname = entry_hostname; gtk_widget_show (entry_hostname); gtk_box_pack_start (GTK_BOX (hbox2), entry_hostname, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_hostname, 220, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_hostname), 9679); g_signal_connect ((gpointer) entry_hostname, "changed", G_CALLBACK (lcrt_qconnect_on_entry_hostname_changed), lqconnect); hbox4 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox4); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox4, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox4, -1, 30); label_username = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_USERNAME]); gtk_widget_show (label_username); gtk_box_pack_start (GTK_BOX (hbox4), label_username, FALSE, FALSE, 0); gtk_widget_set_size_request (label_username, 90, 30); gtk_misc_set_alignment (GTK_MISC (label_username), 0, 0.5); entry_username = gtk_entry_new_with_max_length(USERNAME_LEN); lssh->username = entry_username; gtk_widget_show (entry_username); gtk_box_pack_start (GTK_BOX (hbox4), entry_username, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_username, 220, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_username), 9679); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox3, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox3, -1, 25); label_firewall = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_FIREWALL]); gtk_widget_show (label_firewall); gtk_box_pack_start (GTK_BOX (hbox3), label_firewall, FALSE, FALSE, 0); gtk_widget_set_size_request (label_firewall, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_firewall), 0, 0.5); combobox_firewall = gtk_combo_box_entry_new_text (); lssh->firewall = combobox_firewall; gtk_widget_show (combobox_firewall); gtk_box_pack_start (GTK_BOX (hbox3), combobox_firewall, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_firewall, 110, 25); debug_where(); for (i = 0; i < LCRT_FIREWALL_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_firewall), firewall[i]); } gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_firewall)->child), FALSE); debug_where(); label_port = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_PORT]); gtk_widget_show (label_port); gtk_box_pack_start (GTK_BOX (hbox3), label_port, FALSE, FALSE, 0); gtk_widget_set_size_request (label_port, 50, 30); gtk_misc_set_alignment (GTK_MISC (label_port), 0, 0.49); entry_port = gtk_entry_new (); lssh->port = entry_port; gtk_widget_show (entry_port); gtk_box_pack_start (GTK_BOX (hbox3), entry_port, FALSE, TRUE, 0); gtk_widget_set_size_request (entry_port, 60, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_port), 9679); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox3); gtk_box_pack_start (GTK_BOX (vbox_spec), vbox3, TRUE, TRUE, 0); gtk_widget_set_size_request (vbox3, -1, 105); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_widget_set_size_request (frame, -1, 105); gtk_box_pack_start (GTK_BOX (vbox3), frame, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); hbox_frame = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_frame); gtk_container_add (GTK_CONTAINER (frame), hbox_frame); vbox_frame = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox_frame); gtk_box_pack_start (GTK_BOX (hbox_frame), vbox_frame, FALSE, TRUE, 0); gtk_widget_set_size_request (vbox_frame, 200, -1); /* we should create button_properties before tree_view because * we should change the status of button_properties by tree_view. */ button_properties = gtk_button_new_with_mnemonic (lqconnect->config.value[LCRT_Q_BT_PROPERTIES]); lssh->properties= button_properties; gtk_widget_show (button_properties); gtk_widget_set_size_request (button_properties, 80, 30); gtk_widget_set_sensitive(button_properties, FALSE); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request (scrolledwindow, 200, -1); gtk_widget_show (scrolledwindow); gtk_box_pack_start (GTK_BOX (vbox_frame), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN); list_store = gtk_list_store_new (2, GTK_TYPE_POINTER, G_TYPE_STRING); lssh->authliststore = list_store; tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store)); lssh->authtreeview = tree_view; gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE); gtk_widget_show (tree_view); gtk_container_add (GTK_CONTAINER (scrolledwindow), tree_view); cell = gtk_cell_renderer_toggle_new (); g_signal_connect (cell, "toggled", G_CALLBACK (__lcrt_set_authentication_func), lqconnect); gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (tree_view), -1, "record", cell, __lcrt_toggled_authentication, NULL, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view), -1, "text", gtk_cell_renderer_text_new (), "text", 1, NULL); g_object_unref (list_store); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); g_signal_connect((gpointer)selection, "changed", G_CALLBACK(lcrt_ssh_on_authentication_selection_changed), lqconnect); if (lqconnect->nproto == LCRT_PROTOCOL_SSH2) { /* ssh2 authentication */ __lcrt_qconnect_create_ssh2_authentication(lqconnect); } else { /* ssh1 authentication */ __lcrt_qconnect_create_ssh1_authentication(lqconnect); } vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_box_pack_start (GTK_BOX (hbox_frame), vbox2, TRUE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox2), button_properties, FALSE, FALSE, 0); g_signal_connect ((gpointer) button_properties, "clicked", G_CALLBACK (lcrt_ssh_on_button_properties_clicked), lqconnect); fixed3 = gtk_fixed_new (); gtk_widget_show (fixed3); gtk_box_pack_start (GTK_BOX (hbox_frame), fixed3, TRUE, TRUE, 0); gtk_widget_set_size_request (fixed3, 10, -1); label_frame = gtk_label_new (lqconnect->config.value[LCRT_Q_LB_FRAME]); gtk_widget_show (label_frame); gtk_frame_set_label_widget (GTK_FRAME (frame), label_frame); gtk_label_set_use_markup (GTK_LABEL (label_frame), TRUE); gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_firewall), 0); if (lqconnect->flag == LCRT_QCONNECT_SESSION_OPTION) { struct lcrtc_user *user; char tmp[32]; if ((user = lcrt_user_find_by_name(&parent->u_config, lqconnect->uname)) != NULL) { gtk_window_set_focus(GTK_WINDOW(lqconnect->q_connect), lssh->hostname); gtk_entry_set_text(GTK_ENTRY(lssh->hostname), user->hostname); gtk_entry_set_text(GTK_ENTRY(lssh->username), user->username); sprintf(tmp, "%d", user->port); gtk_entry_set_text(GTK_ENTRY(lssh->port), tmp); gtk_entry_set_text(GTK_ENTRY(lqconnect->q_et_default_command), user->command); } } else { gtk_window_set_focus(GTK_WINDOW(lqconnect->q_connect), lssh->hostname); gtk_widget_set_sensitive(lqconnect->q_bt_connect, FALSE); } gtk_entry_set_text(GTK_ENTRY(lssh->port), str_port[lqconnect->nproto]); } static struct lcrtc_user *lcrt_ssh_create(struct lcrt_qconnect *lqconnect) { lcrt_protocol_t protocol = lqconnect->nproto; struct lcrt_window *lwindow = lqconnect->parent; struct lcrt_ssh_if *lssh = (struct lcrt_ssh_if *)lqconnect->private_data; const char *hostname; struct lcrtc_user *user; int i = 1; char name[HOSTNAME_LEN + 256]; debug_where(); hostname = gtk_entry_get_text(GTK_ENTRY(lssh->hostname)); strcpy(name, hostname); if (lqconnect->flag != LCRT_QCONNECT_SESSION_OPTION) { if ((user = lcrtc_user_create()) == NULL) { /* * FIXME: There is no more memory, how can * we handle this exception ? */ return; } lcrt_user_find_unused_label(lwindow, hostname, name); lcrtc_user_set_data( user, name, hostname, protocol, gtk_entry_get_text(GTK_ENTRY(lssh->username)), NULL, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), atoi(gtk_entry_get_text(GTK_ENTRY(lssh->port))), TRUE, lqconnect->folder, 0 ); lcrtc_user_ref(user); lcrt_user_add(&lwindow->u_config, user); lcrt_window_set_current_user(lwindow, user); if (lqconnect->flag == LCRT_QCONNECT_IN_TAB) { lcrt_create_terminal(lwindow->w_notebook); } } else { if ((user = lcrt_user_find_by_name(&lwindow->u_config, lqconnect->uname)) != NULL) { lcrtc_user_set_data( user, lqconnect->uname, hostname, protocol, gtk_entry_get_text(GTK_ENTRY(lssh->username)), NULL, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), atoi(gtk_entry_get_text(GTK_ENTRY(lssh->port))), TRUE, NULL, -1 ); } } lcrtc_user_dump(user, __func__); return user; } void lcrt_ssh_username_changed(struct lcrt_terminal *lterminal, int change) { struct lcrt_ssh_tm *tssh = (struct lcrt_ssh_tm *)lterminal->private_data; tssh->username_changed = change; } struct lcrt_protocol_callback lcrt_protocol_ssh2_callbacks = { .protocol = LCRT_PROTOCOL_SSH2, .receive = lcrt_ssh_receive, .connect = lcrt_ssh_connect, .disconnect = lcrt_ssh_disconnect, .show = lcrt_ssh_show, .create = lcrt_ssh_create, .changed = lcrt_ssh_username_changed, }; struct lcrt_protocol_callback lcrt_protocol_ssh1_callbacks = { .protocol = LCRT_PROTOCOL_SSH1, .receive = lcrt_ssh_receive, .connect = lcrt_ssh_connect, .disconnect = lcrt_ssh_disconnect, .show = lcrt_ssh_show, .create = lcrt_ssh_create, .changed = lcrt_ssh_username_changed, }; lcrt-1.1.2/src/iview.c0000664000175000017500000001500411750112142011452 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include "iwindow.h" #include "imenubar.h" #include "iview.h" #include "debug.h" #include "mkconfig.h" #include "iview.h" #include "cview.h" #include "foperate.h" #include "isettings.h" int lcrt_view_load_config(struct lcrt_view *lview); int lcrt_view_init_config(struct lcrt_view *lview); struct lcrt_view *lcrt_view_create_menuitem(struct lcrt_menubar *parent) { struct lcrt_view *lview; GtkWidget *v_menuitem; GtkWidget *v_menuitem_menu; //GtkWidget *v_menubar; GtkWidget *v_toolbar; GtkWidget *v_status_bar; GtkWidget *v_separator_1; GtkWidget *v_always_on_top; GtkWidget *v_full_screen; GtkAccelGroup *accel_group = parent->parent->w_accel; struct lcrt_settings *lsettings = parent->parent->w_settings; lview = (struct lcrt_view *)calloc(1, sizeof(struct lcrt_view)); assert(lview); lview->parent = parent; lcrt_view_init_config(lview); lcrt_view_load_config(lview); v_menuitem = gtk_menu_item_new_with_mnemonic (lview->config.value[LCRT_V_MENUITEM]); lview->v_menuitem = v_menuitem; gtk_widget_show (v_menuitem); g_signal_connect ((gpointer) v_menuitem, "activate", G_CALLBACK (lcrt_view_on_menuitem_activate), lview); v_menuitem_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (v_menuitem), v_menuitem_menu); #ifdef LCRT_SHOW_MENUBAR v_menubar = gtk_check_menu_item_new_with_mnemonic (lview->config.value[LCRT_V_MENUBAR]); lview->v_menubar = v_menubar; gtk_widget_show (v_menubar); gtk_container_add (GTK_CONTAINER (v_menuitem_menu), v_menubar); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (v_menubar), lview->config.status[LCRT_V_MENUBAR]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (v_menubar), TRUE); g_signal_connect ((gpointer) v_menubar, "activate", G_CALLBACK (lcrt_view_on_menubar_activate), lview); #endif v_toolbar = gtk_check_menu_item_new_with_mnemonic (lview->config.value[LCRT_V_TOOLBAR]); lview->v_toolbar = v_toolbar; gtk_widget_show (v_toolbar); gtk_container_add (GTK_CONTAINER (v_menuitem_menu), v_toolbar); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (v_toolbar), lsettings->lt_g_show_toolbar); g_signal_connect ((gpointer) v_toolbar, "activate", G_CALLBACK (lcrt_view_on_toolbar_activate), lview); v_status_bar = gtk_check_menu_item_new_with_mnemonic (lview->config.value[LCRT_V_STATUS_BAR]); lview->v_status_bar = v_status_bar; gtk_widget_show (v_status_bar); gtk_container_add (GTK_CONTAINER (v_menuitem_menu), v_status_bar); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (v_status_bar), lsettings->lt_g_show_statusbar); g_signal_connect ((gpointer) v_status_bar, "activate", G_CALLBACK (lcrt_view_on_status_bar_activate), lview); v_separator_1 = gtk_separator_menu_item_new (); gtk_widget_show (v_separator_1); gtk_container_add (GTK_CONTAINER (v_menuitem_menu), v_separator_1); gtk_widget_set_sensitive (v_separator_1, FALSE); v_always_on_top = gtk_check_menu_item_new_with_mnemonic (lview->config.value[LCRT_V_ALWAYS_ON_TOP]); lview->v_always_on_top = v_always_on_top; gtk_widget_show (v_always_on_top); gtk_container_add (GTK_CONTAINER (v_menuitem_menu), v_always_on_top); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (v_always_on_top), FALSE); g_signal_connect ((gpointer) v_always_on_top, "activate", G_CALLBACK (lcrt_view_on_always_on_top_activate), lview); v_full_screen = gtk_menu_item_new_with_mnemonic (lview->config.value[LCRT_V_FULL_SCREEN]); lview->v_full_screen = v_full_screen; gtk_widget_show (v_full_screen); gtk_container_add (GTK_CONTAINER (v_menuitem_menu), v_full_screen); gtk_widget_add_accelerator (v_full_screen, "activate", accel_group, lview->config.shortcut[LCRT_V_FULL_SCREEN][0], (GdkModifierType) lview->config.shortcut[LCRT_V_FULL_SCREEN][1], GTK_ACCEL_VISIBLE); g_signal_connect ((gpointer) v_full_screen, "activate", G_CALLBACK (lcrt_view_on_full_screen_activate), lview); return lview; } void lcrt_view_destroy_menuitem(struct lcrt_view *lview) { gtk_widget_destroy(lview->v_menuitem); if (lview) free(lview); } static const char *lcrt_view_get_db_name(struct lcrt_view *lview) { return lview == NULL ? NULL : lview->config.db.db_name; } static const char *lcrt_view_get_tb_name(struct lcrt_view *lview) { return lview == NULL ? NULL : lview->config.db.db_table; } int lcrt_view_init_config(struct lcrt_view *lview) { char db_name[256]; int i; static char *name[LCRT_V_NUMBER] = {LCRT_V_NAME}; static char *value[LCRT_V_NUMBER] = {LCRT_V_VALUE}; int shortcut[LCRT_V_NUMBER][2] = {LCRT_V_SHORTCUT}; assert(lview); memset(&lview->config, 0, sizeof(struct lcrtc_view)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lview->config.db, db_name, LCRT_IVIEW_TABLE); for (i = 0; i < LCRT_V_NUMBER; i++) { lview->config.name[i] = name[i]; strncpy(lview->config.value[i], value[i], sizeof(lview->config.value[i])); lview->config.shortcut[i][0] = shortcut[i][0]; lview->config.shortcut[i][1] = shortcut[i][1]; } lview->get_db = lcrt_view_get_db_name; lview->get_tb = lcrt_view_get_tb_name; return 0; } int lcrt_view_load_config(struct lcrt_view *lview) { int rv, i; assert(lview); rv = lview->config.db.select(&lview->config.db, "SELECT * FROM %s", lview->get_tb(lview)); if (rv == LCRTE_NO_TABLE) { return LCRTE_NO_CONFIG; } for (i = 0; i < LCRT_V_NUMBER && rv == LCRTE_OK; i++) { strncpy(lview->config.value[i], lview->config.db.get_text_col(&lview->config.db, 1), sizeof(lview->config.value[i])); rv = lview->config.db.get_row(&lview->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)lview->get_db(lview)), lview->get_tb(lview), lview->config.name[i], lview->config.value[i]); } return rv; } lcrt-1.1.2/src/ihelp.h0000664000175000017500000000317311750112142011441 00000000000000#ifndef __LCRT_IHELP_H__ #define __LCRT_IHELP_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_IHELP_TABLE "ihelp" enum { LCRT_H_MENUITEM, LCRT_H_HELP, LCRT_H_HOME_PAGE, LCRT_H_DOWNLOAD_PAGE, LCRT_H_ABOUT, LCRT_H_MISSING_DOC, LCRT_H_NO_NEW_VERSION, LCRT_H_NEW_VERSION, LCRT_H_CHECK_UPDATE_ERR, LCRT_H_NUMBER }; #define LCRT_H_NAME \ "h_menuitem", \ "h_help", \ "h_home_page", \ "h_download_page", \ "h_about", \ "h_missing_doc", \ "h_no_new_version",\ "h_new_version", \ "h_check_update_err" #define LCRT_H_VALUE \ "_Help", \ "help", \ "_Home Page", \ "_Download new version", \ "_About", \ "Missing help document!", \ "There is not new version!", \ "There is a new verison:%s\nDownload page: %s", \ "Check update error: may be network is unreachable!" #define LCRT_H_SHORTCUT \ {0, 0}, \ {GDK_F1, 0}, \ {0, 0}, \ {0, 0} struct lcrtc_help { struct lcrt_config db; const char *name[LCRT_H_NUMBER]; char value[LCRT_H_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_H_NUMBER][2]; }; struct lcrt_help { struct lcrt_menubar *parent; GtkWidget *h_menuitem; GtkWidget *h_help; GtkWidget *h_home_page; GtkWidget *h_download_page; GtkWidget *h_about; struct lcrtc_help config; const char *(*get_db)(struct lcrt_help *ledit); const char *(*get_tb)(struct lcrt_help *ledit); }; struct lcrt_help *lcrt_help_create_menuitem(struct lcrt_menubar *parent); void lcrt_help_destroy_menuitem(struct lcrt_help *lhelp); #endif lcrt-1.1.2/src/cabout.h0000664000175000017500000000041211750112142011606 00000000000000#ifndef __LCRT_CABOUT_H__ #define __LCRT_CABOUT_H__ #include void lcrt_about_url_hook(GtkAboutDialog *about, const char *link, gpointer user_data); void lcrt_about_email_hook(GtkAboutDialog * about, const char *email_address, gpointer user_data); #endif lcrt-1.1.2/src/iconnect.h0000664000175000017500000000606711750145015012154 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 22 Jan 2011 04:18:02 PM CST * * * Description: */ #ifndef __LCRT_ICONNECT_H__ #define __LCRT_ICONNECT_H__ #include #include #include "mkconfig.h" #include "iwindow.h" #define LCRT_ICONNECT_TABLE "iconnect" enum { LCRT_C_CONNECT_IN_TAB, LCRT_C_CONNECT, LCRT_C_QUICK_CONNECT, LCRT_C_RENAME, LCRT_C_DELETE, LCRT_C_FIND, LCRT_C_SESSION_OPTION, LCRT_C_MKDIR, LCRT_C_SESSION, LCRT_C_SHOW_DIALOG_ON_STARTUP, LCRT_C_CONNECT_BUTTON, LCRT_C_CLOSE_BUTTON, LCRT_C_WARN_MSG, LCRT_C_ERR_MSG, LCRT_C_NUMBER }; #define LCRT_C_NAME \ "c_connect_in_tab", \ "c_connect", \ "c_quick_connect", \ "c_rename", \ "c_delete", \ "c_find", \ "c_session_option", \ "c_mkdir", \ "c_session", \ "c_show_dialog_on_startup", \ "c_connect_button", \ "c_close_button", \ "c_warn_msg", \ "c_err_msg" #define LCRT_C_VALUE \ "Connect in Tab", \ "Connect", \ "Quick Connect", \ "Rename a session", \ "Delete a session", \ "Find a session", \ "Session option", \ "Create new folder", \ "Sessions", \ "Show dialog on startup", \ "Connect", \ "Close", \ "Are you sure you want to delete the selected item ?", \ "There is no memory to create window" #define LCRT_C_ICONS \ "", \ "lcrt-connect.png", \ "lcrt-quick-connect.png", \ "lcrt-rename.png", \ "lcrt-delete.png", \ "lcrt-find.png", \ "lcrt-settings.png", \ "lcrt-mkdir.png", #define LCRT_C_CALLBACK \ NULL, \ NULL, \ lcrt_connect_on_quick_connect_activate, \ lcrt_connect_on_rename_activate, \ lcrt_connect_on_delete_activate, \ lcrt_connect_on_find_activate, \ lcrt_connect_on_session_option_activate, \ lcrt_connect_on_mkdir_activate, \ #define LCRT_C_SHORTCUT \ {0, 0} struct lcrtc_connect { struct lcrt_config db; const char *name[LCRT_C_NUMBER]; char value[LCRT_C_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_C_NUMBER][2]; }; struct lcrt_connect { struct lcrt_window *parent; GtkWidget *c_connect; GtkWidget *c_toolbar; GtkWidget *c_checkbutton; GtkWidget *c_connectbutton; GtkWidget *toolitem[LCRT_C_NUMBER]; gboolean connect_button_clicked; GtkTreeIter c_treeiter; GtkWidget *c_treeview; gboolean tab; int find_index; #define LCRT_FIND_INDEX_INVALID -1 struct lcrtc_connect config; const char *(*get_db)(struct lcrt_connect *lconnect); const char *(*get_tb)(struct lcrt_connect *lconnect); }; int lcrt_create_connect(struct lcrt_window *parent, gboolean tab); void lcrt_destroy_connect(struct lcrt_connect *lconnect); int lcrt_connect_del_user(struct lcrt_connect *lconnect, const char *user_name); int lcrt_connect_find_folder(struct lcrt_connect *lconnect, GtkTreeIter *folder, const char *folder_name); #endif lcrt-1.1.2/src/caccels.h0000664000175000017500000000115711750112142011735 00000000000000#ifndef __LCRT_CACCELS_H__ #define __LCRT_CACCELS_H__ void lcrt_accels_set_data(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data); void lcrt_accels_on_edited(GtkCellRendererAccel *cell, gchar *path_string, guint keyval, GdkModifierType mask, guint hardware_keycode, gpointer user_data); #endif lcrt-1.1.2/src/cconnect.c0000664000175000017500000002774211750477604012160 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Thu 27 Jan 2011 12:24:25 AM CST * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include "iterminal.h" #include "iwindow.h" #include "cwindow.h" #include "iconnect.h" #include "cconnect.h" #include "iqconnect.h" #include "debug.h" #include "user.h" #include "message.h" #include "cstatusbar.h" #include "irename.h" #include "ifind.h" void lcrt_connect_on_connectbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; debug_where(); lconnect->connect_button_clicked = TRUE; lcrt_connect_on_button_press_event(NULL, NULL, user_data); } void lcrt_connect_on_cancelbutton_clicked (GtkButton *button, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; lcrt_statusbar_set_message(lconnect->parent->w_statusbar, ""); debug_where(); gtk_widget_destroy(lconnect->c_connect); lcrt_destroy_connect(lconnect); } gboolean lcrt_connect_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) { debug_where(); lcrt_connect_on_cancelbutton_clicked(NULL, user_data); return FALSE; } void lcrt_connect_on_quick_connect_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; GtkTreeIter same; int rv; char *value = NULL; GtkTreeIter iter; GtkTreeModel *model; struct lcrtc_user *user; GtkTreeView *treeview = GTK_TREE_VIEW (lconnect->c_treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; debug_where(); if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, &value, -1); #if 0 if (!lcrt_connect_find_folder(lconnect, &same, value)) { g_free(value); value = NULL; } #else if ((user = lcrt_user_find_by_name(&lconnect->parent->u_config, value)) == NULL) { g_free(value); value = NULL; } else if (!user->is_folder && strlen(user->folder) != 0) { g_free(value); value = g_malloc(strlen(user->folder) + 1); strcpy(value, user->folder); } #endif } debug_where(); rv = lcrt_create_qconnect(lconnect->parent, GTK_WINDOW(lconnect->c_connect), LCRT_QCONNECT_IN_WINDOW, NULL, value); if (value) g_free(value); if (rv == GTK_RESPONSE_OK) { if (lconnect->tab == TRUE) lcrt_create_terminal(lconnect->parent->w_notebook); lcrt_connect_on_cancelbutton_clicked(NULL, user_data); } } void lcrt_connect_on_rename_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; struct lcrt_window *lwindow = lconnect->parent; struct lcrtc_user *user; GValue gvalue = {G_TYPE_STRING}; int rv; debug_where(); GtkTreeIter iter; GtkTreeModel *model; GtkTreeView *treeview = GTK_TREE_VIEW (lconnect->c_treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; char *value; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { memset(lwindow->current_uname, 0, HOSTNAME_LEN); gtk_tree_model_get(model, &iter, 0, &value, -1); if (strcmp(value, lconnect->config.value[LCRT_C_SESSION]) == 0) { g_free(value); return; } lcrt_create_dialog_rename(lwindow, GTK_WINDOW(lconnect->c_connect), value, FALSE); if (strcmp(lwindow->current_uname, "") != 0) { if ((user = lcrt_user_find_by_name(&lwindow->u_config, value)) != NULL) { rv = lcrt_user_rename(&lwindow->u_config, user, lwindow->current_uname, lcrt_window_get_auto_save(lwindow)); if (rv == LCRTE_OK) { g_value_set_string(&gvalue, lwindow->current_uname); gtk_tree_store_set_value( GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (treeview))), &iter, 0, &gvalue); } } memset(lwindow->current_uname, 0, HOSTNAME_LEN); } g_free(value); } } void lcrt_connect_on_delete_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; struct lcrt_window *lwindow = lconnect->parent; GtkTreeIter iter; GtkTreeModel *model; GtkTreeView *treeview = GTK_TREE_VIEW (lconnect->c_treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; char *value; struct lcrtc_user *user; debug_where(); if (gtk_tree_selection_get_selected(selection, &model, &iter) == FALSE) return; gtk_tree_model_get(model, &iter, 0, &value, -1); if (strcmp(value, lconnect->config.value[LCRT_C_SESSION]) == 0) goto out; if ((user = lcrt_user_find_by_name(&lwindow->u_config, value)) == NULL) goto out; gboolean ok = lcrt_message_choose(lwindow->window, GTK_MESSAGE_WARNING, lconnect->config.value[LCRT_C_WARN_MSG]); if (ok == TRUE) { int del_from_db; /* delete item from treelist */ lcrt_connect_del_user(lconnect, value); del_from_db = lcrt_window_get_auto_save(lwindow); if (user->is_folder) { /* delete folder and all this's children */ lcrt_user_del_folder(&lwindow->u_config, user, del_from_db); } else { /*delete user from user.db*/ lcrt_user_del_one(&lwindow->u_config, user, del_from_db); } } out: g_free(value); } void lcrt_connect_on_find_callback(struct lcrt_connect *lconnect) { GtkTreeIter root, child; GtkTreeView *treeview = GTK_TREE_VIEW (lconnect->c_treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview); GtkTreeModel *model = gtk_tree_view_get_model(treeview); char *value; int i, n; debug_where(); gtk_tree_model_get_iter_root(model, &root); n = gtk_tree_model_iter_n_children(model, &root); if (lconnect->find_index == LCRT_FIND_INDEX_INVALID || lconnect->find_index == n) i = 0; else i = lconnect->find_index; for (;i < n; i++) { if (gtk_tree_model_iter_nth_child(model, &child, &root, i) == TRUE) { gtk_tree_model_get(model, &child, 0, &value, -1); if (strcmp(lconnect->parent->current_uname, value) == 0) { gtk_tree_selection_select_iter(selection, &child); lconnect->find_index = i; g_free(value); break; } g_free(value); } } } void lcrt_connect_on_find_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; debug_where(); memset(lconnect->parent->current_uname, 0, HOSTNAME_LEN); lcrt_create_dialog_find(lconnect, LCRT_FIND_FCONNECT); } gboolean lcrt_connect_on_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; struct lcrt_window *lwindow = lconnect->parent; struct lcrtc_user *user; int expand; char *value; GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; GtkTreeView *treeview = GTK_TREE_VIEW (lconnect->c_treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; debug_where(); /** only handle double click event */ if (!(lconnect->connect_button_clicked == TRUE || (event->type == GDK_2BUTTON_PRESS && event->button == BUTTON_LEFT))) goto out; debug_print("double clicked\n"); lconnect->connect_button_clicked = FALSE; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, &value, -1); if (strcmp(value, lconnect->config.value[LCRT_C_SESSION]) == 0) { debug_print("first\n"); } else { debug_print("select: %s\n", value); if ((user = lcrt_user_find_by_name(&lwindow->u_config, value)) != NULL) { /** double click a entry, then i will create a connection label, * and destory current dialog. */ if (!user->is_folder) { lcrt_window_set_current_user(lwindow, user); if (lconnect->tab == TRUE) lcrt_create_terminal(lwindow->w_notebook); lcrt_connect_on_cancelbutton_clicked(NULL, user_data); } else { /** double click a directory, then i will close or open this directory */ path = gtk_tree_model_get_path(model, &iter); expand = gtk_tree_view_row_expanded(treeview, path); if (expand) gtk_tree_view_collapse_row(treeview, path); else gtk_tree_view_expand_to_path(treeview, path); } } } g_free(value); } else { debug_print("unselect\n"); } out: return FALSE; } void lcrt_connect_on_selection_changed(GtkWidget *widget, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; struct lcrt_window *lwindow = lconnect->parent; struct lcrtc_user *user; debug_where(); GtkTreeIter iter; GtkTreeModel *model; GtkTreeView *treeview = GTK_TREE_VIEW (lconnect->c_treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; char *value; int sensitive; lconnect->connect_button_clicked = FALSE; if (!gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_widget_set_sensitive(lconnect->c_connectbutton, FALSE); return; } gtk_tree_model_get(model, &iter, 0, &value, -1); if (strcmp(value, lconnect->config.value[LCRT_C_SESSION]) != 0) { debug_print("select on change: %s\n", value); if ((user = lcrt_user_find_by_name(&lwindow->u_config, value)) != NULL) { debug_where(); lcrt_statusbar_set_user(lwindow->w_statusbar, user); } if (user->is_folder) sensitive = FALSE; else sensitive = TRUE; } else { sensitive = FALSE; } gtk_widget_set_sensitive(lconnect->c_connectbutton, sensitive); g_free(value); } void lcrt_connect_on_session_option_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; struct lcrt_window *lwindow = lconnect->parent; struct lcrtc_user *user; GValue gvalue = {G_TYPE_STRING}; GtkTreeIter same; int rv; debug_where(); GtkTreeIter iter; GtkTreeModel *model; GtkTreeView *treeview = GTK_TREE_VIEW (lconnect->c_treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);; char *value; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, &value, -1); if ((user = lcrt_user_find_by_name(&lconnect->parent->u_config, value)) != NULL && !user->is_folder) { lcrt_create_qconnect(lwindow, NULL, LCRT_QCONNECT_SESSION_OPTION, value, NULL); } g_free(value); } } void lcrt_connect_on_mkdir_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; struct lcrt_window *lwindow = lconnect->parent; struct lcrtc_user *user; int rv; debug_where(); lcrt_create_dialog_mkdir(lconnect, GTK_WINDOW(lconnect->c_connect)); } lcrt-1.1.2/src/mkconfig.c0000664000175000017500000001621711751624073012147 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include "debug.h" #include "mkconfig.h" #include "sqlite3.h" #include "foperate.h" #include "language.h" static char local_config_dir[256] = {0}; static char config_language[512] = {0}; static int lcrt_config_open(struct lcrt_config *config) { if (config == NULL || strlen(config->db_name) == 0) return EINVAL; if (config->db != NULL) return LCRTE_OK; debug_where(); config->db_rv = sqlite3_open(config->db_name, &config->db); if (config->db_rv != SQLITE_OK) { debug_print("Can't open database: %s\n", sqlite3_errmsg(config->db)); sqlite3_close(config->db); config->db = NULL; return EIO; } return LCRTE_OK; } static int lcrt_config_close(struct lcrt_config *config) { if (config == NULL || config->db == NULL) return 0; debug_where(); sqlite3_close(config->db); config->db = NULL; return 0; } static int lcrt_config_changes(struct lcrt_config *config) { if (config == NULL) return 0; return sqlite3_changes(config->db); } static int lcrt_config_exec(struct lcrt_config *config, const char *format, ...) { int rv; char sql[4096]; va_list args; if (config == NULL || (rv = config->open(config)) != 0) return rv; debug_where(); va_start(args, format); vsprintf(sql, format, args); va_end(args); config->db_rv = sqlite3_exec(config->db, sql, 0, 0, NULL); if (config->db_rv != SQLITE_OK) return EIO; return LCRTE_OK; } static int lcrt_config_select(struct lcrt_config *config, const char *format, ...) { int rv; char sql[4096]; va_list args; const char *tail; debug_where(); if (config == NULL || (rv = config->open(config)) != 0) return rv; va_start(args, format); vsprintf(sql, format, args); va_end(args); config->db_rv = sqlite3_prepare(config->db, sql, -1, &config->db_res, &tail); if (config->db_rv != SQLITE_OK) { return LCRTE_NO_TABLE; } if (sqlite3_step(config->db_res) == SQLITE_DONE) { config->db_columns = 0; return LCRTE_NOT_FOUND; } config->db_columns = sqlite3_column_count(config->db_res); return LCRTE_OK; } static int lcrt_config_finalize(struct lcrt_config *config) { if (config == NULL || config->db_res == NULL) return EINVAL; sqlite3_finalize(config->db_res); config->db_res = NULL; return LCRTE_OK; } static int lcrt_config_get_row(struct lcrt_config *config) { if (config == NULL) return EINVAL; config->db_rv = sqlite3_step(config->db_res); if (config->db_rv == SQLITE_ROW) return LCRTE_OK; else return LCRTE_NOT_FOUND; } static const char *lcrt_config_get_text_column(struct lcrt_config *config, int column) { if (config == NULL || column < 0) { return (const char *)NULL; } return (const char *)sqlite3_column_text(config->db_res, column); } static int lcrt_config_get_int_column(struct lcrt_config *config, int column) { if (config == NULL || column < 0) { return EINVAL; } return sqlite3_column_int(config->db_res, column); } static int lcrt_config_load_language() { char buf[256]; int rv; struct lcrt_config config; char *path[] = {".", "..", LCRT_INSTALL_DIR}; int i; snprintf(buf, sizeof(buf), "%s/"LANGUAGE_DIR, local_config_dir); lcrt_fmkdir(buf); snprintf(buf, sizeof(buf), "%s/%s/"LANGUAGE_DB_NAME, local_config_dir, LANGUAGE_DIR); lcrt_config_init(&config, buf, LANGUAGE_DB_TABLE); if (config.open(&config) != 0) { strncpy(buf, DEFAULT_LANGUAGE_DB, sizeof(buf)); goto out; } rv = config.select(&config, "SELECT * FROM %s where name='language'", config.db_table); if (rv == LCRTE_NOT_FOUND || rv == LCRTE_NO_TABLE) { strncpy(buf, DEFAULT_LANGUAGE_DB, sizeof(buf)); if (rv == LCRTE_NO_TABLE) config.exec(&config, "CREATE TABLE %s(name VARCHAR(64) PRIMARY KEY, value VARCHAR(255))", config.db_table); config.exec(&config, "INSERT INTO %s VALUES('language', '%s')", config.db_table, buf); goto out1; } else { strncpy(buf, config.get_text_col(&config, 1), sizeof(buf)); config.get_row(&config); } out1: config.close(&config); out: debug_print("CURRENT LANGUAGE = %s\n", buf); for (i = 0; i < 3; i++) { sprintf(config_language, "%s/%s/%s", path[i], LANGUAGE_DIR, buf); if (access(config_language, F_OK | R_OK) == 0) goto ret; } fprintf(stderr, "LCRT:missing language database\n"); ret: debug_print("LANGUAGE DIR: %s\n", config_language); return LCRTE_OK; } int lcrt_config_save_language(char *language_name) { char buf[256]; int rv; struct lcrt_config config; snprintf(buf, sizeof(buf), "%s/"LANGUAGE_DIR, local_config_dir); lcrt_fmkdir(buf); snprintf(buf, sizeof(buf), "%s/%s/"LANGUAGE_DB_NAME, local_config_dir, LANGUAGE_DIR); lcrt_config_init(&config, buf, LANGUAGE_DB_TABLE); rv = config.select(&config, "SELECT * FROM %s WHERE name='language'", config.db_table); if (rv == LCRTE_NOT_FOUND || rv == LCRTE_NO_TABLE) { if (rv == LCRTE_NO_TABLE) config.exec(&config, "CREATE TABLE %s(name VARCHAR(64) PRIMARY KEY, value VARCHAR(255))", config.db_table); rv = config.exec(&config, "INSERT INTO %s VALUES('language', '%s')", config.db_table, language_name); debug_where(); } else { strncpy(buf, config.get_text_col(&config, 1), sizeof(buf)); config.get_row(&config); rv = config.exec(&config, "UPDATE %s SET value='%s' WHERE name='language'", config.db_table,language_name); } config.close(&config); return LCRTE_OK; } int lcrt_config_load() { char *home; if ((home = getenv("HOME")) == NULL) { home = "."; } snprintf(local_config_dir, sizeof(local_config_dir), "%s/.lcrt", home); lcrt_fmkdir(local_config_dir); lcrt_config_load_language(); return 0; } const char *lcrt_config_get_local_dir() { return local_config_dir; } const char *lcrt_config_get_language() { return config_language; } int lcrt_config_init(struct lcrt_config *config, const char *db_name, const char *db_table) { if (config == NULL || db_name == NULL) return EINVAL; memset(config, 0, sizeof(struct lcrt_config)); strncpy(config->db_name, db_name, sizeof(config->db_name)); if (db_table) strncpy(config->db_table, db_table, sizeof(config->db_table)); config->open = lcrt_config_open; config->close = lcrt_config_close; config->exec = lcrt_config_exec; config->select = lcrt_config_select; config->get_row = lcrt_config_get_row; config->get_text_col = lcrt_config_get_text_column; config->get_int_col = lcrt_config_get_int_column; config->changes = lcrt_config_changes; config->finalize = lcrt_config_finalize; return 0; } #if 0 const struct lcrt_support_language *lcrt_get_languages() { return (const struct lcrt_support_language *)lcrt_support_languages; } #endif lcrt-1.1.2/src/message.h0000664000175000017500000000057611750112142011770 00000000000000#ifndef _LCRT_MESSAGE_H #define _LCRT_MESSAGE_H #include void lcrt_message_warning(GtkWidget *window, const char *format, ...); void lcrt_message_error(GtkWidget *window, const char *format, ...); gboolean lcrt_message_choose(GtkWidget *window, GtkMessageType type, const char *format, ...); void lcrt_message_info(GtkWidget *window, const char *format, ...); #endif lcrt-1.1.2/src/cnotebook.h0000664000175000017500000000165411750112142012325 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 11:34:47 PM CST * * Description: */ #ifndef __LCRT_CNOTEBOOK_H__ #define __LCRT_CNOTEBOOK_H__ #include void lcrt_notebook_on_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data); int lcrt_notebook_control_terminal(GtkAccelGroup *accelgroup, GObject *arg1, guint key, GdkModifierType key_mask, gpointer user_data); void lcrt_notebook_on_page_removed(GtkNotebook *notebook, GtkWidget *child, guint page_num, gpointer user_data); #endif lcrt-1.1.2/src/clock.c0000664000175000017500000000414411750412100011422 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "ilock.h" #include "clock.h" void lcrt_lock_on_okbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_lock *llock = (struct lcrt_lock *)user_data; struct lcrt_terminal *lterminal = llock->parent; char *password, *repassword; password = (char *)gtk_entry_get_text(GTK_ENTRY(llock->entry_password)); if (lterminal->locked == FALSE) { repassword = (char *)gtk_entry_get_text(GTK_ENTRY(llock->entry_repassword)); if (strcmp(password, repassword) == 0) { strcpy(lterminal->lock_password, password); gtk_widget_set_sensitive(GTK_WIDGET(lterminal->scrolledwindow), FALSE); GdkColor xcolor_bg = { 0, 0xD3D3, 0xD3D3, 0xD3D3 }; vte_terminal_set_color_background(lterminal->terminal, &xcolor_bg); lcrt_lock_on_cancelbutton_clicked(NULL, llock); lterminal->locked = TRUE; } else { lcrt_message_error(lterminal->parent->parent->window, llock->config.value[LCRT_K_ERROR]); } } else { if (strcmp(lterminal->lock_password, password) == 0) { GdkColor xcolor_bg = { 0, 0xFFFF, 0xFFFF, 0xFFFF }; vte_terminal_set_color_background(lterminal->terminal, &xcolor_bg); gtk_widget_set_sensitive(GTK_WIDGET(lterminal->scrolledwindow), TRUE); lcrt_lock_on_cancelbutton_clicked(NULL, llock); lterminal->locked = FALSE; } else { lcrt_message_error(lterminal->parent->parent->window, llock->config.value[LCRT_K_ERROR]); } } } void lcrt_lock_on_cancelbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_lock *llock = (struct lcrt_lock *)user_data; debug_where(); gtk_widget_destroy(llock->dialog); lcrt_destroy_lock(llock); } gboolean lcrt_lock_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) { lcrt_lock_on_cancelbutton_clicked(NULL, user_data); return FALSE; } lcrt-1.1.2/src/caccels.c0000664000175000017500000000500511750112142011724 00000000000000/* * Copyright(c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 06 Mar 2011 04:36:06 PM CST * File Name : caccels.c * * Description: */ #include #include "iaccels.h" #include "iwindow.h" #include "message.h" #include "isettings.h" void lcrt_accels_set_data(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { int *key; gtk_tree_model_get(model, iter, KEYVAL_COLUMN, &key, -1); if(key == NULL) g_object_set(cell,"visible", FALSE, NULL); else g_object_set(cell, "visible", TRUE, "accel-key", key[0], "accel-mods", key[1], NULL); } void lcrt_accels_on_edited(GtkCellRendererAccel *cell, gchar *path_string, guint keyval, GdkModifierType mask, guint hardware_keycode, gpointer user_data) { GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; char *str; int *key; int i; struct lcrt_accels *laccels = (struct lcrt_accels *)user_data; model = gtk_tree_view_get_model(GTK_TREE_VIEW(laccels->tree_view)); path = gtk_tree_path_new_from_string(path_string); if(!path) return; if(!gtk_tree_model_get_iter(model, &iter, path)) { gtk_tree_path_free(path); return; } gtk_tree_model_get(model, &iter, KEYVAL_COLUMN, &key, -1); if(key == NULL) return; for (i = LCRT_KB_F_CONNECT; i <= LCRT_KB_S_SWITCH_PREV; i++) { if (laccels->config.key[i][0] == keyval && laccels->config.key[i][1] == mask && laccels->config.key[i] != key) { str = gtk_accelerator_get_label(keyval, mask); lcrt_message_warning(laccels->parent->w_settings->dialog_settings, laccels->config.value[LCRT_KB_WARN_MSG], str, laccels->config.value[i]); return; } } key[0] = keyval; key[1] = mask; gtk_tree_model_row_changed (model, path, &iter); gtk_tree_path_free(path); laccels->dirty = TRUE; } lcrt-1.1.2/src/cfile.c0000664000175000017500000001374011750112142011416 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include #include "message.h" #include "debug.h" #include "ifile.h" #include "iqconnect.h" #include "imenubar.h" #include "iwindow.h" #include "iconnect.h" #include "iterminal.h" #include "cwindow.h" #include "ilock.h" void lcrt_file_on_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_file *lfile = lwindow->w_menubar->m_file; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; int has_terminal = (lterminal != NULL); gtk_widget_set_sensitive(lfile->f_reconnect, has_terminal); gtk_widget_set_sensitive(lfile->f_disconnect, has_terminal); gtk_widget_set_sensitive(lfile->f_lock_session, has_terminal); gtk_widget_set_sensitive(lfile->f_clone_session, has_terminal); if (has_terminal && lterminal->connected == LCRT_TERMINAL_CONNECTED) gtk_widget_set_sensitive(lfile->f_reconnect, FALSE); else gtk_widget_set_sensitive(lfile->f_disconnect, FALSE); has_terminal = (gtk_notebook_get_n_pages(GTK_NOTEBOOK(lwindow->w_notebook->notebook)) != 0); gtk_widget_set_sensitive(lfile->f_reconnect_all, has_terminal); gtk_widget_set_sensitive(lfile->f_disconnect_all, has_terminal); } void lcrt_file_on_connect_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; struct lcrt_window *lwindow = lfile->parent->parent; int rv = lcrt_create_connect(lwindow, FALSE); debug_print("rv = %d\n", rv); if (rv != GTK_RESPONSE_OK && rv != GTK_RESPONSE_NONE) return; debug_where(); lcrt_window_create_new(lwindow); } void lcrt_file_on_quick_connect_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; lcrt_create_qconnect(lfile->parent->parent, NULL, LCRT_QCONNECT_IN_TAB, NULL, NULL); } void lcrt_file_on_connect_in_tab_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; lcrt_create_connect(lfile->parent->parent, TRUE); } void lcrt_file_on_reconnect_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; struct lcrt_terminal *lterminal = lfile->parent->parent->w_notebook->current_terminal; debug_print("status = %d\n", lterminal->connected); if (lterminal == NULL || ( lterminal->connected != LCRT_TERMINAL_DISCONNECT && lterminal->connected != LCRT_TERMINAL_CHILD_EXIT)) return; debug_where(); if (lterminal->ops && lterminal->ops->connect) lterminal->ops->connect(lterminal); } void lcrt_file_on_reconnect_all_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; struct lcrt_notebook *lnotebook = lfile->parent->parent->w_notebook; struct lcrt_terminal *lterminal; list_for_each_entry(lterminal, &lnotebook->child, brother) { if (lterminal->connected == LCRT_TERMINAL_CONNECTED) { vte_terminal_feed_child(lterminal->terminal, LCRT_TERMINAL_EXIT_CMD, strlen(LCRT_TERMINAL_EXIT_CMD)); } lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_DISCONNECT); if (lterminal->ops && lterminal->ops->connect) lterminal->ops->connect(lterminal); } } void lcrt_file_on_disconnect_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; struct lcrt_terminal *lterminal = lfile->parent->parent->w_notebook->current_terminal; if (lterminal == NULL || lterminal->connected != LCRT_TERMINAL_CONNECTED) return; if (lterminal->ops && lterminal->ops->disconnect) lterminal->ops->disconnect(lterminal); } void lcrt_file_on_disconnect_all_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; struct lcrt_notebook *lnotebook = lfile->parent->parent->w_notebook; struct lcrt_terminal *lterminal; list_for_each_entry(lterminal, &lnotebook->child, brother) { if (lterminal->connected == LCRT_TERMINAL_CONNECTED) { if (lterminal->ops && lterminal->ops->disconnect) lterminal->ops->disconnect(lterminal); } } } void lcrt_file_on_clone_session_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; struct lcrt_notebook *lnotebook = lfile->parent->parent->w_notebook; struct lcrt_terminal *lterminal = lnotebook->current_terminal; if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(lnotebook->notebook)) == 0 || lterminal == NULL || lterminal->connected != LCRT_TERMINAL_CONNECTED) return; lcrt_window_set_current_user(lterminal->parent->parent, lterminal->user); lcrt_create_terminal(lterminal->parent); } void lcrt_file_on_lock_session_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; struct lcrt_notebook *lnotebook = lfile->parent->parent->w_notebook; struct lcrt_terminal *lterminal = lnotebook->current_terminal; if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(lnotebook->notebook)) == 0 || lterminal == NULL || lterminal->connected != LCRT_TERMINAL_CONNECTED) return; lcrt_create_dialog_lock(lterminal); } void lcrt_file_on_print_activate(GtkMenuItem *menuitem, gpointer user_data) { } void lcrt_file_on_print_setup_activate(GtkMenuItem *menuitem, gpointer user_data) { } void lcrt_file_on_log_session_activate(GtkMenuItem *menuitem, gpointer user_data) { } void lcrt_file_on_recent_session_activate(GtkMenuItem *menuitem, gpointer user_data) { } void lcrt_file_on_exit_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_file *lfile = (struct lcrt_file *)user_data; lcrt_window_on_delete_event(NULL, NULL, lfile->parent->parent); } lcrt-1.1.2/src/inotebook.h0000664000175000017500000000402711751624073012344 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 11:32:42 PM CST * File Name: inotebook.h * * Description: */ #ifndef __LCRT_INOTEBOOK_H__ #define __LCRT_INOTEBOOK_H__ #include "iwindow.h" #include "list.h" #define LCRT_ITERMINAL_TABLE "iterminal" typedef enum { LCRT_NB_COPY, LCRT_NB_PASTE, LCRT_NB_NONES, /*useless*/ LCRT_NB_NONEE, /*useless*/ LCRT_NB_CLONE, LCRT_NB_CLOSE, LCRT_NB_MOVE_NEXT, LCRT_NB_MOVE_PREV, LCRT_NB_SWITCH_NEXT, LCRT_NB_SWITCH_PREV, LCRT_NB_NUMBER }lcrt_nb_t; enum { LCRT_TM_CONNECTION_TIMEOUT, LCRT_TM_CONNECTION_REFUSED, LCRT_TM_CONNECTION_FAILED, LCRT_TM_CONNECTION_PROG_NOT_FOUND, LCRT_TM_CONNECTION_NOT_SUPPORT, LCRT_TM_SERIAL_ERROR, LCRT_TM_NUMBER }; #define LCRT_TM_NAME \ "tm_connection_timed_out", \ "tm_connection_refused", \ "tm_connection_failed", \ "tm_connection_prog_not_found", \ "tm_connection_not_support", \ "tm_serial_error", \ #define LCRT_TM_VALUE \ "Connection timed out!", \ "Connection refused!", \ "Username or password error,exit!", \ "Can't find the programe \"%s\",please install it!", \ "Current version not support!", \ "Can't open \"%s\",%s.", \ struct lcrtc_notebook { struct lcrt_config db; const char *name[LCRT_TM_NUMBER]; char value[LCRT_TM_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_NB_NUMBER][2]; }; struct lcrt_notebook { struct lcrt_window *parent; int current_page; GtkWidget *notebook; struct lcrt_terminal *current_terminal; struct list_head child; struct lcrtc_notebook config; const char *(*get_db)(struct lcrt_notebook *lnotebook); const char *(*get_tb)(struct lcrt_notebook *lnotebook); }; struct lcrt_notebook *lcrt_create_notebook(struct lcrt_window *parent); void lcrt_destroy_notebook(struct lcrt_notebook *lnotebook); #endif lcrt-1.1.2/src/iedit.h0000664000175000017500000000342711750112142011440 00000000000000#ifndef __LCRT_IEDIT_H__ #define __LCRT_IEDIT_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_IEDIT_TABLE "iedit" enum { LCRT_E_MENUITEM, LCRT_E_COPY, LCRT_E_PASTE, LCRT_E_COPY_AND_PASTE, LCRT_E_SELECT_ALL, LCRT_E_FIND, LCRT_E_CLEAR_SCROLLBACK, LCRT_E_CLEAR_SCREEN, LCRT_E_CLEAR_SCREEN_AND_SCROLLBACK, LCRT_E_RESET, LCRT_E_SHOW_MENUBAR, LCRT_E_NUMBER }; #define LCRT_E_NAME \ "e_menuitem", \ "e_copy", \ "e_paste", \ "e_copy_and_paste", \ "e_select_all", \ "e_find", \ "e_clear_scrollback", \ "e_clear_screen", \ "e_clear_screen_and_scrollback", \ "e_reset", \ "e_show_menubar" #define LCRT_E_VALUE \ "_Edit", \ "_Copy", \ "_Paste", \ "C_opy and Paste", \ "Select _All", \ "_Find", \ "Clear Scroll_back", \ "Clear _Screen", \ "Clear Screen and Scrollbac_k", \ "_Reset", \ "Show Menubar" struct lcrtc_edit { struct lcrt_config db; const char *name[LCRT_E_NUMBER]; char value[LCRT_E_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_E_NUMBER][2]; }; struct lcrt_edit { struct lcrt_menubar *parent; GtkWidget *e_menuitem; GtkWidget *e_copy; GtkWidget *e_paste; GtkWidget *e_copy_and_paste; GtkWidget *e_select_all; GtkWidget *e_find; GtkWidget *e_clear_scrollback; GtkWidget *e_clear_screen; GtkWidget *e_clear_screen_and_scrollback; GtkWidget *e_reset; struct lcrtc_edit config; const char *(*get_db)(struct lcrt_edit *ledit); const char *(*get_tb)(struct lcrt_edit *ledit); }; struct lcrt_edit *lcrt_edit_create_menuitem(struct lcrt_menubar *parent, gboolean popup_menu); void lcrt_edit_destroy_menuitem(struct lcrt_edit *ledit); #endif lcrt-1.1.2/src/cedit.h0000664000175000017500000000205311750112142011424 00000000000000#ifndef __LCRT_CEDIT_H__ #define __LCRT_CEDIT_H__ #include void lcrt_edit_on_copy_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_paste_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_copy_and_paste_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_select_all_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_find_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_clear_scrollback_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_clear_screen_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_clear_screen_and_scrollback_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_reset_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_show_menubar_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_edit_on_popup_menu_deactivate(GtkObject *object, gpointer user_data); void lcrt_edit_on_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data); #endif lcrt-1.1.2/src/istatus.c0000664000175000017500000001265211750112142012031 00000000000000#include #include #include #include #include #include #include #include #include "iwindow.h" #include "istatus.h" #include "cstatus.h" #include "mkconfig.h" #include "debug.h" int lcrt_status_init_config(struct lcrt_status *lstatus); int lcrt_status_load_config(struct lcrt_status *lstatus); int lcrt_status_create_config(struct lcrt_status *lstatus); struct lcrt_status *lcrt_create_status(struct lcrt_window *parent) { struct lcrt_status *lstatus; GdkPixbuf *pixpic; GtkStatusIcon *status_icon; lstatus = (struct lcrt_status *)calloc(1, sizeof(struct lcrt_status)); assert(lstatus); lstatus->parent = parent; lcrt_status_init_config(lstatus); lcrt_status_load_config(lstatus); pixpic = gtk_window_get_icon(GTK_WINDOW(parent->window)); status_icon = gtk_status_icon_new_from_pixbuf(pixpic); lstatus->status = status_icon; gtk_status_icon_set_tooltip(status_icon, lstatus->config.value[LCRT_S_TOOLTIP]); g_signal_connect((gpointer)status_icon, "activate", G_CALLBACK(lcrt_status_on_activate), lstatus); g_signal_connect((gpointer)status_icon, "button-press-event", G_CALLBACK(lcrt_status_on_button_press_event), lstatus); return lstatus; } void lcrt_destroy_status(struct lcrt_status *lstatus) { debug_where(); if (lstatus == NULL) free(lstatus); } GtkWidget* lcrt_status_create_popup_menu(struct lcrt_status *lstatus) { GtkWidget *menu_status_icon; GtkWidget *status_show_window; GtkWidget *image2; GtkWidget *status_quit; GtkWidget *image3; menu_status_icon = gtk_menu_new (); status_show_window = gtk_image_menu_item_new_with_mnemonic (lstatus->config.value[LCRT_S_SHOW_WINDOW]); gtk_widget_show (status_show_window); gtk_container_add (GTK_CONTAINER (menu_status_icon), status_show_window); image2 = gtk_image_new_from_stock ("gtk-home", GTK_ICON_SIZE_MENU); gtk_widget_show (image2); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (status_show_window), image2); status_quit = gtk_image_menu_item_new_with_mnemonic (lstatus->config.value[LCRT_S_QUIT]); gtk_widget_show (status_quit); gtk_container_add (GTK_CONTAINER (menu_status_icon), status_quit); image3 = gtk_image_new_from_stock ("gtk-quit", GTK_ICON_SIZE_MENU); gtk_widget_show (image3); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (status_quit), image3); g_signal_connect ((gpointer) status_show_window, "activate", G_CALLBACK (lcrt_status_on_show_window_active), lstatus); g_signal_connect ((gpointer) status_quit, "activate", G_CALLBACK (lcrt_status_on_quit_activate), lstatus); return menu_status_icon; } static const char *lcrt_status_get_db_name(struct lcrt_status *lstatus) { return lstatus == NULL ? NULL : lstatus->config.db.db_name; } static const char *lcrt_status_get_tb_name(struct lcrt_status *lstatus) { return lstatus == NULL ? NULL : lstatus->config.db.db_table; } int lcrt_status_init_config(struct lcrt_status *lstatus) { char db_name[256]; int i; static char *name[LCRT_S_NUMBER] = {LCRT_S_NAME}; static char *value[LCRT_S_NUMBER] = {LCRT_S_VALUE}; assert(lstatus); memset(&lstatus->config, 0, sizeof(struct lcrtc_status)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lstatus->config.db, db_name, LCRT_ISTATUS_TABLE); for (i = 0; i < LCRT_S_NUMBER; i++) { lstatus->config.name[i] = name[i]; strncpy(lstatus->config.value[i], value[i], sizeof(lstatus->config.value[i])); } lstatus->get_db = lcrt_status_get_db_name; lstatus->get_tb = lcrt_status_get_tb_name; return 0; } int lcrt_status_load_config(struct lcrt_status *lstatus) { int rv, i; assert(lstatus); rv = lstatus->config.db.select(&lstatus->config.db, "SELECT * FROM %s", lstatus->get_tb(lstatus)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_status_create_config(lstatus); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_S_NUMBER && rv == LCRTE_OK; i++) { strncpy(lstatus->config.value[i], lstatus->config.db.get_text_col(&lstatus->config.db, 1), sizeof(lstatus->config.value[i])); rv = lstatus->config.db.get_row(&lstatus->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)lstatus->get_db(lstatus)), lstatus->get_tb(lstatus), lstatus->config.name[i], lstatus->config.value[i]); } return rv; } int lcrt_status_create_config(struct lcrt_status *lstatus) { int i; assert(lstatus); lstatus->config.db.exec(&lstatus->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255)", lstatus->get_tb(lstatus)); for (i = 0; i < LCRT_S_NUMBER; i++) { lstatus->config.db.exec(&lstatus->config.db, "INSERT INTO %s VALUES('%s', '%s')", lstatus->get_tb(lstatus), lstatus->config.name[i], lstatus->config.value[i]); } lstatus->config.db.close(&lstatus->config.db); return 0; } lcrt-1.1.2/src/iedit.c0000664000175000017500000002565711750755444011466 00000000000000#include #include #include #include #include #include #include #include "support.h" #include "iwindow.h" #include "imenubar.h" #include "debug.h" #include "mkconfig.h" #include "iedit.h" #include "cedit.h" #include "iview.h" #include "iterminal.h" #include "cterminal.h" #include "iaccels.h" int lcrt_edit_create_config(struct lcrt_edit *ledit); int lcrt_edit_load_config(struct lcrt_edit *ledit); int lcrt_edit_init_config(struct lcrt_edit *ledit); struct lcrt_edit *lcrt_edit_create_menuitem(struct lcrt_menubar *parent, gboolean popup_menu) { struct lcrt_edit *ledit; struct lcrt_window *lwindow; GtkWidget *e_menuitem; GtkWidget *e_menuitem_menu; GtkWidget *e_copy; GtkWidget *image235; GtkWidget *e_paste; GtkWidget *image236; GtkWidget *e_copy_and_paste; GtkWidget *e_select_all; GtkWidget *e_find; GtkWidget *image237; GtkWidget *e_separator_1; GtkWidget *e_clear_scrollback; GtkWidget *e_clear_screen; GtkWidget *e_clear_screen_and_scrollback; GtkWidget *e_separator_2; GtkWidget *e_reset; #ifdef LCRT_SHOW_MENUBAR GtkWidget *e_show_menubar; GtkWidget *e_separator_3; #endif GtkAccelGroup *accel_group = parent->parent->w_accel; gboolean has_selection; ledit =(struct lcrt_edit *)calloc(1, sizeof(struct lcrt_edit)); assert(ledit); ledit->parent = parent; lwindow = parent->parent; lcrt_edit_init_config(ledit); lcrt_edit_load_config(ledit); has_selection = lcrt_terminal_has_selection(parent->parent); if (!popup_menu) { e_menuitem = gtk_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_MENUITEM]); g_signal_connect ((gpointer) e_menuitem, "activate", G_CALLBACK (lcrt_edit_on_menuitem_activate), lwindow); ledit->e_menuitem = e_menuitem; gtk_widget_show (e_menuitem); e_menuitem_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (e_menuitem), e_menuitem_menu); } else { e_menuitem_menu = gtk_menu_new (); ledit->e_menuitem = e_menuitem_menu; } e_copy = gtk_image_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_COPY]); ledit->e_copy = e_copy; gtk_widget_show (e_copy); gtk_widget_set_sensitive (e_copy, has_selection); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_copy); g_signal_connect ((gpointer) e_copy, "activate", G_CALLBACK (lcrt_edit_on_copy_activate), lwindow); gtk_widget_add_accelerator (e_copy, "activate", accel_group, ledit->config.shortcut[LCRT_E_COPY][0], (GdkModifierType) ledit->config.shortcut[LCRT_E_COPY][1], GTK_ACCEL_VISIBLE); image235 = create_pixmap(NULL, "lcrt-copy.png"); gtk_widget_show (image235); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (e_copy), image235); e_paste = gtk_image_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_PASTE]); ledit->e_paste = e_paste; gtk_widget_show (e_paste); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_paste); g_signal_connect ((gpointer) e_paste, "activate", G_CALLBACK (lcrt_edit_on_paste_activate), lwindow); gtk_widget_add_accelerator (e_paste, "activate", accel_group, ledit->config.shortcut[LCRT_E_PASTE][0], (GdkModifierType) ledit->config.shortcut[LCRT_E_PASTE][1], GTK_ACCEL_VISIBLE); image236 = create_pixmap(NULL, "lcrt-paste.png"); gtk_widget_show (image236); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (e_paste), image236); e_copy_and_paste = gtk_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_COPY_AND_PASTE]); ledit->e_copy_and_paste = e_copy_and_paste; gtk_widget_show (e_copy_and_paste); gtk_widget_set_sensitive (e_copy_and_paste, has_selection); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_copy_and_paste); g_signal_connect ((gpointer) e_copy_and_paste, "activate", G_CALLBACK (lcrt_edit_on_copy_and_paste_activate), lwindow); e_select_all = gtk_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_SELECT_ALL]); ledit->e_select_all = e_select_all; gtk_widget_show (e_select_all); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_select_all); g_signal_connect ((gpointer) e_select_all, "activate", G_CALLBACK (lcrt_edit_on_select_all_activate), lwindow); e_find = gtk_image_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_FIND]); ledit->e_find = e_find; gtk_widget_show (e_find); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_find); g_signal_connect ((gpointer) e_find, "activate", G_CALLBACK (lcrt_edit_on_find_activate), lwindow); gtk_widget_add_accelerator (e_find, "activate", accel_group, ledit->config.shortcut[LCRT_E_FIND][0], (GdkModifierType) ledit->config.shortcut[LCRT_E_FIND][1], GTK_ACCEL_VISIBLE); image237 = gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_MENU); gtk_widget_show (image237); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (e_find), image237); e_separator_1 = gtk_separator_menu_item_new (); gtk_widget_show (e_separator_1); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_separator_1); gtk_widget_set_sensitive (e_separator_1, FALSE); e_clear_scrollback = gtk_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_CLEAR_SCROLLBACK]); ledit->e_clear_scrollback = e_clear_scrollback; gtk_widget_show (e_clear_scrollback); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_clear_scrollback); g_signal_connect ((gpointer) e_clear_scrollback, "activate", G_CALLBACK (lcrt_edit_on_clear_scrollback_activate), lwindow); e_clear_screen = gtk_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_CLEAR_SCREEN]); ledit->e_clear_screen = e_clear_screen; gtk_widget_show (e_clear_screen); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_clear_screen); g_signal_connect ((gpointer) e_clear_screen, "activate", G_CALLBACK (lcrt_edit_on_clear_screen_activate), lwindow); e_clear_screen_and_scrollback = gtk_menu_item_new_with_mnemonic(ledit->config.value[LCRT_E_CLEAR_SCREEN_AND_SCROLLBACK]); ledit->e_clear_screen_and_scrollback = e_clear_screen_and_scrollback; gtk_widget_show (e_clear_screen_and_scrollback); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_clear_screen_and_scrollback); g_signal_connect ((gpointer) e_clear_screen_and_scrollback, "activate", G_CALLBACK (lcrt_edit_on_clear_screen_and_scrollback_activate), lwindow); e_separator_2 = gtk_separator_menu_item_new (); gtk_widget_show (e_separator_2); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_separator_2); gtk_widget_set_sensitive (e_separator_2, FALSE); e_reset = gtk_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_RESET]); ledit->e_reset = e_reset; gtk_widget_show (e_reset); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_reset); g_signal_connect ((gpointer) e_reset, "activate", G_CALLBACK (lcrt_edit_on_reset_activate), lwindow); #ifdef LCRT_SHOW_MENUBAR if (popup_menu) { e_separator_3 = gtk_separator_menu_item_new (); gtk_widget_show (e_separator_3); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_separator_3); gtk_widget_set_sensitive (e_separator_3, FALSE); e_show_menubar = gtk_check_menu_item_new_with_mnemonic (ledit->config.value[LCRT_E_SHOW_MENUBAR]); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (e_show_menubar), parent->m_view->config.status[LCRT_V_MENUBAR]); gtk_widget_show (e_show_menubar); gtk_container_add (GTK_CONTAINER (e_menuitem_menu), e_show_menubar); g_signal_connect ((gpointer) e_show_menubar, "activate", G_CALLBACK (lcrt_edit_on_show_menubar_activate), lwindow); } #endif return ledit; } void lcrt_edit_destroy_menuitem(struct lcrt_edit *ledit) { gtk_widget_destroy(ledit->e_menuitem); if (ledit) free(ledit); } static const char *lcrt_edit_get_db_name(struct lcrt_edit *ledit) { return ledit == NULL ? NULL : ledit->config.db.db_name; } static const char *lcrt_edit_get_tb_name(struct lcrt_edit *ledit) { return ledit == NULL ? NULL : ledit->config.db.db_table; } int lcrt_edit_init_config(struct lcrt_edit *ledit) { char db_name[256]; int i; static char *name[LCRT_E_NUMBER] = {LCRT_E_NAME}; static char *value[LCRT_E_NUMBER] = {LCRT_E_VALUE}; if (ledit == NULL) return EINVAL; memset(&ledit->config, 0, sizeof(struct lcrtc_edit)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&ledit->config.db, db_name, LCRT_IEDIT_TABLE); for (i = 0; i < LCRT_E_NUMBER; i++) { ledit->config.name[i] = name[i]; strncpy(ledit->config.value[i], value[i], sizeof(ledit->config.value[i])); } ledit->get_db = lcrt_edit_get_db_name; ledit->get_tb = lcrt_edit_get_tb_name; return 0; } int lcrt_edit_load_config(struct lcrt_edit *ledit) { int rv, i; debug_where(); struct lcrt_accels *laccels = ledit->parent->parent->w_accels; debug_where(); if (ledit == NULL) return EINVAL; debug_where(); memcpy(ledit->config.shortcut[LCRT_E_COPY], laccels->config.key[LCRT_KB_E_COPY], sizeof(int) * 2); memcpy(ledit->config.shortcut[LCRT_E_PASTE], laccels->config.key[LCRT_KB_E_PASTE], sizeof(int) * 2); memcpy(ledit->config.shortcut[LCRT_E_FIND], laccels->config.key[LCRT_KB_E_FIND], sizeof(int) * 2); debug_where(); rv = ledit->config.db.select(&ledit->config.db, "SELECT * FROM %s", ledit->get_tb(ledit)); if (rv == LCRTE_NO_TABLE) { return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_E_NUMBER && rv == LCRTE_OK; i++) { strncpy(ledit->config.value[i], ledit->config.db.get_text_col(&ledit->config.db, 1), sizeof(ledit->config.value[i])); rv = ledit->config.db.get_row(&ledit->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)ledit->get_db(ledit)), ledit->get_tb(ledit), ledit->config.name[i], ledit->config.value[i], ledit->config.shortcut[i][0], ledit->config.shortcut[i][1]); } return rv; } lcrt-1.1.2/src/iaccels.h0000664000175000017500000000665111750754717011773 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 15 Jan 2011 04:24:46 PM CST * File Name: iterminal.h * * Description: */ #ifndef __LCRT_IACCELS_H__ #define __LCRT_IACCELS_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_IACCELS_TABLE "iaccels" #define LCRT_ACCELS_CONFIG_DIR "etc/settings" #define LCRT_ACCELS_DB "accels.db" enum { LCRT_KB_ACTION, LCRT_KB_SHORTCUT_KEY, LCRT_KB_FILE, LCRT_KB_F_CONNECT, LCRT_KB_F_QUICK_CONNECT, LCRT_KB_F_CONNECT_IN_TAB, LCRT_KB_F_RECONNECT, LCRT_KB_EDIT, LCRT_KB_E_COPY, LCRT_KB_E_PASTE, LCRT_KB_E_FIND, LCRT_KB_SESSION, LCRT_KB_S_CLONE, LCRT_KB_S_CLOSE, LCRT_KB_S_MOVE_NEXT, LCRT_KB_S_MOVE_PREV, LCRT_KB_S_SWITCH_NEXT, LCRT_KB_S_SWITCH_PREV, LCRT_KB_WARN_MSG, LCRT_KB_ERR_MSG, LCRT_KB_NUMBER }; enum { ACTION_COLUMN, KEYVAL_COLUMN, N_COLUMNS }; #define LCRT_KB_NAME \ "kb_action", \ "kb_shortcut_key", \ "kb_file", \ "kb_f_connect", \ "kb_f_quick_connect", \ "kb_f_connect_in_tab", \ "kb_f_reconnect", \ "kb_edit", \ "kb_e_copy", \ "kb_e_paste", \ "kb_e_find", \ "kb_session", \ "kb_s_clone", \ "kb_s_close", \ "kb_s_move_next", \ "kb_s_move_prev", \ "kb_s_switch_next", \ "kb_s_switch_prev", \ "kb_warn_msg", \ "kb_err_msg" #define LCRT_KB_VALUE \ "Action", \ "Shortcut key", \ "File", \ "Connect", \ "Quick Connect", \ "Connect In Tab", \ "Reconnect", \ "Edit", \ "Copy", \ "Paste", \ "Find", \ "Session", \ "Clone", \ "Close", \ "Move To Next" ,\ "Move To Prev", \ "Switch To Next", \ "Switch To Prev", \ "The shortcut key \"%s\" is already bound to the \"%s\" action",\ "There is no memory to create dialog" #define LCRT_KB_KEY \ {0, 0}, \ {0, 0}, \ {0, 0}, \ {GDK_c, GDK_MOD1_MASK}, \ {GDK_q, GDK_MOD1_MASK}, \ {GDK_b, GDK_MOD1_MASK}, \ {GDK_F5, 0}, \ {0, 0}, \ {GDK_c, GDK_CONTROL_MASK | GDK_SHIFT_MASK}, \ {GDK_v, GDK_CONTROL_MASK | GDK_SHIFT_MASK}, \ {GDK_f, GDK_CONTROL_MASK}, \ {0, 0}, \ {GDK_t, GDK_CONTROL_MASK | GDK_SHIFT_MASK}, \ {GDK_w, GDK_CONTROL_MASK | GDK_SHIFT_MASK}, \ {GDK_Page_Down, GDK_CONTROL_MASK | GDK_SHIFT_MASK}, \ {GDK_Page_Up, GDK_CONTROL_MASK | GDK_SHIFT_MASK}, \ {GDK_Page_Down, GDK_CONTROL_MASK}, \ {GDK_Page_Up, GDK_CONTROL_MASK} struct lcrtc_accels { struct lcrt_config db; struct lcrt_config ldb; const char *name[LCRT_KB_NUMBER]; char value[LCRT_KB_NUMBER][LCRT_CONFIG_VALUE_LEN]; int key[LCRT_KB_NUMBER][2]; }; struct lcrt_accels { struct lcrt_window *parent; GtkWidget *tree_view; gboolean dirty; struct lcrtc_accels config; const char *(*get_db)(struct lcrt_accels *laccels); const char *(*get_tb)(struct lcrt_accels *laccels); const char *(*get_ldb)(struct lcrt_accels *laccels); const char *(*get_ltb)(struct lcrt_accels *laccels); }; struct lcrt_accels *lcrt_create_accels(struct lcrt_window *parent); void lcrt_destroy_accels(struct lcrt_accels *laccels); int lcrt_accels_init_local_config(struct lcrt_accels *laccels); int lcrt_accels_save_local_config(struct lcrt_accels *laccels); #endif lcrt-1.1.2/src/crename.c0000664000175000017500000000433111750412113011743 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "irename.h" #include "crename.h" void lcrt_rename_on_okbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_rename *lrename = (struct lcrt_rename *)user_data; const char *name = gtk_entry_get_text(GTK_ENTRY(lrename->entry_rename)); struct lcrtc_user *user, *new; if (lrename->rename_terminal == TRUE) { lcrt_terminal_set_status(lrename->parent->w_notebook->current_terminal, (char *)name, lrename->parent->w_notebook->current_terminal->connected); lcrt_rename_on_cancelbutton_clicked(NULL, user_data); } else { if ((user = lcrt_user_find_by_name(&lrename->parent->u_config, lrename->rename)) == NULL) { lcrt_rename_on_cancelbutton_clicked(NULL, user_data); } else { if ((new = lcrt_user_find_by_name(&lrename->parent->u_config, name)) != NULL) { if (user != new) lcrt_message_error(lrename->dialog, lrename->config.value[LCRT_R_ERROR]); else lcrt_rename_on_cancelbutton_clicked(NULL, user_data); } else { strncpy(lrename->parent->current_uname, name, HOSTNAME_LEN); lcrt_rename_on_cancelbutton_clicked(NULL, user_data); } } } } void lcrt_rename_on_cancelbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_rename *lrename = (struct lcrt_rename *)user_data; gtk_widget_destroy(lrename->dialog); lcrt_destroy_rename(lrename); } void lcrt_rename_on_name_changed(GtkEditable *editable, gpointer user_data) { struct lcrt_rename *lrename = (struct lcrt_rename *)user_data; if (gtk_entry_get_text_length(GTK_ENTRY(editable)) > 0) gtk_widget_set_sensitive(lrename->okbutton, TRUE); else gtk_widget_set_sensitive(lrename->okbutton, FALSE); } gboolean lcrt_rename_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { lcrt_rename_on_cancelbutton_clicked(NULL, user_data); return FALSE; } lcrt-1.1.2/src/cconnect.h0000664000175000017500000000214511750145255012145 00000000000000#ifndef __LCRT_CCONNECT_H__ #define __LCRT_CCONNECT_H__ #include #include "iconnect.h" void lcrt_connect_on_connectbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_connect_on_cancelbutton_clicked (GtkButton *button, gpointer user_data); gboolean lcrt_connect_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data); void lcrt_connect_on_quick_connect_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_connect_on_rename_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_connect_on_delete_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_connect_on_find_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_connect_on_session_option_activate(GtkWidget *toolitem, gpointer user_data); gboolean lcrt_connect_on_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); void lcrt_connect_on_selection_changed(GtkWidget *selection, gpointer user_data); void lcrt_connect_on_mkdir_activate(GtkWidget *toolitem, gpointer user_data); void lcrt_connect_on_find_callback(struct lcrt_connect *lconnect); #endif lcrt-1.1.2/src/cmkdir.h0000664000175000017500000000064011750112142011605 00000000000000#ifndef __LCRT_CMKDIR_H__ #define __LCRT_CMKDIR_H__ #include void lcrt_mkdir_on_okbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_mkdir_on_cancelbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_mkdir_on_name_changed(GtkEditable *editable, gpointer user_data); gboolean lcrt_mkdir_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); #endif lcrt-1.1.2/src/coptions.h0000664000175000017500000000070011750112142012167 00000000000000#ifndef __LCRT_COPTIONS_H__ #define __LCRT_COPTIONS_H__ #include void lcrt_options_on_session_options_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_options_on_global_options_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_options_on_auto_save_options_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_options_on_save_settings_now_activate(GtkMenuItem *menuitem, gpointer user_data); #endif lcrt-1.1.2/src/iwindow.h0000664000175000017500000000521711750112142012021 00000000000000#ifndef __LCRT_IMWINDOW_H__ #define __LCRT_IMWINDOW_H__ #include #include "mkconfig.h" #include "user.h" #define LCRT_WINDOW_CONFIG_DIR "etc/window" #define LCRT_WINDOW_DB "window.db" #define LCRT_IWINDOW_TABLE "iwindow" enum { BUTTON_LEFT = 0x1, BUTTON_MID =0x2, BUTTON_RIGHT =0x3 }; enum { LCRT_W_START_X, LCRT_W_START_Y, LCRT_W_WIDTH, LCRT_W_HEIGHT, LCRT_W_NUMBER }; #define LCRT_W_NAME \ "w_start_x", \ "w_start_y", \ "w_width", \ "w_height" #define LCRT_W_VALUE \ 0, \ 0, \ 800, \ 600 struct lcrtc_window { struct lcrt_config db; const char *name[LCRT_W_NUMBER]; int value[LCRT_W_NUMBER]; }; struct lcrt_menubar; struct lcrt_toolbar; struct lcrt_statusbar; struct lcrt_notebook; struct lcrt_status; struct lcrt_settings; struct lcrt_accels; /** * @brief main window structure. contain all it's children * elements and structures. */ struct lcrt_window { GtkWidget *window; /**< main window component */ int full_screen; /**< the flag to mark wethere is run in full screen */ gboolean hide; /**< the flag to mark wethere is hidden from desktop status bar */ int q_status; /**< the flag to mark which button user has clicked in quick connect dialog. GTK_RESPONSE_OK mean connect button, GTK_RESPONSE_CANCEL mean cancel button */ GtkWidget *w_vbox; GtkAccelGroup *w_accel; /**< keyboard shortkey group */ struct lcrt_menubar *w_menubar; /**< menubar component */ struct lcrt_toolbar *w_toolbar; /**< toolbar component */ struct lcrt_statusbar *w_statusbar; /**< statusbar component */ struct lcrt_notebook *w_notebook; /**< notebook component */ struct lcrt_status *w_status; /**< the status of main window */ struct lcrt_accels *w_accels; /**< shortkey configuration */ struct lcrt_settings *w_settings; /**< global settings component */ struct lcrtc_window w_config; /**< databse of window*/ struct lcrt_user u_config; /**< user list, contain informations of saved session*/ struct lcrtc_user *current_user; /**< current session information,used to connect with remote*/ char current_uname[HOSTNAME_LEN + 1]; /**< username of current session */ char programe_name[512]; /**< ourself name */ const char *(*get_db)(struct lcrt_window *lwindow); const char *(*get_tb)(struct lcrt_window *lwindow); }; struct lcrt_window *lcrt_create_window(void); int lcrt_window_save_config(struct lcrt_window *lwindow); void lcrt_destroy_window(struct lcrt_window *lwindow); int lcrt_window_set_current_user(struct lcrt_window *lwindow, struct lcrtc_user *user); #endif lcrt-1.1.2/src/inotebook.c0000664000175000017500000001163711751624073012344 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include "debug.h" #include "list.h" #include "iwindow.h" #include "inotebook.h" #include "mkconfig.h" #include "iterminal.h" #include "cnotebook.h" #include "iaccels.h" int lcrt_notebook_init_config(struct lcrt_notebook *lnotebook); int lcrt_notebook_load_config(struct lcrt_notebook *lnotebook); struct lcrt_notebook *lcrt_create_notebook(struct lcrt_window *parent) { struct lcrt_notebook *lnotebook; int i; GtkWidget *notebook; GClosure *closure; GtkAccelGroup *accel_group = parent->w_accel; lnotebook = (struct lcrt_notebook *)calloc(1, sizeof(struct lcrt_notebook)); assert(lnotebook); lnotebook->parent = parent; lcrt_notebook_init_config(lnotebook); lcrt_notebook_load_config(lnotebook); notebook = gtk_notebook_new (); lnotebook->notebook = notebook; gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE); gtk_widget_show (notebook); GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); gtk_notebook_set_show_border(GTK_NOTEBOOK (notebook), FALSE); lcrt_nb_t nb; for (nb = 0; nb < LCRT_NB_NUMBER; nb++) { if (LCRT_NB_NONES <= nb && nb <= LCRT_NB_NONEE) continue; closure = g_cclosure_new(G_CALLBACK(lcrt_notebook_control_terminal), lnotebook , NULL); debug_print("Attach shortcut %d\n", nb); gtk_accel_group_connect(accel_group, lnotebook->config.shortcut[nb][0], (GdkModifierType)lnotebook->config.shortcut[nb][1], GTK_ACCEL_VISIBLE, closure); } for (i = 0; i < 9; i ++) { closure = g_cclosure_new(G_CALLBACK (lcrt_notebook_control_terminal), lnotebook , NULL); gtk_accel_group_connect(accel_group, GDK_1 + i, (GdkModifierType)GDK_MOD1_MASK, GTK_ACCEL_VISIBLE, closure); } g_signal_connect((gpointer)notebook, "switch_page", G_CALLBACK(lcrt_notebook_on_switch_page), lnotebook); g_signal_connect((gpointer)notebook, "page_removed", G_CALLBACK(lcrt_notebook_on_page_removed), lnotebook); INIT_LIST_HEAD(&lnotebook->child); return lnotebook; } void lcrt_destroy_notebook(struct lcrt_notebook *lnotebook) { debug_where(); struct lcrt_terminal *lterminal; struct list_head *pos, *tmp; if (lnotebook == NULL) return; list_for_each_safe(pos, tmp, &lnotebook->child) { lterminal = list_entry(pos, struct lcrt_terminal, brother); lcrt_destroy_terminal(lterminal); } gtk_widget_destroy(lnotebook->notebook); free(lnotebook); } static const char *lcrt_notebook_get_db_name(struct lcrt_notebook *lnotebook) { return lnotebook->config.db.db_name; } static const char *lcrt_notebook_get_tb_name(struct lcrt_notebook *lnotebook) { return lnotebook->config.db.db_table; } int lcrt_notebook_init_config(struct lcrt_notebook *lnotebook) { struct lcrt_accels *laccels; char db_name[256]; int i; static char *name[LCRT_TM_NUMBER] = {LCRT_TM_NAME}; static char *value[LCRT_TM_NUMBER] = {LCRT_TM_VALUE}; assert(lnotebook); laccels = lnotebook->parent->w_accels; memset(&lnotebook->config, 0, sizeof(struct lcrtc_notebook)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lnotebook->config.db, db_name, LCRT_ITERMINAL_TABLE); for (i = 0; i < LCRT_TM_NUMBER; i++) { lnotebook->config.name[i] = name[i]; strncpy(lnotebook->config.value[i], value[i], sizeof(lnotebook->config.value[i])); } debug_where(); for (i = 0; i < LCRT_NB_NUMBER; i++) { memcpy(lnotebook->config.shortcut[i], laccels->config.key[LCRT_KB_E_COPY + i], sizeof(int) * 2); } lnotebook->get_db = lcrt_notebook_get_db_name; lnotebook->get_tb = lcrt_notebook_get_tb_name; return 0; } int lcrt_notebook_load_config(struct lcrt_notebook *lnotebook) { int rv, i; debug_where(); assert(lnotebook); rv = lnotebook->config.db.select(&lnotebook->config.db, "SELECT * FROM %s", lnotebook->get_tb(lnotebook)); if (rv == LCRTE_NO_TABLE) { return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_TM_NUMBER && rv == LCRTE_OK; i++) { strncpy(lnotebook->config.value[i], lnotebook->config.db.get_text_col(&lnotebook->config.db, 1), sizeof(lnotebook->config.value[i])); rv = lnotebook->config.db.get_row(&lnotebook->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)lnotebook->get_db(lnotebook)), lnotebook->get_tb(lnotebook), lnotebook->config.name[i], lnotebook->config.value[i]); } return rv; } lcrt-1.1.2/src/ilogin.c0000664000175000017500000002446311750112142011621 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:22 AM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "ilogin.h" #include "clogin.h" #include "debug.h" int lcrt_login_init_config(struct lcrt_login *llogin); int lcrt_login_load_config(struct lcrt_login *llogin); int lcrt_login_create_config(struct lcrt_login *llogin); struct lcrt_login *lcrt_create_login(struct lcrt_terminal *parent, int again) { struct lcrt_login *llogin; GtkWidget *dialog_login; GtkWidget *dialog_vbox1; GtkWidget *label_info; GtkWidget *vbox1; GtkWidget *table1; GtkWidget *label_username; GtkWidget *label_passwd; GtkWidget *entry_username; GtkWidget *entry_password; GtkWidget *checkbutton_remember; GtkWidget *dialog_action_area1; GtkWidget *cancelbutton; GtkWidget *okbutton; GtkAccelGroup *accel_group; accel_group = gtk_accel_group_new (); debug_where(); llogin = (struct lcrt_login *)calloc(1, sizeof(struct lcrt_login)); if (llogin == NULL) goto err; llogin->parent = parent; debug_where(); lcrt_login_init_config(llogin); lcrt_login_load_config(llogin); dialog_login = gtk_dialog_new (); llogin->login = dialog_login; gtk_window_set_transient_for(GTK_WINDOW(dialog_login), GTK_WINDOW(llogin->parent->parent->parent->window)); gtk_window_set_title (GTK_WINDOW (dialog_login), llogin->config.value[LCRT_L_LOGIN]); gtk_window_set_position (GTK_WINDOW (dialog_login), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (dialog_login), FALSE); gtk_window_set_type_hint (GTK_WINDOW (dialog_login), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (dialog_login), FALSE); g_signal_connect ((gpointer) dialog_login, "delete_event", G_CALLBACK (lcrt_login_on_window_delete), llogin); dialog_vbox1 = GTK_DIALOG (dialog_login)->vbox; gtk_widget_show (dialog_vbox1); gtk_widget_set_size_request (dialog_vbox1, 254, 169); if (again == FALSE) { label_info = gtk_label_new (llogin->config.value[LCRT_L_INFO]); } else { label_info = gtk_label_new (llogin->config.value[LCRT_L_AGAIN]); } gtk_widget_show (label_info); gtk_box_pack_start (GTK_BOX (dialog_vbox1), label_info, FALSE, FALSE, 0); gtk_widget_set_size_request (label_info, 40, 30); gtk_misc_set_alignment (GTK_MISC (label_info), 0, 0.5); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0); table1 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (vbox1), table1, FALSE, FALSE, 0); label_username = gtk_label_new (llogin->config.value[LCRT_L_USERNAME]); gtk_widget_show (label_username); gtk_table_attach (GTK_TABLE (table1), label_username, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (label_username, 80, 30); gtk_misc_set_alignment (GTK_MISC (label_username), 0, 0.5); entry_username = gtk_entry_new (); llogin->l_username = entry_username; gtk_widget_show (entry_username); gtk_table_attach (GTK_TABLE (table1), entry_username, 1, 2, 0, 1, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (entry_username, 160, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_username), 9679); g_signal_connect ((gpointer) entry_username, "changed", G_CALLBACK (lcrt_login_on_username_changed), llogin); label_passwd = gtk_label_new (llogin->config.value[LCRT_L_PASSWORD]); gtk_widget_show (label_passwd); gtk_table_attach (GTK_TABLE (table1), label_passwd, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (label_passwd, 80, 30); gtk_misc_set_alignment (GTK_MISC (label_passwd), 0, 0.5); entry_password = gtk_entry_new (); llogin->l_password = entry_password; gtk_widget_show (entry_password); gtk_entry_set_visibility(GTK_ENTRY(entry_password),FALSE); gtk_table_attach (GTK_TABLE (table1), entry_password, 1, 2, 1, 2, (GtkAttachOptions) (0), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request (entry_password, 160, 30); gtk_entry_set_invisible_char (GTK_ENTRY (entry_password), 9679); g_signal_connect ((gpointer) entry_password, "changed", G_CALLBACK (lcrt_login_on_password_changed), llogin); checkbutton_remember = gtk_check_button_new_with_mnemonic (llogin->config.value[LCRT_L_REMEMBER]); llogin->l_remember = checkbutton_remember; gtk_widget_show (checkbutton_remember); gtk_box_pack_start (GTK_BOX (vbox1), checkbutton_remember, FALSE, FALSE, 0); dialog_action_area1 = GTK_DIALOG (dialog_login)->action_area; gtk_widget_show (dialog_action_area1); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); cancelbutton = gtk_button_new_with_mnemonic (llogin->config.value[LCRT_L_CANCELBUTTON]); gtk_widget_show (cancelbutton); gtk_dialog_add_action_widget (GTK_DIALOG (dialog_login), cancelbutton, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (cancelbutton, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) cancelbutton, "clicked", G_CALLBACK (lcrt_login_on_cancelbutton_clicked), llogin); okbutton = gtk_button_new_with_mnemonic(llogin->config.value[LCRT_L_OKBUTTON]); gtk_widget_show (okbutton); gtk_dialog_add_action_widget (GTK_DIALOG (dialog_login), okbutton, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (okbutton, GTK_CAN_DEFAULT); gtk_widget_add_accelerator(okbutton, "clicked", accel_group, GDK_Return, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); g_signal_connect ((gpointer) okbutton, "clicked", G_CALLBACK (lcrt_login_on_okbutton_clicked), llogin); if (strlen(parent->user->username) != 0) { gtk_entry_set_text(GTK_ENTRY(entry_username), parent->user->username); gtk_window_set_focus(GTK_WINDOW(dialog_login), entry_password); } else { gtk_window_set_focus(GTK_WINDOW(dialog_login), entry_username); } gtk_window_add_accel_group (GTK_WINDOW (dialog_login), accel_group); gtk_widget_show(dialog_login); gtk_dialog_run(GTK_DIALOG(dialog_login)); return llogin; err: lcrt_message_error(parent->parent->parent->window, llogin->config.value[LCRT_L_ERR_MSG]); return NULL; } void lcrt_destroy_login(struct lcrt_login *llogin) { if (llogin) free(llogin); } static const char *lcrt_login_get_db_name(struct lcrt_login *llogin) { return llogin->config.db.db_name; } static const char *lcrt_login_get_tb_name(struct lcrt_login *llogin) { return llogin->config.db.db_table; } int lcrt_login_init_config(struct lcrt_login *llogin) { char db_name[256]; int i; static char *name[LCRT_L_NUMBER] = {LCRT_L_NAME}; static char *value[LCRT_L_NUMBER] = {LCRT_L_VALUE}; static int shortcut[LCRT_L_NUMBER][2] = {LCRT_L_SHORTCUT}; assert(llogin); memset(&llogin->config, 0, sizeof(struct lcrtc_login)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&llogin->config.db, db_name, LCRT_ILOGIN_TABLE); for (i = 0; i < LCRT_L_NUMBER; i++) { llogin->config.name[i] = name[i]; strncpy(llogin->config.value[i], value[i], sizeof(llogin->config.value[i])); llogin->config.shortcut[i][0] = shortcut[i][0]; llogin->config.shortcut[i][1] = shortcut[i][1]; } llogin->get_db = lcrt_login_get_db_name; llogin->get_tb = lcrt_login_get_tb_name; return 0; } int lcrt_login_load_config(struct lcrt_login *llogin) { int rv, i; assert(llogin); rv = llogin->config.db.select(&llogin->config.db, "SELECT * FROM %s", llogin->get_tb(llogin)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_login_create_config(llogin); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_L_NUMBER && rv == LCRTE_OK; i++) { strncpy(llogin->config.value[i], llogin->config.db.get_text_col(&llogin->config.db, 1), sizeof(llogin->config.value[i])); rv = llogin->config.db.get_row(&llogin->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)llogin->get_db(llogin)), llogin->get_tb(llogin), llogin->config.name[i], llogin->config.value[i], llogin->config.shortcut[i][0], llogin->config.shortcut[i][1]); } return rv; } int lcrt_login_create_config(struct lcrt_login *llogin) { int i; assert(llogin); llogin->config.db.exec(&llogin->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255), \ shortcut INTEGER, \ shortcut_mask INTEGER)", llogin->get_tb(llogin)); for (i = 0; i < LCRT_L_NUMBER; i++) { llogin->config.db.exec(&llogin->config.db, "INSERT INTO %s VALUES('%s', '%s', %d, %d)", llogin->get_tb(llogin), llogin->config.name[i], llogin->config.value[i], llogin->config.shortcut[i][0], llogin->config.shortcut[i][1]); } llogin->config.db.close(&llogin->config.db); return 0; } lcrt-1.1.2/src/Makefile.in0000664000175000017500000034257011750112300012237 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = lcrt$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 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_lcrt_OBJECTS = lcrt-lcrt.$(OBJEXT) lcrt-iwindow.$(OBJEXT) \ lcrt-cwindow.$(OBJEXT) lcrt-imenubar.$(OBJEXT) \ lcrt-cmenubar.$(OBJEXT) lcrt-ifile.$(OBJEXT) \ lcrt-cfile.$(OBJEXT) lcrt-iedit.$(OBJEXT) lcrt-cedit.$(OBJEXT) \ lcrt-iview.$(OBJEXT) lcrt-cview.$(OBJEXT) \ lcrt-ioptions.$(OBJEXT) lcrt-coptions.$(OBJEXT) \ lcrt-ihelp.$(OBJEXT) lcrt-chelp.$(OBJEXT) \ lcrt-itoolbar.$(OBJEXT) lcrt-ctoolbar.$(OBJEXT) \ lcrt-inotebook.$(OBJEXT) lcrt-cnotebook.$(OBJEXT) \ lcrt-istatusbar.$(OBJEXT) lcrt-cstatusbar.$(OBJEXT) \ lcrt-iterminal.$(OBJEXT) lcrt-cterminal.$(OBJEXT) \ lcrt-istatus.$(OBJEXT) lcrt-cstatus.$(OBJEXT) \ lcrt-ipopup.$(OBJEXT) lcrt-cpopup.$(OBJEXT) \ lcrt-ilogin.$(OBJEXT) lcrt-clogin.$(OBJEXT) \ lcrt-iqconnect.$(OBJEXT) lcrt-cqconnect.$(OBJEXT) \ lcrt-iconnect.$(OBJEXT) lcrt-cconnect.$(OBJEXT) \ lcrt-ilock.$(OBJEXT) lcrt-clock.$(OBJEXT) \ lcrt-irename.$(OBJEXT) lcrt-crename.$(OBJEXT) \ lcrt-imkdir.$(OBJEXT) lcrt-cmkdir.$(OBJEXT) \ lcrt-ifind.$(OBJEXT) lcrt-cfind.$(OBJEXT) \ lcrt-isettings.$(OBJEXT) lcrt-csettings.$(OBJEXT) \ lcrt-iabout.$(OBJEXT) lcrt-cabout.$(OBJEXT) \ lcrt-iaccels.$(OBJEXT) lcrt-caccels.$(OBJEXT) \ lcrt-foperate.$(OBJEXT) lcrt-mkconfig.$(OBJEXT) \ lcrt-message.$(OBJEXT) lcrt-support.$(OBJEXT) \ lcrt-protocol.$(OBJEXT) lcrt-user.$(OBJEXT) \ lcrt-serial.$(OBJEXT) lcrt-ssh.$(OBJEXT) lcrt-telnet.$(OBJEXT) \ lcrt-rlogin.$(OBJEXT) lcrt-shell.$(OBJEXT) lcrt-lang.$(OBJEXT) lcrt_OBJECTS = $(am_lcrt_OBJECTS) am__DEPENDENCIES_1 = lcrt_DEPENDENCIES = $(am__DEPENDENCIES_1) lcrt_LINK = $(CCLD) $(lcrt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(lcrt_SOURCES) DIST_SOURCES = $(lcrt_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCRT_LIB_DEPS_CFLAGS = @LCRT_LIB_DEPS_CFLAGS@ LCRT_LIB_DEPS_LIBS = @LCRT_LIB_DEPS_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lcrt_SOURCES = lcrt.c \ iwindow.c iwindow.h \ cwindow.c cwindow.h \ imenubar.c imenubar.h \ cmenubar.c cmenubar.h \ ifile.c ifile.h \ cfile.c cfile.h \ iedit.c iedit.h \ cedit.c cedit.h \ iview.c iview.h \ cview.c cview.h \ ioptions.c ioptions.h \ coptions.c coptions.h \ ihelp.c ihelp.h \ chelp.c chelp.h \ itoolbar.c itoolbar.h \ ctoolbar.c ctoolbar.h \ inotebook.c inotebook.h \ cnotebook.c cnotebook.h \ istatusbar.c istatusbar.h \ cstatusbar.c cstatusbar.h \ iterminal.c iterminal.h \ cterminal.c cterminal.h \ istatus.c istatus.h \ cstatus.c cstatus.h \ ipopup.c ipopup.h \ cpopup.c cpopup.h \ ilogin.c ilogin.h \ clogin.c clogin.h \ iqconnect.c iqconnect.h \ cqconnect.c cqconnect.h \ iconnect.c iconnect.h \ cconnect.c cconnect.h \ ilock.c ilock.h \ clock.c clock.h \ irename.c irename.h \ crename.c crename.h \ imkdir.c imkdir.h \ cmkdir.c cmkdir.h \ ifind.c ifind.h \ cfind.c cfind.h \ isettings.c isettings.h \ csettings.c csettings.h \ iabout.c iabout.h \ cabout.c cabout.h \ iaccels.c iaccels.h \ caccels.c caccels.h \ foperate.c foperate.h \ mkconfig.c mkconfig.h \ message.c message.h \ support.c support.h \ protocol.c protocol.h \ user.c user.h \ serial.c serial.h \ ssh.c ssh.h \ telnet.c telnet.h \ rlogin.c rlogin.h \ shell.c shell.h \ lang.c \ list.h \ debug.h INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ -I$(top_srcdir)/language \ $(LCRT_LIB_DEPS_CFLAGS) lcrt_LDADD = \ $(LCRT_LIB_DEPS_LIBS) lcrt_CFLAGS = \ -DLCRT_INSTALL_DIR="\"$(datadir)/$(PACKAGE)\"" \ -DLCRT_HELP_DIR="\"$(datadir)/gnome/help/$(PACKAGE)\"" all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) lcrt$(EXEEXT): $(lcrt_OBJECTS) $(lcrt_DEPENDENCIES) @rm -f lcrt$(EXEEXT) $(lcrt_LINK) $(lcrt_OBJECTS) $(lcrt_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cabout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-caccels.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cconnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cedit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cfind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-chelp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-clock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-clogin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cmenubar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cmkdir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cnotebook.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-coptions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cpopup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cqconnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-crename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-csettings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cstatus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cstatusbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cterminal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ctoolbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-cwindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-foperate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iabout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iaccels.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iconnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iedit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ifile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ifind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ihelp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ilock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ilogin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-imenubar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-imkdir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-inotebook.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ioptions.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ipopup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iqconnect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-irename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-isettings.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-istatus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-istatusbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iterminal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-itoolbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-iwindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-lang.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-lcrt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-message.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-mkconfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-protocol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-rlogin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-serial.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-shell.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-ssh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-support.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-telnet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcrt-user.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` lcrt-lcrt.o: lcrt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-lcrt.o -MD -MP -MF $(DEPDIR)/lcrt-lcrt.Tpo -c -o lcrt-lcrt.o `test -f 'lcrt.c' || echo '$(srcdir)/'`lcrt.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-lcrt.Tpo $(DEPDIR)/lcrt-lcrt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lcrt.c' object='lcrt-lcrt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-lcrt.o `test -f 'lcrt.c' || echo '$(srcdir)/'`lcrt.c lcrt-lcrt.obj: lcrt.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-lcrt.obj -MD -MP -MF $(DEPDIR)/lcrt-lcrt.Tpo -c -o lcrt-lcrt.obj `if test -f 'lcrt.c'; then $(CYGPATH_W) 'lcrt.c'; else $(CYGPATH_W) '$(srcdir)/lcrt.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-lcrt.Tpo $(DEPDIR)/lcrt-lcrt.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lcrt.c' object='lcrt-lcrt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-lcrt.obj `if test -f 'lcrt.c'; then $(CYGPATH_W) 'lcrt.c'; else $(CYGPATH_W) '$(srcdir)/lcrt.c'; fi` lcrt-iwindow.o: iwindow.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iwindow.o -MD -MP -MF $(DEPDIR)/lcrt-iwindow.Tpo -c -o lcrt-iwindow.o `test -f 'iwindow.c' || echo '$(srcdir)/'`iwindow.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iwindow.Tpo $(DEPDIR)/lcrt-iwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iwindow.c' object='lcrt-iwindow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iwindow.o `test -f 'iwindow.c' || echo '$(srcdir)/'`iwindow.c lcrt-iwindow.obj: iwindow.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iwindow.obj -MD -MP -MF $(DEPDIR)/lcrt-iwindow.Tpo -c -o lcrt-iwindow.obj `if test -f 'iwindow.c'; then $(CYGPATH_W) 'iwindow.c'; else $(CYGPATH_W) '$(srcdir)/iwindow.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iwindow.Tpo $(DEPDIR)/lcrt-iwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iwindow.c' object='lcrt-iwindow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iwindow.obj `if test -f 'iwindow.c'; then $(CYGPATH_W) 'iwindow.c'; else $(CYGPATH_W) '$(srcdir)/iwindow.c'; fi` lcrt-cwindow.o: cwindow.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cwindow.o -MD -MP -MF $(DEPDIR)/lcrt-cwindow.Tpo -c -o lcrt-cwindow.o `test -f 'cwindow.c' || echo '$(srcdir)/'`cwindow.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cwindow.Tpo $(DEPDIR)/lcrt-cwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cwindow.c' object='lcrt-cwindow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cwindow.o `test -f 'cwindow.c' || echo '$(srcdir)/'`cwindow.c lcrt-cwindow.obj: cwindow.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cwindow.obj -MD -MP -MF $(DEPDIR)/lcrt-cwindow.Tpo -c -o lcrt-cwindow.obj `if test -f 'cwindow.c'; then $(CYGPATH_W) 'cwindow.c'; else $(CYGPATH_W) '$(srcdir)/cwindow.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cwindow.Tpo $(DEPDIR)/lcrt-cwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cwindow.c' object='lcrt-cwindow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cwindow.obj `if test -f 'cwindow.c'; then $(CYGPATH_W) 'cwindow.c'; else $(CYGPATH_W) '$(srcdir)/cwindow.c'; fi` lcrt-imenubar.o: imenubar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-imenubar.o -MD -MP -MF $(DEPDIR)/lcrt-imenubar.Tpo -c -o lcrt-imenubar.o `test -f 'imenubar.c' || echo '$(srcdir)/'`imenubar.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-imenubar.Tpo $(DEPDIR)/lcrt-imenubar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='imenubar.c' object='lcrt-imenubar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-imenubar.o `test -f 'imenubar.c' || echo '$(srcdir)/'`imenubar.c lcrt-imenubar.obj: imenubar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-imenubar.obj -MD -MP -MF $(DEPDIR)/lcrt-imenubar.Tpo -c -o lcrt-imenubar.obj `if test -f 'imenubar.c'; then $(CYGPATH_W) 'imenubar.c'; else $(CYGPATH_W) '$(srcdir)/imenubar.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-imenubar.Tpo $(DEPDIR)/lcrt-imenubar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='imenubar.c' object='lcrt-imenubar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-imenubar.obj `if test -f 'imenubar.c'; then $(CYGPATH_W) 'imenubar.c'; else $(CYGPATH_W) '$(srcdir)/imenubar.c'; fi` lcrt-cmenubar.o: cmenubar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cmenubar.o -MD -MP -MF $(DEPDIR)/lcrt-cmenubar.Tpo -c -o lcrt-cmenubar.o `test -f 'cmenubar.c' || echo '$(srcdir)/'`cmenubar.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cmenubar.Tpo $(DEPDIR)/lcrt-cmenubar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmenubar.c' object='lcrt-cmenubar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cmenubar.o `test -f 'cmenubar.c' || echo '$(srcdir)/'`cmenubar.c lcrt-cmenubar.obj: cmenubar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cmenubar.obj -MD -MP -MF $(DEPDIR)/lcrt-cmenubar.Tpo -c -o lcrt-cmenubar.obj `if test -f 'cmenubar.c'; then $(CYGPATH_W) 'cmenubar.c'; else $(CYGPATH_W) '$(srcdir)/cmenubar.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cmenubar.Tpo $(DEPDIR)/lcrt-cmenubar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmenubar.c' object='lcrt-cmenubar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cmenubar.obj `if test -f 'cmenubar.c'; then $(CYGPATH_W) 'cmenubar.c'; else $(CYGPATH_W) '$(srcdir)/cmenubar.c'; fi` lcrt-ifile.o: ifile.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ifile.o -MD -MP -MF $(DEPDIR)/lcrt-ifile.Tpo -c -o lcrt-ifile.o `test -f 'ifile.c' || echo '$(srcdir)/'`ifile.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ifile.Tpo $(DEPDIR)/lcrt-ifile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ifile.c' object='lcrt-ifile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ifile.o `test -f 'ifile.c' || echo '$(srcdir)/'`ifile.c lcrt-ifile.obj: ifile.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ifile.obj -MD -MP -MF $(DEPDIR)/lcrt-ifile.Tpo -c -o lcrt-ifile.obj `if test -f 'ifile.c'; then $(CYGPATH_W) 'ifile.c'; else $(CYGPATH_W) '$(srcdir)/ifile.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ifile.Tpo $(DEPDIR)/lcrt-ifile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ifile.c' object='lcrt-ifile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ifile.obj `if test -f 'ifile.c'; then $(CYGPATH_W) 'ifile.c'; else $(CYGPATH_W) '$(srcdir)/ifile.c'; fi` lcrt-cfile.o: cfile.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cfile.o -MD -MP -MF $(DEPDIR)/lcrt-cfile.Tpo -c -o lcrt-cfile.o `test -f 'cfile.c' || echo '$(srcdir)/'`cfile.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cfile.Tpo $(DEPDIR)/lcrt-cfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cfile.c' object='lcrt-cfile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cfile.o `test -f 'cfile.c' || echo '$(srcdir)/'`cfile.c lcrt-cfile.obj: cfile.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cfile.obj -MD -MP -MF $(DEPDIR)/lcrt-cfile.Tpo -c -o lcrt-cfile.obj `if test -f 'cfile.c'; then $(CYGPATH_W) 'cfile.c'; else $(CYGPATH_W) '$(srcdir)/cfile.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cfile.Tpo $(DEPDIR)/lcrt-cfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cfile.c' object='lcrt-cfile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cfile.obj `if test -f 'cfile.c'; then $(CYGPATH_W) 'cfile.c'; else $(CYGPATH_W) '$(srcdir)/cfile.c'; fi` lcrt-iedit.o: iedit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iedit.o -MD -MP -MF $(DEPDIR)/lcrt-iedit.Tpo -c -o lcrt-iedit.o `test -f 'iedit.c' || echo '$(srcdir)/'`iedit.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iedit.Tpo $(DEPDIR)/lcrt-iedit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iedit.c' object='lcrt-iedit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iedit.o `test -f 'iedit.c' || echo '$(srcdir)/'`iedit.c lcrt-iedit.obj: iedit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iedit.obj -MD -MP -MF $(DEPDIR)/lcrt-iedit.Tpo -c -o lcrt-iedit.obj `if test -f 'iedit.c'; then $(CYGPATH_W) 'iedit.c'; else $(CYGPATH_W) '$(srcdir)/iedit.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iedit.Tpo $(DEPDIR)/lcrt-iedit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iedit.c' object='lcrt-iedit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iedit.obj `if test -f 'iedit.c'; then $(CYGPATH_W) 'iedit.c'; else $(CYGPATH_W) '$(srcdir)/iedit.c'; fi` lcrt-cedit.o: cedit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cedit.o -MD -MP -MF $(DEPDIR)/lcrt-cedit.Tpo -c -o lcrt-cedit.o `test -f 'cedit.c' || echo '$(srcdir)/'`cedit.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cedit.Tpo $(DEPDIR)/lcrt-cedit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cedit.c' object='lcrt-cedit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cedit.o `test -f 'cedit.c' || echo '$(srcdir)/'`cedit.c lcrt-cedit.obj: cedit.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cedit.obj -MD -MP -MF $(DEPDIR)/lcrt-cedit.Tpo -c -o lcrt-cedit.obj `if test -f 'cedit.c'; then $(CYGPATH_W) 'cedit.c'; else $(CYGPATH_W) '$(srcdir)/cedit.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cedit.Tpo $(DEPDIR)/lcrt-cedit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cedit.c' object='lcrt-cedit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cedit.obj `if test -f 'cedit.c'; then $(CYGPATH_W) 'cedit.c'; else $(CYGPATH_W) '$(srcdir)/cedit.c'; fi` lcrt-iview.o: iview.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iview.o -MD -MP -MF $(DEPDIR)/lcrt-iview.Tpo -c -o lcrt-iview.o `test -f 'iview.c' || echo '$(srcdir)/'`iview.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iview.Tpo $(DEPDIR)/lcrt-iview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iview.c' object='lcrt-iview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iview.o `test -f 'iview.c' || echo '$(srcdir)/'`iview.c lcrt-iview.obj: iview.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iview.obj -MD -MP -MF $(DEPDIR)/lcrt-iview.Tpo -c -o lcrt-iview.obj `if test -f 'iview.c'; then $(CYGPATH_W) 'iview.c'; else $(CYGPATH_W) '$(srcdir)/iview.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iview.Tpo $(DEPDIR)/lcrt-iview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iview.c' object='lcrt-iview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iview.obj `if test -f 'iview.c'; then $(CYGPATH_W) 'iview.c'; else $(CYGPATH_W) '$(srcdir)/iview.c'; fi` lcrt-cview.o: cview.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cview.o -MD -MP -MF $(DEPDIR)/lcrt-cview.Tpo -c -o lcrt-cview.o `test -f 'cview.c' || echo '$(srcdir)/'`cview.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cview.Tpo $(DEPDIR)/lcrt-cview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cview.c' object='lcrt-cview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cview.o `test -f 'cview.c' || echo '$(srcdir)/'`cview.c lcrt-cview.obj: cview.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cview.obj -MD -MP -MF $(DEPDIR)/lcrt-cview.Tpo -c -o lcrt-cview.obj `if test -f 'cview.c'; then $(CYGPATH_W) 'cview.c'; else $(CYGPATH_W) '$(srcdir)/cview.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cview.Tpo $(DEPDIR)/lcrt-cview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cview.c' object='lcrt-cview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cview.obj `if test -f 'cview.c'; then $(CYGPATH_W) 'cview.c'; else $(CYGPATH_W) '$(srcdir)/cview.c'; fi` lcrt-ioptions.o: ioptions.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ioptions.o -MD -MP -MF $(DEPDIR)/lcrt-ioptions.Tpo -c -o lcrt-ioptions.o `test -f 'ioptions.c' || echo '$(srcdir)/'`ioptions.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ioptions.Tpo $(DEPDIR)/lcrt-ioptions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ioptions.c' object='lcrt-ioptions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ioptions.o `test -f 'ioptions.c' || echo '$(srcdir)/'`ioptions.c lcrt-ioptions.obj: ioptions.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ioptions.obj -MD -MP -MF $(DEPDIR)/lcrt-ioptions.Tpo -c -o lcrt-ioptions.obj `if test -f 'ioptions.c'; then $(CYGPATH_W) 'ioptions.c'; else $(CYGPATH_W) '$(srcdir)/ioptions.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ioptions.Tpo $(DEPDIR)/lcrt-ioptions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ioptions.c' object='lcrt-ioptions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ioptions.obj `if test -f 'ioptions.c'; then $(CYGPATH_W) 'ioptions.c'; else $(CYGPATH_W) '$(srcdir)/ioptions.c'; fi` lcrt-coptions.o: coptions.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-coptions.o -MD -MP -MF $(DEPDIR)/lcrt-coptions.Tpo -c -o lcrt-coptions.o `test -f 'coptions.c' || echo '$(srcdir)/'`coptions.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-coptions.Tpo $(DEPDIR)/lcrt-coptions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coptions.c' object='lcrt-coptions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-coptions.o `test -f 'coptions.c' || echo '$(srcdir)/'`coptions.c lcrt-coptions.obj: coptions.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-coptions.obj -MD -MP -MF $(DEPDIR)/lcrt-coptions.Tpo -c -o lcrt-coptions.obj `if test -f 'coptions.c'; then $(CYGPATH_W) 'coptions.c'; else $(CYGPATH_W) '$(srcdir)/coptions.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-coptions.Tpo $(DEPDIR)/lcrt-coptions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coptions.c' object='lcrt-coptions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-coptions.obj `if test -f 'coptions.c'; then $(CYGPATH_W) 'coptions.c'; else $(CYGPATH_W) '$(srcdir)/coptions.c'; fi` lcrt-ihelp.o: ihelp.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ihelp.o -MD -MP -MF $(DEPDIR)/lcrt-ihelp.Tpo -c -o lcrt-ihelp.o `test -f 'ihelp.c' || echo '$(srcdir)/'`ihelp.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ihelp.Tpo $(DEPDIR)/lcrt-ihelp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ihelp.c' object='lcrt-ihelp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ihelp.o `test -f 'ihelp.c' || echo '$(srcdir)/'`ihelp.c lcrt-ihelp.obj: ihelp.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ihelp.obj -MD -MP -MF $(DEPDIR)/lcrt-ihelp.Tpo -c -o lcrt-ihelp.obj `if test -f 'ihelp.c'; then $(CYGPATH_W) 'ihelp.c'; else $(CYGPATH_W) '$(srcdir)/ihelp.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ihelp.Tpo $(DEPDIR)/lcrt-ihelp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ihelp.c' object='lcrt-ihelp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ihelp.obj `if test -f 'ihelp.c'; then $(CYGPATH_W) 'ihelp.c'; else $(CYGPATH_W) '$(srcdir)/ihelp.c'; fi` lcrt-chelp.o: chelp.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-chelp.o -MD -MP -MF $(DEPDIR)/lcrt-chelp.Tpo -c -o lcrt-chelp.o `test -f 'chelp.c' || echo '$(srcdir)/'`chelp.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-chelp.Tpo $(DEPDIR)/lcrt-chelp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chelp.c' object='lcrt-chelp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-chelp.o `test -f 'chelp.c' || echo '$(srcdir)/'`chelp.c lcrt-chelp.obj: chelp.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-chelp.obj -MD -MP -MF $(DEPDIR)/lcrt-chelp.Tpo -c -o lcrt-chelp.obj `if test -f 'chelp.c'; then $(CYGPATH_W) 'chelp.c'; else $(CYGPATH_W) '$(srcdir)/chelp.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-chelp.Tpo $(DEPDIR)/lcrt-chelp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='chelp.c' object='lcrt-chelp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-chelp.obj `if test -f 'chelp.c'; then $(CYGPATH_W) 'chelp.c'; else $(CYGPATH_W) '$(srcdir)/chelp.c'; fi` lcrt-itoolbar.o: itoolbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-itoolbar.o -MD -MP -MF $(DEPDIR)/lcrt-itoolbar.Tpo -c -o lcrt-itoolbar.o `test -f 'itoolbar.c' || echo '$(srcdir)/'`itoolbar.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-itoolbar.Tpo $(DEPDIR)/lcrt-itoolbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='itoolbar.c' object='lcrt-itoolbar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-itoolbar.o `test -f 'itoolbar.c' || echo '$(srcdir)/'`itoolbar.c lcrt-itoolbar.obj: itoolbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-itoolbar.obj -MD -MP -MF $(DEPDIR)/lcrt-itoolbar.Tpo -c -o lcrt-itoolbar.obj `if test -f 'itoolbar.c'; then $(CYGPATH_W) 'itoolbar.c'; else $(CYGPATH_W) '$(srcdir)/itoolbar.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-itoolbar.Tpo $(DEPDIR)/lcrt-itoolbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='itoolbar.c' object='lcrt-itoolbar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-itoolbar.obj `if test -f 'itoolbar.c'; then $(CYGPATH_W) 'itoolbar.c'; else $(CYGPATH_W) '$(srcdir)/itoolbar.c'; fi` lcrt-ctoolbar.o: ctoolbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ctoolbar.o -MD -MP -MF $(DEPDIR)/lcrt-ctoolbar.Tpo -c -o lcrt-ctoolbar.o `test -f 'ctoolbar.c' || echo '$(srcdir)/'`ctoolbar.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ctoolbar.Tpo $(DEPDIR)/lcrt-ctoolbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ctoolbar.c' object='lcrt-ctoolbar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ctoolbar.o `test -f 'ctoolbar.c' || echo '$(srcdir)/'`ctoolbar.c lcrt-ctoolbar.obj: ctoolbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ctoolbar.obj -MD -MP -MF $(DEPDIR)/lcrt-ctoolbar.Tpo -c -o lcrt-ctoolbar.obj `if test -f 'ctoolbar.c'; then $(CYGPATH_W) 'ctoolbar.c'; else $(CYGPATH_W) '$(srcdir)/ctoolbar.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ctoolbar.Tpo $(DEPDIR)/lcrt-ctoolbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ctoolbar.c' object='lcrt-ctoolbar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ctoolbar.obj `if test -f 'ctoolbar.c'; then $(CYGPATH_W) 'ctoolbar.c'; else $(CYGPATH_W) '$(srcdir)/ctoolbar.c'; fi` lcrt-inotebook.o: inotebook.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-inotebook.o -MD -MP -MF $(DEPDIR)/lcrt-inotebook.Tpo -c -o lcrt-inotebook.o `test -f 'inotebook.c' || echo '$(srcdir)/'`inotebook.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-inotebook.Tpo $(DEPDIR)/lcrt-inotebook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inotebook.c' object='lcrt-inotebook.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-inotebook.o `test -f 'inotebook.c' || echo '$(srcdir)/'`inotebook.c lcrt-inotebook.obj: inotebook.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-inotebook.obj -MD -MP -MF $(DEPDIR)/lcrt-inotebook.Tpo -c -o lcrt-inotebook.obj `if test -f 'inotebook.c'; then $(CYGPATH_W) 'inotebook.c'; else $(CYGPATH_W) '$(srcdir)/inotebook.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-inotebook.Tpo $(DEPDIR)/lcrt-inotebook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inotebook.c' object='lcrt-inotebook.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-inotebook.obj `if test -f 'inotebook.c'; then $(CYGPATH_W) 'inotebook.c'; else $(CYGPATH_W) '$(srcdir)/inotebook.c'; fi` lcrt-cnotebook.o: cnotebook.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cnotebook.o -MD -MP -MF $(DEPDIR)/lcrt-cnotebook.Tpo -c -o lcrt-cnotebook.o `test -f 'cnotebook.c' || echo '$(srcdir)/'`cnotebook.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cnotebook.Tpo $(DEPDIR)/lcrt-cnotebook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cnotebook.c' object='lcrt-cnotebook.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cnotebook.o `test -f 'cnotebook.c' || echo '$(srcdir)/'`cnotebook.c lcrt-cnotebook.obj: cnotebook.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cnotebook.obj -MD -MP -MF $(DEPDIR)/lcrt-cnotebook.Tpo -c -o lcrt-cnotebook.obj `if test -f 'cnotebook.c'; then $(CYGPATH_W) 'cnotebook.c'; else $(CYGPATH_W) '$(srcdir)/cnotebook.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cnotebook.Tpo $(DEPDIR)/lcrt-cnotebook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cnotebook.c' object='lcrt-cnotebook.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cnotebook.obj `if test -f 'cnotebook.c'; then $(CYGPATH_W) 'cnotebook.c'; else $(CYGPATH_W) '$(srcdir)/cnotebook.c'; fi` lcrt-istatusbar.o: istatusbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-istatusbar.o -MD -MP -MF $(DEPDIR)/lcrt-istatusbar.Tpo -c -o lcrt-istatusbar.o `test -f 'istatusbar.c' || echo '$(srcdir)/'`istatusbar.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-istatusbar.Tpo $(DEPDIR)/lcrt-istatusbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='istatusbar.c' object='lcrt-istatusbar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-istatusbar.o `test -f 'istatusbar.c' || echo '$(srcdir)/'`istatusbar.c lcrt-istatusbar.obj: istatusbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-istatusbar.obj -MD -MP -MF $(DEPDIR)/lcrt-istatusbar.Tpo -c -o lcrt-istatusbar.obj `if test -f 'istatusbar.c'; then $(CYGPATH_W) 'istatusbar.c'; else $(CYGPATH_W) '$(srcdir)/istatusbar.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-istatusbar.Tpo $(DEPDIR)/lcrt-istatusbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='istatusbar.c' object='lcrt-istatusbar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-istatusbar.obj `if test -f 'istatusbar.c'; then $(CYGPATH_W) 'istatusbar.c'; else $(CYGPATH_W) '$(srcdir)/istatusbar.c'; fi` lcrt-cstatusbar.o: cstatusbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cstatusbar.o -MD -MP -MF $(DEPDIR)/lcrt-cstatusbar.Tpo -c -o lcrt-cstatusbar.o `test -f 'cstatusbar.c' || echo '$(srcdir)/'`cstatusbar.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cstatusbar.Tpo $(DEPDIR)/lcrt-cstatusbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cstatusbar.c' object='lcrt-cstatusbar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cstatusbar.o `test -f 'cstatusbar.c' || echo '$(srcdir)/'`cstatusbar.c lcrt-cstatusbar.obj: cstatusbar.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cstatusbar.obj -MD -MP -MF $(DEPDIR)/lcrt-cstatusbar.Tpo -c -o lcrt-cstatusbar.obj `if test -f 'cstatusbar.c'; then $(CYGPATH_W) 'cstatusbar.c'; else $(CYGPATH_W) '$(srcdir)/cstatusbar.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cstatusbar.Tpo $(DEPDIR)/lcrt-cstatusbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cstatusbar.c' object='lcrt-cstatusbar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cstatusbar.obj `if test -f 'cstatusbar.c'; then $(CYGPATH_W) 'cstatusbar.c'; else $(CYGPATH_W) '$(srcdir)/cstatusbar.c'; fi` lcrt-iterminal.o: iterminal.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iterminal.o -MD -MP -MF $(DEPDIR)/lcrt-iterminal.Tpo -c -o lcrt-iterminal.o `test -f 'iterminal.c' || echo '$(srcdir)/'`iterminal.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iterminal.Tpo $(DEPDIR)/lcrt-iterminal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iterminal.c' object='lcrt-iterminal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iterminal.o `test -f 'iterminal.c' || echo '$(srcdir)/'`iterminal.c lcrt-iterminal.obj: iterminal.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iterminal.obj -MD -MP -MF $(DEPDIR)/lcrt-iterminal.Tpo -c -o lcrt-iterminal.obj `if test -f 'iterminal.c'; then $(CYGPATH_W) 'iterminal.c'; else $(CYGPATH_W) '$(srcdir)/iterminal.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iterminal.Tpo $(DEPDIR)/lcrt-iterminal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iterminal.c' object='lcrt-iterminal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iterminal.obj `if test -f 'iterminal.c'; then $(CYGPATH_W) 'iterminal.c'; else $(CYGPATH_W) '$(srcdir)/iterminal.c'; fi` lcrt-cterminal.o: cterminal.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cterminal.o -MD -MP -MF $(DEPDIR)/lcrt-cterminal.Tpo -c -o lcrt-cterminal.o `test -f 'cterminal.c' || echo '$(srcdir)/'`cterminal.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cterminal.Tpo $(DEPDIR)/lcrt-cterminal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cterminal.c' object='lcrt-cterminal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cterminal.o `test -f 'cterminal.c' || echo '$(srcdir)/'`cterminal.c lcrt-cterminal.obj: cterminal.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cterminal.obj -MD -MP -MF $(DEPDIR)/lcrt-cterminal.Tpo -c -o lcrt-cterminal.obj `if test -f 'cterminal.c'; then $(CYGPATH_W) 'cterminal.c'; else $(CYGPATH_W) '$(srcdir)/cterminal.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cterminal.Tpo $(DEPDIR)/lcrt-cterminal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cterminal.c' object='lcrt-cterminal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cterminal.obj `if test -f 'cterminal.c'; then $(CYGPATH_W) 'cterminal.c'; else $(CYGPATH_W) '$(srcdir)/cterminal.c'; fi` lcrt-istatus.o: istatus.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-istatus.o -MD -MP -MF $(DEPDIR)/lcrt-istatus.Tpo -c -o lcrt-istatus.o `test -f 'istatus.c' || echo '$(srcdir)/'`istatus.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-istatus.Tpo $(DEPDIR)/lcrt-istatus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='istatus.c' object='lcrt-istatus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-istatus.o `test -f 'istatus.c' || echo '$(srcdir)/'`istatus.c lcrt-istatus.obj: istatus.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-istatus.obj -MD -MP -MF $(DEPDIR)/lcrt-istatus.Tpo -c -o lcrt-istatus.obj `if test -f 'istatus.c'; then $(CYGPATH_W) 'istatus.c'; else $(CYGPATH_W) '$(srcdir)/istatus.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-istatus.Tpo $(DEPDIR)/lcrt-istatus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='istatus.c' object='lcrt-istatus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-istatus.obj `if test -f 'istatus.c'; then $(CYGPATH_W) 'istatus.c'; else $(CYGPATH_W) '$(srcdir)/istatus.c'; fi` lcrt-cstatus.o: cstatus.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cstatus.o -MD -MP -MF $(DEPDIR)/lcrt-cstatus.Tpo -c -o lcrt-cstatus.o `test -f 'cstatus.c' || echo '$(srcdir)/'`cstatus.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cstatus.Tpo $(DEPDIR)/lcrt-cstatus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cstatus.c' object='lcrt-cstatus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cstatus.o `test -f 'cstatus.c' || echo '$(srcdir)/'`cstatus.c lcrt-cstatus.obj: cstatus.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cstatus.obj -MD -MP -MF $(DEPDIR)/lcrt-cstatus.Tpo -c -o lcrt-cstatus.obj `if test -f 'cstatus.c'; then $(CYGPATH_W) 'cstatus.c'; else $(CYGPATH_W) '$(srcdir)/cstatus.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cstatus.Tpo $(DEPDIR)/lcrt-cstatus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cstatus.c' object='lcrt-cstatus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cstatus.obj `if test -f 'cstatus.c'; then $(CYGPATH_W) 'cstatus.c'; else $(CYGPATH_W) '$(srcdir)/cstatus.c'; fi` lcrt-ipopup.o: ipopup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ipopup.o -MD -MP -MF $(DEPDIR)/lcrt-ipopup.Tpo -c -o lcrt-ipopup.o `test -f 'ipopup.c' || echo '$(srcdir)/'`ipopup.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ipopup.Tpo $(DEPDIR)/lcrt-ipopup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ipopup.c' object='lcrt-ipopup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ipopup.o `test -f 'ipopup.c' || echo '$(srcdir)/'`ipopup.c lcrt-ipopup.obj: ipopup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ipopup.obj -MD -MP -MF $(DEPDIR)/lcrt-ipopup.Tpo -c -o lcrt-ipopup.obj `if test -f 'ipopup.c'; then $(CYGPATH_W) 'ipopup.c'; else $(CYGPATH_W) '$(srcdir)/ipopup.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ipopup.Tpo $(DEPDIR)/lcrt-ipopup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ipopup.c' object='lcrt-ipopup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ipopup.obj `if test -f 'ipopup.c'; then $(CYGPATH_W) 'ipopup.c'; else $(CYGPATH_W) '$(srcdir)/ipopup.c'; fi` lcrt-cpopup.o: cpopup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cpopup.o -MD -MP -MF $(DEPDIR)/lcrt-cpopup.Tpo -c -o lcrt-cpopup.o `test -f 'cpopup.c' || echo '$(srcdir)/'`cpopup.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cpopup.Tpo $(DEPDIR)/lcrt-cpopup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpopup.c' object='lcrt-cpopup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cpopup.o `test -f 'cpopup.c' || echo '$(srcdir)/'`cpopup.c lcrt-cpopup.obj: cpopup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cpopup.obj -MD -MP -MF $(DEPDIR)/lcrt-cpopup.Tpo -c -o lcrt-cpopup.obj `if test -f 'cpopup.c'; then $(CYGPATH_W) 'cpopup.c'; else $(CYGPATH_W) '$(srcdir)/cpopup.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cpopup.Tpo $(DEPDIR)/lcrt-cpopup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpopup.c' object='lcrt-cpopup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cpopup.obj `if test -f 'cpopup.c'; then $(CYGPATH_W) 'cpopup.c'; else $(CYGPATH_W) '$(srcdir)/cpopup.c'; fi` lcrt-ilogin.o: ilogin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ilogin.o -MD -MP -MF $(DEPDIR)/lcrt-ilogin.Tpo -c -o lcrt-ilogin.o `test -f 'ilogin.c' || echo '$(srcdir)/'`ilogin.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ilogin.Tpo $(DEPDIR)/lcrt-ilogin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ilogin.c' object='lcrt-ilogin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ilogin.o `test -f 'ilogin.c' || echo '$(srcdir)/'`ilogin.c lcrt-ilogin.obj: ilogin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ilogin.obj -MD -MP -MF $(DEPDIR)/lcrt-ilogin.Tpo -c -o lcrt-ilogin.obj `if test -f 'ilogin.c'; then $(CYGPATH_W) 'ilogin.c'; else $(CYGPATH_W) '$(srcdir)/ilogin.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ilogin.Tpo $(DEPDIR)/lcrt-ilogin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ilogin.c' object='lcrt-ilogin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ilogin.obj `if test -f 'ilogin.c'; then $(CYGPATH_W) 'ilogin.c'; else $(CYGPATH_W) '$(srcdir)/ilogin.c'; fi` lcrt-clogin.o: clogin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-clogin.o -MD -MP -MF $(DEPDIR)/lcrt-clogin.Tpo -c -o lcrt-clogin.o `test -f 'clogin.c' || echo '$(srcdir)/'`clogin.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-clogin.Tpo $(DEPDIR)/lcrt-clogin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clogin.c' object='lcrt-clogin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-clogin.o `test -f 'clogin.c' || echo '$(srcdir)/'`clogin.c lcrt-clogin.obj: clogin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-clogin.obj -MD -MP -MF $(DEPDIR)/lcrt-clogin.Tpo -c -o lcrt-clogin.obj `if test -f 'clogin.c'; then $(CYGPATH_W) 'clogin.c'; else $(CYGPATH_W) '$(srcdir)/clogin.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-clogin.Tpo $(DEPDIR)/lcrt-clogin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clogin.c' object='lcrt-clogin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-clogin.obj `if test -f 'clogin.c'; then $(CYGPATH_W) 'clogin.c'; else $(CYGPATH_W) '$(srcdir)/clogin.c'; fi` lcrt-iqconnect.o: iqconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iqconnect.o -MD -MP -MF $(DEPDIR)/lcrt-iqconnect.Tpo -c -o lcrt-iqconnect.o `test -f 'iqconnect.c' || echo '$(srcdir)/'`iqconnect.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iqconnect.Tpo $(DEPDIR)/lcrt-iqconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iqconnect.c' object='lcrt-iqconnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iqconnect.o `test -f 'iqconnect.c' || echo '$(srcdir)/'`iqconnect.c lcrt-iqconnect.obj: iqconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iqconnect.obj -MD -MP -MF $(DEPDIR)/lcrt-iqconnect.Tpo -c -o lcrt-iqconnect.obj `if test -f 'iqconnect.c'; then $(CYGPATH_W) 'iqconnect.c'; else $(CYGPATH_W) '$(srcdir)/iqconnect.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iqconnect.Tpo $(DEPDIR)/lcrt-iqconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iqconnect.c' object='lcrt-iqconnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iqconnect.obj `if test -f 'iqconnect.c'; then $(CYGPATH_W) 'iqconnect.c'; else $(CYGPATH_W) '$(srcdir)/iqconnect.c'; fi` lcrt-cqconnect.o: cqconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cqconnect.o -MD -MP -MF $(DEPDIR)/lcrt-cqconnect.Tpo -c -o lcrt-cqconnect.o `test -f 'cqconnect.c' || echo '$(srcdir)/'`cqconnect.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cqconnect.Tpo $(DEPDIR)/lcrt-cqconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cqconnect.c' object='lcrt-cqconnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cqconnect.o `test -f 'cqconnect.c' || echo '$(srcdir)/'`cqconnect.c lcrt-cqconnect.obj: cqconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cqconnect.obj -MD -MP -MF $(DEPDIR)/lcrt-cqconnect.Tpo -c -o lcrt-cqconnect.obj `if test -f 'cqconnect.c'; then $(CYGPATH_W) 'cqconnect.c'; else $(CYGPATH_W) '$(srcdir)/cqconnect.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cqconnect.Tpo $(DEPDIR)/lcrt-cqconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cqconnect.c' object='lcrt-cqconnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cqconnect.obj `if test -f 'cqconnect.c'; then $(CYGPATH_W) 'cqconnect.c'; else $(CYGPATH_W) '$(srcdir)/cqconnect.c'; fi` lcrt-iconnect.o: iconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iconnect.o -MD -MP -MF $(DEPDIR)/lcrt-iconnect.Tpo -c -o lcrt-iconnect.o `test -f 'iconnect.c' || echo '$(srcdir)/'`iconnect.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iconnect.Tpo $(DEPDIR)/lcrt-iconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iconnect.c' object='lcrt-iconnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iconnect.o `test -f 'iconnect.c' || echo '$(srcdir)/'`iconnect.c lcrt-iconnect.obj: iconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iconnect.obj -MD -MP -MF $(DEPDIR)/lcrt-iconnect.Tpo -c -o lcrt-iconnect.obj `if test -f 'iconnect.c'; then $(CYGPATH_W) 'iconnect.c'; else $(CYGPATH_W) '$(srcdir)/iconnect.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iconnect.Tpo $(DEPDIR)/lcrt-iconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iconnect.c' object='lcrt-iconnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iconnect.obj `if test -f 'iconnect.c'; then $(CYGPATH_W) 'iconnect.c'; else $(CYGPATH_W) '$(srcdir)/iconnect.c'; fi` lcrt-cconnect.o: cconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cconnect.o -MD -MP -MF $(DEPDIR)/lcrt-cconnect.Tpo -c -o lcrt-cconnect.o `test -f 'cconnect.c' || echo '$(srcdir)/'`cconnect.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cconnect.Tpo $(DEPDIR)/lcrt-cconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cconnect.c' object='lcrt-cconnect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cconnect.o `test -f 'cconnect.c' || echo '$(srcdir)/'`cconnect.c lcrt-cconnect.obj: cconnect.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cconnect.obj -MD -MP -MF $(DEPDIR)/lcrt-cconnect.Tpo -c -o lcrt-cconnect.obj `if test -f 'cconnect.c'; then $(CYGPATH_W) 'cconnect.c'; else $(CYGPATH_W) '$(srcdir)/cconnect.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cconnect.Tpo $(DEPDIR)/lcrt-cconnect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cconnect.c' object='lcrt-cconnect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cconnect.obj `if test -f 'cconnect.c'; then $(CYGPATH_W) 'cconnect.c'; else $(CYGPATH_W) '$(srcdir)/cconnect.c'; fi` lcrt-ilock.o: ilock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ilock.o -MD -MP -MF $(DEPDIR)/lcrt-ilock.Tpo -c -o lcrt-ilock.o `test -f 'ilock.c' || echo '$(srcdir)/'`ilock.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ilock.Tpo $(DEPDIR)/lcrt-ilock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ilock.c' object='lcrt-ilock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ilock.o `test -f 'ilock.c' || echo '$(srcdir)/'`ilock.c lcrt-ilock.obj: ilock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ilock.obj -MD -MP -MF $(DEPDIR)/lcrt-ilock.Tpo -c -o lcrt-ilock.obj `if test -f 'ilock.c'; then $(CYGPATH_W) 'ilock.c'; else $(CYGPATH_W) '$(srcdir)/ilock.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ilock.Tpo $(DEPDIR)/lcrt-ilock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ilock.c' object='lcrt-ilock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ilock.obj `if test -f 'ilock.c'; then $(CYGPATH_W) 'ilock.c'; else $(CYGPATH_W) '$(srcdir)/ilock.c'; fi` lcrt-clock.o: clock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-clock.o -MD -MP -MF $(DEPDIR)/lcrt-clock.Tpo -c -o lcrt-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-clock.Tpo $(DEPDIR)/lcrt-clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='lcrt-clock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c lcrt-clock.obj: clock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-clock.obj -MD -MP -MF $(DEPDIR)/lcrt-clock.Tpo -c -o lcrt-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-clock.Tpo $(DEPDIR)/lcrt-clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='lcrt-clock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi` lcrt-irename.o: irename.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-irename.o -MD -MP -MF $(DEPDIR)/lcrt-irename.Tpo -c -o lcrt-irename.o `test -f 'irename.c' || echo '$(srcdir)/'`irename.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-irename.Tpo $(DEPDIR)/lcrt-irename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='irename.c' object='lcrt-irename.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-irename.o `test -f 'irename.c' || echo '$(srcdir)/'`irename.c lcrt-irename.obj: irename.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-irename.obj -MD -MP -MF $(DEPDIR)/lcrt-irename.Tpo -c -o lcrt-irename.obj `if test -f 'irename.c'; then $(CYGPATH_W) 'irename.c'; else $(CYGPATH_W) '$(srcdir)/irename.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-irename.Tpo $(DEPDIR)/lcrt-irename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='irename.c' object='lcrt-irename.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-irename.obj `if test -f 'irename.c'; then $(CYGPATH_W) 'irename.c'; else $(CYGPATH_W) '$(srcdir)/irename.c'; fi` lcrt-crename.o: crename.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-crename.o -MD -MP -MF $(DEPDIR)/lcrt-crename.Tpo -c -o lcrt-crename.o `test -f 'crename.c' || echo '$(srcdir)/'`crename.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-crename.Tpo $(DEPDIR)/lcrt-crename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='crename.c' object='lcrt-crename.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-crename.o `test -f 'crename.c' || echo '$(srcdir)/'`crename.c lcrt-crename.obj: crename.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-crename.obj -MD -MP -MF $(DEPDIR)/lcrt-crename.Tpo -c -o lcrt-crename.obj `if test -f 'crename.c'; then $(CYGPATH_W) 'crename.c'; else $(CYGPATH_W) '$(srcdir)/crename.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-crename.Tpo $(DEPDIR)/lcrt-crename.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='crename.c' object='lcrt-crename.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-crename.obj `if test -f 'crename.c'; then $(CYGPATH_W) 'crename.c'; else $(CYGPATH_W) '$(srcdir)/crename.c'; fi` lcrt-imkdir.o: imkdir.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-imkdir.o -MD -MP -MF $(DEPDIR)/lcrt-imkdir.Tpo -c -o lcrt-imkdir.o `test -f 'imkdir.c' || echo '$(srcdir)/'`imkdir.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-imkdir.Tpo $(DEPDIR)/lcrt-imkdir.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='imkdir.c' object='lcrt-imkdir.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-imkdir.o `test -f 'imkdir.c' || echo '$(srcdir)/'`imkdir.c lcrt-imkdir.obj: imkdir.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-imkdir.obj -MD -MP -MF $(DEPDIR)/lcrt-imkdir.Tpo -c -o lcrt-imkdir.obj `if test -f 'imkdir.c'; then $(CYGPATH_W) 'imkdir.c'; else $(CYGPATH_W) '$(srcdir)/imkdir.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-imkdir.Tpo $(DEPDIR)/lcrt-imkdir.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='imkdir.c' object='lcrt-imkdir.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-imkdir.obj `if test -f 'imkdir.c'; then $(CYGPATH_W) 'imkdir.c'; else $(CYGPATH_W) '$(srcdir)/imkdir.c'; fi` lcrt-cmkdir.o: cmkdir.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cmkdir.o -MD -MP -MF $(DEPDIR)/lcrt-cmkdir.Tpo -c -o lcrt-cmkdir.o `test -f 'cmkdir.c' || echo '$(srcdir)/'`cmkdir.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cmkdir.Tpo $(DEPDIR)/lcrt-cmkdir.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmkdir.c' object='lcrt-cmkdir.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cmkdir.o `test -f 'cmkdir.c' || echo '$(srcdir)/'`cmkdir.c lcrt-cmkdir.obj: cmkdir.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cmkdir.obj -MD -MP -MF $(DEPDIR)/lcrt-cmkdir.Tpo -c -o lcrt-cmkdir.obj `if test -f 'cmkdir.c'; then $(CYGPATH_W) 'cmkdir.c'; else $(CYGPATH_W) '$(srcdir)/cmkdir.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cmkdir.Tpo $(DEPDIR)/lcrt-cmkdir.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmkdir.c' object='lcrt-cmkdir.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cmkdir.obj `if test -f 'cmkdir.c'; then $(CYGPATH_W) 'cmkdir.c'; else $(CYGPATH_W) '$(srcdir)/cmkdir.c'; fi` lcrt-ifind.o: ifind.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ifind.o -MD -MP -MF $(DEPDIR)/lcrt-ifind.Tpo -c -o lcrt-ifind.o `test -f 'ifind.c' || echo '$(srcdir)/'`ifind.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ifind.Tpo $(DEPDIR)/lcrt-ifind.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ifind.c' object='lcrt-ifind.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ifind.o `test -f 'ifind.c' || echo '$(srcdir)/'`ifind.c lcrt-ifind.obj: ifind.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ifind.obj -MD -MP -MF $(DEPDIR)/lcrt-ifind.Tpo -c -o lcrt-ifind.obj `if test -f 'ifind.c'; then $(CYGPATH_W) 'ifind.c'; else $(CYGPATH_W) '$(srcdir)/ifind.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ifind.Tpo $(DEPDIR)/lcrt-ifind.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ifind.c' object='lcrt-ifind.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ifind.obj `if test -f 'ifind.c'; then $(CYGPATH_W) 'ifind.c'; else $(CYGPATH_W) '$(srcdir)/ifind.c'; fi` lcrt-cfind.o: cfind.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cfind.o -MD -MP -MF $(DEPDIR)/lcrt-cfind.Tpo -c -o lcrt-cfind.o `test -f 'cfind.c' || echo '$(srcdir)/'`cfind.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cfind.Tpo $(DEPDIR)/lcrt-cfind.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cfind.c' object='lcrt-cfind.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cfind.o `test -f 'cfind.c' || echo '$(srcdir)/'`cfind.c lcrt-cfind.obj: cfind.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cfind.obj -MD -MP -MF $(DEPDIR)/lcrt-cfind.Tpo -c -o lcrt-cfind.obj `if test -f 'cfind.c'; then $(CYGPATH_W) 'cfind.c'; else $(CYGPATH_W) '$(srcdir)/cfind.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cfind.Tpo $(DEPDIR)/lcrt-cfind.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cfind.c' object='lcrt-cfind.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cfind.obj `if test -f 'cfind.c'; then $(CYGPATH_W) 'cfind.c'; else $(CYGPATH_W) '$(srcdir)/cfind.c'; fi` lcrt-isettings.o: isettings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-isettings.o -MD -MP -MF $(DEPDIR)/lcrt-isettings.Tpo -c -o lcrt-isettings.o `test -f 'isettings.c' || echo '$(srcdir)/'`isettings.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-isettings.Tpo $(DEPDIR)/lcrt-isettings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isettings.c' object='lcrt-isettings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-isettings.o `test -f 'isettings.c' || echo '$(srcdir)/'`isettings.c lcrt-isettings.obj: isettings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-isettings.obj -MD -MP -MF $(DEPDIR)/lcrt-isettings.Tpo -c -o lcrt-isettings.obj `if test -f 'isettings.c'; then $(CYGPATH_W) 'isettings.c'; else $(CYGPATH_W) '$(srcdir)/isettings.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-isettings.Tpo $(DEPDIR)/lcrt-isettings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isettings.c' object='lcrt-isettings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-isettings.obj `if test -f 'isettings.c'; then $(CYGPATH_W) 'isettings.c'; else $(CYGPATH_W) '$(srcdir)/isettings.c'; fi` lcrt-csettings.o: csettings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-csettings.o -MD -MP -MF $(DEPDIR)/lcrt-csettings.Tpo -c -o lcrt-csettings.o `test -f 'csettings.c' || echo '$(srcdir)/'`csettings.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-csettings.Tpo $(DEPDIR)/lcrt-csettings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='csettings.c' object='lcrt-csettings.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-csettings.o `test -f 'csettings.c' || echo '$(srcdir)/'`csettings.c lcrt-csettings.obj: csettings.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-csettings.obj -MD -MP -MF $(DEPDIR)/lcrt-csettings.Tpo -c -o lcrt-csettings.obj `if test -f 'csettings.c'; then $(CYGPATH_W) 'csettings.c'; else $(CYGPATH_W) '$(srcdir)/csettings.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-csettings.Tpo $(DEPDIR)/lcrt-csettings.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='csettings.c' object='lcrt-csettings.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-csettings.obj `if test -f 'csettings.c'; then $(CYGPATH_W) 'csettings.c'; else $(CYGPATH_W) '$(srcdir)/csettings.c'; fi` lcrt-iabout.o: iabout.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iabout.o -MD -MP -MF $(DEPDIR)/lcrt-iabout.Tpo -c -o lcrt-iabout.o `test -f 'iabout.c' || echo '$(srcdir)/'`iabout.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iabout.Tpo $(DEPDIR)/lcrt-iabout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iabout.c' object='lcrt-iabout.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iabout.o `test -f 'iabout.c' || echo '$(srcdir)/'`iabout.c lcrt-iabout.obj: iabout.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iabout.obj -MD -MP -MF $(DEPDIR)/lcrt-iabout.Tpo -c -o lcrt-iabout.obj `if test -f 'iabout.c'; then $(CYGPATH_W) 'iabout.c'; else $(CYGPATH_W) '$(srcdir)/iabout.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iabout.Tpo $(DEPDIR)/lcrt-iabout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iabout.c' object='lcrt-iabout.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iabout.obj `if test -f 'iabout.c'; then $(CYGPATH_W) 'iabout.c'; else $(CYGPATH_W) '$(srcdir)/iabout.c'; fi` lcrt-cabout.o: cabout.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cabout.o -MD -MP -MF $(DEPDIR)/lcrt-cabout.Tpo -c -o lcrt-cabout.o `test -f 'cabout.c' || echo '$(srcdir)/'`cabout.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cabout.Tpo $(DEPDIR)/lcrt-cabout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cabout.c' object='lcrt-cabout.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cabout.o `test -f 'cabout.c' || echo '$(srcdir)/'`cabout.c lcrt-cabout.obj: cabout.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-cabout.obj -MD -MP -MF $(DEPDIR)/lcrt-cabout.Tpo -c -o lcrt-cabout.obj `if test -f 'cabout.c'; then $(CYGPATH_W) 'cabout.c'; else $(CYGPATH_W) '$(srcdir)/cabout.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-cabout.Tpo $(DEPDIR)/lcrt-cabout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cabout.c' object='lcrt-cabout.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-cabout.obj `if test -f 'cabout.c'; then $(CYGPATH_W) 'cabout.c'; else $(CYGPATH_W) '$(srcdir)/cabout.c'; fi` lcrt-iaccels.o: iaccels.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iaccels.o -MD -MP -MF $(DEPDIR)/lcrt-iaccels.Tpo -c -o lcrt-iaccels.o `test -f 'iaccels.c' || echo '$(srcdir)/'`iaccels.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iaccels.Tpo $(DEPDIR)/lcrt-iaccels.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iaccels.c' object='lcrt-iaccels.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iaccels.o `test -f 'iaccels.c' || echo '$(srcdir)/'`iaccels.c lcrt-iaccels.obj: iaccels.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-iaccels.obj -MD -MP -MF $(DEPDIR)/lcrt-iaccels.Tpo -c -o lcrt-iaccels.obj `if test -f 'iaccels.c'; then $(CYGPATH_W) 'iaccels.c'; else $(CYGPATH_W) '$(srcdir)/iaccels.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-iaccels.Tpo $(DEPDIR)/lcrt-iaccels.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iaccels.c' object='lcrt-iaccels.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-iaccels.obj `if test -f 'iaccels.c'; then $(CYGPATH_W) 'iaccels.c'; else $(CYGPATH_W) '$(srcdir)/iaccels.c'; fi` lcrt-caccels.o: caccels.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-caccels.o -MD -MP -MF $(DEPDIR)/lcrt-caccels.Tpo -c -o lcrt-caccels.o `test -f 'caccels.c' || echo '$(srcdir)/'`caccels.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-caccels.Tpo $(DEPDIR)/lcrt-caccels.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caccels.c' object='lcrt-caccels.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-caccels.o `test -f 'caccels.c' || echo '$(srcdir)/'`caccels.c lcrt-caccels.obj: caccels.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-caccels.obj -MD -MP -MF $(DEPDIR)/lcrt-caccels.Tpo -c -o lcrt-caccels.obj `if test -f 'caccels.c'; then $(CYGPATH_W) 'caccels.c'; else $(CYGPATH_W) '$(srcdir)/caccels.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-caccels.Tpo $(DEPDIR)/lcrt-caccels.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='caccels.c' object='lcrt-caccels.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-caccels.obj `if test -f 'caccels.c'; then $(CYGPATH_W) 'caccels.c'; else $(CYGPATH_W) '$(srcdir)/caccels.c'; fi` lcrt-foperate.o: foperate.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-foperate.o -MD -MP -MF $(DEPDIR)/lcrt-foperate.Tpo -c -o lcrt-foperate.o `test -f 'foperate.c' || echo '$(srcdir)/'`foperate.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-foperate.Tpo $(DEPDIR)/lcrt-foperate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='foperate.c' object='lcrt-foperate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-foperate.o `test -f 'foperate.c' || echo '$(srcdir)/'`foperate.c lcrt-foperate.obj: foperate.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-foperate.obj -MD -MP -MF $(DEPDIR)/lcrt-foperate.Tpo -c -o lcrt-foperate.obj `if test -f 'foperate.c'; then $(CYGPATH_W) 'foperate.c'; else $(CYGPATH_W) '$(srcdir)/foperate.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-foperate.Tpo $(DEPDIR)/lcrt-foperate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='foperate.c' object='lcrt-foperate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-foperate.obj `if test -f 'foperate.c'; then $(CYGPATH_W) 'foperate.c'; else $(CYGPATH_W) '$(srcdir)/foperate.c'; fi` lcrt-mkconfig.o: mkconfig.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-mkconfig.o -MD -MP -MF $(DEPDIR)/lcrt-mkconfig.Tpo -c -o lcrt-mkconfig.o `test -f 'mkconfig.c' || echo '$(srcdir)/'`mkconfig.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-mkconfig.Tpo $(DEPDIR)/lcrt-mkconfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mkconfig.c' object='lcrt-mkconfig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-mkconfig.o `test -f 'mkconfig.c' || echo '$(srcdir)/'`mkconfig.c lcrt-mkconfig.obj: mkconfig.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-mkconfig.obj -MD -MP -MF $(DEPDIR)/lcrt-mkconfig.Tpo -c -o lcrt-mkconfig.obj `if test -f 'mkconfig.c'; then $(CYGPATH_W) 'mkconfig.c'; else $(CYGPATH_W) '$(srcdir)/mkconfig.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-mkconfig.Tpo $(DEPDIR)/lcrt-mkconfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mkconfig.c' object='lcrt-mkconfig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-mkconfig.obj `if test -f 'mkconfig.c'; then $(CYGPATH_W) 'mkconfig.c'; else $(CYGPATH_W) '$(srcdir)/mkconfig.c'; fi` lcrt-message.o: message.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-message.o -MD -MP -MF $(DEPDIR)/lcrt-message.Tpo -c -o lcrt-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-message.Tpo $(DEPDIR)/lcrt-message.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='message.c' object='lcrt-message.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-message.o `test -f 'message.c' || echo '$(srcdir)/'`message.c lcrt-message.obj: message.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-message.obj -MD -MP -MF $(DEPDIR)/lcrt-message.Tpo -c -o lcrt-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-message.Tpo $(DEPDIR)/lcrt-message.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='message.c' object='lcrt-message.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-message.obj `if test -f 'message.c'; then $(CYGPATH_W) 'message.c'; else $(CYGPATH_W) '$(srcdir)/message.c'; fi` lcrt-support.o: support.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-support.o -MD -MP -MF $(DEPDIR)/lcrt-support.Tpo -c -o lcrt-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-support.Tpo $(DEPDIR)/lcrt-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='support.c' object='lcrt-support.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-support.o `test -f 'support.c' || echo '$(srcdir)/'`support.c lcrt-support.obj: support.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-support.obj -MD -MP -MF $(DEPDIR)/lcrt-support.Tpo -c -o lcrt-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-support.Tpo $(DEPDIR)/lcrt-support.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='support.c' object='lcrt-support.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-support.obj `if test -f 'support.c'; then $(CYGPATH_W) 'support.c'; else $(CYGPATH_W) '$(srcdir)/support.c'; fi` lcrt-protocol.o: protocol.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-protocol.o -MD -MP -MF $(DEPDIR)/lcrt-protocol.Tpo -c -o lcrt-protocol.o `test -f 'protocol.c' || echo '$(srcdir)/'`protocol.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-protocol.Tpo $(DEPDIR)/lcrt-protocol.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='protocol.c' object='lcrt-protocol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-protocol.o `test -f 'protocol.c' || echo '$(srcdir)/'`protocol.c lcrt-protocol.obj: protocol.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-protocol.obj -MD -MP -MF $(DEPDIR)/lcrt-protocol.Tpo -c -o lcrt-protocol.obj `if test -f 'protocol.c'; then $(CYGPATH_W) 'protocol.c'; else $(CYGPATH_W) '$(srcdir)/protocol.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-protocol.Tpo $(DEPDIR)/lcrt-protocol.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='protocol.c' object='lcrt-protocol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-protocol.obj `if test -f 'protocol.c'; then $(CYGPATH_W) 'protocol.c'; else $(CYGPATH_W) '$(srcdir)/protocol.c'; fi` lcrt-user.o: user.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-user.o -MD -MP -MF $(DEPDIR)/lcrt-user.Tpo -c -o lcrt-user.o `test -f 'user.c' || echo '$(srcdir)/'`user.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-user.Tpo $(DEPDIR)/lcrt-user.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='user.c' object='lcrt-user.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-user.o `test -f 'user.c' || echo '$(srcdir)/'`user.c lcrt-user.obj: user.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-user.obj -MD -MP -MF $(DEPDIR)/lcrt-user.Tpo -c -o lcrt-user.obj `if test -f 'user.c'; then $(CYGPATH_W) 'user.c'; else $(CYGPATH_W) '$(srcdir)/user.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-user.Tpo $(DEPDIR)/lcrt-user.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='user.c' object='lcrt-user.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-user.obj `if test -f 'user.c'; then $(CYGPATH_W) 'user.c'; else $(CYGPATH_W) '$(srcdir)/user.c'; fi` lcrt-serial.o: serial.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-serial.o -MD -MP -MF $(DEPDIR)/lcrt-serial.Tpo -c -o lcrt-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-serial.Tpo $(DEPDIR)/lcrt-serial.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='lcrt-serial.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c lcrt-serial.obj: serial.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-serial.obj -MD -MP -MF $(DEPDIR)/lcrt-serial.Tpo -c -o lcrt-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-serial.Tpo $(DEPDIR)/lcrt-serial.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='lcrt-serial.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` lcrt-ssh.o: ssh.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ssh.o -MD -MP -MF $(DEPDIR)/lcrt-ssh.Tpo -c -o lcrt-ssh.o `test -f 'ssh.c' || echo '$(srcdir)/'`ssh.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ssh.Tpo $(DEPDIR)/lcrt-ssh.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ssh.c' object='lcrt-ssh.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ssh.o `test -f 'ssh.c' || echo '$(srcdir)/'`ssh.c lcrt-ssh.obj: ssh.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-ssh.obj -MD -MP -MF $(DEPDIR)/lcrt-ssh.Tpo -c -o lcrt-ssh.obj `if test -f 'ssh.c'; then $(CYGPATH_W) 'ssh.c'; else $(CYGPATH_W) '$(srcdir)/ssh.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-ssh.Tpo $(DEPDIR)/lcrt-ssh.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ssh.c' object='lcrt-ssh.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-ssh.obj `if test -f 'ssh.c'; then $(CYGPATH_W) 'ssh.c'; else $(CYGPATH_W) '$(srcdir)/ssh.c'; fi` lcrt-telnet.o: telnet.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-telnet.o -MD -MP -MF $(DEPDIR)/lcrt-telnet.Tpo -c -o lcrt-telnet.o `test -f 'telnet.c' || echo '$(srcdir)/'`telnet.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-telnet.Tpo $(DEPDIR)/lcrt-telnet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='telnet.c' object='lcrt-telnet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-telnet.o `test -f 'telnet.c' || echo '$(srcdir)/'`telnet.c lcrt-telnet.obj: telnet.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-telnet.obj -MD -MP -MF $(DEPDIR)/lcrt-telnet.Tpo -c -o lcrt-telnet.obj `if test -f 'telnet.c'; then $(CYGPATH_W) 'telnet.c'; else $(CYGPATH_W) '$(srcdir)/telnet.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-telnet.Tpo $(DEPDIR)/lcrt-telnet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='telnet.c' object='lcrt-telnet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-telnet.obj `if test -f 'telnet.c'; then $(CYGPATH_W) 'telnet.c'; else $(CYGPATH_W) '$(srcdir)/telnet.c'; fi` lcrt-rlogin.o: rlogin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-rlogin.o -MD -MP -MF $(DEPDIR)/lcrt-rlogin.Tpo -c -o lcrt-rlogin.o `test -f 'rlogin.c' || echo '$(srcdir)/'`rlogin.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-rlogin.Tpo $(DEPDIR)/lcrt-rlogin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rlogin.c' object='lcrt-rlogin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-rlogin.o `test -f 'rlogin.c' || echo '$(srcdir)/'`rlogin.c lcrt-rlogin.obj: rlogin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-rlogin.obj -MD -MP -MF $(DEPDIR)/lcrt-rlogin.Tpo -c -o lcrt-rlogin.obj `if test -f 'rlogin.c'; then $(CYGPATH_W) 'rlogin.c'; else $(CYGPATH_W) '$(srcdir)/rlogin.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-rlogin.Tpo $(DEPDIR)/lcrt-rlogin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rlogin.c' object='lcrt-rlogin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-rlogin.obj `if test -f 'rlogin.c'; then $(CYGPATH_W) 'rlogin.c'; else $(CYGPATH_W) '$(srcdir)/rlogin.c'; fi` lcrt-shell.o: shell.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-shell.o -MD -MP -MF $(DEPDIR)/lcrt-shell.Tpo -c -o lcrt-shell.o `test -f 'shell.c' || echo '$(srcdir)/'`shell.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-shell.Tpo $(DEPDIR)/lcrt-shell.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shell.c' object='lcrt-shell.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-shell.o `test -f 'shell.c' || echo '$(srcdir)/'`shell.c lcrt-shell.obj: shell.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-shell.obj -MD -MP -MF $(DEPDIR)/lcrt-shell.Tpo -c -o lcrt-shell.obj `if test -f 'shell.c'; then $(CYGPATH_W) 'shell.c'; else $(CYGPATH_W) '$(srcdir)/shell.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-shell.Tpo $(DEPDIR)/lcrt-shell.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shell.c' object='lcrt-shell.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-shell.obj `if test -f 'shell.c'; then $(CYGPATH_W) 'shell.c'; else $(CYGPATH_W) '$(srcdir)/shell.c'; fi` lcrt-lang.o: lang.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-lang.o -MD -MP -MF $(DEPDIR)/lcrt-lang.Tpo -c -o lcrt-lang.o `test -f 'lang.c' || echo '$(srcdir)/'`lang.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-lang.Tpo $(DEPDIR)/lcrt-lang.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lang.c' object='lcrt-lang.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-lang.o `test -f 'lang.c' || echo '$(srcdir)/'`lang.c lcrt-lang.obj: lang.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -MT lcrt-lang.obj -MD -MP -MF $(DEPDIR)/lcrt-lang.Tpo -c -o lcrt-lang.obj `if test -f 'lang.c'; then $(CYGPATH_W) 'lang.c'; else $(CYGPATH_W) '$(srcdir)/lang.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lcrt-lang.Tpo $(DEPDIR)/lcrt-lang.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lang.c' object='lcrt-lang.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lcrt_CFLAGS) $(CFLAGS) -c -o lcrt-lang.obj `if test -f 'lang.c'; then $(CYGPATH_W) 'lang.c'; else $(CYGPATH_W) '$(srcdir)/lang.c'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags 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: lcrt-1.1.2/src/ipopup.c0000664000175000017500000002131011750112142011640 00000000000000#include #include #include #include #include #include #include #include #include "iterminal.h" #include "inotebook.h" #include "iwindow.h" #include "ipopup.h" #include "cpopup.h" #include "debug.h" int lcrt_popup_init_config(struct lcrt_popup *lpopup); int lcrt_popup_load_config(struct lcrt_popup *lpopup); int lcrt_popup_create_config(struct lcrt_popup *lpopup); struct lcrt_popup *lcrt_create_popup_menu(struct lcrt_terminal *parent) { struct lcrt_popup *lpopup; struct lcrt_window *lwindow = parent->parent->parent; GtkWidget *popup_menu; GtkWidget *p_rename; GtkWidget *p_reconnect; GtkWidget *image1; GtkWidget *p_disconnect; GtkWidget *p_close; GtkWidget *p_separator1; GtkWidget *p_lock_session; GtkWidget *p_clone_session; GtkWidget *p_separator2; GtkWidget *p_session_options; GtkAccelGroup *accel_group; lpopup =(struct lcrt_popup *)calloc(1, sizeof(struct lcrt_popup)); assert(lpopup); lcrt_popup_init_config(lpopup); lcrt_popup_load_config(lpopup); accel_group = gtk_accel_group_new(); lpopup->parent = parent; popup_menu = gtk_menu_new(); lpopup->popup_menu = popup_menu; p_rename = gtk_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_RENAME]); lpopup->p_rename = p_rename; gtk_widget_show(p_rename); gtk_container_add(GTK_CONTAINER(popup_menu), p_rename); p_reconnect = gtk_image_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_RECONNECT]); lpopup->p_reconnect = p_reconnect; gtk_widget_show(p_reconnect); gtk_container_add(GTK_CONTAINER(popup_menu), p_reconnect); image1 = gtk_image_new_from_stock("gtk-jump-to", GTK_ICON_SIZE_MENU); gtk_widget_show(image1); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(p_reconnect), image1); p_disconnect = gtk_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_DISCONNECT]); lpopup->p_disconnect = p_disconnect; gtk_widget_show(p_disconnect); gtk_container_add(GTK_CONTAINER(popup_menu), p_disconnect); p_close = gtk_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_CLOSE]); lpopup->p_close = p_close; gtk_widget_show(p_close); gtk_container_add(GTK_CONTAINER(popup_menu), p_close); gtk_widget_add_accelerator(p_close, "activate", accel_group, GDK_W,(GdkModifierType)GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_ACCEL_VISIBLE); p_separator1 = gtk_separator_menu_item_new(); gtk_widget_show(p_separator1); gtk_container_add(GTK_CONTAINER(popup_menu), p_separator1); gtk_widget_set_sensitive(p_separator1, FALSE); if (parent->locked == FALSE) p_lock_session = gtk_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_LOCK_SESSION]); else p_lock_session = gtk_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_UNLOCK_SESSION]); lpopup->p_lock_session = p_lock_session; gtk_widget_show(p_lock_session); gtk_container_add(GTK_CONTAINER(popup_menu), p_lock_session); p_clone_session = gtk_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_CLONE_SESSION]); lpopup->p_clone_session = p_clone_session; gtk_widget_show(p_clone_session); gtk_container_add(GTK_CONTAINER(popup_menu), p_clone_session); p_separator2 = gtk_separator_menu_item_new(); gtk_widget_show(p_separator2); gtk_container_add(GTK_CONTAINER(popup_menu), p_separator2); gtk_widget_set_sensitive(p_separator2, FALSE); p_session_options = gtk_menu_item_new_with_mnemonic(lpopup->config.value[LCRT_P_SESSION_OPTIONS]); lpopup->p_session_options = p_session_options; gtk_widget_show(p_session_options); gtk_container_add(GTK_CONTAINER(popup_menu), p_session_options); g_signal_connect((gpointer)p_rename, "activate", G_CALLBACK(lcrt_popup_on_rename_activate), lwindow); g_signal_connect((gpointer)p_reconnect, "activate", G_CALLBACK(lcrt_popup_on_reconnect_activate), lwindow); g_signal_connect((gpointer)p_disconnect, "activate", G_CALLBACK(lcrt_popup_on_disconnect_activate), lwindow); g_signal_connect((gpointer)p_close, "activate", G_CALLBACK(lcrt_popup_on_close_activate), lwindow); g_signal_connect((gpointer)p_lock_session, "activate", G_CALLBACK(lcrt_popup_on_lock_session_activate), lwindow); g_signal_connect((gpointer)p_clone_session, "activate", G_CALLBACK(lcrt_popup_on_clone_session_activate), lwindow); g_signal_connect((gpointer)p_session_options, "activate", G_CALLBACK(lcrt_popup_on_session_options_activate), lwindow); g_signal_connect((gpointer) popup_menu, "deactivate", G_CALLBACK(lcrt_popup_on_deactivate), lpopup); //gtk_menu_set_accel_group(GTK_MENU(popup_menu), accel_group); gboolean connected = (parent->connected == LCRT_TERMINAL_CONNECTED); gtk_widget_set_sensitive(p_reconnect, !connected); gtk_widget_set_sensitive(p_disconnect, connected); gtk_widget_set_sensitive(p_clone_session, connected); if (parent->locked == TRUE) { gtk_widget_set_sensitive(p_rename, FALSE); gtk_widget_set_sensitive(p_reconnect, FALSE); gtk_widget_set_sensitive(p_disconnect, FALSE); gtk_widget_set_sensitive(p_clone_session, FALSE); gtk_widget_set_sensitive(p_session_options, FALSE); } return lpopup; } static const char *lcrt_popup_get_db_name(struct lcrt_popup *lpopup) { return lpopup == NULL ? NULL : lpopup->config.db.db_name; } static const char *lcrt_popup_get_tb_name(struct lcrt_popup *lpopup) { return lpopup == NULL ? NULL : lpopup->config.db.db_table; } int lcrt_popup_init_config(struct lcrt_popup *lpopup) { char db_name[256]; int i; static char *name[LCRT_P_NUMBER] = {LCRT_P_NAME}; static char *value[LCRT_P_NUMBER] = {LCRT_P_VALUE}; static int shortcut[LCRT_P_NUMBER][2] = {LCRT_P_SHORTCUT}; if (lpopup == NULL) return EINVAL; memset(&lpopup->config, 0, sizeof(struct lcrtc_popup)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lpopup->config.db, db_name, LCRT_IPOPUP_TABLE); for (i = 0; i < LCRT_P_NUMBER; i++) { lpopup->config.name[i] = name[i]; strncpy(lpopup->config.value[i], value[i], sizeof(lpopup->config.value[i])); lpopup->config.shortcut[i][0] = shortcut[i][0]; lpopup->config.shortcut[i][1] = shortcut[i][1]; } lpopup->get_db = lcrt_popup_get_db_name; lpopup->get_tb = lcrt_popup_get_tb_name; return 0; } int lcrt_popup_load_config(struct lcrt_popup *lpopup) { int rv, i; if (lpopup == NULL) return EINVAL; rv = lpopup->config.db.select(&lpopup->config.db, "SELECT * FROM %s", lpopup->get_tb(lpopup)); if (rv == LCRTE_NO_TABLE) { //lcrt_popup_create_config(lpopup); return LCRTE_NO_CONFIG; } for (i = 0; i < LCRT_P_NUMBER && rv == LCRTE_OK; i++) { strncpy(lpopup->config.value[i], lpopup->config.db.get_text_col(&lpopup->config.db, 1), sizeof(lpopup->config.value[i])); rv = lpopup->config.db.get_row(&lpopup->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)lpopup->get_db(lpopup)), lpopup->get_tb(lpopup), lpopup->config.name[i], lpopup->config.value[i], lpopup->config.shortcut[i][0], lpopup->config.shortcut[i][1]); } return rv; } int lcrt_popup_create_config(struct lcrt_popup *lpopup) { int i; assert(lpopup); lpopup->config.db.exec(&lpopup->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255), \ shortcut INTEGER, \ shortcut_mask INTEGER)", lpopup->get_tb(lpopup)); for (i = 0; i < LCRT_P_NUMBER; i++) { lpopup->config.db.exec(&lpopup->config.db, "INSERT INTO %s VALUES('%s', '%s', %d, %d)", lpopup->get_tb(lpopup), lpopup->config.name[i], lpopup->config.value[i], lpopup->config.shortcut[i][0], lpopup->config.shortcut[i][1]); } lpopup->config.db.close(&lpopup->config.db); return 0; } lcrt-1.1.2/src/clogin.c0000664000175000017500000000412311750112142011602 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:26 AM CST * * * Description: */ #include #include #include "iwindow.h" #include "ilogin.h" #include "debug.h" #include "user.h" #include "message.h" #include "iterminal.h" #include "cterminal.h" #include "clogin.h" void lcrt_login_on_okbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_login *llogin = (struct lcrt_login *)user_data; struct lcrtc_user *user; user = llogin->parent->user; lcrtc_user_set_data( user, NULL, NULL, LCRT_PROTOCOL_UNKNOWN, gtk_entry_get_text(GTK_ENTRY(llogin->l_username)), gtk_entry_get_text(GTK_ENTRY(llogin->l_password)), NULL, -1, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(llogin->l_remember)), NULL, -1 ); //lcrt_on_terminal_contents_changed(llogin->parent->terminal, llogin->parent); lcrt_login_on_cancelbutton_clicked(NULL, llogin); debug_where(); return; } void lcrt_login_on_username_changed(GtkEditable *editable, gpointer user_data) { struct lcrt_login *llogin = (struct lcrt_login *)user_data; struct lcrt_terminal *lterminal = llogin->parent; if (lterminal->ops && lterminal->ops->changed) lterminal->ops->changed(lterminal, TRUE); debug_where(); } void lcrt_login_on_password_changed(GtkEditable *editable, gpointer user_data) { } void lcrt_login_on_cancelbutton_clicked (GtkButton *button, gpointer user_data) { struct lcrt_login *llogin = (struct lcrt_login *)user_data; debug_where(); llogin->parent->save_passwd = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(llogin->l_remember)); gtk_widget_destroy(llogin->login); lcrt_destroy_login(llogin); } gboolean lcrt_login_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) { lcrt_login_on_cancelbutton_clicked(NULL, user_data); return FALSE; } lcrt-1.1.2/src/cstatus.h0000664000175000017500000000133311750112142012022 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 24 Jan 2011 09:57:22 PM CST * * * Description: */ #ifndef __LCRT_CSTATUS_H__ #define __LCRT_CSTATUS_H__ #include void lcrt_status_on_show_window_active(GtkMenuItem *menuitem, gpointer user_data); void lcrt_status_on_activate(GtkStatusIcon *status_icon, gpointer data); gboolean lcrt_status_on_button_press_event(GtkStatusIcon *status_icon, GdkEventButton *event, gpointer user_data); void lcrt_status_on_quit_activate(GtkMenuItem *menuitem, gpointer user_data); #endif lcrt-1.1.2/src/foperate.c0000664000175000017500000001430111750420006012134 00000000000000/** * @file foperate.c *

License

* Copyright (c) 2012 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version v1.0 * @date 2010-11-16 * * @brief The functions below are written for file operation. */ #include #include #include #include #include #include #include #include #include /** * @brief Create directory from root, if the parent directory is not exist, * then make it until last one. * @param dir path or directory which want to create * @return = 0, success\n * < 0, error code */ int lcrt_fmkdir(const char *dir) { int len; struct stat st; char *p, *tmp; char logdir[512]; if (dir == NULL) return -EINVAL; /** the directory has exist, so ship */ if (access(dir, F_OK | R_OK | W_OK) == 0) return 0; strncpy(logdir,dir ,512); len = strlen(logdir); if (len == 0) return -EINVAL; p = logdir + len - 1; while (*p == '/') *p-- = '\0'; p = logdir; while (*p == '/') p++; while (p < (logdir + len)) { tmp = strchr(p, '/'); if (tmp) *tmp = '\0'; if (stat(logdir, &st) == -1) { if (errno == ENOENT) mkdir(logdir, 0755); else break; } else if (!S_ISDIR(st.st_mode)) { break; } if (tmp == NULL) break; *tmp = '/'; p = tmp + 1; } return 0; } /** * @brief copy a file from fsrc to fdst * @param fsrc the source file name which will be copy * @param fdst the target file name which will be generate * @return = 0, success\n * < 0, error code */ int lcrt_fcopy(const char *fsrc, const char *fdst) { unsigned char buffer[4096]; FILE *fps, *fpd; int rv = 0, len; if (fsrc == NULL || fdst == NULL) { rv = -EINVAL; goto out; } if ((fps = fopen(fsrc, "r")) == NULL) { rv = -errno; goto out; } if ((fpd = fopen(fdst, "w")) == NULL) { rv = -errno; goto out1; } while (!feof(fps)) { len = fread(buffer, 1, sizeof(buffer), fps); if (fwrite(buffer, 1, len, fpd) != len) { rv = -errno; goto out2; } } out2: fclose(fpd); out1: fclose(fps); out: return rv; } /** * @brief copy a directory from another * @param dsrc the source directory name * @param ddst the target directory name * @return = 0, success\n * < 0, error code */ int lcrt_fdircopy(const char *dsrc, const char *ddst) { DIR *dir; struct dirent *direntp; char fsrc[512], fdst[512]; int rv = 0; if (dsrc == NULL || ddst == NULL) { rv = -EINVAL; goto out; } if (access(dsrc, F_OK | R_OK) == -1) { rv = -errno; goto out; } if ((dir = opendir(dsrc)) == NULL) { rv = -errno; goto out; } lcrt_fmkdir(ddst); while ((direntp = readdir(dir)) != NULL) { if (strcmp(direntp->d_name, ".") == 0 || strcmp(direntp->d_name, "..") == 0) continue; if (direntp->d_type == DT_DIR) { snprintf(fsrc, sizeof(fsrc), "%s/%s", dsrc, direntp->d_name); snprintf(fdst, sizeof(fdst), "%s/%s", ddst, direntp->d_name); lcrt_fmkdir(fdst); lcrt_fdircopy(fsrc, fdst); continue; } snprintf(fsrc, sizeof(fsrc), "%s/%s", dsrc, direntp->d_name); snprintf(fdst, sizeof(fdst), "%s/%s", ddst, direntp->d_name); lcrt_fcopy(fsrc, fdst); } closedir(dir); out: return rv; } /** * @brief move a file to another path * @param fsrc the source file name * @param fdst the target file name * @return = 0, success\n * < 0, error code */ int lcrt_fmove(const char *fsrc, const char *fdst) { int rv; if ((rv = lcrt_fcopy(fsrc, fdst)) == 0) { unlink(fsrc); } return rv; } /** * @brief delete a file * @param fname the file name which will be deleted * @return = 0, success\n * < 0, error code */ int lcrt_fremove(const char *fname) { if (fname == NULL) return -EINVAL; if (unlink(fname) == -1) return -errno; return 0; } /** * @brief print some content to the end of file * @param fname the file name * @param format the format of content * @param ... the argument * @return = 0, success\n * < 0, error code */ int lcrt_fappend(const char *fname, const char *format, ...) { va_list args; char buffer[4096]; FILE *fp; int rv; if (fname == NULL) return -EINVAL; va_start(args, format); vsnprintf(buffer, sizeof(buffer), format, args); va_end(args); if ((fp = fopen(fname, "a+")) == NULL) return -errno; rv = fprintf(fp, "%s", buffer); fclose(fp); return rv; } /** * @brief create a file * @param fname the file name which will be created * @return = 0, success\n * < 0, error code */ int lcrt_fcreate(const char *fname) { FILE *fp; if (fname == NULL) return -EINVAL; if ((fp = fopen(fname, "w")) == NULL) return -errno; fclose(fp); return 0; } /** * @brief check whether the executive programe is exist in directory 'PATH' * @param prog the executive programe name * @param p_path if found, store path to p_path * @return = 0, exist in directory 'PATH' * < 0, error code */ int lcrt_echeck(const char *prog, char *p_path) { char *env; char *vpath, *path; char buff[512]; int rv = -1; if (prog == NULL) { return -EINVAL; } if ((env = getenv("PATH")) == NULL) { return -errno; } vpath = malloc(strlen(env) + 1); if (vpath == NULL) return -errno; strcpy(vpath, env); path = strtok(vpath, ":"); while (path != NULL) { snprintf(buff, sizeof(buff), "%s/%s", path, prog); if (access(buff, F_OK | X_OK) == 0) { rv = 0; strcpy(p_path, buff); break; } path = strtok(NULL, ":"); } free(vpath); return rv; } lcrt-1.1.2/src/foperate.h0000664000175000017500000000442411750420235012152 00000000000000/** * @file foperate.h *

License

* Copyright (c) 2012 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version v1.0 * @date 2010-11-16 * * @brief The functions below are written for file operation. */ #ifndef __LCRT_FOPERATE_H__ #define __LCRT_FOPERATE_H__ /** * @brief Create directory from root, if the parent directory is not exist, * then make it until last one. * @param dir path or directory which want to create * @return = 0, success\n * < 0, error code */ int lcrt_fmkdir(const char *dir); /** * @brief copy a file from fsrc to fdst * @param fsrc the source file name which will be copy * @param fdst the target file name which will be generate * @return = 0, success\n * < 0, error code */ int lcrt_fcopy(const char *fsrc, const char *fdst); /** * @brief copy a directory from another * @param dsrc the source directory name * @param ddst the target directory name * @return = 0, success\n * < 0, error code */ int lcrt_fdircopy(const char *dsrc, const char *ddst); /** * @brief move a file to another path * @param fsrc the source file name * @param fdst the target file name * @return = 0, success\n * < 0, error code */ int lcrt_fmove(const char *fsrc, const char *fdst); /** * @brief delete a file * @param fname the file name which will be deleted * @return = 0, success\n * < 0, error code */ int lcrt_remove(const char *fname); /** * @brief print some content to the end of file * @param fname the file name * @param format the format of content * @param ... the argument * @return = 0, success\n * < 0, error code */ int lcrt_fappend(const char *fname, const char *format, ...); /** * @brief create a file * @param fname the file name which will be created * @return = 0, success\n * < 0, error code */ int lcrt_fcreate(const char *fname); /** * @brief check whether the executive programe is exist in directory 'PATH' * @param prog the executive programe name * @param p_path if found, store path to p_path * @return = 0, exist in directory 'PATH' * < 0, error code */ int lcrt_echeck(const char *prog, char *p_path); #endif lcrt-1.1.2/src/cstatusbar.h0000664000175000017500000000042411750112142012507 00000000000000#ifndef __LCRT_CSTATUSBAR_H__ #define __LCRT_CSTATUSBAR_H__ #include "istatusbar.h" void lcrt_statusbar_set_message(struct lcrt_statusbar *lstatusbar, const char *format, ...); void lcrt_statusbar_set_user(struct lcrt_statusbar *lstatusbar, struct lcrtc_user *user); #endif lcrt-1.1.2/src/clogin.h0000664000175000017500000000137711750112142011617 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:41 AM CST * * * Description: */ #ifndef __LCRT_CLOGIN_H__ #define __LCRT_CLOGIN_H__ #include void lcrt_login_on_okbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_login_on_username_changed(GtkEditable *editable, gpointer user_data); void lcrt_login_on_password_changed(GtkEditable *editable, gpointer user_data); void lcrt_login_on_cancelbutton_clicked (GtkButton *button, gpointer user_data); gboolean lcrt_login_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data); #endif lcrt-1.1.2/src/crename.h0000664000175000017500000000064611750112142011754 00000000000000#ifndef __LCRT_CRENAME_H__ #define __LCRT_CRENAME_H__ #include void lcrt_rename_on_okbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_rename_on_cancelbutton_clicked(GtkButton *button, gpointer user_data); void lcrt_rename_on_name_changed(GtkEditable *editable, gpointer user_data); gboolean lcrt_rename_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); #endif lcrt-1.1.2/src/imkdir.c0000664000175000017500000002034111750112142011606 00000000000000/** * @file imkdir.c *

License

* Copyright (c) 2012 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version $Id * @date Sun 29 Apr 2012 12:04:41 AM CST * * @brief */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "iconnect.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "imkdir.h" #include "cmkdir.h" int lcrt_mkdir_create_config(struct lcrt_mkdir *lmkdir); int lcrt_mkdir_load_config(struct lcrt_mkdir *lmkdir); int lcrt_mkdir_init_config(struct lcrt_mkdir *lmkdir); struct lcrt_mkdir *lcrt_create_dialog_mkdir( struct lcrt_connect *parent, GtkWindow *window) { struct lcrt_mkdir *lmkdir; GtkWidget *dialog_mkdir; GtkWidget *dialog_vbox; GtkWidget *vbox; GtkWidget *label; GtkWidget *entry; GtkWidget *dialog_action_area; GtkWidget *cancelbutton; GtkWidget *alignment1; GtkWidget *hbox1; GtkWidget *image1; GtkWidget *label2; GtkWidget *okbutton; GtkWidget *alignment2; GtkWidget *hbox2; GtkWidget *image2; GtkWidget *label3; lmkdir =(struct lcrt_mkdir *)calloc(1, sizeof(struct lcrt_mkdir)); if (lmkdir == NULL) goto err; lcrt_mkdir_init_config(lmkdir); lcrt_mkdir_load_config(lmkdir); lmkdir->parent = parent; dialog_mkdir = gtk_dialog_new(); lmkdir->dialog = dialog_mkdir; gtk_widget_set_size_request(dialog_mkdir, 240, 105); gtk_window_set_transient_for(GTK_WINDOW(dialog_mkdir), window); gtk_window_set_modal (GTK_WINDOW (dialog_mkdir), TRUE); gtk_window_set_title (GTK_WINDOW (dialog_mkdir), lmkdir->config.value[LCRT_M_TITLE]); gtk_window_set_position (GTK_WINDOW (dialog_mkdir), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (dialog_mkdir), FALSE); gtk_window_set_type_hint (GTK_WINDOW (dialog_mkdir), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (dialog_mkdir), FALSE); dialog_vbox = GTK_DIALOG(dialog_mkdir)->vbox; gtk_widget_show(dialog_vbox); gtk_widget_set_size_request(dialog_vbox, 190, 105); vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(dialog_vbox), vbox, TRUE, TRUE, 0); label = gtk_label_new(lmkdir->config.value[LCRT_M_TIP]); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); gtk_widget_set_size_request(label, -1, 30); gtk_misc_set_alignment(GTK_MISC(label), 0.01, 0.5); entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry), lmkdir->mkdir); lmkdir->entry_mkdir = entry; gtk_widget_show(entry); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); gtk_widget_set_size_request(entry, -1, 30); gtk_entry_set_invisible_char(GTK_ENTRY(entry), 9679); GTK_WIDGET_SET_FLAGS (entry, GTK_CAN_DEFAULT); dialog_action_area = GTK_DIALOG(dialog_mkdir)->action_area; gtk_widget_show(dialog_action_area); gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area), GTK_BUTTONBOX_END); cancelbutton = gtk_button_new(); gtk_widget_show(cancelbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_mkdir), cancelbutton, GTK_RESPONSE_CANCEL); alignment1 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment1); gtk_container_add(GTK_CONTAINER(cancelbutton), alignment1); hbox1 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox1); gtk_container_add(GTK_CONTAINER(alignment1), hbox1); image1 = gtk_image_new_from_stock("gtk-cancel", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image1); gtk_box_pack_start(GTK_BOX(hbox1), image1, FALSE, FALSE, 0); label2 = gtk_label_new_with_mnemonic(lmkdir->config.value[LCRT_M_CANCEL]); gtk_widget_show(label2); gtk_box_pack_start(GTK_BOX(hbox1), label2, FALSE, FALSE, 0); okbutton = gtk_button_new(); lmkdir->okbutton = okbutton; gtk_widget_show(okbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_mkdir), okbutton, GTK_RESPONSE_OK); alignment2 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment2); gtk_container_add(GTK_CONTAINER(okbutton), alignment2); hbox2 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox2); gtk_container_add(GTK_CONTAINER(alignment2), hbox2); image2 = gtk_image_new_from_stock("gtk-ok", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image2); gtk_box_pack_start(GTK_BOX(hbox2), image2, FALSE, FALSE, 0); label3 = gtk_label_new_with_mnemonic(lmkdir->config.value[LCRT_M_OK]); gtk_widget_show(label3); gtk_box_pack_start(GTK_BOX(hbox2), label3, FALSE, FALSE, 0); g_signal_connect((gpointer)dialog_mkdir, "delete_event", G_CALLBACK(lcrt_mkdir_on_delete_event), lmkdir); g_signal_connect((gpointer)cancelbutton, "clicked", G_CALLBACK(lcrt_mkdir_on_cancelbutton_clicked), lmkdir); g_signal_connect((gpointer)okbutton, "clicked", G_CALLBACK(lcrt_mkdir_on_okbutton_clicked), lmkdir); g_signal_connect ((gpointer) entry, "changed", G_CALLBACK (lcrt_mkdir_on_name_changed), lmkdir); gtk_dialog_run(GTK_DIALOG(dialog_mkdir)); return lmkdir; err: lcrt_message_error(parent->parent->window, lmkdir->config.value[LCRT_M_ERR_MSG]); return NULL; } void lcrt_destroy_mkdir(struct lcrt_mkdir *lmkdir) { if (lmkdir) free(lmkdir); } static const char *lcrt_mkdir_get_db_name(struct lcrt_mkdir *lmkdir) { return lmkdir->config.db.db_name; } static const char *lcrt_mkdir_get_tb_name(struct lcrt_mkdir *lmkdir) { return lmkdir->config.db.db_table; } int lcrt_mkdir_init_config(struct lcrt_mkdir *lmkdir) { char db_name[256]; int i; static char *name[LCRT_M_NUMBER] = {LCRT_M_NAME}; static char *value[LCRT_M_NUMBER] = {LCRT_M_VALUE}; assert(lmkdir); memset(&lmkdir->config, 0, sizeof(struct lcrtc_mkdir)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lmkdir->config.db, db_name, LCRT_IMKDIR_TABLE); for (i = 0; i < LCRT_M_NUMBER; i++) { lmkdir->config.name[i] = name[i]; strncpy(lmkdir->config.value[i], value[i], sizeof(lmkdir->config.value[i])); } lmkdir->get_db = lcrt_mkdir_get_db_name; lmkdir->get_tb = lcrt_mkdir_get_tb_name; return 0; } int lcrt_mkdir_load_config(struct lcrt_mkdir *lmkdir) { int rv, i; assert(lmkdir); rv = lmkdir->config.db.select(&lmkdir->config.db, "SELECT * FROM %s", lmkdir->get_tb(lmkdir)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_mkdir_create_config(lmkdir); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_M_NUMBER && rv == LCRTE_OK; i++) { strncpy(lmkdir->config.value[i], lmkdir->config.db.get_text_col(&lmkdir->config.db, 1), sizeof(lmkdir->config.value[i])); rv = lmkdir->config.db.get_row(&lmkdir->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)lmkdir->get_db(lmkdir)), lmkdir->get_tb(lmkdir), lmkdir->config.name[i], lmkdir->config.value[i]); } return rv; } int lcrt_mkdir_create_config(struct lcrt_mkdir *lmkdir) { int i; assert(lmkdir); lmkdir->config.db.exec(&lmkdir->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255))", lmkdir->get_tb(lmkdir)); for (i = 0; i < LCRT_M_NUMBER; i++) { lmkdir->config.db.exec(&lmkdir->config.db, "INSERT INTO %s VALUES('%s', '%s')", lmkdir->get_tb(lmkdir), lmkdir->config.name[i], lmkdir->config.value[i]); } lmkdir->config.db.close(&lmkdir->config.db); return 0; } lcrt-1.1.2/src/iabout.h0000664000175000017500000000020011750112142011607 00000000000000#ifndef __LCRT_IABOUT_H__ #define __LCRT_IABOUT_H__ #include "ihelp.h" int lcrt_abount_dialog(struct lcrt_help *parent); #endif lcrt-1.1.2/src/csettings.c0000664000175000017500000003112311750112142012332 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:22 AM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include "isettings.h" #include "csettings.h" #include "debug.h" #include "language.h" #include "mkconfig.h" #include "iwindow.h" #include "imenubar.h" #include "iview.h" #include "itoolbar.h" #include "istatusbar.h" #include "inotebook.h" #include "iterminal.h" void lcrt_settings_on_applybutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_settings *lsettings = (struct lcrt_settings *)user_data; int index = gtk_combo_box_get_active(GTK_COMBO_BOX(lsettings->g_cb_language)); const struct lcrt_support_language *languages; typedef void (*func_t)(GtkWidget *widget); func_t gtk_widget_show_func; gboolean show_toolbar, show_statusbar; struct lcrt_terminal *lterminal; int scrolllines; debug_where(); if (lsettings->session) { lterminal = lsettings->parent->w_notebook->current_terminal; if (lterminal) vte_terminal_set_audible_bell(VTE_TERMINAL(lterminal->terminal), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lsettings->t_cb_bell))); return; } /* genral settings, language support */ index = gtk_combo_box_get_active(GTK_COMBO_BOX(lsettings->g_cb_language)); languages = lcrt_get_languages(); if (strstr(lcrt_config_get_language(), languages[index].db_name) == NULL) { debug_print("SELECT LANGUAGE = %s\n", languages[index].db_name); lcrt_config_save_language(languages[index].db_name); } /*genral settings, dialog*/ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lsettings->g_rb_connect))) lsettings->lt_g_show_dialog = LCRT_LT_SHOW_DIALOG_CONNECT; else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lsettings->g_rb_quick_connect))) lsettings->lt_g_show_dialog = LCRT_LT_SHOW_DIALOG_QUICK_CONNECT; else lsettings->lt_g_show_dialog = LCRT_LT_SHOW_DIALOG_NONE; /*general settings, view*/ show_toolbar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lsettings->g_cb_show_toolbar)); show_statusbar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lsettings->g_cb_show_statusbar)); lsettings->lt_t_bell = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lsettings->t_cb_bell)); if (show_toolbar) gtk_widget_show_func = >k_widget_show; else gtk_widget_show_func = >k_widget_hide; gtk_widget_show_func(lsettings->parent->w_toolbar->toolbar); lsettings->lt_g_show_toolbar = show_toolbar; if (show_statusbar) gtk_widget_show_func = >k_widget_show; else gtk_widget_show_func = >k_widget_hide; gtk_widget_show_func(lsettings->parent->w_statusbar->statusbar); lsettings->lt_g_show_statusbar = show_statusbar; /* Keybindings, Keyboard sortcuts */ lsettings->enable_f10_key = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lsettings->k_cb_enable_f10)); /* Terminal, Terminal bell */ list_for_each_entry(lterminal, &lsettings->parent->w_notebook->child, brother) { vte_terminal_set_audible_bell(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_bell); } scrolllines = gtk_adjustment_get_value(GTK_ADJUSTMENT(lsettings->t_sb_scrollback_lines_adj)); debug_print("scrolllines = %d\n", scrolllines); if (scrolllines > 0) lsettings->lt_t_scrolllines = scrolllines; } void lcrt_settings_on_cancelbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_settings *lsettings = (struct lcrt_settings *)user_data; lsettings->session = FALSE; gtk_font_button_set_font_name(GTK_FONT_BUTTON(lsettings->t_bt_font), lsettings->lt_t_font); gtk_color_button_set_color(GTK_COLOR_BUTTON(lsettings->t_bt_foreground_color), &lsettings->lt_t_fcolor); gtk_color_button_set_color(GTK_COLOR_BUTTON(lsettings->t_bt_background_color), &lsettings->lt_t_bcolor); gtk_adjustment_set_value(GTK_ADJUSTMENT(lsettings->t_sb_scrollback_lines_adj), lsettings->lt_t_scrolllines); gtk_entry_set_text(GTK_ENTRY(lsettings->t_et_background_image), lsettings->lt_t_backimage); gtk_adjustment_set_value(GTK_ADJUSTMENT(lsettings->t_hl_transparent), lsettings->lt_t_transparent); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lsettings->t_cb_bell), lsettings->lt_t_bell); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lsettings->k_cb_enable_f10), lsettings->enable_f10_key); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(lsettings->notebook), TRUE); gtk_widget_hide(lsettings->dialog_settings); } void lcrt_settings_on_okbutton_clicked(GtkButton *button, gpointer user_data) { lcrt_settings_on_applybutton_clicked(NULL, user_data); lcrt_settings_on_cancelbutton_clicked(NULL, user_data); } gboolean lcrt_settings_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) { debug_where(); lcrt_settings_on_cancelbutton_clicked(NULL, user_data); return TRUE; } void lcrt_settings_on_button_background_image_clicked(GtkButton *button, gpointer user_data) { struct lcrt_settings *lsettings = (struct lcrt_settings *)user_data; int ret; char image_path[256]; struct lcrt_terminal *lterminal; ret = lcrt_file_choose_dialog(lsettings->parent->window, "Open File", image_path); if (ret != LCRTE_OK) return; gtk_entry_set_text(GTK_ENTRY(lsettings->t_et_background_image), image_path); if (lsettings->session) { lterminal = lsettings->parent->w_notebook->current_terminal; if (lterminal) vte_terminal_set_background_image_file(VTE_TERMINAL(lterminal->terminal), image_path); return; } strcpy(lsettings->lt_t_backimage, image_path); list_for_each_entry(lterminal, &lsettings->parent->w_notebook->child, brother) { vte_terminal_set_background_image_file(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_backimage); } } void lcrt_settings_terminal_font_button_clicked(GtkFontButton *widget, gpointer user_data) { struct lcrt_settings *lsettings = (struct lcrt_settings *)user_data; struct lcrt_terminal *lterminal; const gchar *font = gtk_font_button_get_font_name(widget); if (lsettings->session) { lterminal = lsettings->parent->w_notebook->current_terminal; if (lterminal) vte_terminal_set_font_from_string(lterminal->terminal, font); return; } debug_where(); strcpy(lsettings->lt_t_font, font); list_for_each_entry(lterminal, &lsettings->parent->w_notebook->child, brother) { vte_terminal_set_font_from_string(lterminal->terminal, font); } } void lcrt_settings_terminal_color_button_clicked(GtkColorButton *widget, gpointer user_data) { struct lcrt_settings *lsettings = (struct lcrt_settings *)user_data; struct lcrt_terminal *lterminal; GdkColor *color, col; typedef void (*vte_set_color_t)(VteTerminal *terminal, const GdkColor *background); vte_set_color_t lcrt_terminal_set_color; if (lsettings->session) { lterminal = lsettings->parent->w_notebook->current_terminal; if (lterminal == NULL) return; gtk_color_button_get_color(widget, &col); if (GTK_WIDGET(widget) == lsettings->t_bt_foreground_color) vte_terminal_set_color_foreground(lterminal->terminal, &col); else vte_terminal_set_color_background(lterminal->terminal, &col); return; } if (GTK_WIDGET(widget) == lsettings->t_bt_foreground_color) { color = &lsettings->lt_t_fcolor; lcrt_terminal_set_color = &vte_terminal_set_color_foreground; } else { color = &lsettings->lt_t_bcolor; lcrt_terminal_set_color = &vte_terminal_set_color_background; } gtk_color_button_get_color(widget, color); list_for_each_entry(lterminal, &lsettings->parent->w_notebook->child, brother) { lcrt_terminal_set_color(lterminal->terminal, color); } } void lcrt_settings_terminal_on_restore_default_clicked(GtkButton *widget, gpointer user_data) { struct lcrt_settings *lsettings = (struct lcrt_settings *)user_data; struct lcrt_terminal *lterminal; lsettings->config.ldb.close(&lsettings->config.ldb); lcrt_settings_init_local_config(lsettings); lcrt_settings_convert_local_config(lsettings); gtk_font_button_set_font_name(GTK_FONT_BUTTON(lsettings->t_bt_font), lsettings->lt_t_font); gtk_color_button_set_color(GTK_COLOR_BUTTON(lsettings->t_bt_foreground_color), &lsettings->lt_t_fcolor); gtk_color_button_set_color(GTK_COLOR_BUTTON(lsettings->t_bt_background_color), &lsettings->lt_t_bcolor); gtk_adjustment_set_value(GTK_ADJUSTMENT(lsettings->t_sb_scrollback_lines_adj), lsettings->lt_t_scrolllines); gtk_entry_set_text(GTK_ENTRY(lsettings->t_et_background_image), lsettings->lt_t_backimage); gtk_adjustment_set_value(GTK_ADJUSTMENT(lsettings->t_hl_transparent), lsettings->lt_t_transparent); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lsettings->t_cb_bell), lsettings->lt_t_bell); list_for_each_entry(lterminal, &lsettings->parent->w_notebook->child, brother) { vte_terminal_set_font_from_string(lterminal->terminal, lsettings->lt_t_font); vte_terminal_set_color_foreground(VTE_TERMINAL(lterminal->terminal), &lsettings->lt_t_fcolor); vte_terminal_set_color_background(VTE_TERMINAL(lterminal->terminal), &lsettings->lt_t_bcolor); vte_terminal_set_background_transparent(lterminal->terminal, FALSE); vte_terminal_set_background_saturation(VTE_TERMINAL(lterminal->terminal), (double)lsettings->lt_t_transparent / 100.0); vte_terminal_set_scrollback_lines(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_scrolllines); vte_terminal_set_background_image_file(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_backimage); vte_terminal_set_audible_bell(VTE_TERMINAL(lterminal->terminal), lsettings->lt_t_bell); } } void lcrt_settings_terminal_on_transparent_value_changed(GtkButton *widget, gpointer user_data) { struct lcrt_settings *lsettings = (struct lcrt_settings *)user_data; struct lcrt_terminal *lterminal; int transparent; transparent = gtk_adjustment_get_value(GTK_ADJUSTMENT(lsettings->t_hl_transparent)); if (lsettings->session) { lterminal = lsettings->parent->w_notebook->current_terminal; if (lterminal) vte_terminal_set_background_saturation(VTE_TERMINAL(lterminal->terminal), (double)transparent / 100.0); return; } lsettings->lt_t_transparent = transparent; list_for_each_entry(lterminal, &lsettings->parent->w_notebook->child, brother) { if (lsettings->lt_t_transparent != 0) vte_terminal_set_background_transparent(VTE_TERMINAL(lterminal->terminal), TRUE); else vte_terminal_set_background_transparent(VTE_TERMINAL(lterminal->terminal), FALSE); vte_terminal_set_background_saturation(VTE_TERMINAL(lterminal->terminal), (double)lsettings->lt_t_transparent / 100.0); } } int lcrt_file_choose_dialog(GtkWidget *parent, const char *prompt, char *file) { GtkWidget *dialog; int ret; dialog = gtk_file_chooser_dialog_new("Open File", GTK_WINDOW(parent), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); GtkFileFilter *filter2 = gtk_file_filter_new(); gtk_file_filter_set_name(filter2, "Image File(*.png,*.jpg,*.jpeg,*.gif,*.xpm)"); gtk_file_filter_add_pattern(filter2,"*.png"); gtk_file_filter_add_pattern(filter2,"*.jpg"); gtk_file_filter_add_pattern(filter2,"*.jpeg"); gtk_file_filter_add_pattern(filter2,"*.gif"); gtk_file_filter_add_pattern(filter2,"*.xpm"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter2); GtkFileFilter *filter1 = gtk_file_filter_new(); gtk_file_filter_set_name(filter1, "All File(*)"); gtk_file_filter_add_pattern(filter1,"*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter1); //gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); ret = gtk_dialog_run (GTK_DIALOG (dialog)); if (ret == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); strcpy(file, filename); g_free (filename); gtk_widget_destroy (dialog); return LCRTE_OK; } gtk_widget_destroy (dialog); return LCRTE_NOT_FOUND; } lcrt-1.1.2/src/iconnect.c0000664000175000017500000003751611750632204012153 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Wed 26 Jan 2011 12:22:55 AM CST * * Description: */ //#undef __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "iconnect.h" #include "cconnect.h" #include "support.h" #include "debug.h" #include "message.h" #include "mkconfig.h" int lcrt_connect_init_config(struct lcrt_connect *lconnect); int lcrt_connect_load_config(struct lcrt_connect *lconnect); int lcrt_connect_create_config(struct lcrt_connect *lconnect); int lcrt_connect_create_toolitem(struct lcrt_connect *lconnect); static GtkWidget *lcrt_connect_create_view(struct lcrt_connect *lconnect); int lcrt_create_connect(struct lcrt_window *parent, gboolean tab) { GtkWidget *dialog_connect; GtkWidget *dialog_vbox; GtkWidget *vbox; GtkWidget *toolbar; GtkWidget *scrolledwindow; GtkWidget *treeview; GtkWidget *checkbutton; GtkWidget *dialog_action_area; GtkWidget *connectbutton; GtkWidget *cancelbutton; GtkTreeSelection *selection; struct lcrt_connect *lconnect; int rv = 0; lconnect = (struct lcrt_connect *)calloc(1, sizeof(struct lcrt_connect)); if (lconnect == NULL) goto err; lconnect->parent = parent; lconnect->tab = tab; debug_where(); lcrt_connect_init_config(lconnect); lcrt_connect_load_config(lconnect); dialog_connect = gtk_dialog_new (); lconnect->c_connect = dialog_connect; gtk_widget_set_size_request (dialog_connect, 320, 320); gtk_window_set_transient_for(GTK_WINDOW(dialog_connect), GTK_WINDOW(lconnect->parent->window)); gtk_window_set_modal(GTK_WINDOW(dialog_connect), TRUE); gtk_window_set_title (GTK_WINDOW (dialog_connect), lconnect->config.value[LCRT_C_CONNECT_IN_TAB + !tab]); gtk_window_set_position (GTK_WINDOW (dialog_connect), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable (GTK_WINDOW (dialog_connect), FALSE); gtk_window_set_type_hint (GTK_WINDOW (dialog_connect), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (dialog_connect), FALSE); g_signal_connect ((gpointer) dialog_connect, "delete_event", G_CALLBACK (lcrt_connect_on_window_delete), lconnect); dialog_vbox = GTK_DIALOG (dialog_connect)->vbox; gtk_widget_show (dialog_vbox); vbox = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (dialog_vbox), vbox, TRUE, TRUE, 0); toolbar = gtk_toolbar_new (); gtk_widget_show (toolbar); gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0); gtk_widget_set_size_request (toolbar, -1, 35); gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar), GTK_ORIENTATION_HORIZONTAL); gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_ICONS); lconnect->c_toolbar = toolbar; lcrt_connect_create_toolitem(lconnect); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN); treeview = lcrt_connect_create_view(lconnect); gtk_widget_show (treeview); gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview); checkbutton = gtk_check_button_new_with_mnemonic (lconnect->config.value[LCRT_C_SHOW_DIALOG_ON_STARTUP]); lconnect->c_checkbutton = checkbutton; gtk_widget_show (checkbutton); gtk_box_pack_start (GTK_BOX (vbox), checkbutton, FALSE, FALSE, 0); dialog_action_area = GTK_DIALOG (dialog_connect)->action_area; gtk_widget_show (dialog_action_area); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area), GTK_BUTTONBOX_END); cancelbutton = gtk_button_new_with_mnemonic(lconnect->config.value[LCRT_C_CLOSE_BUTTON]); gtk_widget_show (cancelbutton); gtk_dialog_add_action_widget (GTK_DIALOG (dialog_connect), cancelbutton, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS (cancelbutton, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) cancelbutton, "clicked", G_CALLBACK (lcrt_connect_on_cancelbutton_clicked), lconnect); GTK_WIDGET_SET_FLAGS (cancelbutton, GTK_CAN_DEFAULT); gtk_widget_grab_focus(cancelbutton); connectbutton = gtk_button_new_with_mnemonic(lconnect->config.value[LCRT_C_CONNECT_BUTTON]); lconnect->c_connectbutton = connectbutton; gtk_widget_show (connectbutton); gtk_dialog_add_action_widget (GTK_DIALOG (dialog_connect), connectbutton, GTK_RESPONSE_OK); gtk_widget_set_sensitive(connectbutton, FALSE); g_signal_connect ((gpointer) connectbutton, "clicked", G_CALLBACK (lcrt_connect_on_connectbutton_clicked), lconnect); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); g_signal_connect((gpointer)selection, "changed", G_CALLBACK(lcrt_connect_on_selection_changed), lconnect); g_signal_connect ((gpointer) treeview, "button_press_event", G_CALLBACK (lcrt_connect_on_button_press_event), lconnect); gtk_widget_show(dialog_connect); rv = gtk_dialog_run(GTK_DIALOG(dialog_connect)); rv += (-100 * (!!lconnect->tab)); return rv; err: lcrt_message_error(parent->window, lconnect->config.value[LCRT_C_ERR_MSG]); return (GTK_RESPONSE_DELETE_EVENT + (-100 * (!!lconnect->tab))); } int lcrt_connect_find_folder(struct lcrt_connect *lconnect, GtkTreeIter *folder, const char *folder_name) { GtkTreeModel *model; GtkTreeStore *treestore; GtkTreeIter root; char *value; int valid; model = gtk_tree_view_get_model(GTK_TREE_VIEW(lconnect->c_treeview)); gtk_tree_model_get_iter_first(model, &root); valid = gtk_tree_model_iter_children(model, folder, &root); while (valid) { gtk_tree_model_get(model, folder, 0, &value, -1); if (strcmp(value, folder_name) == 0) { g_free(value); return 1; } g_free(value); valid = gtk_tree_model_iter_next(model, folder); } return 0; } static int lcrt_connect_add_user(struct lcrt_connect *lconnect) { struct lcrtc_user *user; struct lcrt_user *luser = &lconnect->parent->u_config; GtkTreeIter *root, parent, child, grandson; GtkTreeStore *treestore; root = &lconnect->c_treeiter; treestore = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(lconnect->c_treeview))); list_for_each_entry(user, &luser->child, brother) { if (strlen(user->folder) == 0) { gtk_tree_store_append(treestore, &parent, root); gtk_tree_store_set(treestore, &parent, 0, user->name, -1); } else if (lcrt_connect_find_folder(lconnect, &parent, user->folder)) { if (!user->is_folder) { gtk_tree_store_append(treestore, &child, &parent); gtk_tree_store_set(treestore, &child, 0, user->name, -1); } } else { gtk_tree_store_append(treestore, &parent, root); gtk_tree_store_set(treestore, &parent, 0, user->folder, 1, PANGO_WEIGHT_BOLD, -1); if (!user->is_folder) { gtk_tree_store_append(treestore, &child, &parent); gtk_tree_store_set(treestore, &child, 0, user->name, -1); } } } } int lcrt_connect_del_user(struct lcrt_connect *lconnect, const char *user_name) { GtkTreeStore *treestore; GtkTreeModel *model; GtkTreeIter iter; GtkTreeSelection *selection; if (lconnect == NULL || user_name == NULL) return EINVAL; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(lconnect->c_treeview)); treestore = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (lconnect->c_treeview))); model = gtk_tree_view_get_model (GTK_TREE_VIEW (lconnect->c_treeview)); if (gtk_tree_model_get_iter_first(model, &iter) == FALSE) return LCRTE_NOT_FOUND; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, 0, user_name, -1); gtk_tree_store_remove(treestore, &iter); return LCRTE_OK; } return LCRTE_NOT_FOUND; } static int lcrt_connect_compare_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data) { char *value_a, *value_b; struct lcrt_connect *lconnect = (struct lcrt_connect *)user_data; struct lcrt_window *lwindow = lconnect->parent; int ret; gboolean is_folder_a, is_folder_b; struct lcrtc_user *user_a, *user_b; gtk_tree_model_get(model, a, 0, &value_a, -1); gtk_tree_model_get(model, b, 0, &value_b, -1); if ((user_a = lcrt_user_find_by_name(&lwindow->u_config, value_a)) == NULL) { ret = -1; goto out; } if ((user_b = lcrt_user_find_by_name(&lwindow->u_config, value_b)) == NULL) { ret = 1; goto out; } is_folder_a = user_a->is_folder; is_folder_b = user_b->is_folder; if (is_folder_a && !is_folder_b) { ret = -1; } else if (!is_folder_a && is_folder_b) { ret = 1; } else { ret = strcmp(value_a, value_b); } out: g_free(value_a); g_free(value_b); return ret; } static GtkWidget *lcrt_connect_create_view(struct lcrt_connect *lconnect) { GtkTreeViewColumn *col; GtkCellRenderer *renderer; GtkWidget *view; GtkTreeModel *model; GtkTreeStore *treestore; GtkTreePath *path; view = gtk_tree_view_new(); lconnect->c_treeview = view; col = gtk_tree_view_column_new(); //gtk_tree_view_set_reorderable(GTK_TREE_VIEW(view), TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); renderer = gtk_cell_renderer_text_new(); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_column_pack_start(col, renderer, TRUE); gtk_tree_view_column_set_attributes(col, renderer, "text", 0, "weight", 1, NULL); treestore = gtk_tree_store_new(2, G_TYPE_STRING, PANGO_TYPE_WEIGHT); gtk_tree_store_append(treestore, &lconnect->c_treeiter, NULL); gtk_tree_store_set(treestore, &lconnect->c_treeiter, 0, lconnect->config.value[LCRT_C_SESSION],-1); model = GTK_TREE_MODEL(treestore); gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); lcrt_connect_add_user(lconnect); gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(treestore), 0, lcrt_connect_compare_func, lconnect, NULL); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE (treestore), 0, GTK_SORT_ASCENDING); path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &lconnect->c_treeiter); gtk_tree_view_expand_to_path(GTK_TREE_VIEW(view), path); //path = gtk_tree_model_get_path(GTK_TREE_MODEL(treestore), &child); //gtk_tree_view_expand_row(GTK_TREE_VIEW(view), path, FALSE); g_object_unref(model); return view; } void lcrt_destroy_connect(struct lcrt_connect *lconnect) { if (lconnect) free(lconnect); } int lcrt_connect_create_toolitem(struct lcrt_connect *lconnect) { GtkWidget *icon; int i; const char *toolitem_icon[LCRT_C_NUMBER] = {LCRT_C_ICONS}; typedef void (*callbacks)(GtkWidget *widget, gpointer data); callbacks callback[LCRT_C_NUMBER] = {LCRT_C_CALLBACK}; assert(lconnect); for (i = LCRT_C_QUICK_CONNECT; i < LCRT_C_SESSION; i++) { icon = create_pixmap (NULL, toolitem_icon[i]); lconnect->toolitem[i] = gtk_toolbar_append_element ( GTK_TOOLBAR (lconnect->c_toolbar), GTK_TOOLBAR_CHILD_TOGGLEBUTTON, NULL, NULL, lconnect->config.value[i], NULL, icon, GTK_SIGNAL_FUNC (callback[i]), lconnect); gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (lconnect->toolitem[i]), TRUE); GTK_WIDGET_UNSET_FLAGS (lconnect->toolitem[i], GTK_CAN_FOCUS); if (i == LCRT_C_QUICK_CONNECT) gtk_toolbar_append_space (GTK_TOOLBAR (lconnect->c_toolbar)); } return LCRTE_OK; } static const char *lcrt_connect_get_db_name(struct lcrt_connect *lconnect) { return lconnect->config.db.db_name; } static const char *lcrt_connect_get_tb_name(struct lcrt_connect *lconnect) { return lconnect->config.db.db_table; } int lcrt_connect_init_config(struct lcrt_connect *lconnect) { char db_name[256]; int i; static char *name[LCRT_C_NUMBER] = {LCRT_C_NAME}; static char *value[LCRT_C_NUMBER] = {LCRT_C_VALUE}; static int shortcut[LCRT_C_NUMBER][2] = {LCRT_C_SHORTCUT}; assert(lconnect); memset(&lconnect->config, 0, sizeof(struct lcrtc_connect)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lconnect->config.db, db_name, LCRT_ICONNECT_TABLE); for (i = 0; i < LCRT_C_NUMBER; i++) { lconnect->config.name[i] = name[i]; strncpy(lconnect->config.value[i], value[i], sizeof(lconnect->config.value[i])); lconnect->config.shortcut[i][0] = shortcut[i][0]; lconnect->config.shortcut[i][1] = shortcut[i][1]; } lconnect->get_db = lcrt_connect_get_db_name; lconnect->get_tb = lcrt_connect_get_tb_name; lconnect->find_index = LCRT_FIND_INDEX_INVALID; return 0; } int lcrt_connect_load_config(struct lcrt_connect *lconnect) { int rv, i; assert(lconnect); rv = lconnect->config.db.select(&lconnect->config.db, "SELECT * FROM %s", lconnect->get_tb(lconnect)); debug_where(); if (rv == LCRTE_NO_TABLE) { //lcrt_connect_create_config(lconnect); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_C_NUMBER && rv == LCRTE_OK; i++) { strncpy(lconnect->config.value[i], lconnect->config.db.get_text_col(&lconnect->config.db, 1), sizeof(lconnect->config.value[i])); rv = lconnect->config.db.get_row(&lconnect->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)lconnect->get_db(lconnect)), lconnect->get_tb(lconnect), lconnect->config.name[i], lconnect->config.value[i], lconnect->config.shortcut[i][0], lconnect->config.shortcut[i][1]); } return rv; } int lcrt_connect_create_config(struct lcrt_connect *lconnect) { int i; assert(lconnect); lconnect->config.db.exec(&lconnect->config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value VARCHAR(255), \ shortcut INTEGER, \ shortcut_mask INTEGER)", lconnect->get_tb(lconnect)); for (i = 0; i < LCRT_C_NUMBER; i++) { lconnect->config.db.exec(&lconnect->config.db, "INSERT INTO %s VALUES('%s', '%s', %d, %d)", lconnect->get_tb(lconnect), lconnect->config.name[i], lconnect->config.value[i], lconnect->config.shortcut[i][0], lconnect->config.shortcut[i][1]); } lconnect->config.db.close(&lconnect->config.db); return 0; } lcrt-1.1.2/src/iview.h0000664000175000017500000000265711750112142011471 00000000000000#ifndef __LCRT_IVIEW_H__ #define __LCRT_IVIEW_H__ #include #include #include "mkconfig.h" #define LCRT_IVIEW_TABLE "iview" enum { LCRT_V_MENUITEM, LCRT_V_MENUBAR, LCRT_V_TOOLBAR, LCRT_V_STATUS_BAR, LCRT_V_ALWAYS_ON_TOP, LCRT_V_FULL_SCREEN, LCRT_V_NUMBER }; #define LCRT_V_NAME \ "v_menuitem", \ "v_menubar", \ "v_toolbar", \ "v_status_bar", \ "v_always_on_top", \ "v_full_screen" #define LCRT_V_VALUE \ "_View", \ "_Menu Bar", \ "_Toolbar", \ "_Status Bar", \ "_Always on Top", \ "_Full Screen" #define LCRT_V_SHORTCUT \ {0, 0}, \ {0, 0}, \ {0, 0}, \ {0, 0}, \ {0, 0}, \ {GDK_F11, 0} struct lcrtc_view { struct lcrt_config db; const char *name[LCRT_V_NUMBER]; char value[LCRT_V_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_V_NUMBER][2]; }; struct lcrt_view { struct lcrt_menubar *parent; GtkWidget *v_menuitem; GtkWidget *v_menubar; GtkWidget *v_toolbar; GtkWidget *v_status_bar; GtkWidget *v_always_on_top; GtkWidget *v_full_screen; struct lcrtc_view config; const char *(*get_db)(struct lcrt_view *lview); const char *(*get_tb)(struct lcrt_view *lview); }; struct lcrt_view *lcrt_view_create_menuitem(struct lcrt_menubar *parent); void lcrt_view_destroy_menuitem(struct lcrt_view *lview); int lcrt_view_save_local_config(struct lcrt_view *lview); #endif lcrt-1.1.2/src/istatusbar.c0000664000175000017500000000150611750112142012512 00000000000000#include #include #include #include #include #include "debug.h" #include "iwindow.h" #include "istatusbar.h" #include "mkconfig.h" struct lcrt_statusbar *lcrt_create_statusbar(struct lcrt_window *parent) { struct lcrt_statusbar *lstatusbar; GtkWidget *statusbar; lstatusbar = (struct lcrt_statusbar *)calloc(1, sizeof(struct lcrt_statusbar)); assert(lstatusbar); lstatusbar->parent = parent; statusbar = gtk_statusbar_new (); lstatusbar->statusbar = statusbar; gtk_widget_show (statusbar); gtk_widget_set_size_request (statusbar, -1, 20); return lstatusbar; } void lcrt_destroy_statusbar(struct lcrt_statusbar *lstatusbar) { debug_where(); gtk_widget_destroy(lstatusbar->statusbar); if (lstatusbar) free(lstatusbar); } lcrt-1.1.2/src/serial.c0000664000175000017500000005465711750112142011627 00000000000000/** * @file serial.c *

License

* Copyright (c) 2010-2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version $Id * @date Sat 06 Aug 2011 10:55:20 PM CST * * @brief */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "iterminal.h" #include "iqconnect.h" #include "cterminal.h" #include "user.h" #include "serial.h" #include "debug.h" #include "message.h" #include "cstatusbar.h" #if 0 /** * fix compile error in hurd-i386, kfreebsd-amd64, * kfreebsd-i386, mips, mipsel */ #ifndef CMSPAR #define CMSPAR 010000000000 #endif #ifndef CBAUD #define CBAUD 0010017 #endif #endif struct lcrt_serial_map { int index; char *name; int data; }; struct lcrt_serial_if { GtkWidget *port; GtkWidget *baud_rate; GtkWidget *data_bits; GtkWidget *parity; GtkWidget *stop_bits; /* for flow control */ GtkWidget *software; GtkWidget *hardware; }; struct lcrt_serial_tm { int fd; /**< the opened file descriptor of serial device */ unsigned int input; /**< A unique id for the input event source */ unsigned int commit; /**< terminal commit signal id */ }; static void lcrt_serial_disconnect(struct lcrt_terminal *lterminal); static void lcrt_serial_receive(struct lcrt_terminal *lterminal) { #if 0 VteTerminal *vteterminal = lterminal->terminal; struct lcrt_window *lwindow = lterminal->parent->parent; struct lcrtc_user *user = lterminal->user; #endif debug_where(); lcrt_terminal_set_connected_status(lterminal); } /** * @brief Open and configure the serial port. * @param port the device of serial port. * @param baud_rate baud rate. see bits/termios.h * @param databit data bit. see bits/termios.h * @param parity the pattern of parity.\n * 0 None\n * 1 Odd\n * 2 Even\n * 3 Mark\n * 4 Space\n * @param stopbit the number of stop bit.\n * 0 1bit\n * 1 1.5bit\n * 2 2bit\n * @param software software flow control.\n * 0 not use software flow control\n * 1 use software flow control\n * @param hardware hardware flow control.\n * 0 not use hardware flow control\n * 1 use hardware flow control\n * @return >0 serial file descriptor \n * <0 error code. */ int lcrt_serial_config(const char *port, int baud_rate, int databit, int parity, int stopbit, int software, int hardware) { static struct termios ltermios; int fd; if ((fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY)) == -1) { return -errno; } //tcgetattr(fd, <ermios); memset(<ermios, 0, sizeof(struct termios)); #ifdef CBAUD ltermios.c_cflag |= (baud_rate & CBAUD); #endif #ifdef CSIZE ltermios.c_cflag |= (databit & CSIZE); #endif switch (stopbit) { case 0: ltermios.c_cflag &= ~CSTOPB; break; case 1: ltermios.c_cflag |= CSTOPB; break; case 2: ltermios.c_cflag &= ~CSTOPB; break; default: return -EINVAL; } switch (parity) { case 0: ltermios.c_cflag &= ~PARENB; /* Clear parity enable */ ltermios.c_iflag &= ~INPCK; /* Enable parity checking */ break; case 1: ltermios.c_cflag |= (PARODD | PARENB); /* */ break; case 2: ltermios.c_cflag |= PARENB; /* Enable parity */ break; #ifdef CMSPAR case 3: ltermios.c_cflag &= ~CMSPAR; break; case 4: ltermios.c_cflag |= CMSPAR; break; #endif default: return -EINVAL; } ltermios.c_cflag |= CREAD; ltermios.c_iflag = IGNPAR | IGNBRK; if (software) ltermios.c_iflag |= (IXON | IXOFF | IXANY); //Enable Software Flow Control if (hardware) ltermios.c_cflag |= CRTSCTS; //Enable hardware flow control if (!software && !hardware) ltermios.c_cflag |= CLOCAL; ltermios.c_oflag = 0; ltermios.c_lflag = 0; ltermios.c_cc[VTIME] = 0; ltermios.c_cc[VMIN] = 1; tcsetattr(fd, TCSANOW, <ermios); tcflush(fd, TCOFLUSH); tcflush(fd, TCIFLUSH); return fd; } /** * @brief the callback to read data from serial port and put the data to terminal. * @param user_data we use it to point to struct lcrt_terminal. * @param fd file descriptor of serial port. * @condition */ static void lcrt_serial_read(gpointer user_data, gint fd, GdkInputCondition condition) { struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; int len = 0; unsigned char buffer[1024] = {0}; debug_where(); len = read(fd, buffer, 1024); if (len <= 0) { /** serial device may be pull out */ if (errno == EAGAIN) { lcrt_serial_disconnect(lterminal); return; } return ; } vte_terminal_feed(VTE_TERMINAL(lterminal->terminal), (const char *)buffer, len); } /** * @brief the callback to write data to serial port. * @param widget * @param text the data to be write * @param length data length * @param point to struct lcrt_terminal. */ static void lcrt_serial_write(VteTerminal *widget, gchar *text, guint length, gpointer user_data) { struct lcrt_terminal *lterminal = (struct lcrt_terminal *)user_data; struct lcrt_serial_tm *tserial = (struct lcrt_serial_tm *)lterminal->private_data; int fd = tserial->fd; debug_where(); if (tserial->fd) write(fd, text, length); } static int lcrt_serial_connect(struct lcrt_terminal *lterminal) { struct lcrtc_user *user; struct lcrt_serial_tm *tserial; /* port baud_rate databit parity stopbit software_control hardware_control*/ char s_port[USERNAME_LEN]; int s_baud_rate,s_databit,s_parity,s_stopbit,s_software,s_hardware; debug_where(); if (lterminal == NULL) return -EINVAL; tserial = (struct lcrt_serial_tm *)calloc(1, sizeof(struct lcrt_serial_tm)); if (tserial == NULL) return -ENOMEM; user = lterminal->user; sscanf(user->password, "%s %d %d %d %d %d %d", s_port, &s_baud_rate, &s_databit, &s_parity, &s_stopbit, &s_software, &s_hardware); int fd ; fd = lcrt_serial_config(s_port, s_baud_rate,s_databit, s_parity,s_stopbit,s_software,s_hardware); if (fd <= 0) { lcrt_message_error(lterminal->parent->parent->window, lterminal->parent->config.value[LCRT_TM_SERIAL_ERROR], s_port, strerror(-fd)); free(tserial); return fd; } tserial->fd = fd; lterminal->private_data = tserial; tserial->input = gtk_input_add_full(fd, GDK_INPUT_READ, (GdkInputFunction)lcrt_serial_read, NULL, lterminal, NULL); tserial->commit = g_signal_connect(lterminal->terminal, "commit", G_CALLBACK(lcrt_serial_write), lterminal); lcrt_statusbar_set_user(lterminal->parent->parent->w_statusbar, lterminal->user); lcrt_terminal_set_connected_status(lterminal); return LCRTE_OK; } static void lcrt_serial_disconnect(struct lcrt_terminal *lterminal) { struct lcrt_serial_tm *tserial = lterminal->private_data; debug_where(); if (lterminal->connected) { if (tserial && tserial->fd > 0) { close(tserial->fd); } lcrt_terminal_on_child_exited(NULL, lterminal); lcrt_terminal_set_status(lterminal, NULL, LCRT_TERMINAL_DISCONNECT); } if (tserial) { g_signal_handler_disconnect(lterminal->terminal, tserial->commit); gtk_input_remove(tserial->input); free(tserial); lterminal->private_data = NULL; } debug_where(); } static void lcrt_serial_show(struct lcrt_qconnect *lqconnect) { GtkWidget *vbox; GtkWidget *vbox_spec; GtkWidget *hbox1; GtkWidget *label_port; GtkWidget *combobox_port; GtkWidget *label_baud_rate; GtkWidget *combobox_baud_rate; GtkWidget *label_data_bits; GtkWidget *combobox_data_bits; GtkWidget *label_parity; GtkWidget *combobox_parity; GtkWidget *label_stop_bits; GtkWidget *combobox_stop_bits; GtkWidget *frame; GtkWidget *alignment; GtkWidget *hbox_frame; GtkWidget *checkbutton_software; GtkWidget *checkbutton_hardware; GtkWidget *label_flow_control; int i; const char *sport[LCRT_SERIAL_PORT_NUMBER] = {LCRT_SERIAL_PORT}; const struct lcrt_serial_map sbaud_rate[LCRT_SERIAL_BAUD_RATE_NUMBER] = {LCRT_SERIAL_BAUD_RATE_TABLE}; const struct lcrt_serial_map sdata_bits[LCRT_SERIAL_DATA_BITS_NUMBER] = {LCRT_SERIAL_DATA_BITS_TABLE}; const struct lcrt_serial_map sparity[LCRT_SERIAL_PARITY_NUMBER] = {LCRT_SERIAL_PARITY_TABLE}; const struct lcrt_serial_map sstop_bits[LCRT_SERIAL_STOP_BITS_NUMBER] = {LCRT_SERIAL_STOP_BITS_TABLE}; const struct lcrt_serial_map flow_control[LCRT_SEROAL_FLOW_CONTROL_NUMBER] = {LCRT_SEROAL_FLOW_CONTROL_TABLE}; static struct lcrt_serial_if slserial, *lserial = &slserial; struct lcrtc_user *user = NULL; char s_port[USERNAME_LEN]; boolean f_option = FALSE; int s_baud_rate,s_databit,s_parity,s_stopbit,s_software,s_hardware; if (lqconnect->flag == LCRT_QCONNECT_SESSION_OPTION && (user = lcrt_user_find_by_name(&lqconnect->parent->u_config, lqconnect->uname)) != NULL) { sscanf(user->password, "%s %d %d %d %d %d %d", s_port, &s_baud_rate, &s_databit, &s_parity, &s_stopbit, &s_software, &s_hardware); debug_print("SERIAL PORT: %s %d %d %d %d %d %d\n", s_port, s_baud_rate, s_databit, s_parity, s_stopbit, s_software, s_hardware); f_option = TRUE; } memset(lserial, 0, sizeof(struct lcrt_serial_if)); lqconnect->private_data = lserial; vbox = GTK_DIALOG (lqconnect->q_connect)->vbox; debug_where(); vbox_spec = gtk_vbox_new (FALSE, 0); lqconnect->q_vbox_spec = vbox_spec; gtk_widget_show (vbox_spec); gtk_box_pack_start (GTK_BOX (vbox), vbox_spec, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), vbox_spec, 1); gtk_widget_set_size_request (vbox_spec, -1, 210); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox1, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox1, -1, 25); label_port = gtk_label_new (lqconnect->config.value[LCRT_Q_SPORT]); gtk_widget_show (label_port); gtk_box_pack_start (GTK_BOX (hbox1), label_port, FALSE, FALSE, 0); gtk_widget_set_size_request (label_port, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_port), 0, 0.5); combobox_port = gtk_combo_box_entry_new_text (); lserial->port = combobox_port; gtk_widget_show (combobox_port); gtk_box_pack_start (GTK_BOX (hbox1), combobox_port, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_port, SERIAL_COMBOBOX_WIDTH, 25); for (i = 0; i < LCRT_SERIAL_PORT_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_port), sport[i]); if (f_option && strcmp(s_port, sport[i]) == 0) gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_port), i); } debug_where(); //gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_port)->child), FALSE); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox1, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox1, -1, 25); label_baud_rate = gtk_label_new (lqconnect->config.value[LCRT_Q_SBAUD_RATE]); gtk_widget_show (label_baud_rate); gtk_box_pack_start (GTK_BOX (hbox1), label_baud_rate, FALSE, FALSE, 0); gtk_widget_set_size_request (label_baud_rate, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_baud_rate), 0, 0.5); combobox_baud_rate = gtk_combo_box_entry_new_text (); lserial->baud_rate = combobox_baud_rate; gtk_widget_show (combobox_baud_rate); gtk_box_pack_start (GTK_BOX (hbox1), combobox_baud_rate, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_baud_rate, SERIAL_COMBOBOX_WIDTH, 25); for (i = 0; i < LCRT_SERIAL_BAUD_RATE_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_baud_rate), sbaud_rate[i].name); if (f_option && s_baud_rate == sbaud_rate[i].data) gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_baud_rate), i); } debug_where(); gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_baud_rate)->child), FALSE); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox1, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox1, -1, 25); label_data_bits = gtk_label_new (lqconnect->config.value[LCRT_Q_SDATA_BITS]); gtk_widget_show (label_data_bits); gtk_box_pack_start (GTK_BOX (hbox1), label_data_bits, FALSE, FALSE, 0); gtk_widget_set_size_request (label_data_bits, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_data_bits), 0, 0.5); combobox_data_bits = gtk_combo_box_entry_new_text (); lserial->data_bits = combobox_data_bits; gtk_widget_show (combobox_data_bits); gtk_box_pack_start (GTK_BOX (hbox1), combobox_data_bits, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_data_bits, SERIAL_COMBOBOX_WIDTH, 25); for (i = 0; i < LCRT_SERIAL_DATA_BITS_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_data_bits), sdata_bits[i].name); if (f_option && s_databit == sdata_bits[i].data) gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_data_bits), i); } debug_where(); gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_data_bits)->child), FALSE); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox1, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox1, -1, 25); label_parity = gtk_label_new (lqconnect->config.value[LCRT_Q_SPARITY]); gtk_widget_show (label_parity); gtk_box_pack_start (GTK_BOX (hbox1), label_parity, FALSE, FALSE, 0); gtk_widget_set_size_request (label_parity, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_parity), 0, 0.5); combobox_parity = gtk_combo_box_entry_new_text (); lserial->parity = combobox_parity; gtk_widget_show (combobox_parity); gtk_box_pack_start (GTK_BOX (hbox1), combobox_parity, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_parity, SERIAL_COMBOBOX_WIDTH, 25); for (i = 0; i < LCRT_SERIAL_PARITY_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_parity), sparity[i].name); } if (f_option) gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_parity), s_parity); debug_where(); gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_parity)->child), FALSE); hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox1); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox1, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox1, -1, 25); label_stop_bits = gtk_label_new (lqconnect->config.value[LCRT_Q_SSTOP_BITS]); gtk_widget_show (label_stop_bits); gtk_box_pack_start (GTK_BOX (hbox1), label_stop_bits, FALSE, FALSE, 0); gtk_widget_set_size_request (label_stop_bits, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_stop_bits), 0, 0.5); combobox_stop_bits = gtk_combo_box_entry_new_text (); lserial->stop_bits = combobox_stop_bits; gtk_widget_show (combobox_stop_bits); gtk_box_pack_start (GTK_BOX (hbox1), combobox_stop_bits, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_stop_bits, SERIAL_COMBOBOX_WIDTH, 25); for (i = 0; i < LCRT_SERIAL_STOP_BITS_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_stop_bits), sstop_bits[i].name); } if (f_option) gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_stop_bits), s_stopbit); debug_where(); gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_stop_bits)->child), FALSE); frame = gtk_frame_new (NULL); gtk_widget_show (frame); gtk_widget_set_size_request (frame, -1, 40); gtk_box_pack_start (GTK_BOX (vbox_spec), frame, TRUE, TRUE, 0); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); alignment = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment); gtk_container_add (GTK_CONTAINER (frame), alignment); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0); hbox_frame = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox_frame); gtk_container_add (GTK_CONTAINER (alignment), hbox_frame); checkbutton_software = gtk_check_button_new_with_mnemonic (flow_control[0].name); lserial->software = checkbutton_software; gtk_widget_show (checkbutton_software); gtk_box_pack_start (GTK_BOX (hbox_frame), checkbutton_software, FALSE, FALSE, 0); gtk_widget_set_size_request (checkbutton_software, 150, -1); if (f_option) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_software), s_software); checkbutton_hardware = gtk_check_button_new_with_mnemonic (flow_control[1].name); lserial->hardware = checkbutton_hardware; gtk_widget_show (checkbutton_hardware); gtk_box_pack_start (GTK_BOX (hbox_frame), checkbutton_hardware, FALSE, FALSE, 0); gtk_widget_set_size_request (checkbutton_hardware, 150, -1); if (f_option) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton_hardware), s_hardware); label_flow_control = gtk_label_new (lqconnect->config.value[LCRT_Q_SFLOW_CONTROL]); gtk_widget_show (label_flow_control); gtk_frame_set_label_widget (GTK_FRAME (frame), label_flow_control); gtk_label_set_use_markup (GTK_LABEL (label_flow_control), TRUE); if (!f_option) { gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_port), 1); //ttyS0 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_baud_rate), 10); //115200 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_data_bits), 3); //8 gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_parity), 0); //None gtk_combo_box_set_active(GTK_COMBO_BOX(combobox_stop_bits), 0); //1 debug_print("active = %d\n", gtk_combo_box_get_active(GTK_COMBO_BOX(combobox_baud_rate))); } gtk_widget_set_sensitive(lqconnect->q_bt_connect, TRUE); } static struct lcrtc_user *lcrt_serial_create(struct lcrt_qconnect *lqconnect) { lcrt_protocol_t protocol = lqconnect->nproto; struct lcrt_window *lwindow = lqconnect->parent; struct lcrt_serial_if *lserial = (struct lcrt_serial_if *)lqconnect->private_data; struct lcrt_serial_map serial_buad_rate[] = {LCRT_SERIAL_BAUD_RATE_TABLE}; struct lcrt_serial_map serial_databit[] = {LCRT_SERIAL_DATA_BITS_TABLE}; struct lcrtc_user *user; char password[PASSWORD_LEN]; char s_port[USERNAME_LEN]; char name[HOSTNAME_LEN]; char hostname[HOSTNAME_LEN]; #define get_text(widget) (gtk_combo_box_get_active_text(GTK_COMBO_BOX(lserial->widget))) #define get_active(widget) (gtk_combo_box_get_active(GTK_COMBO_BOX(lserial->widget))) snprintf(s_port, USERNAME_LEN, "%s", get_text(port)); debug_where(); if (access(s_port, F_OK|R_OK|W_OK) == -1) { switch (errno) { case ENOENT: debug_print("device %s is not exist.\n", s_port); break; case EPERM: debug_print("you have no permition to open %s.\n", s_port); break; case EIO: debug_print("device %s is not ready.\n", s_port); break; default: debug_print("unknown error,error code is %d\n", errno); break; } return NULL; } int baud_rate,s_baud_rate; baud_rate = get_active(baud_rate); s_baud_rate = serial_buad_rate[baud_rate].data; debug_where(); int databit, s_databit; databit = atoi(get_text(data_bits)); databit = get_active(data_bits); s_databit = serial_databit[databit].data; debug_where(); int s_parity; s_parity = get_active(parity); debug_where(); int s_stopbits; s_stopbits = get_active(stop_bits); debug_where(); int s_software, s_hardware; s_software = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lserial->software)); s_hardware = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lserial->hardware)); /* port baud_rate databit parity stopbit software_control hardware_control*/ snprintf(password, PASSWORD_LEN, "%s %d %d %d %d %d %d", s_port, s_baud_rate, s_databit, s_parity, s_stopbits, s_software, s_hardware); strcpy(hostname, basename(s_port)); if (lqconnect->flag != LCRT_QCONNECT_SESSION_OPTION) { if ((user = lcrtc_user_create()) == NULL) { /* * FIXME: There is no more memory, how can * we handle this exception ? */ return NULL; } lcrt_user_find_unused_label(lwindow, hostname, name); lcrtc_user_set_data( user, name, hostname, protocol, NULL, password, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), 0, TRUE, lqconnect->folder, 0 ); lcrtc_user_ref(user); lcrt_user_add(&lwindow->u_config, user); lcrt_window_set_current_user(lwindow, user); if (lqconnect->flag == LCRT_QCONNECT_IN_TAB) { lcrt_create_terminal(lwindow->w_notebook); } } else { if ((user = lcrt_user_find_by_name(&lwindow->u_config, lqconnect->uname)) != NULL) { lcrtc_user_set_data( user, lqconnect->uname, hostname, protocol, NULL, password, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), 0, TRUE, NULL, -1 ); } } lcrtc_user_dump(user, __func__); return user; #undef get_text #undef get_active } struct lcrt_protocol_callback lcrt_protocol_serial_callbacks = { .protocol = LCRT_PROTOCOL_SERIAL, .receive = lcrt_serial_receive, .connect = lcrt_serial_connect, .disconnect = lcrt_serial_disconnect, .show = lcrt_serial_show, .create = lcrt_serial_create, .changed = NULL, }; lcrt-1.1.2/src/cfind.c0000664000175000017500000001002111751624073011420 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "ifind.h" #include "cfind.h" #include "iconnect.h" static void lcrt_find_connect_callback(struct lcrt_find *lfind) { const char *name = gtk_entry_get_text(GTK_ENTRY(lfind->entry_find)); struct lcrtc_user *user; struct lcrt_connect *lconnect = (struct lcrt_connect *)lfind->parent; if ((user = lcrt_user_find_by_name(&lconnect->parent->u_config, name)) == NULL) { lcrt_message_info(lfind->dialog, lfind->config.value[LCRT_I_INFO]); return; } strncpy(lconnect->parent->current_uname, name, HOSTNAME_LEN); lcrt_connect_on_find_callback(lconnect); } static void lcrt_find_edit_callback(struct lcrt_find *lfind, int next) { struct lcrt_window *lwindow = (struct lcrt_window *)lfind->parent; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; const char *text, *pattern; #if VTE_CHECK_VERSION(0, 26, 0) if (lfind->find_regex == 0) { text = gtk_entry_get_text(GTK_ENTRY(lfind->entry_find)); pattern = g_regex_escape_string (text, -1); if (lfind->regex) { g_regex_unref (lfind->regex); vte_terminal_search_set_gregex(VTE_TERMINAL(lterminal->terminal), NULL); } lfind->regex = g_regex_new(pattern, G_REGEX_CASELESS, 0, NULL); vte_terminal_search_set_gregex(VTE_TERMINAL(lterminal->terminal), lfind->regex); lfind->find_regex = 1; } if (next) vte_terminal_search_find_next(VTE_TERMINAL(lterminal->terminal)); else vte_terminal_search_find_previous(VTE_TERMINAL(lterminal->terminal)); #else lcrt_message_info(lfind->parent_window, "Current VTE library is too old\n"); #endif } void lcrt_find_on_prev_button_clicked(GtkButton *button, gpointer user_data) { struct lcrt_find *lfind = (struct lcrt_find *)user_data; switch (lfind->flag) { case LCRT_FIND_FCONNECT: lcrt_find_connect_callback(lfind); break; case LCRT_FIND_FEDIT: lcrt_find_edit_callback(lfind, 0); break; } } void lcrt_find_on_next_button_clicked(GtkButton *button, gpointer user_data) { struct lcrt_find *lfind = (struct lcrt_find *)user_data; switch (lfind->flag) { case LCRT_FIND_FCONNECT: lcrt_find_connect_callback(lfind); break; case LCRT_FIND_FEDIT: lcrt_find_edit_callback(lfind, 1); break; } } void lcrt_find_on_cancelbutton_clicked(GtkButton *button, gpointer user_data) { struct lcrt_find *lfind = (struct lcrt_find *)user_data; if (lfind->flag == LCRT_FIND_FEDIT) { if (lfind->find_regex && lfind->regex) { struct lcrt_window *lwindow = (struct lcrt_window *)lfind->parent; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; g_regex_unref (lfind->regex); #if VTE_CHECK_VERSION(0, 26, 0) vte_terminal_search_set_gregex(VTE_TERMINAL(lterminal->terminal), NULL); #endif } } gtk_widget_destroy(lfind->dialog); lcrt_destroy_find(lfind); } void lcrt_find_on_name_changed(GtkEditable *editable, gpointer user_data) { struct lcrt_find *lfind = (struct lcrt_find *)user_data; if (gtk_entry_get_text_length(GTK_ENTRY(editable)) > 0) { switch (lfind->flag) { case LCRT_FIND_FCONNECT: gtk_widget_set_sensitive(lfind->prev_button, FALSE); break; case LCRT_FIND_FEDIT: lfind->find_regex = 0; gtk_widget_set_sensitive(lfind->prev_button, TRUE); break; } gtk_widget_set_sensitive(lfind->next_button, TRUE); } else { gtk_widget_set_sensitive(lfind->prev_button, FALSE); gtk_widget_set_sensitive(lfind->next_button, FALSE); } } gboolean lcrt_find_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { lcrt_find_on_cancelbutton_clicked(NULL, user_data); return FALSE; } lcrt-1.1.2/src/cedit.c0000664000175000017500000001265411750361516011442 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include "message.h" #include "debug.h" #include "iedit.h" #include "imenubar.h" #include "iwindow.h" #include "inotebook.h" #include "iterminal.h" #include "cterminal.h" #include "iview.h" #include "ifind.h" void lcrt_edit_on_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_edit *ledit = lwindow->w_menubar->m_edit; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; gboolean has_selection, has_terminal; has_selection = lcrt_terminal_has_selection(lwindow); has_terminal = (lterminal != NULL); debug_where(); gtk_widget_set_sensitive (ledit->e_copy, has_selection); gtk_widget_set_sensitive (ledit->e_paste, has_terminal && lterminal->connected == LCRT_TERMINAL_CONNECTED); gtk_widget_set_sensitive (ledit->e_copy_and_paste, has_selection); gtk_widget_set_sensitive (ledit->e_find, has_terminal); gtk_widget_set_sensitive (ledit->e_select_all, has_terminal); gtk_widget_set_sensitive (ledit->e_clear_scrollback, has_terminal); gtk_widget_set_sensitive (ledit->e_clear_screen, has_terminal); gtk_widget_set_sensitive (ledit->e_clear_screen_and_scrollback, has_terminal); gtk_widget_set_sensitive (ledit->e_reset, has_terminal); } void lcrt_edit_on_copy_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; debug_where(); if (lcrt_terminal_has_selection(lwindow) == FALSE) return; debug_where(); vte_terminal_copy_clipboard(lterminal->terminal); } void lcrt_edit_on_paste_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; debug_where(); if (lterminal == NULL || lterminal->connected != LCRT_TERMINAL_CONNECTED) return; debug_print("current_terminal = %p\n", lterminal); vte_terminal_paste_clipboard(lterminal->terminal); } void lcrt_edit_on_copy_and_paste_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; if (lterminal == NULL) return; debug_where(); vte_terminal_copy_clipboard(lterminal->terminal); vte_terminal_paste_clipboard(lterminal->terminal); } void lcrt_edit_on_select_all_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; vte_terminal_select_all(lterminal->terminal); } void lcrt_edit_on_find_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; lcrt_create_dialog_find(lwindow, LCRT_FIND_FEDIT); } void lcrt_edit_on_clear_scrollback_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; GtkWidget *vscrollbar; vscrollbar = gtk_scrolled_window_get_vscrollbar(GTK_SCROLLED_WINDOW(lterminal->scrolledwindow)); #if 1 gtk_adjustment_set_value( gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(lterminal->scrolledwindow)), 0); #endif } void lcrt_edit_on_clear_screen_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; if (lterminal) //g_signal_emit_by_name(lterminal->terminal, "text-scrolled"); vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); } void lcrt_edit_on_clear_screen_and_scrollback_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; if (lterminal) vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); } void lcrt_edit_on_reset_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_terminal *lterminal = lwindow->w_notebook->current_terminal; if (lterminal) vte_terminal_reset(VTE_TERMINAL(lterminal->terminal), TRUE, TRUE); } #ifdef LCRT_SHOW_MENUBAR void lcrt_edit_on_show_menubar_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_view *lview = lwindow->w_menubar->m_view; if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) == TRUE) { gtk_widget_show(lwindow->w_menubar->menubar); lview->config.status[LCRT_V_MENUBAR] = TRUE; } else { gtk_widget_hide(lwindow->w_menubar->menubar); lview->config.status[LCRT_V_MENUBAR] = FALSE; } } #endif void lcrt_edit_on_popup_menu_deactivate(GtkObject *object, gpointer user_data) { struct lcrt_edit *ledit = (struct lcrt_edit *)user_data; debug_where(); free(ledit); } lcrt-1.1.2/src/cview.c0000664000175000017500000000613311750112142011447 00000000000000#include #include #include "message.h" #include "debug.h" #include "iview.h" #include "iwindow.h" #include "itoolbar.h" #include "imenubar.h" #include "istatusbar.h" #include "isettings.h" #ifdef LCRT_SHOW_MENUBAR void lcrt_view_on_menubar_activate(GtkMenuItem *menuitem, gpointer user_data) { } #endif void lcrt_view_on_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_view *lview = (struct lcrt_view *)user_data; struct lcrt_settings *lsettings = lview->parent->parent->w_settings; gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (lview->v_toolbar), lsettings->lt_g_show_toolbar); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (lview->v_status_bar), lsettings->lt_g_show_statusbar); } void lcrt_view_on_toolbar_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_view *lview = (struct lcrt_view *)user_data; struct lcrt_settings *lsettings = lview->parent->parent->w_settings; gboolean active; active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(lview->v_toolbar)); if (active == TRUE) { gtk_widget_show(lview->parent->parent->w_toolbar->toolbar); } else { gtk_widget_hide(lview->parent->parent->w_toolbar->toolbar); } lsettings->lt_g_show_toolbar = active; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lsettings->g_cb_show_toolbar), lsettings->lt_g_show_toolbar); } void lcrt_view_on_session_tabs_activate(GtkMenuItem *menuitem, gpointer user_data) { } void lcrt_view_on_status_bar_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_view *lview = (struct lcrt_view *)user_data; struct lcrt_settings *lsettings = lview->parent->parent->w_settings; gboolean active; active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(lview->v_status_bar)); if (active == TRUE) { gtk_widget_show(lview->parent->parent->w_statusbar->statusbar); } else { gtk_widget_hide(lview->parent->parent->w_statusbar->statusbar); } lsettings->lt_g_show_statusbar = active; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lsettings->g_cb_show_statusbar), lsettings->lt_g_show_statusbar); } void lcrt_view_on_always_on_top_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_view *lview = (struct lcrt_view *)user_data; if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(lview->v_always_on_top)) == TRUE) { gtk_window_set_keep_above(GTK_WINDOW(lview->parent->parent->window), TRUE); } else { gtk_window_set_keep_above(GTK_WINDOW(lview->parent->parent->window), FALSE); } } void lcrt_view_on_full_screen_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_view *lview = (struct lcrt_view *)user_data; if (lview->parent->parent->full_screen == FALSE) { gtk_window_fullscreen(GTK_WINDOW(lview->parent->parent->window)); lview->parent->parent->full_screen = TRUE; } else { gtk_window_unfullscreen(GTK_WINDOW(lview->parent->parent->window)); lview->parent->parent->full_screen = FALSE; } } lcrt-1.1.2/src/support.c0000664000175000017500000000653011750112142012047 00000000000000#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, int width, int height) { 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; } if (width != 0 && height != 0) pixbuf = gdk_pixbuf_new_from_file_at_size(pathname, width, height, &error); else 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); } } lcrt-1.1.2/src/cwindow.h0000664000175000017500000000114211750112142012004 00000000000000#ifndef __LCRT_CWINDOW_H__ #define __LCRT_CWINDOW_H__ #include gboolean lcrt_window_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean lcrt_window_on_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); gboolean lcrt_window_on_state_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean lcrt_window_get_auto_save(struct lcrt_window *lwindow); void lcrt_window_create_new(struct lcrt_window *lwindow); gboolean lcrt_window_on_key_press_event(GtkWidget*widget, GdkEventKey *event, gpointer user_data); #endif lcrt-1.1.2/src/cwindow.c0000664000175000017500000000643011750112142012004 00000000000000#include #include #include #include #include #include "message.h" #include "debug.h" #include "iwindow.h" #include "imenubar.h" #include "ioptions.h" #include "iterminal.h" #include "user.h" #include "list.h" #include "inotebook.h" #include "istatus.h" #include "isettings.h" gboolean lcrt_window_get_auto_save(struct lcrt_window *lwindow) { struct lcrt_options *loptions = lwindow->w_menubar->m_options; return gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(loptions->o_auto_save_options)); } gboolean lcrt_window_on_state_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { debug_where(); struct lcrt_window *lwindow = (struct lcrt_window *)user_data; if (gdk_window_get_state(GDK_WINDOW(widget->window)) == GDK_WINDOW_STATE_ICONIFIED && lwindow->hide == FALSE) { #if 0 gtk_widget_hide(widget); lwindow->hide = TRUE; #endif } return FALSE; } gboolean lcrt_window_on_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; int active = 0, ret; struct lcrt_terminal *lterminal; list_for_each_entry(lterminal, &lwindow->w_notebook->child, brother) { active += (lterminal->connected == LCRT_TERMINAL_CONNECTED && lterminal->user->protocol != LCRT_PROTOCOL_SHELL); } if (active != 0) { ret = lcrt_message_choose(lwindow->window, GTK_MESSAGE_WARNING, lwindow->w_status->config.value[LCRT_S_WINDOW_EXIT], active); if (ret == FALSE) return TRUE; } lcrt_window_save_config(lwindow); lcrt_destroy_window(lwindow); gtk_main_quit(); return FALSE; } gboolean lcrt_window_on_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; /* * we should decrease some number to insure we can get * correct position of current window, but I don't know * why? */ lwindow->w_config.value[LCRT_W_START_X] = event->x - 1; lwindow->w_config.value[LCRT_W_START_Y] = event->y - 23; return FALSE; } gboolean lcrt_window_on_key_press_event(GtkWidget*widget, GdkEventKey *event, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; struct lcrt_settings *lsettings = lwindow->w_settings; if (event->type == GDK_KEY_PRESS && event->keyval == GDK_F10 && lsettings->enable_f10_key == FALSE) return TRUE; return FALSE; } void lcrt_window_create_new(struct lcrt_window *lwindow) { typedef int (*exec_func_t)(const char *path, const char *arg, ...); exec_func_t exec_func; char *programe_path; if (fork() == 0) { if (strstr(lcrt_config_get_language(), LCRT_INSTALL_DIR) != NULL) { exec_func = execlp; programe_path = basename(lwindow->programe_name); } else { exec_func = execl; programe_path = lwindow->programe_name; } exec_func(programe_path, basename(lwindow->programe_name), "-c", lwindow->current_user->name, NULL); } } lcrt-1.1.2/src/imkdir.h0000664000175000017500000000236511750112142011621 00000000000000#ifndef __LCRT_IMKDIR_H__ #define __LCRT_IMKDIR_H__ #include #include #include "mkconfig.h" #include "iconnect.h" #include "user.h" #define LCRT_IMKDIR_TABLE "imkdir" enum { LCRT_M_TITLE, LCRT_M_TIP, LCRT_M_CANCEL, LCRT_M_OK, LCRT_M_ERROR, LCRT_M_ERR_MSG, LCRT_M_NUMBER }; #define LCRT_M_NAME \ "m_title", \ "m_tip", \ "m_cancel", \ "m_ok", \ "m_error", \ "m_err_msg" #define LCRT_M_VALUE \ "New folder", \ "Enter new folder name:", \ "Cancel", \ "OK", \ "There has a same one, try an another!", \ "There is no memory to create dialog" struct lcrtc_mkdir { struct lcrt_config db; const char *name[LCRT_M_NUMBER]; char value[LCRT_M_NUMBER][LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_mkdir { struct lcrt_connect *parent; char mkdir[DIRNAME_LEN + 1]; GtkWidget *dialog; GtkWidget *entry_mkdir; GtkWidget *okbutton; GtkTreeIter *iter; struct lcrtc_mkdir config; const char *(*get_db)(struct lcrt_mkdir *lmkdir); const char *(*get_tb)(struct lcrt_mkdir *lmkdir); }; struct lcrt_mkdir *lcrt_create_dialog_mkdir(struct lcrt_connect *parent, GtkWindow *window); void lcrt_destroy_mkdir(struct lcrt_mkdir *lmkdir); #endif lcrt-1.1.2/src/cmenubar.h0000664000175000017500000000052311750112142012130 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 11:58:30 PM CST * * * Description: */ #ifndef __LCRT_CMENUBAR_H__ #define __LCRT_CMENUBAR_H__ #endif lcrt-1.1.2/src/shell.h0000664000175000017500000000044711750112142011450 00000000000000#ifndef __LCRT_SHELL_H__ #define __LCRT_SHELL_H__ #include #include "protocol.h" #define LCRT_SHELL_SUPPORT_NUMBER 4 #define LCRT_SHELL_SUPPORT \ "/bin/bash", \ "/bin/sh", \ "/bin/dash", \ "/bin/zsh" extern struct lcrt_protocol_callback lcrt_protocol_shell_callbacks; #endif lcrt-1.1.2/src/ipopup.h0000664000175000017500000000310711750112142011651 00000000000000#ifndef __LCRT_IPOPUP_H__ #define __LCRT_IPOPUP_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #define LCRT_IPOPUP_TABLE "ipopup" enum { LCRT_P_RENAME, LCRT_P_RECONNECT, LCRT_P_DISCONNECT, LCRT_P_CLOSE, LCRT_P_LOCK_SESSION, LCRT_P_UNLOCK_SESSION, LCRT_P_CLONE_SESSION, LCRT_P_SESSION_OPTIONS, LCRT_P_NUMBER }; #define LCRT_P_NAME \ "p_rename", \ "p_reconnect", \ "p_disconnect", \ "p_close", \ "p_lock_session", \ "p_unlock_session", \ "p_clone_session", \ "p_session_options" #define LCRT_P_VALUE \ "Rena_me", \ "_Reconnect", \ "_Disconnect", \ "_Close", \ "Loc_k Session ...", \ "Unloc_k Session ...", \ "Clo_ne Session", \ "Session _Options ..." #define LCRT_P_SHORTCUT \ {0, 0}, \ {0, 0}, \ {0, 0}, \ {GDK_W, GDK_CONTROL_MASK | GDK_SHIFT_MASK} struct lcrtc_popup { struct lcrt_config db; const char *name[LCRT_P_NUMBER]; char value[LCRT_P_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_P_NUMBER][2]; }; struct lcrt_popup { struct lcrt_terminal *parent; GtkWidget *popup_menu; GtkWidget *p_rename; GtkWidget *p_reconnect; GtkWidget *p_disconnect; GtkWidget *p_close; GtkWidget *p_lock_session; GtkWidget *p_clone_session; GtkWidget *p_session_options; struct lcrtc_popup config; const char *(*get_db)(struct lcrt_popup *lpopup); const char *(*get_tb)(struct lcrt_popup *lpopup); }; struct lcrt_popup *lcrt_create_popup_menu(struct lcrt_terminal *parent); #endif lcrt-1.1.2/src/ifind.h0000664000175000017500000000274511750410717011446 00000000000000#ifndef __LCRT_IFIND_H__ #define __LCRT_IFIND_H__ #include #include #include "mkconfig.h" #include "iwindow.h" #include "iconnect.h" #define LCRT_IFIND_TABLE "ifind" enum { LCRT_I_TITLE, LCRT_I_TIP_CONNECT, LCRT_I_TIP_EDIT, LCRT_I_CANCEL, LCRT_I_PREV, LCRT_I_NEXT, LCRT_I_INFO, LCRT_I_ERR_MSG, LCRT_I_NUMBER }; #define LCRT_I_NAME \ "i_title", \ "i_tip_connect", \ "i_tip_edit", \ "i_cancel", \ "i_prev", \ "i_next", \ "i_info", \ "i_err_msg" #define LCRT_I_VALUE \ "Find", \ "Enter the name of session you want find:", \ "Enter the string you want find:", \ "Cancel", \ "Previous", \ "Next", \ "There is nothing find!", \ "There is no memory to create dialog" struct lcrtc_find { struct lcrt_config db; const char *name[LCRT_I_NUMBER]; char value[LCRT_I_NUMBER][LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_find { void *parent; int flag; #define LCRT_FIND_FCONNECT 0x1 #define LCRT_FIND_FEDIT 0x2 int find_regex; GRegex *regex; GtkWidget *dialog; GtkWidget *entry_find; GtkWidget *prev_button; GtkWidget *next_button; GtkTreeIter *iter; GtkWidget *parent_window; struct lcrtc_find config; const char *(*get_db)(struct lcrt_find *lfind); const char *(*get_tb)(struct lcrt_find *lfind); }; struct lcrt_find *lcrt_create_dialog_find(void *parent, int flag); void lcrt_destroy_find(struct lcrt_find *lfind); #endif lcrt-1.1.2/src/cfile.h0000664000175000017500000000244611750112142011424 00000000000000#ifndef __LCRT_CFILE_H__ #define __LCRT_CFILE_H__ #include void lcrt_file_on_connect_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_quick_connect_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_connect_in_tab_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_reconnect_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_reconnect_all_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_disconnect_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_disconnect_all_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_clone_session_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_lock_session_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_print_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_print_setup_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_log_session_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_recent_session_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_exit_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_file_on_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data); #endif lcrt-1.1.2/src/isettings.c0000664000175000017500000013025411750112142012345 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sun 23 Jan 2011 02:36:22 AM CST * * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include #include #include #include "iwindow.h" #include "debug.h" #include "message.h" #include "iterminal.h" #include "isettings.h" #include "csettings.h" #include "language.h" #include "imenubar.h" #include "iview.h" #include "itoolbar.h" #include "istatusbar.h" #include "foperate.h" int lcrt_settings_create_local_config(struct lcrt_settings *lsettings); int lcrt_settings_load_config(struct lcrt_settings *lsettings); int lcrt_settings_init_config(struct lcrt_settings *lsettings); int lcrt_settings_convert_local_config(struct lcrt_settings *lsettings); int lcrt_settings_save_local_config(struct lcrt_settings *lsettings); struct lcrt_settings *lcrt_create_settings(struct lcrt_window *parent) { GtkWidget *dialog_settings; GtkWidget *dialog_vbox; GtkWidget *notebook; GtkWidget *vbox_general; GtkWidget *frame_language; GtkWidget *alignment_language; GtkWidget *vbox2; GtkWidget *g_lb_language_support_note; GtkWidget *hbox1; GtkWidget *g_lb_current_language; GtkWidget *g_cb_language; GtkWidget *g_lb_language_support; GtkWidget *frame_dialog; GtkWidget *alignment_dialog; GtkWidget *vbox_dialog; GtkWidget *g_rb_connect; GSList *g_rb_connect_group = NULL; GtkWidget *g_rb_quick_connect; GtkWidget *g_rb_none; GtkWidget *g_lb_dialog; GtkWidget *frame_settings; GtkWidget *alignment_settings; GtkWidget *vbox_settings; GtkWidget *g_cb_show_toolbar; GtkWidget *g_cb_show_statusbar; GtkWidget *g_lb_settings; GtkWidget *g_nb_general; GtkWidget *frame_keybindings; GtkWidget *alignment_kebindings; GtkWidget *vbox8; GtkWidget *k_lb_keyboard_shortcuts_note; GtkWidget *scrolledwindow2; GtkWidget *k_tv_shortcurts; GtkWidget *k_lb_keyboard_shortcut; GtkWidget *k_cb_enable_f10; GtkWidget *k_nb_keybindings; GtkWidget *frame_terminal; GtkWidget *alignment_terminal; GtkWidget *vbox_terminal; GtkWidget *t_lb_terminal_note; GtkWidget *table_terminal; GtkWidget *t_lb_font; GtkWidget *t_lb_foreground_color; GtkWidget *t_bt_foreground_color; GtkWidget *t_bt_font; GtkWidget *t_lb_background_color; GtkWidget *t_bt_background_color; GtkWidget *t_lb_background_image; GtkWidget *t_lb_transparent; GtkObject *t_sb_scrollback_lines_adj; GtkWidget *t_sb_scrollback_lines; GtkWidget *hbox4; GtkWidget *t_et_background_image; GtkWidget *t_bt_background_image; GtkWidget *image3; GtkWidget *t_hl_transparent; GtkTooltips *tooltips; GtkWidget *t_lb_scrollback_lines; GtkWidget *hbox8; GtkWidget *t_cb_bell; GtkWidget *fixed1; GtkWidget *t_bt_restore_default; GtkWidget *t_lb_terminal_settings; GtkWidget *t_nb_terminal; GtkWidget *frame_application; GtkWidget *alignment6; GtkWidget *vbox7; GtkWidget *a_lb_application_note; GtkWidget *table2; GtkWidget *a_lb_shell; GtkWidget *a_lb_ssh; GtkWidget *a_lb_telnet; GtkWidget *a_et_ssh; GtkWidget *a_et_telnet; GtkWidget *a_bt_telnet; GtkWidget *a_bt_shell; GtkWidget *a_et_shell; GtkWidget *a_bt_ssh; GtkWidget *a_lb_application; GtkWidget *a_nb_application; GtkWidget *dialog_action_area; GtkWidget *applybutton; GtkWidget *alignment7; GtkWidget *hbox5; GtkWidget *image4; GtkWidget *lb_applybutton; GtkWidget *cancelbutton; GtkWidget *alignment8; GtkWidget *hbox6; GtkWidget *image5; GtkWidget *lb_cancelbutton; GtkWidget *okbutton; GtkWidget *alignment9; GtkWidget *hbox7; GtkWidget *image6; GtkWidget *lb_okbutton; struct lcrt_settings *lsettings; lsettings =(struct lcrt_settings *)calloc(1, sizeof(struct lcrt_settings)); if (lsettings == NULL) goto err; lcrt_settings_init_config(lsettings); lcrt_settings_load_config(lsettings); lcrt_settings_convert_local_config(lsettings); lsettings->parent = parent; dialog_settings = gtk_dialog_new(); lsettings->dialog_settings = dialog_settings; gtk_widget_set_size_request(dialog_settings, 500, 400); gtk_window_set_transient_for(GTK_WINDOW(dialog_settings), GTK_WINDOW(parent->window)); gtk_window_set_title(GTK_WINDOW (dialog_settings), lsettings->config.value[LCRT_T_DIALOG_SETTINGS]); gtk_window_set_position(GTK_WINDOW (dialog_settings), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_resizable(GTK_WINDOW (dialog_settings), FALSE); gtk_window_set_type_hint(GTK_WINDOW (dialog_settings), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator(GTK_DIALOG (dialog_settings), FALSE); dialog_vbox = GTK_DIALOG(dialog_settings)->vbox; gtk_widget_show(dialog_vbox); notebook = gtk_notebook_new(); lsettings->notebook = notebook; gtk_widget_show(notebook); gtk_box_pack_start(GTK_BOX(dialog_vbox), notebook, TRUE, TRUE, 0); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_LEFT); vbox_general = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox_general); gtk_container_add(GTK_CONTAINER(notebook), vbox_general); frame_language = gtk_frame_new(NULL); gtk_widget_show(frame_language); gtk_box_pack_start(GTK_BOX(vbox_general), frame_language, FALSE, FALSE, 0); gtk_widget_set_size_request(frame_language, -1, 100); gtk_frame_set_shadow_type(GTK_FRAME(frame_language), GTK_SHADOW_IN); g_lb_language_support = gtk_label_new(lsettings->config.value[LCRT_T_G_LB_LANGUAGE_SUPPORT]); gtk_widget_show(g_lb_language_support); gtk_frame_set_label_widget(GTK_FRAME(frame_language), g_lb_language_support); gtk_label_set_use_markup(GTK_LABEL(g_lb_language_support), TRUE); alignment_language = gtk_alignment_new(0.5, 0.5, 1, 1); gtk_widget_show(alignment_language); gtk_container_add(GTK_CONTAINER(frame_language), alignment_language); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_language), 0, 0, 12, 0); vbox2 = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox2); gtk_container_add(GTK_CONTAINER(alignment_language), vbox2); gtk_widget_set_size_request(vbox2, -1, 60); g_lb_language_support_note = gtk_label_new(lsettings->config.value[LCRT_T_G_LB_LANGUAGE_SUPPORT_NOTE]); gtk_widget_show(g_lb_language_support_note); gtk_widget_set_size_request (g_lb_language_support_note, -1, 40); gtk_box_pack_start(GTK_BOX(vbox2), g_lb_language_support_note, FALSE, FALSE, 0); gtk_misc_set_alignment(GTK_MISC(g_lb_language_support_note), 0.01, 0.5); hbox1 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox1); gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, TRUE, 0); g_lb_current_language = gtk_label_new(lsettings->config.value[LCRT_T_G_LB_CURRENT_LANGUAGE]); gtk_widget_show(g_lb_current_language); gtk_box_pack_start(GTK_BOX(hbox1), g_lb_current_language, FALSE, FALSE, 0); gtk_widget_set_size_request(g_lb_current_language, 130, 30); gtk_misc_set_alignment(GTK_MISC(g_lb_current_language), 0.01, 0.5); g_cb_language = gtk_combo_box_new_text (); lsettings->g_cb_language = g_cb_language; gtk_widget_show(g_cb_language); gtk_box_pack_start(GTK_BOX(hbox1), g_cb_language, FALSE, FALSE, 0); gtk_widget_set_size_request(g_cb_language, 180, 30); const struct lcrt_support_language *languages = lcrt_get_languages(); int i, current_language; for (i = 0; i < LCRT_SUPPORT_LANGUAGE; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX(g_cb_language), languages[i].language_name); if (strstr(lcrt_config_get_language(), languages[i].db_name) != NULL) current_language = i; } gtk_combo_box_set_active(GTK_COMBO_BOX (g_cb_language), current_language); //gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(g_cb_language)->child), FALSE); g_nb_general = gtk_label_new(lsettings->config.value[LCRT_T_G_NB_GENERAL]); lsettings->g_nb_general = g_nb_general; gtk_widget_show(g_nb_general); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), 0), g_nb_general); gtk_widget_set_size_request(g_nb_general, 80, -1); gtk_misc_set_alignment(GTK_MISC(g_nb_general), 0.01, 0.5); GTK_WIDGET_UNSET_FLAGS(g_nb_general, GTK_CAN_FOCUS); frame_dialog = gtk_frame_new(NULL); gtk_widget_show(frame_dialog); gtk_box_pack_start(GTK_BOX(vbox_general), frame_dialog, TRUE, FALSE, 0); gtk_frame_set_shadow_type(GTK_FRAME(frame_dialog), GTK_SHADOW_IN); alignment_dialog = gtk_alignment_new(0.5, 0.5, 1, 1); gtk_widget_show(alignment_dialog); gtk_container_add(GTK_CONTAINER(frame_dialog), alignment_dialog); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_dialog), 0, 0, 12, 0); vbox_dialog = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox_dialog); gtk_container_add(GTK_CONTAINER(alignment_dialog), vbox_dialog); g_rb_connect = gtk_radio_button_new_with_mnemonic(NULL, lsettings->config.value[LCRT_T_G_RB_CONNECT]); lsettings->g_rb_connect = g_rb_connect; gtk_widget_show(g_rb_connect); gtk_box_pack_start(GTK_BOX(vbox_dialog), g_rb_connect, FALSE, FALSE, 0); gtk_widget_set_size_request(g_rb_connect, -1, 30); gtk_radio_button_set_group(GTK_RADIO_BUTTON(g_rb_connect), g_rb_connect_group); g_rb_connect_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(g_rb_connect)); g_rb_quick_connect = gtk_radio_button_new_with_mnemonic(NULL, lsettings->config.value[LCRT_T_G_RB_QUICK_CONNECT]); lsettings->g_rb_quick_connect = g_rb_quick_connect; gtk_widget_show(g_rb_quick_connect); gtk_box_pack_start(GTK_BOX(vbox_dialog), g_rb_quick_connect, FALSE, FALSE, 0); gtk_widget_set_size_request(g_rb_quick_connect, -1, 30); gtk_radio_button_set_group(GTK_RADIO_BUTTON(g_rb_quick_connect), g_rb_connect_group); g_rb_connect_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(g_rb_quick_connect)); g_rb_none = gtk_radio_button_new_with_mnemonic(NULL, lsettings->config.value[LCRT_T_G_RB_NONE]); lsettings->g_rb_none = g_rb_none; gtk_widget_show(g_rb_none); gtk_box_pack_start(GTK_BOX(vbox_dialog), g_rb_none, FALSE, FALSE, 0); gtk_widget_set_size_request(g_rb_none, -1, 30); gtk_radio_button_set_group(GTK_RADIO_BUTTON(g_rb_none), g_rb_connect_group); g_rb_connect_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(g_rb_none)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_rb_none),TRUE); g_lb_dialog = gtk_label_new(lsettings->config.value[LCRT_T_G_LB_DIALOG]); gtk_widget_show(g_lb_dialog); gtk_frame_set_label_widget(GTK_FRAME(frame_dialog), g_lb_dialog); gtk_label_set_use_markup(GTK_LABEL(g_lb_dialog), TRUE); frame_settings = gtk_frame_new(NULL); gtk_widget_show(frame_settings); gtk_box_pack_start(GTK_BOX(vbox_general), frame_settings, TRUE, TRUE, 0); gtk_frame_set_shadow_type(GTK_FRAME(frame_settings), GTK_SHADOW_IN); alignment_settings = gtk_alignment_new(0.5, 0.5, 1, 1); gtk_widget_show(alignment_settings); gtk_container_add(GTK_CONTAINER(frame_settings), alignment_settings); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_settings), 0, 0, 12, 0); vbox_settings = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox_settings); gtk_container_add(GTK_CONTAINER(alignment_settings), vbox_settings); g_cb_show_toolbar = gtk_check_button_new_with_mnemonic(lsettings->config.value[LCRT_T_G_CB_SHOW_TOOLBAR]); lsettings->g_cb_show_toolbar = g_cb_show_toolbar; gtk_widget_show(g_cb_show_toolbar); gtk_box_pack_start(GTK_BOX(vbox_settings), g_cb_show_toolbar, FALSE, FALSE, 0); gtk_widget_set_size_request(g_cb_show_toolbar, -1, 30); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_cb_show_toolbar), lsettings->lt_g_show_toolbar); g_cb_show_statusbar = gtk_check_button_new_with_mnemonic(lsettings->config.value[LCRT_T_G_CB_SHOW_STATUSBAR]); lsettings->g_cb_show_statusbar = g_cb_show_statusbar; gtk_widget_show(g_cb_show_statusbar); gtk_box_pack_start(GTK_BOX(vbox_settings), g_cb_show_statusbar, FALSE, FALSE, 0); gtk_widget_set_size_request(g_cb_show_statusbar, -1, 30); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g_cb_show_statusbar), lsettings->lt_g_show_statusbar); g_lb_settings = gtk_label_new(lsettings->config.value[LCRT_T_G_LB_VIEW]); gtk_widget_show(g_lb_settings); gtk_frame_set_label_widget(GTK_FRAME(frame_settings), g_lb_settings); gtk_label_set_use_markup(GTK_LABEL(g_lb_settings), TRUE); frame_keybindings = gtk_frame_new(NULL); gtk_widget_show(frame_keybindings); gtk_container_add(GTK_CONTAINER(notebook), frame_keybindings); gtk_frame_set_shadow_type(GTK_FRAME(frame_keybindings), GTK_SHADOW_OUT); alignment_kebindings = gtk_alignment_new(0.5, 0.5, 1, 1); gtk_widget_show(alignment_kebindings); gtk_container_add(GTK_CONTAINER(frame_keybindings), alignment_kebindings); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_kebindings), 0, 0, 12, 0); vbox8 = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox8); gtk_container_add(GTK_CONTAINER(alignment_kebindings), vbox8); k_lb_keyboard_shortcuts_note = gtk_label_new(lsettings->config.value[LCRT_T_K_LB_KEYBOARD_SHORTCUTS_NOTE]); gtk_widget_show(k_lb_keyboard_shortcuts_note); gtk_box_pack_start(GTK_BOX(vbox8), k_lb_keyboard_shortcuts_note, FALSE, FALSE, 0); gtk_widget_set_size_request(k_lb_keyboard_shortcuts_note, -1, 50); gtk_misc_set_alignment(GTK_MISC(k_lb_keyboard_shortcuts_note), 0.01, 0.5); k_cb_enable_f10 = gtk_check_button_new_with_mnemonic(lsettings->config.value[LCRT_T_K_CB_ENABLE_F10]); lsettings->k_cb_enable_f10 = k_cb_enable_f10; gtk_widget_show(k_cb_enable_f10); gtk_box_pack_start(GTK_BOX(vbox8), k_cb_enable_f10, FALSE, FALSE, 0); //gtk_widget_set_size_request(k_cb_enable_f10, -1, 30); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(k_cb_enable_f10), lsettings->enable_f10_key); scrolledwindow2 = gtk_scrolled_window_new(NULL, NULL); gtk_widget_show(scrolledwindow2); gtk_box_pack_start(GTK_BOX(vbox8), scrolledwindow2, TRUE, TRUE, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow2), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow2), GTK_SHADOW_IN); k_tv_shortcurts = gtk_tree_view_new(); lsettings->k_tv_shortcurts = k_tv_shortcurts; gtk_widget_show(k_tv_shortcurts); gtk_container_add(GTK_CONTAINER(scrolledwindow2), k_tv_shortcurts); k_lb_keyboard_shortcut = gtk_label_new(lsettings->config.value[LCRT_T_K_LB_KEYBOARD_SHORTCUT]); gtk_widget_show(k_lb_keyboard_shortcut); gtk_frame_set_label_widget(GTK_FRAME(frame_keybindings), k_lb_keyboard_shortcut); gtk_label_set_use_markup(GTK_LABEL(k_lb_keyboard_shortcut), TRUE); k_nb_keybindings = gtk_label_new(lsettings->config.value[LCRT_T_K_NB_KEYBINDINGS]); lsettings->k_nb_keybindings = k_nb_keybindings; gtk_widget_show(k_nb_keybindings); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), 1), k_nb_keybindings); gtk_misc_set_alignment(GTK_MISC(k_nb_keybindings), 0.01, 0.5); frame_terminal = gtk_frame_new(NULL); gtk_widget_show(frame_terminal); gtk_container_add(GTK_CONTAINER(notebook), frame_terminal); gtk_container_set_border_width(GTK_CONTAINER(frame_terminal), 5); gtk_frame_set_shadow_type(GTK_FRAME(frame_terminal), GTK_SHADOW_OUT); alignment_terminal = gtk_alignment_new(0.5, 0.5, 1, 1); gtk_widget_show(alignment_terminal); gtk_container_add(GTK_CONTAINER(frame_terminal), alignment_terminal); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_terminal), 0, 0, 12, 0); vbox_terminal = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox_terminal); gtk_container_add(GTK_CONTAINER(alignment_terminal), vbox_terminal); t_lb_terminal_note = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_TERMINAL_NOTE]); gtk_widget_show(t_lb_terminal_note); gtk_box_pack_start(GTK_BOX(vbox_terminal), t_lb_terminal_note, FALSE, FALSE, 0); gtk_widget_set_size_request(t_lb_terminal_note, -1, 70); gtk_misc_set_alignment(GTK_MISC(t_lb_terminal_note), 0.01, 0.5); table_terminal = gtk_table_new(6, 2, FALSE); gtk_widget_show(table_terminal); gtk_box_pack_start(GTK_BOX(vbox_terminal), table_terminal, FALSE, TRUE, 0); gtk_table_set_row_spacings(GTK_TABLE(table_terminal), 3); t_lb_font = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_FONT]); gtk_widget_show(t_lb_font); gtk_table_attach(GTK_TABLE(table_terminal), t_lb_font, 0, 1, 0, 1, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(t_lb_font, 125, 30); gtk_misc_set_alignment(GTK_MISC(t_lb_font), 0, 0.5); t_bt_font = gtk_font_button_new (); lsettings->t_bt_font = t_bt_font; gtk_widget_show (t_bt_font); gtk_table_attach (GTK_TABLE (table_terminal), t_bt_font, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request(t_bt_font, -1, 30); g_signal_connect(t_bt_font, "font-set", G_CALLBACK(lcrt_settings_terminal_font_button_clicked), lsettings); //if (lcrt_check_space_string(lsettings->lt_t_font) == FALSE) gtk_font_button_set_font_name(GTK_FONT_BUTTON(t_bt_font), lsettings->lt_t_font); t_lb_foreground_color = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_FOREGROUND_COLOR]); gtk_widget_show(t_lb_foreground_color); gtk_table_attach(GTK_TABLE(table_terminal), t_lb_foreground_color, 0, 1, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(t_lb_foreground_color, 125, 30); gtk_misc_set_alignment(GTK_MISC(t_lb_foreground_color), 0, 0.5); t_bt_foreground_color = gtk_color_button_new (); lsettings->t_bt_foreground_color = t_bt_foreground_color; gtk_widget_show (t_bt_foreground_color); gtk_table_attach (GTK_TABLE (table_terminal), t_bt_foreground_color, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request(t_bt_foreground_color, -1, 30); g_signal_connect(t_bt_foreground_color , "color-set", G_CALLBACK(lcrt_settings_terminal_color_button_clicked), lsettings); gtk_color_button_set_color(GTK_COLOR_BUTTON(t_bt_foreground_color), &lsettings->lt_t_fcolor); t_lb_background_color = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_BACKGROUND_COLOR]); gtk_widget_show(t_lb_background_color); gtk_table_attach(GTK_TABLE(table_terminal), t_lb_background_color, 0, 1, 2, 3, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(t_lb_background_color, 125, 30); gtk_misc_set_alignment(GTK_MISC(t_lb_background_color), 0, 0.5); t_bt_background_color = gtk_color_button_new (); lsettings->t_bt_background_color = t_bt_background_color; gtk_widget_show (t_bt_background_color); gtk_table_attach (GTK_TABLE (table_terminal), t_bt_background_color, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_size_request(t_bt_background_color, -1, 30); g_signal_connect(t_bt_background_color , "color-set", G_CALLBACK(lcrt_settings_terminal_color_button_clicked), lsettings); gtk_color_button_set_color(GTK_COLOR_BUTTON(t_bt_background_color), &lsettings->lt_t_bcolor); t_lb_background_image = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_BACKGROUND_IMAGE]); gtk_widget_show(t_lb_background_image); gtk_table_attach(GTK_TABLE(table_terminal), t_lb_background_image, 0, 1, 4, 5, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(t_lb_background_image, 125, 30); gtk_misc_set_alignment(GTK_MISC(t_lb_background_image), 0, 0.5); t_lb_transparent = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_TRANSPARENT]); gtk_widget_show(t_lb_transparent); gtk_table_attach(GTK_TABLE(table_terminal), t_lb_transparent, 0, 1, 5, 6, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(t_lb_transparent, -1, 30); gtk_misc_set_alignment(GTK_MISC(t_lb_transparent), 0, 0.5); t_sb_scrollback_lines_adj = gtk_adjustment_new(lsettings->lt_t_scrolllines, 500, 100000, 100, 0, 0); lsettings->t_sb_scrollback_lines_adj = t_sb_scrollback_lines_adj; t_sb_scrollback_lines = gtk_spin_button_new(GTK_ADJUSTMENT(t_sb_scrollback_lines_adj), 1, 0); gtk_widget_show(t_sb_scrollback_lines); gtk_table_attach(GTK_TABLE(table_terminal), t_sb_scrollback_lines, 1, 2, 3, 4, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(t_sb_scrollback_lines, -1, 30); hbox4 = gtk_hbox_new(FALSE, 0); gtk_widget_show(hbox4); gtk_table_attach(GTK_TABLE(table_terminal), hbox4, 1, 2, 4, 5, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL), 0, 0); t_et_background_image = gtk_entry_new(); lsettings->t_et_background_image = t_et_background_image; gtk_widget_show(t_et_background_image); gtk_box_pack_start(GTK_BOX(hbox4), t_et_background_image, TRUE, TRUE, 0); gtk_widget_set_size_request(t_et_background_image, -1, 30); gtk_entry_set_invisible_char(GTK_ENTRY(t_et_background_image), 9679); gtk_entry_set_text(GTK_ENTRY(t_et_background_image), lsettings->lt_t_backimage); t_bt_background_image = gtk_button_new(); lsettings->t_bt_background_image = t_bt_background_image; gtk_widget_show(t_bt_background_image); gtk_box_pack_start(GTK_BOX(hbox4), t_bt_background_image, FALSE, FALSE, 0); g_signal_connect((gpointer)t_bt_background_image, "clicked", G_CALLBACK(lcrt_settings_on_button_background_image_clicked), lsettings); image3 = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image3); gtk_container_add(GTK_CONTAINER(t_bt_background_image), image3); lsettings->t_hl_transparent = gtk_adjustment_new(lsettings->lt_t_transparent, 0, 100, 1, 0, 0); t_hl_transparent = gtk_hscale_new(GTK_ADJUSTMENT(lsettings->t_hl_transparent)); gtk_widget_show(t_hl_transparent); gtk_table_attach(GTK_TABLE(table_terminal), t_hl_transparent, 1, 2, 5, 6, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL), 0, 0); tooltips = gtk_tooltips_new(); gtk_tooltips_set_tip(tooltips, t_hl_transparent, lsettings->config.value[LCRT_T_T_TP_TRANSPARENT], NULL); gtk_widget_set_size_request(t_hl_transparent, -1, 30); gtk_scale_set_draw_value(GTK_SCALE(t_hl_transparent), FALSE); g_signal_connect((gpointer)lsettings->t_hl_transparent, "value-changed", G_CALLBACK(lcrt_settings_terminal_on_transparent_value_changed), lsettings); t_lb_scrollback_lines = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_SCROLLBACK_LINES]); gtk_widget_show(t_lb_scrollback_lines); gtk_table_attach(GTK_TABLE(table_terminal), t_lb_scrollback_lines, 0, 1, 3, 4, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(t_lb_scrollback_lines, 125, 30); gtk_misc_set_alignment(GTK_MISC(t_lb_scrollback_lines), 0, 0.5); hbox8 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox8); gtk_box_pack_start (GTK_BOX (vbox_terminal), hbox8, FALSE, FALSE, 0); t_cb_bell = gtk_check_button_new_with_mnemonic(lsettings->config.value[LCRT_T_T_CB_BELL]); lsettings->t_cb_bell = t_cb_bell; gtk_widget_show(t_cb_bell); gtk_box_pack_start (GTK_BOX (hbox8), t_cb_bell, FALSE, FALSE, 0); gtk_widget_set_size_request(t_cb_bell, -1, 30); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(t_cb_bell), lsettings->lt_t_bell); fixed1 = gtk_fixed_new (); gtk_widget_show (fixed1); gtk_box_pack_start (GTK_BOX (hbox8), fixed1, FALSE, FALSE, 0); gtk_widget_set_size_request (fixed1, 120, -1); t_bt_restore_default = gtk_button_new_with_mnemonic(lsettings->config.value[LCRT_T_T_BT_RESTORE_DEFAULT]); lsettings->t_bt_restore_default = t_bt_restore_default; gtk_widget_show (t_bt_restore_default); gtk_box_pack_start (GTK_BOX (hbox8), t_bt_restore_default, FALSE, FALSE, 0); gtk_widget_set_size_request(t_bt_restore_default, 90, 30); g_signal_connect((gpointer)t_bt_restore_default, "clicked", G_CALLBACK(lcrt_settings_terminal_on_restore_default_clicked), lsettings); t_lb_terminal_settings = gtk_label_new(lsettings->config.value[LCRT_T_T_LB_TERMINAL_SETTINGS]); gtk_widget_show(t_lb_terminal_settings); gtk_frame_set_label_widget(GTK_FRAME(frame_terminal), t_lb_terminal_settings); gtk_label_set_use_markup(GTK_LABEL(t_lb_terminal_settings), TRUE); t_nb_terminal = gtk_label_new(lsettings->config.value[LCRT_T_T_NB_TERMINAL]); lsettings->t_nb_terminal = t_nb_terminal; gtk_widget_show(t_nb_terminal); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), 2), t_nb_terminal); gtk_widget_set_size_request(t_nb_terminal, 80, -1); gtk_misc_set_alignment(GTK_MISC(t_nb_terminal), 0.01, 0.5); frame_application = gtk_frame_new(NULL); gtk_widget_show(frame_application); gtk_container_add(GTK_CONTAINER(notebook), frame_application); gtk_frame_set_shadow_type(GTK_FRAME(frame_application), GTK_SHADOW_NONE); alignment6 = gtk_alignment_new(0.5, 0.5, 1, 1); gtk_widget_show(alignment6); gtk_container_add(GTK_CONTAINER(frame_application), alignment6); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment6), 0, 0, 12, 0); vbox7 = gtk_vbox_new(FALSE, 0); gtk_widget_show(vbox7); gtk_container_add(GTK_CONTAINER(alignment6), vbox7); a_lb_application_note = gtk_label_new(lsettings->config.value[LCRT_T_A_LB_APPLICATION_NOTE]); gtk_widget_show(a_lb_application_note); gtk_box_pack_start(GTK_BOX(vbox7), a_lb_application_note, FALSE, FALSE, 0); gtk_widget_set_size_request(a_lb_application_note, -1, 80); gtk_misc_set_alignment(GTK_MISC(a_lb_application_note), 0.01, 0.5); table2 = gtk_table_new(3, 3, FALSE); gtk_widget_show(table2); gtk_box_pack_start(GTK_BOX(vbox7), table2, TRUE, TRUE, 0); a_lb_shell = gtk_label_new(lsettings->config.value[LCRT_T_A_LB_SHELL]); gtk_widget_show(a_lb_shell); gtk_table_attach(GTK_TABLE(table2), a_lb_shell, 0, 1, 0, 1, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(a_lb_shell, 60, -1); gtk_misc_set_alignment(GTK_MISC(a_lb_shell), 0, 0.5); a_lb_ssh = gtk_label_new(lsettings->config.value[LCRT_T_A_LB_SSH]); gtk_widget_show(a_lb_ssh); gtk_table_attach(GTK_TABLE(table2), a_lb_ssh, 0, 1, 1, 2, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(a_lb_ssh, 60, -1); gtk_misc_set_alignment(GTK_MISC(a_lb_ssh), 0, 0.5); a_lb_telnet = gtk_label_new(lsettings->config.value[LCRT_T_A_LB_TELNET]); gtk_widget_show(a_lb_telnet); gtk_table_attach(GTK_TABLE(table2), a_lb_telnet, 0, 1, 2, 3, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(a_lb_telnet, 60, -1); gtk_misc_set_alignment(GTK_MISC(a_lb_telnet), 0, 0.5); a_et_ssh = gtk_entry_new(); lsettings->a_et_ssh = a_et_ssh; gtk_widget_show(a_et_ssh); gtk_table_attach(GTK_TABLE(table2), a_et_ssh, 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_entry_set_invisible_char(GTK_ENTRY(a_et_ssh), 9679); a_et_telnet = gtk_entry_new(); lsettings->a_et_telnet = a_et_telnet; gtk_widget_show(a_et_telnet); gtk_table_attach(GTK_TABLE(table2), a_et_telnet, 1, 2, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_entry_set_invisible_char(GTK_ENTRY(a_et_telnet), 9679); a_bt_telnet = gtk_button_new(); lsettings->a_bt_telnet = a_bt_telnet; gtk_widget_show(a_bt_telnet); gtk_table_attach(GTK_TABLE(table2), a_bt_telnet, 2, 3, 2, 3, (GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(a_bt_telnet, 32, 32); image6 = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image6); gtk_container_add(GTK_CONTAINER(a_bt_telnet), image6); a_bt_shell = gtk_button_new(); lsettings->a_bt_shell = a_bt_shell; gtk_widget_show(a_bt_shell); gtk_table_attach(GTK_TABLE(table2), a_bt_shell, 2, 3, 0, 1, (GtkAttachOptions)(0), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(a_bt_shell, 32, 32); image4 = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image4); gtk_container_add(GTK_CONTAINER(a_bt_shell), image4); a_et_shell = gtk_entry_new(); lsettings->a_et_shell = a_et_shell; gtk_widget_show(a_et_shell); gtk_table_attach(GTK_TABLE(table2), a_et_shell, 1, 2, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(0), 0, 0); gtk_entry_set_invisible_char(GTK_ENTRY(a_et_shell), 9679); a_bt_ssh = gtk_button_new(); lsettings->a_bt_ssh = a_bt_ssh; gtk_widget_show(a_bt_ssh); gtk_table_attach(GTK_TABLE(table2), a_bt_ssh, 2, 3, 1, 2, (GtkAttachOptions)(0), (GtkAttachOptions)(0), 0, 0); gtk_widget_set_size_request(a_bt_ssh, 32, 32); image5 = gtk_image_new_from_stock("gtk-open", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image5); gtk_container_add(GTK_CONTAINER(a_bt_ssh), image5); a_lb_application = gtk_label_new(lsettings->config.value[LCRT_T_A_LB_APPLICATION]); gtk_widget_show(a_lb_application); gtk_frame_set_label_widget(GTK_FRAME(frame_application), a_lb_application); gtk_label_set_use_markup(GTK_LABEL(a_lb_application), TRUE); a_nb_application = gtk_label_new(lsettings->config.value[LCRT_T_A_NB_APPLICATION]); lsettings->a_nb_application = a_nb_application; gtk_widget_show(a_nb_application); gtk_widget_set_size_request(a_nb_application, 80, -1); gtk_misc_set_alignment(GTK_MISC(a_nb_application), 0.01, 0.5); gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), 3), a_nb_application); dialog_action_area = GTK_DIALOG(dialog_settings)->action_area; gtk_widget_show(dialog_action_area); gtk_button_box_set_layout(GTK_BUTTON_BOX(dialog_action_area), GTK_BUTTONBOX_END); applybutton = gtk_button_new(); gtk_widget_show(applybutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_settings), applybutton, GTK_RESPONSE_APPLY); GTK_WIDGET_SET_FLAGS(applybutton, GTK_CAN_DEFAULT); alignment7 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment7); gtk_container_add(GTK_CONTAINER(applybutton), alignment7); hbox5 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox5); gtk_container_add(GTK_CONTAINER(alignment7), hbox5); image4 = gtk_image_new_from_stock("gtk-apply", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image4); gtk_box_pack_start(GTK_BOX(hbox5), image4, FALSE, FALSE, 0); lb_applybutton = gtk_label_new_with_mnemonic(lsettings->config.value[LCRT_T_LB_APPLYBUTTON]); gtk_widget_show(lb_applybutton); gtk_box_pack_start(GTK_BOX(hbox5), lb_applybutton, FALSE, FALSE, 0); cancelbutton = gtk_button_new(); gtk_widget_show(cancelbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_settings), cancelbutton, GTK_RESPONSE_CANCEL); GTK_WIDGET_SET_FLAGS(cancelbutton, GTK_CAN_DEFAULT); alignment8 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment8); gtk_container_add(GTK_CONTAINER(cancelbutton), alignment8); hbox6 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox6); gtk_container_add(GTK_CONTAINER(alignment8), hbox6); image5 = gtk_image_new_from_stock("gtk-cancel", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image5); gtk_box_pack_start(GTK_BOX(hbox6), image5, FALSE, FALSE, 0); lb_cancelbutton = gtk_label_new_with_mnemonic(lsettings->config.value[LCRT_T_LB_CANCELBUTTON]); gtk_widget_show(lb_cancelbutton); gtk_box_pack_start(GTK_BOX(hbox6), lb_cancelbutton, FALSE, FALSE, 0); okbutton = gtk_button_new(); gtk_widget_show(okbutton); gtk_dialog_add_action_widget(GTK_DIALOG(dialog_settings), okbutton, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS(okbutton, GTK_CAN_DEFAULT); alignment9 = gtk_alignment_new(0.5, 0.5, 0, 0); gtk_widget_show(alignment9); gtk_container_add(GTK_CONTAINER(okbutton), alignment9); hbox7 = gtk_hbox_new(FALSE, 2); gtk_widget_show(hbox7); gtk_container_add(GTK_CONTAINER(alignment9), hbox7); image6 = gtk_image_new_from_stock("gtk-ok", GTK_ICON_SIZE_BUTTON); gtk_widget_show(image6); gtk_box_pack_start(GTK_BOX(hbox7), image6, FALSE, FALSE, 0); lb_okbutton = gtk_label_new_with_mnemonic(lsettings->config.value[LCRT_T_LB_OKBUTTON]); gtk_widget_show(lb_okbutton); gtk_box_pack_start(GTK_BOX(hbox7), lb_okbutton, FALSE, FALSE, 0); g_signal_connect((gpointer)applybutton, "clicked", G_CALLBACK(lcrt_settings_on_applybutton_clicked), lsettings); g_signal_connect((gpointer)cancelbutton, "clicked", G_CALLBACK(lcrt_settings_on_cancelbutton_clicked), lsettings); g_signal_connect((gpointer)okbutton, "clicked", G_CALLBACK(lcrt_settings_on_okbutton_clicked), lsettings); g_signal_connect((gpointer) dialog_settings, "delete_event", G_CALLBACK (lcrt_settings_on_window_delete), lsettings); return lsettings; err: lcrt_message_error(parent->window, lsettings->config.value[LCRT_T_ERR_MSG]); return NULL; } void lcrt_destroy_settings(struct lcrt_settings *lsettings) { if (lsettings->auto_save_config) lcrt_settings_save_local_config(lsettings); if (lsettings) free(lsettings); } static const char *lcrt_settings_get_ldb_name(struct lcrt_settings *lsettings) { return lsettings == NULL ? NULL : lsettings->config.ldb.db_name; } static const char *lcrt_settings_get_ltb_name(struct lcrt_settings *lsettings) { return lsettings == NULL ? NULL : lsettings->config.ldb.db_table; } static const char *lcrt_settings_get_db_name(struct lcrt_settings *lsettings) { return lsettings->config.db.db_name; } static const char *lcrt_settings_get_tb_name(struct lcrt_settings *lsettings) { return lsettings->config.db.db_table; } int lcrt_settings_init_language_config(struct lcrt_settings *lsettings) { char db_name[256]; int i; static char *name[LCRT_T_NUMBER] = {LCRT_T_NAME}; static char *value[LCRT_T_NUMBER] = {LCRT_T_VALUE}; assert(lsettings); memset(&lsettings->config, 0, sizeof(struct lcrtc_settings)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lsettings->config.db, db_name, LCRT_ISETTINGS_TABLE); for (i = 0; i < LCRT_T_NUMBER; i++) { lsettings->config.name[i] = name[i]; strncpy(lsettings->config.value[i], value[i], sizeof(lsettings->config.value[i])); } lsettings->get_db = lcrt_settings_get_db_name; lsettings->get_tb = lcrt_settings_get_tb_name; return 0; } int lcrt_settings_init_local_config(struct lcrt_settings *lsettings) { char db_name[256]; int i; static char *config[LCRT_LT_NUMBER] = {LCRT_LT_CONFIG}; snprintf(db_name, sizeof(db_name), "%s/%s/", lcrt_config_get_local_dir(), LCRT_SETTINGS_CONFIG_DIR); lcrt_fmkdir(db_name); strcat(db_name, LCRT_SETTINGS_DB); lcrt_config_init(&lsettings->config.ldb, db_name, LCRT_ISETTINGS_TABLE); for (i = 0; i < LCRT_LT_NUMBER; i++) { strncpy(lsettings->config.local[i], config[i], sizeof(lsettings->config.local[i])); } lsettings->get_ldb = lcrt_settings_get_ldb_name; lsettings->get_ltb = lcrt_settings_get_ltb_name; return 0; } int lcrt_settings_init_config(struct lcrt_settings *lsettings) { assert(lsettings); memset(&lsettings->config, 0, sizeof(struct lcrtc_settings)); lcrt_settings_init_language_config(lsettings); lcrt_settings_init_local_config(lsettings); return LCRTE_OK; } int lcrt_settings_load_language_config(struct lcrt_settings *lsettings) { int rv, i; assert(lsettings); rv = lsettings->config.db.select(&lsettings->config.db, "SELECT * FROM %s", lsettings->get_tb(lsettings)); debug_where(); if (rv == LCRTE_NO_TABLE) { return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_T_NUMBER && rv == LCRTE_OK; i++) { strncpy(lsettings->config.value[i], lsettings->config.db.get_text_col(&lsettings->config.db, 1), sizeof(lsettings->config.value[i])); rv = lsettings->config.db.get_row(&lsettings->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s]\n", basename((char *)lsettings->get_db(lsettings)), lsettings->get_tb(lsettings), lsettings->config.name[i], lsettings->config.value[i]); } return rv; } int lcrt_settings_load_local_config(struct lcrt_settings *lsettings) { int rv, i; static char *name[LCRT_LT_NUMBER] = {LCRT_LT_NAME}; assert(lsettings); rv = lsettings->config.ldb.select(&lsettings->config.ldb, "SELECT * FROM %s", lsettings->get_ltb(lsettings)); debug_where(); if (rv == LCRTE_NO_TABLE) { lcrt_settings_create_local_config(lsettings); return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_LT_NUMBER && rv == LCRTE_OK; i++) { strncpy(lsettings->config.local[i], lsettings->config.ldb.get_text_col(&lsettings->config.ldb, 1), sizeof(lsettings->config.local[i])); rv = lsettings->config.ldb.get_row(&lsettings->config.ldb); debug_print("[%-10s|%-10s]: name = [%-20s] config = [%-20s]\n", basename((char *)lsettings->get_ldb(lsettings)), lsettings->get_ltb(lsettings), name[i], lsettings->config.local[i]); } return rv; } int lcrt_settings_load_config(struct lcrt_settings *lsettings) { lcrt_settings_load_language_config(lsettings); lcrt_settings_load_local_config(lsettings); return LCRTE_OK; } int lcrt_settings_create_local_config(struct lcrt_settings *lsettings) { int i; char *name[LCRT_LT_NUMBER] = {LCRT_LT_NAME}; assert(lsettings); lsettings->config.ldb.exec(&lsettings->config.ldb, "CREATE TABLE %s( \ name VARCHAR(%d) PRIMARY KEY, \ value VARCHAR(%d))", lsettings->get_ltb(lsettings), LCRT_CONFIG_NAME_LEN, LCRT_CONFIG_VALUE_LEN); for (i = 0; i < LCRT_LT_NUMBER; i++) { lsettings->config.ldb.exec(&lsettings->config.ldb, "INSERT INTO %s VALUES('%s', '%s')", lsettings->get_ltb(lsettings), name[i], lsettings->config.local[i]); } lsettings->config.ldb.close(&lsettings->config.ldb); return 0; } int lcrt_settings_convert_local_config(struct lcrt_settings *lsettings) { struct lcrtc_settings *config; if(lsettings == NULL) return EINVAL; config = &lsettings->config; lsettings->lt_g_show_dialog = atoi(config->local[LCRT_LT_G_SHOW_DIALOG]); lsettings->lt_g_show_toolbar = atoi(config->local[LCRT_LT_G_SHOW_TOOLBAR]); lsettings->lt_g_show_statusbar = atoi(config->local[LCRT_LT_G_SHOW_STATUSBAR]); strcpy(lsettings->lt_t_font, config->local[LCRT_LT_T_FONT]); sscanf(config->local[LCRT_LT_T_FCOLOR], "%x %x %x %x", (unsigned int *)&lsettings->lt_t_fcolor.pixel, (unsigned int *)&lsettings->lt_t_fcolor.red, (unsigned int *)&lsettings->lt_t_fcolor.green, (unsigned int *)&lsettings->lt_t_fcolor.blue); sscanf(config->local[LCRT_LT_T_BCOLOR], "%x %x %x %x", (unsigned int *)&lsettings->lt_t_bcolor.pixel, (unsigned int *)&lsettings->lt_t_bcolor.red, (unsigned int *)&lsettings->lt_t_bcolor.green, (unsigned int *)&lsettings->lt_t_bcolor.blue); lsettings->lt_t_scrolllines = atoi(config->local[LCRT_LT_T_SCROLLLINES]); lsettings->lt_t_transparent = atoi(config->local[LCRT_LT_T_TRANSPARENT]); lsettings->lt_t_bell = atoi(config->local[LCRT_LT_T_BELL]); strcpy(lsettings->lt_t_backimage, config->local[LCRT_LT_T_BACKIMAGE]); strcpy(lsettings->lt_a_shell, config->local[LCRT_LT_A_SHELL]); strcpy(lsettings->lt_a_ssh, config->local[LCRT_LT_A_SSH]); strcpy(lsettings->lt_a_telnet, config->local[LCRT_LT_A_TELNET]); lsettings->auto_save_config = atoi(config->local[LCRT_LT_AUTO_SAVE_CONFIG]); lsettings->enable_f10_key = atoi(config->local[LCRT_LT_ENABLE_F10]); return LCRTE_OK; } int lcrt_settings_save_local_config(struct lcrt_settings *lsettings) { int i; char *name[LCRT_LT_NUMBER] = {LCRT_LT_NAME}; struct lcrtc_settings *config; if(lsettings == NULL) return EINVAL; config = &lsettings->config; sprintf(config->local[LCRT_LT_G_SHOW_DIALOG], "%s", !!lsettings->lt_g_show_dialog ? "1" : "0"); sprintf(config->local[LCRT_LT_G_SHOW_TOOLBAR], "%s", !!lsettings->lt_g_show_toolbar ? "1" : "0"); sprintf(config->local[LCRT_LT_G_SHOW_STATUSBAR], "%s", !!lsettings->lt_g_show_statusbar ? "1" : "0"); strcpy(config->local[LCRT_LT_T_FONT], lsettings->lt_t_font); sprintf(config->local[LCRT_LT_T_FCOLOR], "%8.8x %4.4x %4.4x %4.4x", lsettings->lt_t_fcolor.pixel, lsettings->lt_t_fcolor.red, lsettings->lt_t_fcolor.green, lsettings->lt_t_fcolor.blue); sprintf(config->local[LCRT_LT_T_BCOLOR], "%8.8x %4.4x %4.4x %4.4x", lsettings->lt_t_bcolor.pixel, lsettings->lt_t_bcolor.red, lsettings->lt_t_bcolor.green, lsettings->lt_t_bcolor.blue); sprintf(config->local[LCRT_LT_T_SCROLLLINES], "%d", lsettings->lt_t_scrolllines); sprintf(config->local[LCRT_LT_T_TRANSPARENT], "%d", lsettings->lt_t_transparent); sprintf(config->local[LCRT_LT_T_BELL], "%s", !!lsettings->lt_t_bell? "1" : "0"); strcpy(config->local[LCRT_LT_T_BACKIMAGE], lsettings->lt_t_backimage); strcpy(config->local[LCRT_LT_A_SHELL], lsettings->lt_a_shell); strcpy(config->local[LCRT_LT_A_SSH], lsettings->lt_a_ssh); strcpy(config->local[LCRT_LT_A_TELNET], lsettings->lt_a_telnet); sprintf(config->local[LCRT_LT_AUTO_SAVE_CONFIG], "%d", lsettings->auto_save_config); sprintf(config->local[LCRT_LT_ENABLE_F10], "%d", lsettings->enable_f10_key); for (i = 0; i < LCRT_LT_NUMBER; i++) { lsettings->config.ldb.exec(&lsettings->config.ldb, "UPDATE %s SET value='%s' WHERE name='%s'", lsettings->get_ltb(lsettings), lsettings->config.local[i], name[i]); if (lsettings->config.ldb.changes(&lsettings->config.ldb) == 0) { lsettings->config.ldb.exec(&lsettings->config.ldb, "INSERT INTO %s VALUES('%s', '%s')", lsettings->get_ltb(lsettings), name[i], lsettings->config.local[i]); } } lsettings->config.ldb.close(&lsettings->config.ldb); return LCRTE_OK; } lcrt-1.1.2/src/iqconnect.h0000664000175000017500000001123311750112142012317 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 22 Jan 2011 04:18:02 PM CST * * * Description: */ #ifndef __LCRT_IQCONNECT_H__ #define __LCRT_IQCONNECT_H__ #include #include #include "mkconfig.h" #include "imenubar.h" #include "user.h" #define LCRT_IQCONNECT_TABLE "iqconnect" enum { LCRT_Q_CONNECT, LCRT_Q_SESSION_OPTION, LCRT_Q_LB_PROTOCOL, /* for ssh,telnet,rlogin */ LCRT_Q_LB_HOSTNAME, LCRT_Q_LB_USERNAME, LCRT_Q_LB_FIREWALL, LCRT_Q_LB_PORT, LCRT_Q_LB_FRAME, /* for ssh2,ssh1 */ LCRT_Q_CB_PASSWD, /* for ssh2 */ LCRT_Q_CB_PUBLICKEY, LCRT_Q_CB_KEYBOARD, LCRT_Q_CB_GSSAPI, /* for ssh1 */ LCRT_Q_CB_RSA, LCRT_Q_CB_TIS, LCRT_Q_BT_PROPERTIES, LCRT_Q_LB_DEFAULT_COMMAND, LCRT_Q_CB_SHOW_QCONNECT, LCRT_Q_CB_SAVE_SESSION, LCRT_Q_CB_OPEN_IN_A_TAB, LCRT_Q_BT_CONNECT, LCRT_Q_BT_OK, LCRT_Q_BT_CANCEL, LCRT_Q_ERR_MSG, /* for protocol serial */ LCRT_Q_SPORT, LCRT_Q_SBAUD_RATE, LCRT_Q_SDATA_BITS, LCRT_Q_SPARITY, LCRT_Q_SSTOP_BITS, LCRT_Q_SFLOW_CONTROL, LCRT_Q_SHELL, /* for authentication password */ LCRT_Q_PTITLE, LCRT_Q_PPROMPT, LCRT_Q_PSTORE_PASSWORD, LCRT_Q_PCONFIRM_PASSWORD, LCRT_Q_PCANCEL, LCRT_Q_POK, LCRT_Q_PPW_UNMATCH, /* password can not match */ /** for shell */ LCRT_Q_SNOT_FOUND, LCRT_Q_NUMBER }; #define LCRT_Q_NAME \ "q_connect", \ "q_session_option", \ "q_lb_protocol", \ "q_lb_hostname", \ "q_lb_username", \ "q_lb_firewall", \ "q_lb_port", \ "q_lb_frame", \ "q_cb_passwd", \ "q_cb_publickey", \ "q_cb_keyboard", \ "q_cb_gssapi", \ "q_cb_rsa", \ "q_cb_tis", \ "q_bt_properties", \ "q_lb_default_command", \ "q_cb_show_qconnect", \ "q_cb_save_session", \ "q_cb_open_in_a_tab", \ "q_bt_connect", \ "q_bt_ok", \ "q_bt_cancel", \ "q_err_msg", \ "q_sport", \ "q_sbaud_rate", \ "q_sdata_bits", \ "q_sparity", \ "q_sstop_bits", \ "q_sflow_control", \ "q_shell", \ "q_ptitle", \ "q_pprompt", \ "q_pstore_password", \ "q_pconfirm_password", \ "q_pcancel", \ "q_pok", \ "q_ppw_unmatch", \ "q_snot_found", \ #define LCRT_Q_VALUE \ "Quick connect", \ "Session Option", \ " Protocol:", \ " Hostname:", \ " Username:", \ " Firewall:", \ " Port: ", \ "Authentication", \ "Password", \ "PublicKey", \ "KeyBoard Interactive", \ "GSSAPI", \ "RSA", \ "TIS", \ "Properties...", \ " Command:", \ "Show Quick connect on startup", \ "Save Session", \ "Open in a tab", \ "Connect", \ "OK", \ "Cancel", \ "There is no memory to create window" , \ /* for protocol serial */ \ " Port:", \ " Baud rate:", \ " Data bits:", \ " Parity:", \ " Stop bits:", \ "Flow control", \ " Shell:", \ /* for authentication password */ \ "Password Properties", \ "Change password", \ " Store password:", \ " Confirm password:", \ "Cancel", \ "OK", \ "Password can not match!", \ "Shell is not found!\n", #define LCRT_Q_SHORTCUT \ {0, 0} struct lcrtc_qconnect { struct lcrt_config db; const char *name[LCRT_Q_NUMBER]; char value[LCRT_Q_NUMBER][LCRT_CONFIG_VALUE_LEN]; int shortcut[LCRT_Q_NUMBER][2]; }; typedef enum { LCRT_QCONNECT_IN_TAB = 1, LCRT_QCONNECT_IN_WINDOW, LCRT_QCONNECT_SESSION_OPTION, }lcrt_qconnect_flag_t; struct lcrt_qconnect { struct lcrt_window *parent; lcrt_qconnect_flag_t flag; const char *uname; char folder[DIRNAME_LEN + 1]; GtkWidget *q_connect; GtkWidget *q_vbox_spec; GtkWidget *q_cb_protocol; lcrt_protocol_t nproto; GtkWidget *q_et_default_command; GtkWidget *q_cb_show_qconnect; GtkWidget *q_cb_save_session; GtkWidget *q_cb_open_in_a_tab; GtkWidget *q_bt_connect; GtkWidget *q_bt_cancel; struct lcrtc_qconnect config; const char *(*get_db)(struct lcrt_qconnect *lqconnect); const char *(*get_tb)(struct lcrt_qconnect *lqconnect); void *private_data; /**< the pointer to point to private data of each protocol */ const struct lcrt_protocol_callback *ops; /**< callbacks for each protocl */ }; int lcrt_create_qconnect( struct lcrt_window *parent, GtkWindow *window, lcrt_qconnect_flag_t flag, const char *uname, const char *folder); void lcrt_destroy_qconnect(struct lcrt_qconnect *lqconnect); #endif lcrt-1.1.2/src/shell.c0000664000175000017500000001666611750415427011471 00000000000000/* * Copyright (c) 2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 07 Aug 2011 05:54:28 PM CST * File Name : rlogin.c * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include #include "iterminal.h" #include "iqconnect.h" #include "debug.h" #include "user.h" #include "shell.h" struct lcrt_shell_if { GtkWidget *shell; }; static void lcrt_shell_receive(struct lcrt_terminal *lterminal) { lcrt_terminal_set_connected_status(lterminal); debug_print("reset = %f\n", gtk_adjustment_get_upper( gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(lterminal->scrolledwindow)))); } static int lcrt_shell_connect(struct lcrt_terminal *lterminal) { lcrt_protocol_t protocol; struct lcrtc_user *user; char *argv[5], *work_dir; char hostname[256], port[32]; char *dep_prog[] = {LCRT_DEP_PROG}; int dep = -1; char tmp[32]; if (lterminal == NULL) return EINVAL; user = lterminal->user; argv[0] = user->password; debug_print("shell = %s\n", argv[0]); if (access(argv[0], F_OK | X_OK) != 0) argv[0] = "sh"; argv[1] = NULL; work_dir = getenv("HOME"); if (lcrt_exec_check(protocol) != 0) { lcrt_message_info(lterminal->parent->parent->window, lterminal->parent->config.value[LCRT_TM_CONNECTION_PROG_NOT_FOUND], argv[0]); return -LCRTE_NOT_FOUND; } #if VTE_CHECK_VERSION(0, 26, 0) vte_terminal_fork_command_full( VTE_TERMINAL(lterminal->terminal), VTE_PTY_DEFAULT, work_dir, argv, NULL, 0, NULL, NULL, <erminal->child_pid, NULL); #else lterminal->child_pid = vte_terminal_fork_command(VTE_TERMINAL(lterminal->terminal), argv[0], argv, NULL , work_dir, FALSE, FALSE, FALSE); #endif debug_print("child_pid = %d\n", lterminal->child_pid); lcrt_statusbar_set_user(lterminal->parent->parent->w_statusbar, lterminal->user); debug_where(); } static void lcrt_shell_disconnect(struct lcrt_terminal *lterminal) { } static void lcrt_shell_show(struct lcrt_qconnect *lqconnect) { GtkWidget *vbox; GtkWidget *vbox_spec; GtkWidget *hbox2; GtkWidget *label_shell; GtkWidget *combobox_shell; GtkWidget *hbox3; struct lcrt_window *parent; int i; const char *shells[LCRT_SHELL_SUPPORT_NUMBER] = {LCRT_SHELL_SUPPORT}; static struct lcrt_shell_if slshell, *lshell = &slshell; memset(lshell, 0, sizeof(struct lcrt_shell_if)); lqconnect->private_data = lshell; parent = lqconnect->parent; vbox = GTK_DIALOG (lqconnect->q_connect)->vbox; vbox_spec = gtk_vbox_new (FALSE, 0); lqconnect->q_vbox_spec = vbox_spec; gtk_widget_show (vbox_spec); gtk_box_pack_start (GTK_BOX (vbox), vbox_spec, TRUE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (vbox), vbox_spec, 1); gtk_widget_set_size_request (vbox_spec, -1, 210); hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox2); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox2, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox2, -1, 25); label_shell = gtk_label_new (lqconnect->config.value[LCRT_Q_SHELL]); gtk_widget_show (label_shell); gtk_box_pack_start (GTK_BOX (hbox2), label_shell, FALSE, FALSE, 0); gtk_widget_set_size_request (label_shell, 90, 25); gtk_misc_set_alignment (GTK_MISC (label_shell), 0, 0.5); combobox_shell = gtk_combo_box_entry_new_text (); lshell->shell = combobox_shell; gtk_widget_show (combobox_shell); gtk_box_pack_start (GTK_BOX (hbox2), combobox_shell, FALSE, TRUE, 0); gtk_widget_set_size_request (combobox_shell, 220 , 25); for (i = 0; i < LCRT_SHELL_SUPPORT_NUMBER; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combobox_shell), shells[i]); } debug_where(); //gtk_entry_set_editable(GTK_ENTRY(GTK_BIN(combobox_shell)->child), FALSE); gtk_entry_set_max_length(GTK_ENTRY(GTK_BIN(combobox_shell)->child), PASSWORD_LEN); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (vbox_spec), hbox3, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox3, -1, 185); if (lqconnect->flag == LCRT_QCONNECT_SESSION_OPTION) { struct lcrtc_user *user; if ((user = lcrt_user_find_by_name(&parent->u_config, lqconnect->uname)) != NULL) { /* NOTE: there is very ugly, we use passwd field to store shell index */ gtk_combo_box_set_active(GTK_COMBO_BOX(lshell->shell), atoi(user->password)); } } else { gtk_widget_set_sensitive(lqconnect->q_bt_connect, TRUE); gtk_combo_box_set_active(GTK_COMBO_BOX(lshell->shell), 0); //default shell is 'bash' } } static struct lcrtc_user *lcrt_shell_create(struct lcrt_qconnect *lqconnect) { struct lcrt_window *lwindow = lqconnect->parent; struct lcrt_shell_if *lshell = (struct lcrt_shell_if *)lqconnect->private_data; const char *shell = gtk_combo_box_get_active_text(GTK_COMBO_BOX(lshell->shell)); struct lcrtc_user *user; lcrt_protocol_t protocol = lqconnect->nproto; char hostname[HOSTNAME_LEN]; char name[USERNAME_LEN]; char password[PASSWORD_LEN]; if (access(shell, F_OK | X_OK) != 0) { lcrt_message_error(lqconnect->parent->window, lqconnect->config.value[LCRT_Q_SNOT_FOUND]); return NULL; } debug_where(); strcpy(hostname, basename((char *)shell)); if (lqconnect->flag != LCRT_QCONNECT_SESSION_OPTION) { if ((user = lcrtc_user_create()) == NULL) { /* * FIXME: There is no more memory, how can * we handle this exception ? */ return NULL; } lcrt_user_find_unused_label(lwindow, hostname, name); lcrtc_user_set_data( user, name, hostname, protocol, NULL, shell, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), 0, TRUE, "", 0 ); lcrtc_user_ref(user); lcrt_user_add(&lwindow->u_config, user); lcrt_window_set_current_user(lwindow, user); if (lqconnect->flag == LCRT_QCONNECT_IN_TAB) { lcrt_create_terminal(lwindow->w_notebook); } } else { if ((user = lcrt_user_find_by_name(&lwindow->u_config, lqconnect->uname)) != NULL) { lcrtc_user_set_data( user, lqconnect->uname, hostname, protocol, NULL, shell, gtk_entry_get_text(GTK_ENTRY(lqconnect->q_et_default_command)), 0, TRUE, NULL, -1 ); } } return user; } struct lcrt_protocol_callback lcrt_protocol_shell_callbacks = { .protocol = LCRT_PROTOCOL_SHELL, .receive = lcrt_shell_receive, .connect = lcrt_shell_connect, .disconnect = lcrt_shell_disconnect, .show = lcrt_shell_show, .create = lcrt_shell_create, .changed = NULL, }; lcrt-1.1.2/src/telnet.h0000664000175000017500000000036611750112142011634 00000000000000#ifndef __LCRT_TELNET_H__ #define __LCRT_TELNET_H__ #include #include "protocol.h" extern struct lcrt_protocol_callback lcrt_protocol_telnet_callbacks; extern struct lcrt_protocol_callback lcrt_protocol_telnet_ssl_callbacks; #endif lcrt-1.1.2/src/iwindow.c0000664000175000017500000002070711750112142012015 00000000000000//#define __LCRT_DEBUG__ #include #include #include #include #include #include #include #include #include "iwindow.h" #include "cwindow.h" #include "imenubar.h" #include "itoolbar.h" #include "inotebook.h" #include "istatusbar.h" #include "istatus.h" #include "support.h" #include "mkconfig.h" #include "debug.h" #include "foperate.h" #include "user.h" #include "cview.h" #include "isettings.h" #include "iaccels.h" int lcrt_window_init_config(struct lcrt_window *lwindow); int lcrt_window_load_config(struct lcrt_window *lwindow); int lcrt_window_create_config(struct lcrt_window *lwindow); void lcrt_window_set_status(struct lcrt_window *lwindow); struct lcrt_window *lcrt_create_window(void) { debug_where(); GtkWidget *window; GtkWidget *vbox; GtkAccelGroup *accel; GdkPixbuf *pixpic; struct lcrt_window *lwindow; lwindow = (struct lcrt_window *)calloc(1, sizeof(struct lcrt_window)); assert(lwindow); lcrt_window_init_config(lwindow); lcrt_window_load_config(lwindow); lcrt_user_init_config(&lwindow->u_config); lcrt_user_load_config(&lwindow->u_config); accel = gtk_accel_group_new (); lwindow->w_accel = accel; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); lwindow->window = window; gtk_widget_set_size_request(window, 640, 480); gtk_window_set_default_size (GTK_WINDOW(window), lwindow->w_config.value[LCRT_W_WIDTH], lwindow->w_config.value[LCRT_W_HEIGHT]); gtk_window_set_title (GTK_WINDOW (window), "LCRT"); pixpic = create_pixbuf ("lcrt-logo.xpm", 16, 16); if (pixpic){ gtk_window_set_icon (GTK_WINDOW (window), pixpic); gdk_pixbuf_unref (pixpic); } lwindow->w_status = lcrt_create_status(lwindow); if ((lwindow->w_config.value[LCRT_W_START_X] | lwindow->w_config.value[LCRT_W_START_Y]) == 0) { gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); } else { gtk_window_move(GTK_WINDOW(window), lwindow->w_config.value[LCRT_W_START_X], lwindow->w_config.value[LCRT_W_START_Y]); } g_signal_connect ((gpointer) window, "delete_event", G_CALLBACK(lcrt_window_on_delete_event), lwindow); g_signal_connect ((gpointer) window, "configure_event", G_CALLBACK(lcrt_window_on_configure_event), lwindow); g_signal_connect ((gpointer) window, "window_state_event", G_CALLBACK(lcrt_window_on_state_event), lwindow); g_signal_connect ((gpointer) window, "key_press_event", G_CALLBACK(lcrt_window_on_key_press_event), lwindow); gtk_widget_show(window); lwindow->hide = FALSE; debug_where(); lwindow->w_settings = lcrt_create_settings(lwindow); debug_where(); assert(lwindow->w_settings); lwindow->w_accels = lcrt_create_accels(lwindow); assert(lwindow->w_accels); vbox = gtk_vbox_new (FALSE, 0); lwindow->w_vbox = vbox; gtk_widget_show (vbox); gtk_container_add (GTK_CONTAINER (window), vbox); debug_where(); lwindow->w_menubar = lcrt_create_menubar(lwindow); assert(lwindow->w_menubar); gtk_box_pack_start (GTK_BOX (vbox), lwindow->w_menubar->menubar, FALSE, FALSE, 0); lwindow->w_toolbar = lcrt_create_toolbar(lwindow); assert(lwindow->w_toolbar); gtk_box_pack_start (GTK_BOX (vbox), lwindow->w_toolbar->toolbar, FALSE, FALSE, 0); debug_where(); lwindow->w_notebook = lcrt_create_notebook(lwindow); assert(lwindow->w_notebook); gtk_box_pack_start (GTK_BOX (vbox), lwindow->w_notebook->notebook, TRUE, TRUE, 0); lwindow->w_statusbar = lcrt_create_statusbar(lwindow); assert(lwindow->w_statusbar); gtk_box_pack_start (GTK_BOX (vbox), lwindow->w_statusbar->statusbar, FALSE, FALSE, 0); gtk_window_add_accel_group (GTK_WINDOW (window), accel); lcrt_window_set_status(lwindow); return lwindow; } void lcrt_window_set_status(struct lcrt_window *lwindow) { struct lcrt_view *lview = lwindow->w_menubar->m_view; lcrt_view_on_toolbar_activate(NULL, lview); lcrt_view_on_status_bar_activate(NULL, lview); lcrt_view_on_always_on_top_activate(NULL, lview); } void lcrt_destroy_window(struct lcrt_window *lwindow) { debug_where(); if (lwindow == NULL) return; lcrt_destroy_notebook(lwindow->w_notebook); lwindow->w_notebook = NULL; lcrt_destroy_menubar(lwindow->w_menubar); lwindow->w_menubar = NULL; lcrt_destroy_toolbar(lwindow->w_toolbar); lwindow->w_toolbar = NULL; lcrt_destroy_statusbar(lwindow->w_statusbar); lwindow->w_statusbar = NULL; lcrt_destroy_status(lwindow->w_status); lwindow->w_status = NULL; lcrt_user_destroy_config(&lwindow->u_config); lcrt_destroy_accels(lwindow->w_accels); lcrt_destroy_settings(lwindow->w_settings); free(lwindow); } static const char *lcrt_window_get_db_name(struct lcrt_window *lwindow) { return lwindow->w_config.db.db_name; } static const char *lcrt_window_get_tb_name(struct lcrt_window *lwindow) { return lwindow->w_config.db.db_table; } int lcrt_window_init_config(struct lcrt_window *lwindow) { char db_name[256]; int i; static const char *name[LCRT_W_NUMBER] = {LCRT_W_NAME}; static int value[LCRT_W_NUMBER] = {LCRT_W_VALUE}; assert(lwindow); memset(&lwindow->w_config, 0, sizeof(struct lcrtc_window)); lwindow->full_screen = FALSE; snprintf(db_name, sizeof(db_name), "%s/%s/", lcrt_config_get_local_dir(), LCRT_WINDOW_CONFIG_DIR); lcrt_fmkdir(db_name); strcat(db_name, LCRT_WINDOW_DB); lcrt_config_init(&lwindow->w_config.db, db_name, LCRT_IWINDOW_TABLE); for (i = 0; i < LCRT_W_NUMBER; i++) { lwindow->w_config.name[i] = name[i]; lwindow->w_config.value[i] = value[i]; } lwindow->get_db = lcrt_window_get_db_name; lwindow->get_tb = lcrt_window_get_tb_name; return 0; } int lcrt_window_load_config(struct lcrt_window *lwindow) { int rv, i; assert(lwindow); debug_print("SQL:SELECT * FROM %s\n", lwindow->get_tb(lwindow)); rv = lwindow->w_config.db.select(&lwindow->w_config.db, "SELECT * FROM %s", lwindow->get_tb(lwindow)); if (rv == LCRTE_NO_TABLE) { lcrt_window_create_config(lwindow); return LCRTE_NO_CONFIG; } for (i = 0; i < LCRT_W_NUMBER && rv == LCRTE_OK; i++) { lwindow->w_config.value[i] = lwindow->w_config.db.get_int_col(&lwindow->w_config.db, 1); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%d]\n", lwindow->get_db(lwindow), lwindow->get_tb(lwindow), lwindow->w_config.name[i], lwindow->w_config.value[i]); rv = lwindow->w_config.db.get_row(&lwindow->w_config.db); } return rv; } int lcrt_window_save_config(struct lcrt_window *lwindow) { int i; lwindow->w_config.value[LCRT_W_WIDTH] = lwindow->window->allocation.width; lwindow->w_config.value[LCRT_W_HEIGHT] = lwindow->window->allocation.height; for (i = 0; i < LCRT_W_NUMBER; i++) { lwindow->w_config.db.exec(&lwindow->w_config.db, "UPDATE %s SET value=%d WHERE name='%s'", lwindow->get_tb(lwindow), lwindow->w_config.value[i], lwindow->w_config.name[i]); } lwindow->w_config.db.close(&lwindow->w_config.db); return 0; } int lcrt_window_create_config(struct lcrt_window *lwindow) { int i; assert(lwindow); lwindow->w_config.db.exec(&lwindow->w_config.db, "CREATE TABLE %s( \ name VARCHAR(64) PRIMARY KEY, \ value INTEGER)", lwindow->get_tb(lwindow)); debug_where(); for (i = 0; i < LCRT_W_NUMBER; i++) { lwindow->w_config.db.exec(&lwindow->w_config.db, "INSERT INTO %s VALUES('%s', %d)", lwindow->get_tb(lwindow), lwindow->w_config.name[i], lwindow->w_config.value[i]); } debug_where(); lwindow->w_config.db.close(&lwindow->w_config.db); return 0; } int lcrt_window_set_current_user(struct lcrt_window *lwindow, struct lcrtc_user *user) { if (lwindow && user) { lwindow->current_user = user; return LCRTE_OK; } return EINVAL; } lcrt-1.1.2/src/coptions.c0000664000175000017500000000351411750112142012170 00000000000000#include #include #include "iwindow.h" #include "cwindow.h" #include "imenubar.h" #include "message.h" #include "debug.h" #include "ioptions.h" #include "iqconnect.h" #include "isettings.h" #include "inotebook.h" void lcrt_options_on_session_options_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_options *loptions = (struct lcrt_options *)user_data; struct lcrt_settings *lsettings = loptions->parent->parent->w_settings; int rv; if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(lsettings->parent->w_notebook->notebook)) == 0) return; #if 0 lsettings->session = TRUE; gtk_notebook_set_current_page(GTK_NOTEBOOK(lsettings->notebook), 2); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(lsettings->notebook), FALSE); gtk_widget_show(lsettings->dialog_settings); #else lcrt_create_qconnect(loptions->parent->parent, NULL, LCRT_QCONNECT_SESSION_OPTION, loptions->parent->parent->current_user->name, NULL); #endif } void lcrt_options_on_global_options_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_options *loptions = (struct lcrt_options *)user_data; gtk_widget_show(loptions->parent->parent->w_settings->dialog_settings); } void lcrt_options_on_auto_save_options_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_options *loptions = (struct lcrt_options *)user_data; loptions->parent->parent->w_settings->auto_save_config = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)); } void lcrt_options_on_save_settings_now_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_options *loptions = (struct lcrt_options *)user_data; lcrt_settings_save_local_config(loptions->parent->parent->w_settings); } lcrt-1.1.2/src/support.h0000664000175000017500000000332511750112142012053 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, int width, int height); /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description(AtkAction * action, const gchar * action_name, const gchar * description); lcrt-1.1.2/src/iterminal.h0000664000175000017500000000567011750112142012330 00000000000000/** * @file iterminal.h *

License

* Copyright (c) 2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version $Id * @date Sat 15 Jan 2011 04:24:46 PM CST * * @brief define same structure for our terminal component */ #ifndef __LCRT_ITERMINAL_H__ #define __LCRT_ITERMINAL_H__ #include #include #include #include "inotebook.h" #include "list.h" #include "mkconfig.h" #include "user.h" #define lcrt_terminal_get_config(lterminal, config_id) lterminal->parent->config.value[config_id] #define LCRT_TERMINAL_EXIT_CMD "exit\n" #define LCRT_TERMINAL_YES_CMD "yes\n" #define LCRT_TERMINAL_SEND_CMD "\n" #define LCRT_TERMINAL_TEST_CMD "LCRT_TERMINAL_TEST_CMD" #define LCRT_TERMINAL_ECHO_CMD "echo "LCRT_TERMINAL_TEST_CMD"\n" #define LCRT_TERMINAL_TIMEOUT 5000 #define LCRT_PASSWORD_LEN 32 /** * The status of session */ typedef enum { LCRT_TERMINAL_DISCONNECT = 0x0, /**< disconnected from remote */ LCRT_TERMINAL_CONNECTED = 0x1, /**< connected with remote */ LCRT_TERMINAL_CONNECTING = 0x2, /**< connecting with remote */ LCRT_TERMINAL_WAIT_RETURN = 0x4, /**< send login information and wait responses */ LCRT_TERMINAL_CHILD_EXIT = 0x8, /**< the child process of terminal is exit, it occur when disconnect from remote */ LCRT_TERMINAL_SEND_USERNAME = 0x10, /**< had send the username */ LCRT_TERMINAL_SEND_PASSWORD = 0x20, /*< had send the password */ }lcrt_terminal_status_t; /** * terminal structure */ struct lcrt_terminal { struct lcrt_notebook *parent; /**< parent component */ pid_t child_pid; /**< child process id */ gboolean signal_connected; /**< the flag to mark whether the key press singal 'Return' is connected with current terminal */ struct lcrtc_user *user; /**< user information of current terminal*/ char lock_password[LCRT_PASSWORD_LEN + 1]; /**< the buffer to store the password of 'lock session'*/ gboolean locked; /**< the flag to mark whether we are locked */ GtkWidget *scrolledwindow; /**< the pointer of scroll bar */ GtkWidget *label; /**< the pointer of label which is used to show session name */ VteTerminal *terminal; /**< terminal component*/ struct list_head brother; /**< list the brother terminal */ lcrt_terminal_status_t connected; /**< the status of current session */ gboolean save_passwd; /**< the flag to mark whether user choose save password in login dialog */ void *private_data; /**< the pointer to point to private data of each protocol */ const struct lcrt_protocol_callback *ops; /**< callbacks for each protocl */ }; int lcrt_create_terminal(struct lcrt_notebook *parent); void lcrt_destroy_terminal(struct lcrt_terminal *lterminal); int lcrt_terminal_set_status(struct lcrt_terminal *lterminal, char *label_name, lcrt_terminal_status_t status); #endif lcrt-1.1.2/src/cqconnect.h0000664000175000017500000000155011750112142012312 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Sat 22 Jan 2011 06:34:06 PM CST * * * Description: */ #ifndef __LCRT_CQCONNECT_H__ #define __LCRT_CQCONNECT_H__ #include void lcrt_qconnect_on_button_connect_clicked(GtkButton *button, gpointer user_data); void lcrt_qconnect_on_button_cancel_clicked (GtkButton *button, gpointer user_data); void lcrt_qconnect_on_window_destroy(GtkObject *object, gpointer user_data); void lcrt_qconnect_on_entry_hostname_changed(GtkWidget *widget, gpointer user_data); void lcrt_qconnect_on_protocol_changed(GtkComboBox *widget, gpointer user_data); gboolean lcrt_qconnect_on_window_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data); #endif lcrt-1.1.2/src/chelp.h0000664000175000017500000000060611750112142011431 00000000000000#ifndef __LCRT_CHELP_H__ #define __LCRT_CHELP_H__ #include void lcrt_help_on_help_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_help_on_home_page_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_help_on_download_page_activate(GtkMenuItem *menuitem, gpointer user_data); void h_on_about_activate(GtkMenuItem *menuitem, gpointer user_data); #endif lcrt-1.1.2/src/cnotebook.c0000664000175000017500000001374011751624073012333 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 11:34:39 PM CST * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include "inotebook.h" #include "iterminal.h" #include "imenubar.h" #include "cterminal.h" #include "ifile.h" #include "user.h" #include "debug.h" #include "cedit.h" #include "itoolbar.h" #include "cstatusbar.h" void lcrt_notebook_on_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data) { debug_where(); struct lcrt_notebook *lnotebook = (struct lcrt_notebook *)user_data; struct lcrt_toolbar *ltoolbar = lnotebook->parent->w_toolbar; debug_where(); struct lcrt_terminal *lterminal; debug_where(); gboolean sensitive; GtkWidget *child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(lnotebook->notebook), page_num); debug_where(); list_for_each_entry(lterminal, &lnotebook->child, brother) { debug_print("switch = %p %p %p\n", child, lterminal->scrolledwindow, lterminal); if (child == lterminal->scrolledwindow) { lnotebook->current_terminal = lterminal; lnotebook->parent->current_user = lterminal->user; lcrt_statusbar_set_user(lnotebook->parent->w_statusbar, lterminal->user); sensitive = lterminal->connected == LCRT_TERMINAL_CONNECTED; gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_RECONNECT], !sensitive); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_DISCONNECT], sensitive); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_PASTE], sensitive); break; } } } void lcrt_notebook_on_page_removed(GtkNotebook *notebook, GtkWidget *child, guint page_num, gpointer user_data) { debug_where(); struct lcrt_notebook *lnotebook = (struct lcrt_notebook *)user_data; struct lcrt_toolbar *ltoolbar = lnotebook->parent->w_toolbar; if (gtk_notebook_get_n_pages(GTK_NOTEBOOK(lnotebook->notebook)) == 0) { debug_where(); lnotebook->current_terminal = NULL; gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_RECONNECT], FALSE); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_DISCONNECT], FALSE); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_COPY], FALSE); gtk_widget_set_sensitive(ltoolbar->toolitem[LCRT_B_PASTE], FALSE); } } int lcrt_notebook_clone_terminal(gpointer user_data) { struct lcrt_notebook *lnotebook = (struct lcrt_notebook *)user_data; struct lcrt_terminal *lterminal = lnotebook->current_terminal; if (lterminal == NULL || lterminal->connected != LCRT_TERMINAL_CONNECTED) return TRUE; int page_father, page_child; page_father = gtk_notebook_get_current_page(GTK_NOTEBOOK(lnotebook->notebook)); lcrt_window_set_current_user(lterminal->parent->parent, lterminal->user); lcrt_create_terminal(lterminal->parent); page_child = gtk_notebook_get_current_page(GTK_NOTEBOOK(lnotebook->notebook)); if (page_father + 1 != page_child) gtk_notebook_reorder_child(GTK_NOTEBOOK(lnotebook->notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(lnotebook->notebook), page_child), page_father + 1); return TRUE; } int lcrt_notebook_control_terminal(GtkAccelGroup *accelgroup, GObject *arg1, guint key, GdkModifierType key_mask, gpointer user_data) { struct lcrt_notebook *lnotebook = (struct lcrt_notebook *)user_data; GtkNotebook *notebook = GTK_NOTEBOOK(lnotebook->notebook); int current_page = gtk_notebook_get_current_page(notebook); int n_pages = gtk_notebook_get_n_pages(notebook); lcrt_nb_t nb; if (key_mask == GDK_MOD1_MASK && GDK_0 <= key && key <= GDK_9) { if (key - GDK_0 > n_pages || key - GDK_1 == current_page) return TRUE; gtk_notebook_set_current_page(notebook, key - GDK_1); } for (nb = 0; nb < LCRT_NB_NUMBER; nb++) { if (lnotebook->config.shortcut[nb][0] == key && lnotebook->config.shortcut[nb][1] == key_mask) break; } if (nb == LCRT_NB_NUMBER || (LCRT_NB_NONES <= nb && nb <= LCRT_NB_NONEE)) return TRUE; switch (nb) { case LCRT_NB_COPY: lcrt_edit_on_copy_activate(NULL, lnotebook->parent); break; case LCRT_NB_PASTE: lcrt_edit_on_paste_activate(NULL, lnotebook->parent); break; case LCRT_NB_CLONE: lcrt_notebook_clone_terminal(lnotebook); break; case LCRT_NB_CLOSE: if (lnotebook->current_terminal == NULL) return TRUE; lcrt_terminal_on_button_close_clicked(NULL, lnotebook->current_terminal); break; case LCRT_NB_MOVE_NEXT: if (current_page < n_pages - 1) { gtk_notebook_reorder_child(notebook, gtk_notebook_get_nth_page(notebook, current_page), current_page + 1); } break; case LCRT_NB_MOVE_PREV: if (current_page > 0) { gtk_notebook_reorder_child(notebook, gtk_notebook_get_nth_page(notebook, current_page), current_page - 1); } break; case LCRT_NB_SWITCH_NEXT: if (current_page == n_pages - 1) gtk_notebook_set_current_page(notebook, 0); else gtk_notebook_next_page(notebook); break; case LCRT_NB_SWITCH_PREV: if (current_page == 0) gtk_notebook_set_current_page(notebook, n_pages - 1); else gtk_notebook_prev_page(notebook); break; default: break; } return TRUE; } lcrt-1.1.2/src/lcrt.c0000664000175000017500000001257111750112142011301 00000000000000/** * @mainpage Introduction * *

What is lcrt?

* * lcrt is a Linux remote login tool. Just like ssh or telnet, but it has a * GUI and can manage many connections. User can use it to save connection * information such as hostname, username and password(optionally), and * auto login next time. lcrt also can clone a connected session, so user * can open many connections quickly. * *

Why choose lcrt?

* * As we known, ssh is a popular login tool to connect to remote server, but * in Linux system, it only have a command line programe.Every time when you * connect to remote server, you should enter user name and password. If you * are a system administrator and manage hundreds of server, or you are a * software engineer in embedded field, you may need open several connection * to watch different state of your programe, this time you should enter * user name and password again and again,this will be very troublesome.\n * So lcrt can help you to manage user information(such as user name and * password), auto login at next time. And, lcrt can clone a connected * session so you can open many connections as you can. * *

Where does lcrt come from?

* * About December 2010, i visit to SLUG(shlug@googlegroups.com), In one * thread, someone want to find a useful graphic ssh login tool in Linux, * like SecureCRT(http://www.vandyke.com/products/securecrt/), the other * one recommend he to use PAC(http://sourceforge.net/projects/pacmanager/), * so i try to use PAC beacuse i should login to several board to debug my * programe in job, and i should reboot frequently. But i also heop it can * provide a interface like gnome-terminal and it's shortkey. So i decided * to develop a graphic login tool like SecureCRT, i named lcrt. * *

What's in a name?

* * The name lcrt means Linux SecureCRT, i want it can be help the * people want to use SecureCRT in linux. * *

Features

* - auto save connection information so that can auto login remote server * next time. * - easy to clone a connected session. * - support ssh, telnet, serial, the others(rlogin, raw and etc) will be * support in future. * - open many connections in tables and use useful shortkey to switch * from one to another. */ /** * @file lcrt.c *

License

* Copyright (c) 2011 ~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * @author Niu Tao * @version $Id$ * @date Sat 15 Jan 2011 04:24:46 PM CST * * @brief The entry of lcrt */ #include #include #include #include #include #include #include "iwindow.h" #include "iterminal.h" #include "support.h" #include "mkconfig.h" #include "debug.h" #include "user.h" #include "cabout.h" void usage() { fprintf(stderr, "usage: lcrt [-q connect_name] [-c connect_name]\n" " -q quick connect in commandline(don't start GUI)\n" " -c connect in tab\n" "example:\n" " lcrt -q \"localhost (1)\"\n" " lcrt -c \"localhost (1)\"\n"); exit(1); } int main(int argc, char *argv[]) { debug_where(); struct lcrt_window *lwindow; int opt; char qconnect_name[256], connect_name[256]; int has_qconnect, has_connect; struct lcrtc_user *user; struct lcrt_user user_config; has_qconnect = has_connect = 0; #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); lcrt_config_load(); signal(SIGCHLD, SIG_IGN); add_pixmap_directory (LCRT_INSTALL_DIR"/pixmaps"); add_pixmap_directory ("./pixmaps"); add_pixmap_directory ("../pixmaps"); while ((opt = getopt(argc, argv, "cqh:")) > 0) { switch (opt) { case 'q': has_qconnect = 1; if (argv[optind] == NULL) usage(); strcpy(qconnect_name, argv[optind]); break; case 'c': has_connect = 1; if (argv[optind] == NULL) usage(); strcpy(connect_name, argv[optind]); break; case 'h': usage(); break; } } if ((has_qconnect)) { lcrt_user_init_config(&user_config); lcrt_user_load_config(&user_config); user = lcrt_user_find_by_name(&user_config, qconnect_name); if (user == NULL) { fprintf(stdout, "Not found user '%s' in database\n", qconnect_name); lcrt_user_destroy_config(&user_config); exit(1); } fprintf(stderr, "current version not support\n"); lcrt_user_destroy_config(&user_config); return 0; } lwindow = lcrt_create_window(); strcpy(lwindow->programe_name, argv[0]); if (has_connect) { if ((user = lcrt_user_find_by_name(&lwindow->u_config, connect_name)) != NULL) { lcrt_window_set_current_user(lwindow, user); lcrt_create_terminal(lwindow->w_notebook); } else { fprintf(stdout, "Not found user '%s' in database\n", connect_name); } } gtk_about_dialog_set_url_hook(lcrt_about_url_hook, NULL, NULL); gtk_about_dialog_set_email_hook(lcrt_about_email_hook, NULL, NULL); gtk_main (); return 0; } lcrt-1.1.2/src/ctoolbar.c0000664000175000017500000000607311750112142012142 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author: Niu Tao * Created Time: Mon 17 Jan 2011 10:17:47 PM CST * File Name: ctoolbar.c * * Description: */ #include #include "itoolbar.h" #include "iwindow.h" #include "cwindow.h" #include "inotebook.h" #include "iterminal.h" #include "iqconnect.h" #include "iconnect.h" #include "cfile.h" #include "user.h" #include "itoolbar.h" #include "cedit.h" void lcrt_toolbar_on_connect_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; lcrt_file_on_connect_activate(NULL, ltoolbar->parent->w_menubar->m_file); } void lcrt_toolbar_on_quick_connect_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; lcrt_create_qconnect(ltoolbar->parent, NULL, LCRT_QCONNECT_IN_TAB, NULL, NULL); } void lcrt_toolbar_on_connect_in_tab_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; lcrt_create_connect(ltoolbar->parent, TRUE); } void lcrt_toolbar_on_reconnect_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; lcrt_file_on_reconnect_activate(NULL, ltoolbar->parent->w_menubar->m_file); } void lcrt_toolbar_on_disconnect_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; lcrt_file_on_disconnect_activate(NULL, ltoolbar->parent->w_menubar->m_file); } void lcrt_toolbar_on_copy_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; lcrt_edit_on_copy_activate(NULL, ltoolbar->parent); } void lcrt_toolbar_on_paste_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; lcrt_edit_on_paste_activate(NULL, ltoolbar->parent); } void lcrt_toolbar_on_terminal_activate(GtkWidget *toolitem, gpointer user_data) { struct lcrt_toolbar *ltoolbar = (struct lcrt_toolbar *)user_data; struct lcrt_window *lwindow = ltoolbar->parent; struct lcrtc_user *user; const char *name = "shell"; if ((user = lcrt_user_find_by_name(&lwindow->u_config, "shell")) == NULL) { user = lcrtc_user_create(); if (user == NULL) return; lcrtc_user_set_data( user, name, name, LCRT_PROTOCOL_SHELL, NULL, "/bin/bash", NULL, 0, TRUE, NULL, 0); lcrtc_user_ref(user); lcrt_user_add(&lwindow->u_config, user); } lcrt_window_set_current_user(lwindow, user); lcrt_create_terminal(lwindow->w_notebook); if (lcrt_window_get_auto_save(lwindow)) { lcrt_user_save_one(&lwindow->u_config, user); } } lcrt-1.1.2/src/cpopup.c0000664000175000017500000000414111750112142011635 00000000000000#include #include #include "iterminal.h" #include "cterminal.h" #include "inotebook.h" #include "cnotebook.h" #include "iwindow.h" #include "imenubar.h" #include "ipopup.h" #include "ifile.h" #include "cfile.h" #include "debug.h" #include "ilock.h" #include "irename.h" #include "coptions.h" void lcrt_popup_on_rename_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; lcrt_create_dialog_rename(lwindow, NULL, NULL, TRUE); } void lcrt_popup_on_reconnect_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; lcrt_file_on_reconnect_activate(NULL, lwindow->w_menubar->m_file); } void lcrt_popup_on_disconnect_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; lcrt_file_on_disconnect_activate(NULL, lwindow->w_menubar->m_file); } void lcrt_popup_on_close_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; if (lwindow->w_notebook->current_terminal != NULL) lcrt_terminal_on_button_close_clicked(NULL, lwindow->w_notebook->current_terminal); } void lcrt_popup_on_lock_session_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; lcrt_create_dialog_lock(lwindow->w_notebook->current_terminal); } void lcrt_popup_on_clone_session_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; lcrt_file_on_clone_session_activate(NULL, lwindow->w_menubar->m_file); } void lcrt_popup_on_session_options_activate(GtkMenuItem *menuitem, gpointer user_data) { struct lcrt_window *lwindow = (struct lcrt_window *)user_data; lcrt_options_on_session_options_activate(NULL, lwindow->w_menubar->m_options); } void lcrt_popup_on_deactivate(GtkObject *object, gpointer user_data) { struct lcrt_popup *lpopup = (struct lcrt_popup *)user_data; debug_where(); free(lpopup); } lcrt-1.1.2/src/ifile.c0000664000175000017500000003502111750112142011420 00000000000000#include #include #include #include #include #include #include #include #include "iwindow.h" #include "imenubar.h" #include "ifile.h" #include "debug.h" #include "mkconfig.h" #include "cfile.h" #include "support.h" #include "iaccels.h" int lcrt_file_init_config(struct lcrt_file *lfile); int lcrt_file_load_config(struct lcrt_file *lfile); int lcrt_file_create_config(struct lcrt_file *lfile); struct lcrt_file *lcrt_file_create_menuitem(struct lcrt_menubar *parent) { debug_where(); struct lcrt_file *lfile; GtkWidget *f_menuitem; GtkWidget *f_menuitem_menu; GtkWidget *f_connect; GtkWidget *image228; GtkWidget *f_quick_connect; GtkWidget *image229; GtkWidget *f_connect_in_tab; GtkWidget *image230; GtkWidget *f_separator_1; GtkWidget *f_reconnect; GtkWidget *image231; GtkWidget *f_reconnect_all; GtkWidget *image232; GtkWidget *f_disconnect; GtkWidget *image233; GtkWidget *f_disconnect_all; GtkWidget *image234; GtkWidget *f_separator_2; GtkWidget *f_clone_session; GtkWidget *f_separator_3; GtkWidget *f_lock_session; GtkWidget *f_separator_4; GtkWidget *f_print; GtkWidget *f_print_setup; GtkWidget *f_separator_5; GtkWidget *f_log_session; GtkWidget *f_separator_6; GtkWidget *f_recent_session; GtkWidget *f_separator_7; GtkWidget *f_exit; GtkAccelGroup *accel_group = parent->parent->w_accel; lfile = (struct lcrt_file *)calloc(1, sizeof(struct lcrt_file)); char *image[LCRT_F_NUMBER] = {LCRT_F_ICONS}; assert(lfile); lfile->parent = parent; lcrt_file_init_config(lfile); lcrt_file_load_config(lfile); f_menuitem = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_MENUITEM]); lfile->f_menuitem = f_menuitem; gtk_widget_show(f_menuitem); g_signal_connect ((gpointer) f_menuitem, "activate", G_CALLBACK (lcrt_file_on_menuitem_activate), parent->parent); f_menuitem_menu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(f_menuitem), f_menuitem_menu); f_connect = gtk_image_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_CONNECT]); lfile->f_connect = f_connect; gtk_widget_show(f_connect); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_connect); gtk_widget_add_accelerator(f_connect, "activate", accel_group, lfile->config.shortcut[LCRT_F_CONNECT][0], (GdkModifierType) lfile->config.shortcut[LCRT_F_CONNECT][1], GTK_ACCEL_VISIBLE); g_signal_connect((gpointer) f_connect, "activate", G_CALLBACK(lcrt_file_on_connect_activate), lfile); image228 = create_pixmap (NULL, image[LCRT_F_CONNECT]); //image228 = gtk_image_new_from_stock("gtk-connect", GTK_ICON_SIZE_MENU); gtk_widget_show(image228); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(f_connect), image228); f_quick_connect = gtk_image_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_QUICK_CONNECT]); lfile->f_quick_connect = f_quick_connect; gtk_widget_show(f_quick_connect); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_quick_connect); gtk_widget_add_accelerator(f_quick_connect, "activate", accel_group, lfile->config.shortcut[LCRT_F_QUICK_CONNECT][0], (GdkModifierType) lfile->config.shortcut[LCRT_F_QUICK_CONNECT][1], GTK_ACCEL_VISIBLE); g_signal_connect((gpointer) f_quick_connect, "activate", G_CALLBACK(lcrt_file_on_quick_connect_activate), lfile); image229 = create_pixmap(NULL, image[LCRT_F_QUICK_CONNECT]); //image229 = gtk_image_new_from_stock("gtk-disconnect", GTK_ICON_SIZE_MENU); gtk_widget_show(image229); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(f_quick_connect), image229); f_connect_in_tab = gtk_image_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_CONNECT_IN_TAB]); lfile->f_connect_in_tab = f_connect_in_tab; gtk_widget_show(f_connect_in_tab); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_connect_in_tab); gtk_widget_add_accelerator(f_connect_in_tab, "activate", accel_group, lfile->config.shortcut[LCRT_F_CONNECT_IN_TAB][0], (GdkModifierType) lfile->config.shortcut[LCRT_F_CONNECT_IN_TAB][1], GTK_ACCEL_VISIBLE); g_signal_connect((gpointer) f_connect_in_tab, "activate", G_CALLBACK(lcrt_file_on_connect_in_tab_activate), lfile); image230 = create_pixmap(NULL, image[LCRT_F_CONNECT_IN_TAB]); //image230 = gtk_image_new_from_stock("gtk-missing-image", GTK_ICON_SIZE_MENU); gtk_widget_show(image230); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(f_connect_in_tab), image230); f_separator_1 = gtk_separator_menu_item_new(); gtk_widget_show(f_separator_1); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_separator_1); gtk_widget_set_sensitive(f_separator_1, FALSE); f_reconnect = gtk_image_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_RECONNECT]); lfile->f_reconnect = f_reconnect; gtk_widget_show(f_reconnect); gtk_widget_set_sensitive(f_reconnect, FALSE); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_reconnect); gtk_widget_add_accelerator(f_reconnect, "activate", accel_group, lfile->config.shortcut[LCRT_F_RECONNECT][0], (GdkModifierType) lfile->config.shortcut[LCRT_F_RECONNECT][1], GTK_ACCEL_VISIBLE); g_signal_connect((gpointer) f_reconnect, "activate", G_CALLBACK(lcrt_file_on_reconnect_activate), lfile); image231 = create_pixmap(NULL, "lcrt-reconnect.png"); gtk_widget_show(image231); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(f_reconnect), image231); f_reconnect_all = gtk_image_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_RECONNECT_ALL]); lfile->f_reconnect_all = f_reconnect_all; gtk_widget_show(f_reconnect_all); gtk_widget_set_sensitive(f_reconnect_all, FALSE); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_reconnect_all); g_signal_connect((gpointer) f_reconnect_all, "activate", G_CALLBACK(lcrt_file_on_reconnect_all_activate), lfile); image232 = gtk_image_new_from_stock("gtk-refresh", GTK_ICON_SIZE_MENU); gtk_widget_show(image232); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(f_reconnect_all), image232); f_disconnect = gtk_image_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_DISCONNECT]); lfile->f_disconnect = f_disconnect; gtk_widget_show(f_disconnect); gtk_widget_set_sensitive(f_disconnect, FALSE); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_disconnect); g_signal_connect((gpointer) f_disconnect, "activate", G_CALLBACK(lcrt_file_on_disconnect_activate), lfile); image233 = create_pixmap(NULL, "lcrt-disconnect.png"); gtk_widget_show(image233); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(f_disconnect), image233); f_disconnect_all = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_DISCONNECT_ALL]); lfile->f_disconnect_all = f_disconnect_all; gtk_widget_show(f_disconnect_all); gtk_widget_set_sensitive(f_disconnect_all, FALSE); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_disconnect_all); g_signal_connect((gpointer) f_disconnect_all, "activate", G_CALLBACK(lcrt_file_on_disconnect_all_activate), lfile); f_separator_2 = gtk_separator_menu_item_new(); gtk_widget_show(f_separator_2); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_separator_2); gtk_widget_set_sensitive(f_separator_2, FALSE); f_clone_session = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_CLONE_SESSION]); lfile->f_clone_session = f_clone_session; gtk_widget_show(f_clone_session); gtk_widget_set_sensitive(f_clone_session, FALSE); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_clone_session); g_signal_connect((gpointer) f_clone_session, "activate", G_CALLBACK(lcrt_file_on_clone_session_activate), lfile); f_separator_3 = gtk_separator_menu_item_new(); gtk_widget_show(f_separator_3); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_separator_3); gtk_widget_set_sensitive(f_separator_3, FALSE); f_lock_session = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_LOCK_SESSION]); lfile->f_lock_session = f_lock_session; gtk_widget_show(f_lock_session); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_lock_session); g_signal_connect((gpointer) f_lock_session, "activate", G_CALLBACK(lcrt_file_on_lock_session_activate), lfile); f_separator_4 = gtk_separator_menu_item_new(); gtk_widget_show(f_separator_4); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_separator_4); gtk_widget_set_sensitive(f_separator_4, FALSE); f_print = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_PRINT]); lfile->f_print = f_print; gtk_widget_show(f_print); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_print); g_signal_connect((gpointer) f_print, "activate", G_CALLBACK(lcrt_file_on_print_activate), lfile); f_print_setup = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_PRINT_SETUP]); lfile->f_print_setup = f_print_setup; gtk_widget_show(f_print_setup); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_print_setup); g_signal_connect((gpointer) f_print_setup, "activate", G_CALLBACK(lcrt_file_on_print_setup_activate), lfile); f_separator_5 = gtk_separator_menu_item_new(); gtk_widget_show(f_separator_5); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_separator_5); gtk_widget_set_sensitive(f_separator_5, FALSE); f_log_session = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_LOG_SESSION]); lfile->f_log_session = f_log_session; gtk_widget_show(f_log_session); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_log_session); g_signal_connect((gpointer) f_log_session, "activate", G_CALLBACK(lcrt_file_on_log_session_activate), lfile); f_separator_6 = gtk_separator_menu_item_new(); gtk_widget_show(f_separator_6); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_separator_6); gtk_widget_set_sensitive(f_separator_6, FALSE); f_recent_session = gtk_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_RECENT_SESSION]); lfile->f_recent_session = f_recent_session; gtk_widget_show(f_recent_session); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_recent_session); g_signal_connect((gpointer) f_recent_session, "activate", G_CALLBACK(lcrt_file_on_recent_session_activate), lfile); f_separator_7 = gtk_separator_menu_item_new(); gtk_widget_show(f_separator_7); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_separator_7); gtk_widget_set_sensitive(f_separator_7, FALSE); f_exit = gtk_image_menu_item_new_with_mnemonic(lfile->config.value[LCRT_F_EXIT]); lfile->f_exit = f_exit; gtk_widget_show(f_exit); gtk_container_add(GTK_CONTAINER(f_menuitem_menu), f_exit); g_signal_connect((gpointer) f_exit, "activate", G_CALLBACK(lcrt_file_on_exit_activate), lfile); image234 = gtk_image_new_from_stock("gtk-quit", GTK_ICON_SIZE_MENU); gtk_widget_show(image234); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(f_exit), image234); return lfile; } void lcrt_file_destroy_menuitem(struct lcrt_file *lfile) { gtk_widget_destroy(lfile->f_menuitem); if (lfile) free(lfile); } static const char *lcrt_file_get_db_name(struct lcrt_file *lfile) { return lfile == NULL ? NULL : lfile->config.db.db_name; } static const char *lcrt_file_get_tb_name(struct lcrt_file *lfile) { return lfile == NULL ? NULL : lfile->config.db.db_table; } int lcrt_file_init_config(struct lcrt_file *lfile) { char db_name[256]; int i; static char *name[LCRT_F_NUMBER] = {LCRT_F_NAME}; static char *value[LCRT_F_NUMBER] = {LCRT_F_VALUE}; assert(lfile); memset(&lfile->config, 0, sizeof(struct lcrtc_file)); snprintf(db_name, sizeof(db_name), "%s", lcrt_config_get_language()); lcrt_config_init(&lfile->config.db, db_name, LCRT_IFILE_TABLE); for (i = 0; i < LCRT_F_NUMBER; i++) { lfile->config.name[i] = name[i]; strncpy(lfile->config.value[i], value[i], sizeof(lfile->config.value[i])); } lfile->get_db = lcrt_file_get_db_name; lfile->get_tb = lcrt_file_get_tb_name; return 0; } int lcrt_file_load_config(struct lcrt_file *lfile) { int rv, i; struct lcrt_accels *laccels = lfile->parent->parent->w_accels; assert(lfile); memcpy(lfile->config.shortcut[LCRT_F_CONNECT], laccels->config.key[LCRT_KB_F_CONNECT], sizeof(int) * 2); memcpy(lfile->config.shortcut[LCRT_F_QUICK_CONNECT], laccels->config.key[LCRT_KB_F_QUICK_CONNECT], sizeof(int) * 2); memcpy(lfile->config.shortcut[LCRT_F_CONNECT_IN_TAB], laccels->config.key[LCRT_KB_F_CONNECT_IN_TAB], sizeof(int) * 2); memcpy(lfile->config.shortcut[LCRT_F_RECONNECT], laccels->config.key[LCRT_KB_F_RECONNECT], sizeof(int) * 2); rv = lfile->config.db.select(&lfile->config.db, "SELECT * FROM %s", lfile->get_tb(lfile)); debug_where(); if (rv == LCRTE_NO_TABLE) { return LCRTE_NO_CONFIG; } debug_where(); for (i = 0; i < LCRT_F_NUMBER && rv == LCRTE_OK; i++) { strncpy(lfile->config.value[i], lfile->config.db.get_text_col(&lfile->config.db, 1), sizeof(lfile->config.value[i])); rv = lfile->config.db.get_row(&lfile->config.db); debug_print("[%-10s|%-10s]: name = [%-20s] value = [%-20s] shortcut = {%-5d, %d}\n", basename((char *)lfile->get_db(lfile)), lfile->get_tb(lfile), lfile->config.name[i], lfile->config.value[i], lfile->config.shortcut[i][0], lfile->config.shortcut[i][1]); } return rv; } lcrt-1.1.2/src/cpopup.h0000664000175000017500000000132711750112142011645 00000000000000#ifndef LCRT_CPOPUP_H__ #define LCRT_CPOPUP_H__ #include void lcrt_popup_on_rename_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_popup_on_reconnect_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_popup_on_disconnect_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_popup_on_close_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_popup_on_lock_session_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_popup_on_clone_session_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_popup_on_session_options_activate(GtkMenuItem *menuitem, gpointer user_data); void lcrt_popup_on_deactivate(GtkObject *object, gpointer user_data); #endif lcrt-1.1.2/src/iabout.c0000664000175000017500000000457711750112142011627 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Wed 02 Mar 2011 08:06:54 PM CST * File Name : /home/niutao/lcrt/lcrt/iabout.c * * Description: */ #include #include "support.h" #include "ihelp.h" #include "imenubar.h" #include "iwindow.h" #ifdef HAVE_CONFIG_H #include "config.h" #else #error "missing config.h" #endif int lcrt_abount_dialog(struct lcrt_help *parent) { const char *copyright = "Copyright © 2010 NiuTao"; const char *licence = "lcrt is free software; you can redistribute it and/or \n" "modify it under the terms of the GNU General Public \n" "License as published by the Free Software Foundation; \n" "either version 2 of the License, or(at your option) any\n" "later version.\n\n" "lcrt is distributed in the hope that it will be useful, \n" "but WITHOUT ANY WARRANTY; without even the implied \n" "warranty of MERCHANTABILITY or FITNESS FOR A \n" "PARTICULAR PURPOSE. See the GNU General Public \n" "License for more details.\n\n" "You should have received a copy of the GNU General \n" "Public License along with lcrt; if not, write to the \n" "Free Software Foundation, Inc., 51 Franklin St, Fifth \n" "Floor, Boston, MA 02110-1301 USA.\n"; const char *authors[] = { "NiuTao ", "Asias He ", NULL }; const char *documenters[] = { "NiuTao ", NULL }; const char *website = "http://code.google.com/p/lcrt"; gtk_show_about_dialog(GTK_WINDOW(parent->parent->parent->window), "copyright", copyright, "comments", "Linux Remote Login Tool", "version", PACKAGE_VERSION, "authors", authors, "documenters", documenters, "license", licence, "wrap-license", TRUE, "translator-credits", "translator-credits", "website", website, "logo", create_pixbuf("lcrt-logo.xpm", 48, 48), NULL); return 0; } lcrt-1.1.2/NEWS0000664000175000017500000000164211752202627010110 000000000000001.1.2 ===== * support to create a folder to management sessions in connect dialog. * support to find key words in terminal. * Can modify the port of telnet protocol. 1.0.1 ===== * Thanks for Manfred Müller to add language support of German. * Thanks for Asias He to help me to Change build system to AUTOTOOL. * Add configure 'F10' key in dialog "options". * Fix the bug can't popup login dialog when create a new session(the host not in known_hosts of ssh). 1.0.0 ===== * Complete all main function. 0.0.9 ===== * Complete document of help. * Support settings keyboard shortcut. 0.0.6 ===== * Add lock session. * Add terminal icon on toolbar. * Add Rename session. * Fix the bug can't popup the dialog of password when connect to a new host. 0.0.4 ===== * Fix segmention default when close an unconnect tab. * Add popup menuitem when lick right button. lcrt-1.1.2/ChangeLog0000664000175000017500000006362711752203002011162 00000000000000commit f78b957c13ba89f695da9162aa4be31a4e056694 Author: NiuTao Date: Tue May 8 19:39:38 2012 +0800 Release 1.1.2 ChangeLog | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NEWS | 6 +++ 2 files changed, 152 insertions(+), 0 deletions(-) commit d39daf67fbd827461bf70e2506f7dd4534019c28 Author: Niu Tao Date: Sat May 5 23:50:45 2012 +0800 bugfix: can not save shortcut src/cfind.c | 2 ++ src/cnotebook.c | 3 +-- src/iaccels.c | 33 ++++++++++++++++++++++++++++----- src/inotebook.c | 2 +- src/inotebook.h | 3 ++- src/mkconfig.c | 12 ++++++++++++ src/mkconfig.h | 1 + src/user.c | 2 +- 8 files changed, 48 insertions(+), 10 deletions(-) commit d129f2046327b0d29d2a4442a9162bab1b3fdb46 Author: NiuTao Date: Fri May 4 21:59:07 2012 +0800 test: add shortcut for find language/de_DE.c | 1 + language/en_US.c | 1 + language/zh_CN.c | 1 + src/cfind.c | 12 +++++++++--- src/iaccels.c | 9 +++++++-- src/iaccels.h | 4 ++++ src/iedit.c | 7 +++++++ 7 files changed, 30 insertions(+), 5 deletions(-) commit 2ec452f8ff25fbf180c6b69dad6ccadd13877217 Author: Niu Tao Date: Fri May 4 00:31:38 2012 +0800 resize the dialog quick connect src/iconnect.c | 1 + src/iqconnect.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) commit 868764cc5440c6b82edd177a9eebdc569d4a9e47 Author: NiuTao Date: Thu May 3 20:54:19 2012 +0800 bugfix:when a session in top directory, you can not modify it's options src/cconnect.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) commit 16e2381c0adb6f321b03d08bad3d87ddbe928678 Author: NiuTao Date: Thu May 3 14:11:22 2012 +0800 we can find string in terminal src/cfind.c | 33 +++++++++++++++++++++++++++++---- src/clock.c | 2 +- src/crename.c | 2 +- src/cstatusbar.c | 5 +++-- src/foperate.c | 4 +++- src/foperate.h | 3 ++- src/ifind.h | 2 ++ src/shell.c | 15 ++++++++++++++- src/ssh.c | 20 +++++++++++++++++++- src/telnet.c | 22 ++++++++++++++++++++-- src/user.c | 4 +++- 11 files changed, 97 insertions(+), 15 deletions(-) commit 8531fa0fd4467ecc8e3ec5abaf07531012de0152 Author: Niu Tao Date: Thu May 3 00:27:54 2012 +0800 add the missing database table ifind language/de_DE.c | 16 ++++++++++ language/en_US.c | 16 ++++++++++ language/language.c | 1 + language/language.h | 2 +- language/zh_CN.c | 18 ++++++++++- src/cconnect.c | 21 +++++++++++-- src/cedit.c | 6 ++- src/cfind.c | 61 ++++++++++++++++++++++++++++++++----- src/cfind.h | 3 +- src/ifind.c | 83 ++++++++++++++++++++++++++++++++++++--------------- src/ifind.h | 28 ++++++++++------- 11 files changed, 203 insertions(+), 52 deletions(-) commit 1f5ebf47549a86e0e29324e7facc66d524a6aa8e Author: NiuTao Date: Wed May 2 21:03:26 2012 +0800 tmp src/cconnect.c | 23 +++++++++++++++-------- src/cconnect.h | 3 +++ src/iconnect.c | 3 ++- src/iconnect.h | 2 ++ src/ifind.c | 26 +++++++++++++++++++++++--- src/ifind.h | 9 +++++++-- 6 files changed, 52 insertions(+), 14 deletions(-) commit 1225d89e58a04e93ca908618d8d545d9a3f759ee Author: NiuTao Date: Wed May 2 10:04:45 2012 +0800 install lcrt-mkdir.png Makefile.in | 2 + aclocal.m4 | 62 +++--- configure | 597 +++++++++++++++++++++++++++----------------------- gnome/Makefile.in | 2 + help/Makefile.in | 2 + help/man/Makefile.in | 2 + language/Makefile.in | 2 + pixmaps/Makefile.am | 29 ++-- pixmaps/Makefile.in | 31 ++-- src/Makefile.in | 2 + 10 files changed, 396 insertions(+), 335 deletions(-) commit c6cf29aa4bc9f8738f271b269f9995dcad5e6acc Author: Niu Tao Date: Tue May 1 16:42:10 2012 +0800 1.double click a folder in connect dialog will be expand or collapse this folder. 2.implement to change the value of scrollline. README | 3 +- src/cconnect.c | 37 ++++++++++++++++++-------- src/csettings.c | 14 ++++++++-- src/foperate.c | 41 ++++++++++++++++++++++++++-- src/foperate.h | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/serial.c | 54 +++++++++++++++++++------------------- 6 files changed, 181 insertions(+), 46 deletions(-) commit b07702f42c0177aaca353654b35b8bc951ed8171 Author: Niu Tao Date: Tue May 1 00:54:03 2012 +0800 modify README ChangeLog | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README | 28 +++++++++++++++---- 2 files changed, 111 insertions(+), 6 deletions(-) commit fd4e2441e78bde8a51e15526f5e905c9a641b527 Author: Niu Tao Date: Tue May 1 00:34:05 2012 +0800 change file operation functions with prefix lcrt_f .gitignore | 3 ++ src/cconnect.c | 2 +- src/chelp.c | 2 +- src/foperate.c | 57 ++++++++++++++++++++++++++++++++++++++++++------------ src/foperate.h | 8 +++--- src/iaccels.c | 2 +- src/isettings.c | 2 +- src/iwindow.c | 2 +- src/mkconfig.c | 6 ++-- src/protocol.c | 53 +++++++++++++++++++++++++++++++------------------- src/user.c | 2 +- 11 files changed, 93 insertions(+), 46 deletions(-) commit 6b4188f04e06d28bcfc505c27981dfb810268dc7 Author: Niu Tao Date: Mon Apr 30 19:30:19 2012 +0800 1.update version to 1.1.2 2.support to create session folder configure | 20 ++-- configure.ac | 2 +- language/de_DE.c | 16 +++ language/en_US.c | 16 +++ language/language.h | 2 +- language/zh_CN.c | 16 +++ pixmaps/lcrt-mkdir.png | Bin 0 -> 696 bytes src/Makefile.am | 2 + src/Makefile.in | 33 ++++++ src/cconnect.c | 84 ++++++++++++---- src/cconnect.h | 1 + src/cfile.c | 2 +- src/clogin.c | 22 +++-- src/cmkdir.c | 112 +++++++++++++++++++++ src/cmkdir.h | 10 ++ src/coptions.c | 3 +- src/crename.c | 2 +- src/cstatusbar.c | 7 +- src/ctoolbar.c | 6 +- src/iconnect.c | 100 +++++++++++++++---- src/iconnect.h | 11 ++- src/imkdir.c | 253 ++++++++++++++++++++++++++++++++++++++++++++++++ src/imkdir.h | 55 +++++++++++ src/inotebook.c | 28 +++--- src/iqconnect.c | 5 +- src/iqconnect.h | 5 +- src/serial.c | 29 ++++-- src/shell.c | 8 +- src/ssh.c | 35 ++----- src/telnet.c | 68 ++------------ src/user.c | 164 ++++++++++++++++++++++++++------ src/user.h | 14 ++- 32 files changed, 917 insertions(+), 214 deletions(-) commit e5fd022a53ecd22b9004d06fd47ef864700369ed Author: Niu Tao Date: Sat Apr 28 23:17:58 2012 +0800 Support to create a session without username and can edit port for telnet protocol src/telnet.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) commit 28030c6c045ce0799a6cac1812999a1902d327a9 Author: niutao0602 Date: Wed Dec 7 01:52:36 2011 +0000 修正Issue 8 中所å应的问题 gnome/lcrt.desktop | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) commit 8e33dea515f5b64d4cb142178778533064f85258 Author: NiuTao Date: Wed Nov 9 11:53:37 2011 +0800 修正多平å°ç¼–译错误 ChangeLog | 6 +++--- Doxyfile | 2 +- src/serial.c | 13 +++++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) commit 541606a37dc2419a76fd088fa76e112f8858186c Author: NiuTao Date: Thu Sep 22 20:02:53 2011 +0800 fix comlipe error: 'CMSPAR' undeclared ChangeLog | 37 +++++++++++++++++++++++++++++++++++++ configure | 20 ++++++++++---------- configure.ac | 2 +- src/serial.c | 11 ++++++++++- 4 files changed, 58 insertions(+), 12 deletions(-) commit 7a71ebab28ba31aaed19f6631571c63b52f5903f Author: NiuTao Date: Fri Sep 9 17:54:36 2011 +0800 fix error of can not open serial port at first time src/cqconnect.c | 2 +- src/iqconnect.c | 2 +- src/serial.c | 5 +++-- src/shell.c | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) commit b61af72d316f6303b81ffb694d4a48e488cccb1e Author: Niu Tao Date: Sat Aug 27 01:02:29 2011 +0800 Release lcrt-1.1.0 ChangeLog | 8 ++++---- src/cqconnect.c | 5 +++-- src/iqconnect.c | 2 +- src/iqconnect.h | 3 --- src/iwindow.h | 7 +++++-- 5 files changed, 13 insertions(+), 12 deletions(-) commit 47399df27c1a082c1168f627b474d18fd2ade4a6 Author: Niu Tao Date: Tue Aug 23 21:41:16 2011 +0800 just change ChangeLog ChangeLog | 15 ++++++++++++--- 1 files changed, 12 insertions(+), 3 deletions(-) commit 2652ee7266d7f1a4c6c40740480faea7af437b7d Author: Niu Tao Date: Tue Aug 23 21:34:40 2011 +0800 fix error when create a new session ChangeLog | 33 +++++++++++++++++++++++++++++++++ src/iqconnect.c | 9 ++++++--- src/user.c | 2 +- 3 files changed, 40 insertions(+), 4 deletions(-) commit d389557981c44ce6ca3a170d89afb889d1f866d8 Author: Niu Tao Date: Tue Aug 23 01:36:56 2011 +0800 fix the bug on protocol of shell ChangeLog | 595 ++++++++++++++++++++++++++++++++---------------------- Makefile.am | 2 +- Makefile.in | 2 +- README | 2 + language/de_DE.c | 1 + language/en_US.c | 1 + language/zh_CN.c | 1 + src/cqconnect.c | 19 +- src/ctoolbar.c | 2 +- src/iqconnect.c | 7 +- src/iqconnect.h | 7 + src/shell.c | 103 +++++++++- src/shell.h | 8 +- src/user.c | 9 +- 14 files changed, 499 insertions(+), 260 deletions(-) commit a0f413438b1e650529c2f3e0afea757dfaeb6cbe Merge: c37b59f 15dbc22 Author: NiuTao Date: Mon Aug 22 09:33:38 2011 +0800 Merge branch 'develop' of https://code.google.com/p/lcrt into develop commit c37b59f87a952f9cc44fd7260c98983955ebbb75 Merge: b97fbe1 dfb8d1c Author: NiuTao Date: Fri Aug 19 21:24:09 2011 +0800 fix some bug for serial commit 15dbc220b4a58ecb11a1afc36c9c74326c74cf0f Merge: b97fbe1 dfb8d1c Author: NiuTao Date: Fri Aug 19 21:24:09 2011 +0800 fix some bug for serial commit dfb8d1c9e0176a120b5574d1a4208922f70fee47 Author: NiuTao Date: Mon Aug 15 19:48:54 2011 +0800 add key press signal 'Return' to protocol serial Makefile.am | 2 +- Makefile.in | 2 +- README | 11 ++++++- src/cterminal.c | 5 --- src/iterminal.c | 1 - src/iterminal.h | 62 +++++++++++++++++++++++++------------------ src/lcrt.c | 64 +++++++++++++++++++++++++++++++++++++++++++++ src/serial.c | 78 +------------------------------------------------------ src/ssh.c | 3 ++ src/telnet.c | 4 +++ 10 files changed, 119 insertions(+), 113 deletions(-) commit b97fbe16ff23f8e7b827c40d16b805d5b6668ff5 Author: NiuTao Date: Mon Aug 15 19:48:54 2011 +0800 add key press signal 'Return' to protocol serial Makefile.am | 2 +- Makefile.in | 2 +- src/cterminal.c | 5 --- src/iterminal.c | 1 - src/iterminal.h | 62 +++++++++++++++++++++++++------------------ src/lcrt.c | 4 +++ src/serial.c | 78 +------------------------------------------------------ src/ssh.c | 3 ++ src/telnet.c | 4 +++ 9 files changed, 50 insertions(+), 111 deletions(-) commit aabd465166e63cee9f9c3b88f2538644be995e27 Author: Niu Tao Date: Mon Aug 15 02:02:29 2011 +0800 add make command:'make doc' to create document Makefile.am | 2 +- Makefile.in | 19 ++-- aclocal.m4 | 10 +- config.h.in | 2 +- configure | 258 +++++++++++++++++++++++++++++++------------------- gnome/Makefile.in | 2 +- help/Makefile.in | 6 +- help/man/Makefile.in | 2 +- language/Makefile.in | 2 +- pixmaps/Makefile.in | 2 +- src/Makefile.in | 2 +- 11 files changed, 185 insertions(+), 122 deletions(-) commit f588a88e3ef52ed6a5cdd844717a6f3335cbb8a4 Author: niutao Date: Sat Aug 13 19:08:25 2011 +0800 1. support serial protocl. 2. we can modify password from quick connect dialog .gitignore | 4 + Doxyfile | 1514 ++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile.am | 22 +- Makefile.in | 35 +- aclocal.m4 | 10 +- config.h.in | 2 +- configure | 258 ++++------ gnome/Makefile.in | 2 +- help/Makefile.in | 6 +- help/man/Makefile.in | 2 +- language/Makefile.in | 2 +- language/de_DE.c | 12 +- language/en_US.c | 13 +- language/zh_CN.c | 10 +- pixmaps/Makefile.in | 2 +- src/Makefile.in | 2 +- src/cfile.c | 27 +- src/clogin.c | 4 +- src/cqconnect.c | 13 +- src/cterminal.c | 7 +- src/foperate.c | 2 +- src/iconnect.c | 6 +- src/ilogin.c | 4 +- src/inotebook.h | 7 +- src/iqconnect.c | 2 +- src/iqconnect.h | 95 ++-- src/iterminal.c | 93 +--- src/iterminal.h | 11 +- src/iwindow.h | 37 +- src/protocol.c | 13 +- src/protocol.h | 87 ++-- src/raw.c | 15 + src/raw.h | 15 + src/rlogin.c | 47 ++- src/rlogin.h | 1 + src/serial.c | 502 +++++++++++++++-- src/serial.h | 94 ++-- src/shell.c | 45 +- src/shell.h | 1 + src/ssh.c | 371 +++++++++++-- src/ssh.h | 12 +- src/telnet.c | 128 +++-- src/telnet.h | 2 +- 43 files changed, 2854 insertions(+), 683 deletions(-) commit b1744c6baab1faa7bb9a8f44632bf7f7785182a8 Author: NiuTao Date: Thu Aug 11 13:37:27 2011 +0800 change our architecture to support more protocol, and add interface of Properties button in quick connect dialog. .gitignore | 28 +++ Makefile.am | 10 +- Makefile.in | 27 +-- aclocal.m4 | 10 +- config.h.in | 2 +- configure | 280 ++++++++++++++--------- configure.ac | 8 +- gnome/Makefile.in | 2 +- help/Makefile.in | 6 +- help/man/Makefile.in | 2 +- language/Makefile.in | 2 +- language/de_DE.c | 1 + language/en_US.c | 1 + language/zh_CN.c | 1 + pixmaps/Makefile.in | 2 +- src/Makefile.am | 1 + src/Makefile.in | 24 ++- src/cqconnect.c | 57 +---- src/debug.h | 1 + src/iqconnect.c | 1 - src/iqconnect.h | 22 ++- src/iterminal.c | 17 +- src/iterminal.h | 4 +- src/protocol.c | 55 +++++ src/protocol.h | 127 ++++++++++ src/rlogin.c | 99 ++++++++- src/rlogin.h | 8 +- src/serial.c | 35 +++- src/serial.h | 8 +- src/shell.c | 89 +++++++- src/shell.h | 15 +- src/ssh.c | 637 ++++++++++++++++++++++++++++++++------------------ src/ssh.h | 19 +- src/telnet.c | 262 ++++++++++++++++++++- src/telnet.h | 9 +- src/user.c | 24 ++ src/user.h | 98 +------- 37 files changed, 1405 insertions(+), 589 deletions(-) commit e93d901e62529b9119b58df097b71293da850e2a Author: NiuTao Date: Thu Aug 11 13:10:11 2011 +0800 We switch project version control system to Git,first version is from svn r83. But also you can checkout svn version use command: svn checkout http://lcrt.googlecode.com/svn/trunk/ lcrt .gitignore | 2 + AUTHORS | 8 + COPYING | 14 + ChangeLog | 239 + Makefile.am | 20 + Makefile.in | 697 +++ NEWS | 28 + README | 103 + aclocal.m4 | 1109 +++++ config.h.in | 202 + configure | 6924 +++++++++++++++++++++++++++ configure.ac | 91 + depcomp | 630 +++ gnome/Makefile.am | 12 + gnome/Makefile.in | 330 ++ gnome/lcrt.desktop | 21 + help/Makefile.am | 40 + help/Makefile.in | 562 +++ help/en_US/figures/lcrt-connect.png | Bin 0 -> 13840 bytes help/en_US/figures/lcrt-global-options.png | Bin 0 -> 33672 bytes help/en_US/figures/lcrt-quick-connect.png | Bin 0 -> 28554 bytes help/en_US/figures/lcrt-session-options.png | Bin 0 -> 31215 bytes help/en_US/lcrt.xml | 532 ++ help/en_US/legal.xml | 76 + help/man/Makefile.am | 4 + help/man/Makefile.in | 406 ++ help/man/lcrt.1.in | 29 + help/zh_CN/figures/lcrt-connect.png | Bin 0 -> 12633 bytes help/zh_CN/figures/lcrt-global-options.png | Bin 0 -> 22504 bytes help/zh_CN/figures/lcrt-quick-connect.png | Bin 0 -> 18792 bytes help/zh_CN/figures/lcrt-session-options.png | Bin 0 -> 24485 bytes help/zh_CN/lcrt.xml | 530 ++ help/zh_CN/legal.xml | 76 + install-sh | 520 ++ language/Makefile.am | 55 + language/Makefile.in | 562 +++ language/de_DE.c | 363 ++ language/de_DE.h | 8 + language/en_US.c | 363 ++ language/en_US.h | 8 + language/language.c | 95 + language/language.h | 27 + language/zh_CN.c | 363 ++ language/zh_CN.h | 8 + missing | 376 ++ pixmaps/Makefile.am | 31 + pixmaps/Makefile.in | 395 ++ pixmaps/lcrt-connect-in-tab.png | Bin 0 -> 981 bytes pixmaps/lcrt-connect.png | Bin 0 -> 1109 bytes pixmaps/lcrt-copy.png | Bin 0 -> 737 bytes pixmaps/lcrt-cut.png | Bin 0 -> 1017 bytes pixmaps/lcrt-delete.png | Bin 0 -> 903 bytes pixmaps/lcrt-disconnect.png | Bin 0 -> 780 bytes pixmaps/lcrt-find.png | Bin 0 -> 1006 bytes pixmaps/lcrt-help.png | Bin 0 -> 1185 bytes pixmaps/lcrt-home.png | Bin 0 -> 1137 bytes pixmaps/lcrt-info.png | Bin 0 -> 1095 bytes pixmaps/lcrt-logo.xpm | 362 ++ pixmaps/lcrt-new-session.png | Bin 0 -> 1071 bytes pixmaps/lcrt-paste.png | Bin 0 -> 947 bytes pixmaps/lcrt-quick-connect.png | Bin 0 -> 1146 bytes pixmaps/lcrt-reconnect.png | Bin 0 -> 812 bytes pixmaps/lcrt-rename.png | Bin 0 -> 867 bytes pixmaps/lcrt-settings.png | Bin 0 -> 1193 bytes pixmaps/lcrt-terminal.png | Bin 0 -> 758 bytes src/Makefile.am | 74 + src/Makefile.in | 1392 ++++++ src/cabout.c | 29 + src/cabout.h | 6 + src/caccels.c | 88 + src/caccels.h | 15 + src/cconnect.c | 270 ++ src/cconnect.h | 15 + src/cedit.c | 160 + src/cedit.h | 16 + src/cfile.c | 181 + src/cfile.h | 21 + src/cfind.c | 49 + src/cfind.h | 10 + src/chelp.c | 141 + src/chelp.h | 9 + src/clock.c | 58 + src/clock.h | 9 + src/clogin.c | 74 + src/clogin.h | 24 + src/cmenubar.c | 15 + src/cmenubar.h | 19 + src/cnotebook.c | 163 + src/cnotebook.h | 26 + src/coptions.c | 54 + src/coptions.h | 9 + src/cpopup.c | 68 + src/cpopup.h | 12 + src/cqconnect.c | 132 + src/cqconnect.h | 25 + src/crename.c | 65 + src/crename.h | 10 + src/csettings.c | 287 ++ src/csettings.h | 15 + src/cstatus.c | 61 + src/cstatus.h | 25 + src/cstatusbar.c | 31 + src/cstatusbar.h | 8 + src/cterminal.c | 198 + src/cterminal.h | 31 + src/ctoolbar.c | 104 + src/ctoolbar.h | 25 + src/cview.c | 94 + src/cview.h | 12 + src/cwindow.c | 108 + src/cwindow.h | 11 + src/debug.h | 33 + src/foperate.c | 224 + src/foperate.h | 12 + src/iabout.c | 69 + src/iabout.h | 5 + src/iaccels.c | 314 ++ src/iaccels.h | 138 + src/iconnect.c | 376 ++ src/iconnect.h | 118 + src/iedit.c | 280 ++ src/iedit.h | 77 + src/ifile.c | 360 ++ src/ifile.h | 98 + src/ifind.c | 247 + src/ifind.h | 54 + src/ihelp.c | 179 + src/ihelp.h | 72 + src/ilock.c | 292 ++ src/ilock.h | 65 + src/ilogin.c | 287 ++ src/ilogin.h | 82 + src/imenubar.c | 81 + src/imenubar.h | 29 + src/inotebook.c | 143 + src/inotebook.h | 75 + src/ioptions.c | 184 + src/ioptions.h | 62 + src/ipopup.c | 235 + src/ipopup.h | 71 + src/iqconnect.c | 326 ++ src/iqconnect.h | 215 + src/irename.c | 261 + src/irename.h | 55 + src/isettings.c | 1032 ++++ src/isettings.h | 280 ++ src/istatus.c | 165 + src/istatus.h | 56 + src/istatusbar.c | 33 + src/istatusbar.h | 30 + src/iterminal.c | 310 ++ src/iterminal.h | 69 + src/itoolbar.c | 166 + src/itoolbar.h | 83 + src/iview.c | 183 + src/iview.h | 65 + src/iwindow.c | 264 + src/iwindow.h | 80 + src/lcrt.c | 100 + src/list.h | 242 + src/message.c | 67 + src/message.h | 10 + src/mkconfig.c | 238 + src/mkconfig.h | 37 + src/rlogin.c | 29 + src/rlogin.h | 12 + src/serial.c | 233 + src/serial.h | 73 + src/shell.c | 33 + src/shell.h | 12 + src/ssh.c | 500 ++ src/ssh.h | 12 + src/support.c | 122 + src/support.h | 61 + src/telnet.c | 150 + src/telnet.h | 12 + src/user.c | 408 ++ src/user.h | 182 + 178 files changed, 30938 insertions(+), 0 deletions(-) lcrt-1.1.2/Makefile.in0000664000175000017500000005340211750112300011441 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog NEWS depcomp \ install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(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 distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCRT_LIB_DEPS_CFLAGS = @LCRT_LIB_DEPS_CFLAGS@ LCRT_LIB_DEPS_LIBS = @LCRT_LIB_DEPS_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = language src help pixmaps gnome EXTRA_DIST = AUTHORS NEWS ChangeLog COPYING README Doxyfile DOC_TOOLS = doxygen dot all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr 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 pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-local .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-hdr 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 pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-local uninstall-local: rm -rf $(DESTDIR)$(datadir)/$(PACKAGE) rm -rf $(DESTDIR)$(datadir)/gnome/help/$(PACKAGE) # Build ChangeLog from GIT history ChangeLog: @if test -f $(top_srcdir)/.git/HEAD; then \ git log --stat > $@; \ fi dist: ChangeLog .PHONY: ChangeLog doc doc: @for i in $(DOC_TOOLS);\ do \ which $$i >/dev/null; \ if [ $$? -ne 0 ]; then \ echo "Doc tool '$$i' isn't found,please install it and try again."; \ exit 1; \ fi \ done @doxygen Doxyfile # 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: lcrt-1.1.2/pixmaps/0000775000175000017500000000000011752203002011133 500000000000000lcrt-1.1.2/pixmaps/lcrt-mkdir.png0000664000175000017500000000127011750112142013633 00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ1(¾ÓÐf8IDAT8Ë…“;LSqÆÿ{[(P- ÆÁň‰ƒ‹šc¢‹£ ƒQw6™ØtÔMãâæ&Á˜Œ ¡I ÁR(½}ÜÇ9Ç¡…R=ëÉ÷Ë÷‡ˆ~¿}Ôª7=ªkžßóÝùã©YadòÁ.ÿ)ì¼›÷ûzŸnoí›ÓÀù®AO&‹çÒx~ß*jµôˉ©Å“€ÔÇÆÎåÝÏ#¹qª GoÚð¤<™DõK¾ßN¼cV$$I”Je‹|>E¹u•½Z…•¢Sí´€i™j†HL±¸©‚JBWvèCðá,DÕPMÀ3é0×–¶!ЇHL ª ¦ÒR)Žf0ÁiˆCqÚÂp¡€þË)&–41 ñ]B6‚*¨bªH—!´£IÌB2Ó$QÊÞÞò€¨E­o×%u|'8‹iÔëDQŒI4¢´gTª­ÞŽ€úa„ÜÅ™7Q}6‰Ì÷ §‘ ‘J¥ˆE)î­Ê"[Ûå(Çf°±ðŒåÕ3÷Ô"Rvˆ«í—W³ƒ8mRþµöjs}óÚ‹ùOs@é¯;¸pc ¬®ÎÞ/¬î ߺ>q»´±ðuæãÒûé©;cŸÌ.w{ç?‹G-³ß¡ÍIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-connect.png0000664000175000017500000000212511750112142014156 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\Æ­Ã5IDAT8Ë¥“=le†ßïî|¾;Ÿ§¤±ãÄMH•DD%†¤(K‡"X $$$&$$F$$V© HåG©¨@ 4Š)qÅIm7qÿÅñùÎ÷÷ÝÇŽØúŒÏðlð„ÿŠ›÷šèv1r~[_“ïîJì°¢ôëù¤—ÈØøñ£¹ÿÜøfÉÃWp<÷¡ašgc êÒ•?8ÑjèÁv×èþ½®Ì8-5Å+$ !cµÑÐí ðÚË ÙÀÖ矤$¹ºÂ‰ÜJ?Ö=å³r|Èd±®cûm û‡1¦žñ`k^¹Ï@â ¥ÅÍd0XxK>WyoÚÈ<3ŸšÑmRÞ ÅjGkµ‡‡ã÷Lµ”¿Y¦ï’¸´÷|¼€ßÿ€ô¬ƒK½øî 'ºé´že ã4ý‚˜?sO{CñâñõÙ?>¶ú\l9¡7´†;ö?º·£]‹ÆÈxCÌ`+>KšÚ\J`w]xŽG‚cœÌsÓËåé"XŽÜ3ÛŽø‹§? uððí´ß婺Õü#´iÅ,€Œí‘‚?ŽÇlá¡#ëBµŽrmþMúuq2Ø×€ÃÊp,*!f{ZXÓCÙ QÐMáD½Ø£½Ëh~ ¢ªdˆC7ÙãøKROúæ”~†=!1‰tJFÓÙƒ½qbu5K‰µï窟ÕÂï“L-zÕ‘Õ[šåû1Ï…á£d+úÙô(®drx.óžÖЩuÐý¢… ìU"ßúÍÉ.»“_½ A QœeUz}±¬ol癞œ2. ˆ—ç–°0ò,¦4Q¡Ú³ 1ù­'}yäHsЏm€äîø¯ŠyÃãXúý§R$œ™Õ©0%2E"}Ym­0,7¬Zé ¸ZÚüõÓÒïßíʉÁP5³ÁÏ6aõG®F†Öv9lǪ{´‘ÿi‚síóÌM”—òkÃÆîŸµ0 YЬA5³ Xs." |B œDi@Å¿VÙðæ—Šî™r$"}ãVÇmžô á(/+ ]ûIgþŒÓ’;µÈV%tEXtcreate-date2011-01-27T18:46:45+08:00™@ðL%tEXtmodify-date2011-01-27T18:46:45+08:00Æñ†xIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-connect-in-tab.png0000664000175000017500000000172511750112142015333 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\ƭõIDAT8Ëm’;o\U…¿ó¸¯¹ãal†‡„¢ÔˆŠ ×vè€_ÀÏà'ð#((p“aGJ‘dPL"ÏŒç¾Î½çœMa›P°š½w±—–ÖZJ$¼³|Ýü¸\Ÿ—¹;†>@7Àºjiº$Ë|$Ä€„€V˜Ãùè—ÃÝo,è½g«þß/úòã÷KÞž¥\uðbY®R.7¶kXWmSáGn„“OîìîY|D‚N˜OsÊ,á²HÉÉ­ï±Î¤ZSÄ–ûH ²H»oé:1¬(œÅC–$ŒRÍb¬¨»áF5¨wGñ_gÕ”Jp®²<Iˆ­”íÚ®5F¿VJ57ˆcLCŒ"´npƘàÖ|#"¯D¤±«Íf™XûƒÖê…–¾wúz³±mׄ¿Œ! "¿æyþÓl6sEQ@E‘!„güÊo¿ûþ³³GûóüBÎÏŸÈïgÎ~õõÀ[7Ýys·, ªªÒ'''ï=œÏ短û(¡!Œò§Ír¯¢ÿ…=B°ÐÏÂÝ¿G'¯ýö°VTß<¸¯òþp‘^-ÔMS®66íb) Y¡½Y’ðÎñþÊòÒ’ð“6<,þÑ”¹¨ŒÔ·K}Ò‘çÇó—ž›(O;-¿³ËªªX°¯ãoP™ø†H›V +€(IXÛìhÁ‘ZÅØ·Ñp¯ïô ;Â~bÂóCD1Ûì×2¦$Åþö×_>?÷2v%dæòÄ,>¬kúùZmä“j¥l b¦ ŽÁ˜%{‚íUdéJ!ßÿ…ï{ÉÓܬ×Á9‡aÐ’,Ë{šNs½24tÏÈåçÒ„|7÷ÓÂg, >0²™ã¢À/!KÓÿ8XYº‹ÓçNáÝSïR©úáHuxr°\2§µ^­=0Pú2 #OUé®(“¥åß177QGXÌ.Œ>3:511†¡r QC¥ÔÎf•3‚(\L¢”öB„ùùy8N ­–;Iò¢nhP ¹\j6[à)?ùݹ}Ï/,.Ö1>¶[[n±X¼å4›yÛÐ3ºö«òH_][GclÛøŒKJ¤”´ÕšÌ®|7x‹ÿZ%Š$ &/"W 9;–£¹Æè|ú@ª]Ù™¶¥äΉ9—HÂòZ‰á+~ùg•|‰)EñYÕBHÁ‹øoÁÇñ¢Ôæ¦X£f[Šåú‘>½ìcꂘ®pu1@"Ø_{7•sú‚ÃÀÅ"^¤’÷$–Ž/ Ë1mÍ ¶©x«…Sçs$+ âw×[lk)cøªÏ7çr®†/º¥’¨Äcªëø”¡Kùi!XÜÑZ†TT¡³hÌfÆ~ºX‘ºebÙ•I‹­­åØ–ºty¾4¥ýqt&sqOÕŸm‰o[‰4LË *aÐ^«Q ¦²*aHs•dÿf“ÌÒÈñ3ùIå½/»ÜS G¥P&úz’T%LtSG5t²¾Š'u ËÀ¶u65˜<Üiã‡bê÷qïȧ¯×çÄz ê+ŸöõîIxË·ÎÏJ *BQ°t… š« =%Ñ#oñÌÈÔ;ï?Óû5\ ÔõÊFÎöçWüØRú®úšžöø;š4µ«NaWìn‚ºx)ÈL/L|{üÄ‘c¼|Vº™"ˆu€T‚ØP™ÞÕÒ}ð…û÷voëJWÇâ1±œusƒÃcc?;wýòP¢ÀMÀ¹­ }d6VeÜ®n¯° !ò ÿæüüJpÖ_ úw‘‚´8'/É%tEXtcreate-date2011-01-27T18:46:45+08:00™@ðL%tEXtmodify-date2011-01-27T18:46:45+08:00Æñ†xIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-logo.xpm0000664000175000017500000001645111750112142013514 00000000000000/* XPM */ static char * lcrt_logo_xpm[] = { "32 32 327 2", " c None", ". c #DCDCDC", "+ c #DADADA", "@ c #DADADB", "# c #DBDCDC", "$ c #DCDDDC", "% c #DEDEDE", "& c #DFDFDF", "* c #E0E0E0", "= c #E1E1E1", "- c #DBDBDB", "; c #D8D8D8", "> c #D5D5D5", ", c #D4D4D4", "' c #D3D3D3", ") c #ECECEC", "! c #EFEFEF", "~ c #EFF0F0", "{ c #F0F1F0", "] c #F1F2F2", "^ c #F2F4F3", "/ c #F2F3F3", "( c #F2F2F2", "_ c #F2F3F2", ": c #F1F1F1", "< c #F0F0F0", "[ c #EEEEEE", "} c #EBEBEB", "| c #E6E6E6", "1 c #DFE0DF", "2 c #D0D0D0", "3 c #CCCCCC", "4 c #C7C7C7", "5 c #C2C2C3", "6 c #C0C0C0", "7 c #BCBCBC", "8 c #CBCBCB", "9 c #F3F4F3", "0 c #C7C7C5", "a c #B7B7B5", "b c #BBBAB8", "c c #BCBCB9", "d c #BCBFBD", "e c #BEC0BE", "f c #C0C1BF", "g c #C2C3C2", "h c #C4C4C5", "i c #C5C6C6", "j c #C5C6C7", "k c #C6C7C7", "l c #C7C8C8", "m c #C6C6C7", "n c #C3C3C5", "o c #C1C2C1", "p c #BDBCBB", "q c #B9B9B8", "r c #B4B4B4", "s c #B0AEAF", "t c #ABAAA8", "u c #A7A6A4", "v c #A3A0A1", "w c #9E9B9B", "x c #989794", "y c #ABAAAA", "z c #C1C1C1", "A c #C3C3C3", "B c #CDCDCD", "C c #EFF0EF", "D c #FBFCFC", "E c #393939", "F c #0A0A0A", "G c #101011", "H c #161616", "I c #1C1C1C", "J c #222222", "K c #292929", "L c #2F2E2E", "M c #353434", "N c #3A3A3A", "O c #3F3F3E", "P c #434343", "Q c #464646", "R c #444444", "S c #404040", "T c #3C3C3C", "U c #363636", "V c #313131", "W c #2B2B2B", "X c #252525", "Y c #1E1F1F", "Z c #181919", "` c #121313", " . c #0D0D0E", ".. c #444340", "+. c #C4C4C4", "@. c #F1F1F2", "#. c #3E3E3E", "$. c #101010", "%. c #151515", "&. c #1A1A1A", "*. c #202020", "=. c #272727", "-. c #2D2D2D", ";. c #333333", ">. c #373737", ",. c #3D3D3D", "'. c #414141", "). c #454545", "!. c #474747", "~. c #424242", "{. c #2E2E2E", "]. c #282828", "^. c #111111", "/. c #4C4A47", "(. c #C5C5C5", "_. c #D2D2D2", ":. c #F1F3F2", "<. c #0F0F0F", "[. c #141414", "}. c #242424", "|. c #2A2A2A", "1. c #303030", "2. c #353535", "3. c #3F3F3F", "4. c #3B3B3B", "5. c #323232", "6. c #2C2C2C", "7. c #212121", "8. c #504E4A", "9. c #F1F2F1", "0. c #FBFCFB", "a. c #3D3C3C", "b. c #0D0D0D", "c. c #131313", "d. c #171717", "e. c #1D1D1D", "f. c #232323", "g. c #383838", "h. c #343434", "i. c #1F1F1F", "j. c #191919", "k. c #514F4D", "l. c #C6C6C6", "m. c #F9F9F9", "n. c #0C0C0C", "o. c #1B1B1B", "p. c #262626", "q. c #121212", "r. c #52504E", "s. c #CFCFCF", "t. c #F8F8F8", "u. c #0E0E0E", "v. c #0B0B0B", "w. c #EFEFEE", "x. c #F7F7F6", "y. c #080808", "z. c #181818", "A. c #1E1E1E", "B. c #090909", "C. c #52514E", "D. c #C8C8C8", "E. c #ECECEB", "F. c #F7F7F4", "G. c #373738", "H. c #060606", "I. c #070707", "J. c #53524F", "K. c #C9C9C9", "L. c #EBECEB", "M. c #F6F6F4", "N. c #535251", "O. c #EBECEA", "P. c #F6F6F5", "Q. c #555353", "R. c #CACACA", "S. c #EAEBEA", "T. c #F3F3F1", "U. c #585554", "V. c #C5C5C6", "W. c #EAEBEB", "X. c #F2F2F0", "Y. c #5A5857", "Z. c #E9EAE8", "`. c #F0F0EE", " + c #5E5A5A", ".+ c #E8E9E7", "++ c #EEEEEC", "@+ c #4A4A4A", "#+ c #5F5D5C", "$+ c #E5E6E5", "%+ c #EBEBEA", "&+ c #4E4E4E", "*+ c #605F5E", "=+ c #E5E6E4", "-+ c #E8E8E7", ";+ c #6B6968", ">+ c #403E3B", ",+ c #403E3D", "'+ c #413E3D", ")+ c #403E3C", "!+ c #413D3C", "~+ c #403D3B", "{+ c #3F3D3D", "]+ c #3F3E3D", "^+ c #3F3E3C", "/+ c #403D3E", "(+ c #403D3D", "_+ c #3F3D3C", ":+ c #3E3C3C", "<+ c #3F3C3A", "[+ c #3D3B3A", "}+ c #3D3A39", "|+ c #3C3A38", "1+ c #3D3A38", "2+ c #3B3935", "3+ c #3A3838", "4+ c #72716F", "5+ c #BFBEBF", "6+ c #E2E3E1", "7+ c #E2E2E0", "8+ c #ECEDEB", "9+ c #F0F1EF", "0+ c #ECECED", "a+ c #F0F1F1", "b+ c #F3F3F3", "c+ c #D7D8D7", "d+ c #EEEDED", "e+ c #EAEAEB", "f+ c #E7E8E8", "g+ c #E4E4E4", "h+ c #DCDCDD", "i+ c #D9DADA", "j+ c #D4D4D5", "k+ c #CFD0D0", "l+ c #C7C6C6", "m+ c #C7C6C5", "n+ c #E6E6E5", "o+ c #E2E2E2", "p+ c #E3E3E3", "q+ c #E5E5E5", "r+ c #E7E7E7", "s+ c #E8E8E8", "t+ c #E9E9E8", "u+ c #EAEAEA", "v+ c #E2E1E2", "w+ c #DBDBDC", "x+ c #E5E5E4", "y+ c #CECECE", "z+ c #C2C2C2", "A+ c #BFBFBF", "B+ c #BBBBBB", "C+ c #E3E2E2", "D+ c #D9D9D9", "E+ c #D6D6D6", "F+ c #D7D7D7", "G+ c #D2D2D5", "H+ c #8D8D91", "I+ c #CBCAC9", "J+ c #979696", "K+ c #F2F2F3", "L+ c #F5F4F4", "M+ c #E8E6E6", "N+ c #E8E7E7", "O+ c #F6F6F6", "P+ c #F7F7F7", "Q+ c #F4F4F4", "R+ c #E3E2E3", "S+ c #8E8E8E", "T+ c #DEDEDD", "U+ c #D8D6D5", "V+ c #D7D6D6", "W+ c #D5D5D4", "X+ c #FAFAFB", "Y+ c #FCFCFC", "Z+ c #FAFAFA", "`+ c #BDBCBD", " @ c #F3F2F2", ".@ c #E6E5E5", "+@ c #DDDCDB", "@@ c #D0CECD", "#@ c #C8C6C4", "$@ c #D0CECE", "%@ c #FDFDFD", "&@ c #FEFEFE", "*@ c #F8F7F8", "=@ c #F1F0F0", "-@ c #EBEAEA", ";@ c #E2E2E1", ">@ c #D6D4D4", ",@ c #C3C1BE", "'@ c #BFBDBD", ")@ c #F8F8F9", "!@ c #FBFBFB", "~@ c #F5F4F5", "{@ c #E3E3E2", "]@ c #D8D7D6", "^@ c #C9C7C6", "/@ c #B2AFAF", "(@ c #BEBCBC", "_@ c #FCFCFD", ":@ c #FFFFFF", "<@ c #FBFAFA", "[@ c #F7F6F6", "}@ c #F3F1F2", "|@ c #E2E0DF", "1@ c #C9C7C5", "2@ c #B3B0AF", "3@ c #B4B1B1", "4@ c #E9E9E9", "5@ c #F6F6F7", "6@ c #E5E4E5", "7@ c #DAD8D7", "8@ c #CBCAC8", "9@ c #B2B0AE", "0@ c #ABA8A8", "a@ c #F5F5F5", "b@ c #F3F2F3", "c@ c #E7E7E6", "d@ c #DEDDDB", "e@ c #CDCBC9", "f@ c #B7B5B3", "g@ c #B3B2B1", "h@ c #E1E0E0", "i@ c #D6D5D5", "j@ c #BFBEBD", "k@ c #B3B1B1", "l@ c #A4A3A2", " . + @ # $ % % & * * = * * * * & & % % - ; > , , ' ' , > > ) ", " ! ~ { ] ^ / ( _ ( : : : : < ! [ ) } | 1 . ; , 2 3 4 5 6 7 8 ", "3 < 9 0 a b c d e f g h i j k l m n o p q r s t u v w x y z A , ", "B C D E F G H I J K L M N O P Q Q R S T U V W X Y Z ` ...+.+.' ", "3 @.D #.$.%.&.*.=.-.;.>.,.'.).!.!.Q ~.#.E ;.{.].J I H ^./.(.+._.", "3 :.D #.<.[.&.*.}.|.1.2.N #.'.P R ~.3.4.U 5.6.=.7.&.H $.8.(.(. ", "B 9.0.a.b.c.d.e.f.].-.5.U N ,.#.3.#.4.g.h.{.K }.i.j.[.<.k.l.(. ", "B ! m.4.n.^.%.o.*.X |.{.5.2.>.E E g.U ;.1.W p.7.I H q.b.r.k l. ", "s.! t.N F u.c.d.e.7.X |.-.1.;.;.h.5.1.{.|.=.f.e.j.[.<.v.r.l.l. ", "3 w.x.E y.n.$.[.z.I 7.X ].|.-.{.{.-.6.K p.J A.&.H ^.b.B.C.4 D. ", " E.F.G.H.B.b.^.%.j.e.*.f.X =.].].=.p.}.7.A.&.H q.u.F I.J.4 K. ", " L.M.E I.F b.^.%.z.o.A.7.f.f.X }.}.f.7.A.I j.H q.<.v.y.N.4 K. ", " O.P.4.B.n.u.q.%.z.&.I A.*.7.J f.J 7.i.e.&.z.H c.<.b.F Q.l.R. ", " S.T.#.b.u.$.c.H z.&.I A.*.7.J 7.7.*.i.e.o.z.H [.q.<.b.U.V.K. ", " W.X.~.q.q.c.%.d.j.o.e.A.*.7.J J 7.*.i.e.o.j.z.d.[.c.q.Y.+.D. ", " Z.`.!.z.z.z.j.o.I e.i.*.7.J J J J 7.*.i.A.e.o.j.z.z.z. +A D. ", " .+++@+e.e.e.e.e.A.*.*.7.J J f.f.J J J *.*.i.e.e.e.e.e.#+o l. ", " $+%+&+J J J J J 7.J J f.}.}.}.}.}.}.f.J J 7.J J J J J *+6 l. ", " =+-+;+>+,+'+)+)+!+~+{+]+]+^+/+(+!+_+:+<+[+}+[+|+1+2+3+4+5+(. ", " 6+7+8+9+w.} 0+[ C a+b+b+/ P.c+* b+< d+e+f+g+* h+i+j+k+l+7 m+ ", " ) = n+| o+& o+p+q+| r+s+t+u+v+w+x+p+% . ; > ' y+R.4 z+A+B+C+ ", " - D+E+, , > > > F+F+F+; G+H+ F+D+D+D+; ; F+, , , > E+ ", " I+J+5+ ", " u+K+L+! M+N+g+% ", " q+O+t.P+Q+R+S+u+T+U+V+W+ ", " t.X+Y+Y+Z+q+`+ @.@+@@@#@$@ ", " : Z+%@&@&@%@Y+*@=@-@;@>@,@'@ ", " * )@Y+Y+!@X+!@t.~@=@} {@]@^@/@(@ ", " | t._@m.:@:@:@&@<@[@}@u+|@1@2@3@ ", " 4@5@Z+t.m.Z+m.t.Q+: d+6@7@8@9@0@ ", " u+~@t.m.m.Z+Z+t.a@b@[ c@d@e@f@g@ ", " F+% +@& h@C+| .@p+h@- i@I+j@k@l@ "}; lcrt-1.1.2/pixmaps/Makefile.am0000664000175000017500000000131611750112570013117 00000000000000lcrt_LOGO = lcrt-logo.xpm pkgdata_DATA = \ lcrt-connect-in-tab.png \ lcrt-cut.png \ lcrt-find.png \ lcrt-info.png \ lcrt-paste.png \ lcrt-rename.png \ lcrt-connect.png \ lcrt-delete.png \ lcrt-help.png \ lcrt-quick-connect.png \ lcrt-settings.png \ lcrt-copy.png \ lcrt-disconnect.png \ lcrt-home.png \ lcrt-new-session.png \ lcrt-reconnect.png \ lcrt-terminal.png \ lcrt-mkdir.png \ $(lcrt_LOGO) EXTRA_DIST = $(pkgdata_DATA) pkgdatadir = ${datadir}/${PACKAGE}/pixmaps install-data-local: test -z $(DESTDIR)${datadir}/pixmaps || $(MKDIR_P) $(DESTDIR)${datadir}/pixmaps $(INSTALL_DATA) $(lcrt_LOGO) $(DESTDIR)${datadir}/pixmaps uninstall-local: rm -f $(DESTDIR)${datadir}/pixmaps/$(lcrt_LOGO) lcrt-1.1.2/pixmaps/lcrt-terminal.png0000664000175000017500000000136611750112142014346 00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÛ; Æ×vIDAT8Ë¥“»kUYÆkßsï97Ñ ¤°0…‚à_0‚‘aP¬´,l,™ÆB¬ì¬aí  ‘ÄØ‚(jŒŠ1cæš›äî³Ï~¬)ÎñšrÀ ‹µ`¯×þ¾o3uó/¾çdo?¼™˜ž¹÷4Ï‹ñµ ¨*)%4%ÒД˜"ƒÁj˜y8ó£…¾'˜Ž*ܸþh¥»Þ' X’×}'RÆ/ƒ+s)ºË7Ûúè ÈÌÌH±˜…aÁ˜¦ÅVX~àâÞH”tÕùøÖÝÌg+'òUi!ûÙÖb»fD¥÷ ˆæ–>^»æjé÷$kÞÅSSÓ’:;»¤ìY³`· EZšñ¸a’IÂ{2:|}h|ûîùê¼…¹ —ôüéëS¦N’rræÃ–:ƒºŽ¯}bjš¦C@é×aK‚A}0 ñKK×U|xï¡ €a†!`Ìf†ÙRd±ÀïïGOOÂQHúóê›ÎÈÎ*Q”léV†€, „!¨Ãl ˆ¢ˆ¿fàpTÁÓÔ:r˶µ¡HDùüQœko“[$“ðªjL>yò”_ÓZ}m%ÅÎÜÿ:}çAD¿+qˆeIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-disconnect.png0000775000175000017500000000141411750112142014661 00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÛ613d/7ŒIDAT8˽“_HSqÇ¿¿»Ý›y%6É(I”afø #0¤Ç|ñ©"ˆŠ ‚ ÈµfJ9%¬˜R2h”ˆú¢ôh„ "5B ]$$šMçþ´»ûÿô ³è¡—~O¿ßùs8çó=øß'OYß‹Or[Ï´’—owps\ñzgí¢Xšm³ÙDÖÝ7cÄÚŽxRt]-·f;|îè8< rÍÃÃ!my¹L7Œj ß””/òoåøpDfëQñ„B²›gÙ îÔÖVœ©ªš«òûË9Ž3Ã’=wkâ›Mä-âNLéH¦TêmuÖg¿—¾'7·lM’VO_×9޳X­~³[M3ðìþ‰‹ŠœxKn÷ì×ÖV€ `b?æ:ˆšnBÓM˜D`Œ‹¥ã2 Žtu5DÕIŠŽN,ëï§&;o\mr<ëCá>ÇM`ˆäTl>gI_$M‹¤4íÃðËÅ,¶‚bç‡ðôÑy×ÁC!7¯Dä¿{¬ÀÛ?@ïàÇTJ6„øO áˆÙ,pí¯FW\EÅ%êÐãSmKn·ïZ}ýÃçÁà¤i‘í*tO+ºN‚¬‰¤UÕñ}qÂ56â¹vQ,Ýjõ€p"Ïç°µ YXɈÆU$’*tÝÑØˆgVÚÛ¿4VVF$i@8£‚•Ïan¦I0 ašIŽ×­x½>»(–¶ô÷75×Ô¼°{› —Z^§ˆÀ¸­z —³D9>`&=•þPhÀ Ø.#Ç#Lz<µ F³Ù *6d9ºõŒfÿ1ÈÛewšZ.§â Dôî_¶ó”©@{ׇIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-info.png0000664000175000017500000000210711750112142013460 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\Æ­Ã'IDAT8Ë}“Ëk\uÅÏïqï™Lf2IǼðÑÖJ"i5(QÄEþ)ºr!*h»°[‚"‘¢ºP¤. BQJƒX"MI¨ MÚ$cæÁÌäÞyÜ÷ï÷ý¹°ˆ ú³8p8»ÿ8u¡õzÂNåEK{qóÜÂpwž±ìÿjÏr—–òì驇f.Ü_39ÉÊœÃ6„ Ÿ˜êf3½º¼Þ¾xþã­yrب÷gÁ0ø&¾j½ŠÅ/¶F™{aj"÷Òø “‚q" g J›´â&«k·»o}seïÛ¹©-^üü3|·Xš{°üöÑÑÜ)Åp7e¬ŸI°˜A=âð†~ !8›°ù‚™ßÏ?}l]¬,ŽÊùÓ³g&ËùWbb/2pïÄ ;à†„~LèD±F‘3ÁŽ/ü"§Ÿ{ì>bì©}7q4á9ãläm†k ŠnP°‹!M2J!Ä=U7oG€áÂB çðßü‹ï#øŸyO<jhÅÎÙ‹/·Z|Î}p¦|ð‡úD÷ùT£q4?9yR§tåÕÙYÐÿÊýG€w‚\ÄåëÔ4^4ix0_¤>Wþ²ÎRß4˲N±ˆ±Z ú?åv½¶y½BN³®{Âý£kÀmö&y^ßÎw!&¥ÔÔ(Åíãã¶ëu€‚Rê-oËî]Ý1T6:6ŽÎ+%©ë…>¨®·‰7!² hí»&ðZe„ (¥z§·ß¾Ò3B§ûô OF°±…þâ%"}Nâµ½ÈFýï㣷.%Þ;mW&Ž”xw§Ížj­»†È;Ƚù özéjrÿÍ请ÀÎ]„¹ºj$ÖoRŸü«±umU›­TrR©·]Wï\b(!÷Æ ¨y©T ”X%²6 ÞÞF¸Ü‚Á ¦»C3µ%íT¥|/‹äÌ€‹ †‹0_zÃ@2•„TJ* –S€¸¥‚¨×†veDaˆjä².t¥)>©J<~ˆ¸‰d›K_Á_;% ¨ÇPãI”ÆöƒŸœF”5"µ|þ·A7¼ªÍܘ¿¦Fª?±£'&3wßãØvJI´¿û Ýo?i¼·ìƒÐb™ ¼árWzÝgÒÍ¥}ó£O]ÆøÙlÚnÅ ³&¥4G"ë€èq0ÃFF %´\·O_ðŽóõ1Æ”à&ãœC)Ç ŠAãB͆àJiB \Qß #ÀÎà $·¬‚¾æyHXdDÀ$…œsDQ!h£ÑÀÂÂBÌu]Éù.dŒƒ“DH¦“ „b—±¿žËf³©OMMA@çææh¹\þºZ­&ƒ °YেÖ~Ù““‘¥|;î ZþæÌºžÊv,Ër]×]œŸŸW4€ˆpTŒšÙ{ßhò¶’m䔂Ф|ñs÷BŸË5—üNÙRJù™¤5 ­EG%tEXtcreate-date2011-01-27T18:46:45+08:00™@ðL%tEXtmodify-date2011-01-27T18:46:45+08:00Æñ†xIEND®B`‚lcrt-1.1.2/pixmaps/Makefile.in0000664000175000017500000002646111750112610013133 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = pixmaps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 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 = SOURCES = DIST_SOURCES = 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__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = ${datadir}/${PACKAGE}/pixmaps ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCRT_LIB_DEPS_CFLAGS = @LCRT_LIB_DEPS_CFLAGS@ LCRT_LIB_DEPS_LIBS = @LCRT_LIB_DEPS_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lcrt_LOGO = lcrt-logo.xpm pkgdata_DATA = \ lcrt-connect-in-tab.png \ lcrt-cut.png \ lcrt-find.png \ lcrt-info.png \ lcrt-paste.png \ lcrt-rename.png \ lcrt-connect.png \ lcrt-delete.png \ lcrt-help.png \ lcrt-quick-connect.png \ lcrt-settings.png \ lcrt-copy.png \ lcrt-disconnect.png \ lcrt-home.png \ lcrt-new-session.png \ lcrt-reconnect.png \ lcrt-terminal.png \ lcrt-mkdir.png \ $(lcrt_LOGO) EXTRA_DIST = $(pkgdata_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign pixmaps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign pixmaps/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ 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|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local 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 pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-pkgdataDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-local \ uninstall-pkgdataDATA install-data-local: test -z $(DESTDIR)${datadir}/pixmaps || $(MKDIR_P) $(DESTDIR)${datadir}/pixmaps $(INSTALL_DATA) $(lcrt_LOGO) $(DESTDIR)${datadir}/pixmaps uninstall-local: rm -f $(DESTDIR)${datadir}/pixmaps/$(lcrt_LOGO) # 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: lcrt-1.1.2/pixmaps/lcrt-cut.png0000664000175000017500000000177111750112142013326 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\Æ­ÃÙIDAT8Ë•’ßKSaÇ¿ï{ÎywvöË%mÒ´”F##f”ùDDQ^HIQ.ˆºŠÑ•ôbaÞy!MˆêFˆ‚EâEÕ…âR§#l©9§kól;§í}»È i]ô½yàáû|ž›&èÎQ¸Cˆâ¾õõ$ã|lÒ+…J¥&C)tIB¡X¬+rÙV©¼=T(Ì«B˜ ,Hc(`j„œ ²ìpÙí­p*].ëq!>˜B(‚°f³´X,ëÓÜ©ràÀ# HK!à«DiZR”m2纮O®ú|ù®®™%Ÿo¿º¼|^Ëfï@’¦M€qÎ_r!>@lÒ‹ŽØŸ>Uò\Ïmß~‰—˨LNÞ:××}ˆcñx• G£€-V«õy>ŸÏ|ÏåÚ ¥‰kW¯nñJ›ˆÅbRKKË!D½aŠ,Ë_B==”RŒŽŽVùéf€ÇãA[[Û~EQŽBî1Æ2ƺ#‘ˆ×ãñl™  ‰D0>>®644\¤”~J$1Îù3UUK.—«»¿¿Ÿ†B¡ß@×u u:áL&s»½½ý¦idppð,c¬3NßhmmƒU(l.—ËišæÁ¥¥¥÷ápø“¦iNö¡¡¡7kkkI!D0 Ú8hdyÂ0¯×«NMM­¤R©‹‹‹Ž#‹‘‘î÷û_[,€ë×ëÀPþsÉív³ææfMQ”ß]œÑîõzmMMMVBˆ²þë ü·~oò3 Ø¡Øi%tEXtcreate-date2011-01-27T18:46:45+08:00™@ðL%tEXtmodify-date2011-01-27T18:46:45+08:00Æñ†xIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-delete.png0000664000175000017500000000160711750112142013773 00000000000000‰PNG  IHDR;Ö•JsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÛ (`Z§IDAT(ÏM‘Mle†ßïgþvºíìl»ÛvÛ]Vú#K© $UBBBLÔ!Æè.êbLµ&$ÖDcŒñ¤w^L¬AÃE4 Ī¡@Ðv)°Ûmw»³3óÍÌ÷q€Ÿãûä=¼y sÐ(‘¦åÒ ƒíH^ÿ,º)ð?f‹SC~+HÅQü×'›‹°G*£)s`2ßqv¼˜9ÉlóßùµÊ­âÎèÀ¡—|026üj,“¥¾•öòš’íÄ0^7èÀž:»·ß~­\îÍ[ÝîØ„]Xž¿{{i¦oñÐóϽ?6µëHñÉò 7Œq«¿KU±Ì¶Ñ,ŸÔ’SSN÷e,èÝ.Übo®ÃíÝM³áäôîccOï<áô8ºfZª+—Íûž?¸xmñ?N‚¸!Ù¥õ˜\êÉþNB§Ûй -þÍ ïö‰Ì\©ÔóŒé¤©€¶‡¸ÑÀ½›µ++ggªw¾¼øÀÏ­Öþ»£¶*qUÖ‹@kÚ£P)H!hz! “•[€ûJ€ó<[ìgâÝ,K^Ðe¬«P@…Ò }ztZ¡?rX6+_Ëö ßsºJ†ºTøŽK’c¶Éuj€¦*ETˆa p?"¬(cföOÜ‚"x‘Êè• ñÛ‘â¡ Ü0ÿ!šñ­Š£§¤Æq„H*è »,°79Åå Ê 8ÏÿÕAKÆW™n|T°ÝY‹ëï%„^ðÔ&€€°:(û&&´ ¨.ýÓJï¹fÛ¿\M¥ê¿÷tŸy+ß›`ƒ1ûç®Ì+ºyù2ÕÖ~cÖɋ𛀭ŸùçÎ)Ç™Hq¶ïãõë7ÃPÐ(þÛfjÇvä;!æÏÉè.«Ì˜!6ì@)€€>öZЀ¶<â!€ÈA¼2ðAIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-copy.png0000664000175000017500000000134111750112142013476 00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÛ ,ª¾~1aIDAT8Ë­Ó?hQðï»Ü]BQÁ`Ô¶£ÖE骓CÄA'ADýƒNŠK7§Î‚Ž*KA­“(XÁHkC 6ióï.¹KîÞŸ»wù9ĶZR'¿ûïÃ{ß÷{ÀÿÈ»·ž|+þ¤â×2 ®ÈuºTÛp©ZiQi¥Fg 7N ›5ÀóÔ6ZX¯¶†Žãce¥‚O—E1êu—._X˜Ðju %AÊ͆¿B©õz 㱺ZE§ãcW QoCð>z=Çñ‘ɦa¤ˆŽÛÁÒò$ZܾùèÉþ|þJÇp\'OÅÔÔ$ˆÇ&Ç DÎ%¢H#Ñ ¸Ð¸skúôÜüÌ{„PBáÁÃk€ÅÏ%ll8è'}Œ¢Ýî¡²Ö€ëø˜<>f£BáÌÂÜü û ¬×êðýÁ=»ÝŽãA©ͦ‡®B‰Zm³“ :^w»%#I²´Ý6š‚@ÀiyÈæ20R)ÀMKËeðP Ë43Adílzèx9‡Ö1ž>{õWiÅb À¹v:û^Z«:2ú…sΠë÷[¦¹ïC›Ÿ]ÀËoç¼].¿¾_©ZÓ…ÂóŒÁŒÔùs×çä/nžhg”Rà‚"¢Xkk-7ŸU©8TJb7@JÁÅv‰„,ËÊ„a‘¹Bp¤m;·`¶mçªÕúÚȞܢëºm-bŒ!z†a˜Éf÷²a̲¬´eY3e¦”aŒ`ŒQ?I’Hk­´Ö2Žcõ J¦r‰n%ë(IEND®B`‚lcrt-1.1.2/pixmaps/lcrt-paste.png0000664000175000017500000000166311750112142013647 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\ƭÓIDAT8Ë…ÐMnE‡ñ§ª«fÜížÄxd°å$Ù„ ;V $.RÄšàÙp6¬ùK–Yá(A˃Çîév}vW „ ¼û÷§¿ñô‹og?úðƒù\ŸNS*Bîî£gš”9eR.P !ŒL)‹³ßÿ¸øåçß~=½÷ΨÛv¹<ø!>!¦ª’Ü»ÿ6u³‡÷¾7ô½e¿Ù#ç‚u£xôÞ»›Çož~õéwJJ!C樂œó(U‘K`}︸è89y‹º®q΀¨Oïòùg_ÿ |ŒeÛ eJc,Z+ºn „ cÆ86›Žå²e6›±Ý”Ýõ¬›Z*ï"]70¥ÄvkPªâò²g±Hh­ð>òâÅŠ££;ä\xùò!Îz€¢Œ l®¶¤”¸ºê©*Éf³¤ijÚV1Ÿkf3…R××=«ÕäœH”³‘Ë?7ÈJb­%¥Äóçg¬×êzÆ|>ãáÃcºnàìì5!x„ä\1¡â˜è¶=Z+š¦F© kÆXv=‚”¥*œs¤”‰aBMãm¼££žä ôk—4Þúf÷àôÓsj÷¹ê‘Ϊ¥ìÝ´¼ëgþ5®-“’°ÝühÀ€øŠÓ+w<=poqq.US&/}7øáKð;†Ÿ×Èûb4àуîÚy?Ö£¬Y´êxÝ…"|„ðPÑG€!v2£HkÒNîQoG¥/‚¨•u²ÒC6VÖù Øp¥õ IY %ÏÇé°ei«üŸYIÐNº°™²E7Èå;ù ’ž£åbkr,í®+;üeµõ¿þÑ;ÍÛüÁÁSÒxšÉ˾®ÈÝß~yCð,{_qó7G¶°eë†gK€ù•s ¢i„fº1ú>û|ï÷ˆÇâ²à¥ÙM…:‘KMw¤!jšJ„B&“õøäßÇÐ ´|©,F|‚ŽiÁ²s”©7ï>ÜU0%¥¤Påù“¾ÓûfŸ1Ìç©7ŠSÉ/ËaÐv°<_’Z%·®=ÙìœpÎÜþB¤¼¶´:ó8RÀ$%"«Û?«)Y¯Êdrù×?tZWs—€> Ò€ @L@tإ؀9\?€AÀý ªÙÿK~J±IEND®B`‚lcrt-1.1.2/pixmaps/lcrt-quick-connect.png0000664000175000017500000000217211750112142015272 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\Æ­ÃZIDAT8Ë¥ÎÍoÛdÇñŸ?vl'1MRš%¥kJÚu­Úª#ˆut0è@C &ñR T´Ã\:„¸PŽ\8$.* Á„Œ· …6¡¶S»VMZ’6/Î{mÇvb›ËÄqãó|õepG"©aózg/ö"lå›~Ž=0[ª²ŸºúyQüöï_/âߘ¡¤ˆ‹ÂÖuÍIHs¦zìq8C±Žö˜g´×ÙӵƅBñÓÓÏ —Î,˜û'@_|7„ü¶íE/9/vë QATv!pôˆÙ>œíÉž¼öí#o©O/—ïÌÐJΑÃ÷qoz|Ì+ k³–*C¶^ÆñDŒ]‚e¶A}.ŽøNÇÎÈí÷2óã£÷o\ÆWöÌë]OŠ2y‹a‰ßµý §0?…¦Æ!SñAs‚(ª;°ÛÛH„Oôz}¢yaöã«Á)Þmåm°³äK¼HN°,£6Ž ‹]Xˉ TOYè EÛ…DÓ˜D·¿›8z¼qó—e]“' ]†Úè†Úˆ@æ£CA9 Çš-€cÂu‹8 + ‚Þwd¢~xöw'ZL?ßñúÀ‘8àØ°|ü‚Bxa×Lˇ°¿ º­xÊíUQ•šöÄÒûo[­C`:GAœi¤‹¼l}!²è"à$ð“!Å1¬*Wôš™V7rËPnPôoÄÿå9.ô™àhSÈ—^@j¥Œ™)‚v Õ ðp.$êA&³Û…•¿ªÙNV-´Q-9`GN²Áþ­$Xï#ÞhVû‘Ù›†RÚ‡‡¨9 Õº†_ÿÈ¢˜ÛE=”—šãWNÍWö÷Š`×~ •ø±h©ߌpWMf\Ze¹F/Ö³nn²H­z±•÷ëZ}ýûˆìŒ¡Á²RýirrRg“Ͼ„o>øbëðøÒ&/Wc µ§5Jm+àµhÇ0ÍtKÝþhuyéÁ{<IòÎó<-—Ë)¦Ïõ]^ë¾—•œ™ÆÎÃfã\ض;*œö†¡•–oýüþŸO<š4ER£Ñè«¡Pè’aŸ0ørx”‹>Dk…5§¸}Í¢R—ÛÑ뀅…(Š"Æb±9Ã0Tü_ùÌm :ßc¿%tEXtcreate-date2011-01-27T18:46:45+08:00™@ðL%tEXtmodify-date2011-01-27T18:46:45+08:00Æñ†xIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-settings.png0000664000175000017500000000225111750112142014365 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\ƭÉIDAT8Ë]“Ile…ßÿÏŒ'ŽÇãØ‰ëXv'vLT–ÐJ uIÐ"8 * J@A qè‰ê©©!-biË¡Š q! ´©â$®²Ø$±/c{ìñÌØsàBóÎßû.O`Oú"CXK,ÓÃÏHƒÃaB¨X” õßcS¿öK#Ùë?L<Ä3{gμ uèôé×.öõ…Þèêr ¢ã…Lz[®”Kõˆ}Æáì*}öù¥ÒÏ×.ƒÀèØ!èºn=õò+¥b§,ûæ±£ÇO1, M3 K˜ýCöxº ½aŠËK‹·¦§~y?t``…yâɧ17{›9{öÝ×?wä‹á¡áWÃáЈ×Û͵ñ<¬mX,<¯U°‹‚\,s„a# Ë 7œˆ1Ý‹£P(<{òäø—R$(:6wg'gš&äb†aÀ.Ø@ A6_ÀV:ƒ á-œ[×õyÖí\—¿xk`@ò·`‚‚F³+W¿‡…··pð¸;õÁÖnE[o÷>T•¢Ó¨×,szzº öšR$L–be5…™Øm´ZÈ;;ë¢(áÞ.žçaá8ôô@|ñ¾šÏí*ÔéòTk55©ëz”‚P 9/#êËý6uóŸ&?K›Çý7Ãâï…%Ä—W¢(êì¹sï?~âí@OÐb6h™&¢#ƒH¥6Ô?8¿O’ŒF‡t£Ã0 é:²Ù]˜&¼Ò`tŒu8’( >‚ZÍ&LØ^zq< T*Ùl6ÔëMäò%(ªªB«©öøÁ’V;Í̬§3™Àh˜(–UÔ4M°ZmPk:2»Yd²9ìfóÈç lí}TÑÔÊ“x¨ù|ûÇüþ@ïÆæ6ªÕìB;4MCUUQV*X]KÂlµÐéêÐ¥…ÜÎܵ«³Ù”SÉTÁétIv»àÒ ƒ:DQª(–äåîÇ—p÷Þ]Õne2>¯wî̦'¿»rak3c@– «ÉäÆŸ‰‰„R.‰>`UÓ!Ë%äeËËK˜ŸŸ[øæë¯>ÞN§¯Ç&ÿI®ß¢ ­“=_¢==½'F{üŸ? >—Ë“”¾µ•º”\[9@ûa¯,„ÐG¬‚ý©6ž÷1”’¦ÙÜVJ¥6»/rÁÿþT—%Êœ6º%tEXtcreate-date2011-01-27T18:46:45+08:00™@ðL%tEXtmodify-date2011-01-27T18:46:45+08:00Æñ†xIEND®B`‚lcrt-1.1.2/pixmaps/lcrt-find.png0000664000175000017500000000175611750112142013456 00000000000000‰PNG  IHDRóÿagAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDùC» pHYs  šœ vpAg\Æ­ÃÎIDAT8Ë“MhœU…Ÿ÷~÷~3™Ÿt’ÐI¦6?CJ¥Ú`h…BW.DÔk.WAÜ]¸ÁEApã¢;7  º)JݱK%#BÛ$“Î$“É7ßß½¯‹ÆuûÀYž³8ï{„c´¼h _žýís:îv¤2ñ¡ǔŻe?[-ŠÅžYºpSZËSop“™B™EF‹yCxQ˧ӭµ%Ó½á:Õï­öï4©/ÏûÊl¯X¼t=š¿¸iU•`+…1Òw†íLý›†TøýuW&Ëî-ádÀͬŽS;7,]h6Ë·Æñ¥Ÿr–îaú@‰¼Î -‘²í}?ËÛ µâÖe3\¯jò@­ Gâ³}öïbÇÛçê답³CÜéyê‡"UgðSRÔ$ݬGÉF[ÒUŠáX‘¡„Ûg^®v)!$‚4˜z$R|.”£ÇçÖU17€+~;HáUBø¸ìe/—{AÜ©Û2Ço&ÇB†ˆ| ò)Îßµfe“|mÚ‹ÓBbžõcóÆþeêl£á„*ÈDx²…ðA~öÖ%6 Øì›&:V4 µ”÷ÔËåS 7µdR„ÈQû¢xY½ÿÿ°¨B4«ªæ j¾V/?­ûAㇻ<ÍÍÌûüañ iØCùÂX?¨½½ó$/ÆÔÌôÔ›vvZÌäÄu¿›ür\ØSa…bC}¸!Vgí\ü•ëœÌƒ·ÀöSüaÙaôe¶„Í%tEXtcreate-date2011-01-27T18:46:45+08:00™@ðL%tEXtmodify-date2011-01-27T18:46:45+08:00Æñ†xIEND®B`‚lcrt-1.1.2/install-sh0000775000175000017500000003253711750112142011412 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # 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 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 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 trap '(exit $?); exit' 1 2 13 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 starting with `-'. 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 # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # 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-writeable 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 -z "$d" && 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: lcrt-1.1.2/config.h.in0000664000175000017500000001261411750112304011423 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `fdatasync' function. */ #undef HAVE_FDATASYNC /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the header file. */ #undef HAVE_SQLITE3_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if `st_blksize' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BLKSIZE /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MOUNT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_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_TIME_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 `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* 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 for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `int' if does not define. */ #undef mode_t /* Define to `long int' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t /* Define as `fork' if `vfork' does not work. */ #undef vfork lcrt-1.1.2/configure.ac0000664000175000017500000000453311750112142011667 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. m4_define([gt_version_major],[1]) m4_define([gt_version_minor],[1]) m4_define([gt_version_micro],[2]) m4_define([gt_version_extra],[]) m4_define([gt_version],[gt_version_major().gt_version_minor().gt_version_micro()]) #AC_PREREQ([2.63]) AC_INIT([lcrt], [gt_version], [niutao0602@gmail.com]) AC_CONFIG_SRCDIR( [src/Makefile.am], [language/Makefile.am], [help/Makefile.am], [pixmaps/Makefile.am], [gnome/Makefile.am]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE([1.9 foreign]) AC_PREFIX_DEFAULT(/usr) #GNOME_INIT check_deps() { echo "$LCRT_LIB_DEPS_PKG_ERRORS" echo "If the packages is not found,you can install them with follow command:" echo "In Unbutu/Debian system:" echo " sudo apt-get install libgtk2.0-dev libvte-dev libsqlite3-dev" echo "In Fedora/CentOS:" echo " sudo yum install gtk-devel vte-devel sqlite3-devel" echo "" exit 1 } PKG_CHECK_MODULES(LCRT_LIB_DEPS, gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 ,,check_deps) # Checks for programs. AC_PROG_CC AC_ISC_POSIX # Checks for libraries. AC_PROG_RANLIB AM_PROG_INSTALL_STRIP # Checks for header files. AC_CHECK_HEADERS([fcntl.h inttypes.h libintl.h limits.h stddef.h stdint.h stdlib.h string.h sys/file.h sys/ioctl.h sys/mount.h sys/param.h sys/time.h unistd.h sqlite3.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE AC_TYPE_INT32_T AC_TYPE_MODE_T AC_TYPE_OFF_T AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_SSIZE_T AC_CHECK_MEMBERS([struct stat.st_blksize]) AC_TYPE_UINT8_T AC_CHECK_TOOL([STRIP],[strip]) # Checks for library functions. AC_FUNC_FORK AC_FUNC_MALLOC AC_FUNC_MMAP AC_FUNC_REALLOC AC_CHECK_FUNCS([clock_gettime fdatasync ftruncate getcwd gettimeofday localtime_r memmove memset mkdir munmap select strchr strerror strstr]) #debug options support AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],[debug program(default is no)])], [CFLAGS="${CFLAGS} -D__LCRT_DEBUG__ -Wall"]) AC_CONFIG_FILES([ Makefile src/Makefile language/Makefile help/Makefile help/man/Makefile help/man/lcrt.1 pixmaps/Makefile gnome/Makefile]) AC_OUTPUT echo " lcrt-$VERSION: prefix: ${prefix} source code location: ${srcdir} compiler: ${CC} " lcrt-1.1.2/language/0000775000175000017500000000000011752203002011235 500000000000000lcrt-1.1.2/language/en_US.c0000664000175000017500000004502311750755511012355 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 20 Feb 2011 01:54:10 PM CST * File Name : en_US.c * * Description: */ #include #include "iconnect.h" #include "iedit.h" #include "ifile.h" #include "ifind.h" #include "ihelp.h" #include "ilock.h" #include "ilogin.h" #include "ioptions.h" #include "ipopup.h" #include "iqconnect.h" #include "irename.h" #include "istatusbar.h" #include "istatus.h" #include "itoolbar.h" #include "iview.h" #include "isettings.h" #include "iaccels.h" #include "inotebook.h" #include "imkdir.h" #include "language.h" static struct lcrt_language_config ifile = { .table_name = LCRT_IFILE_TABLE, .members = LCRT_F_NUMBER, .config = { {"f_menuitem", "_File"}, {"f_connect", "_Connect ..."}, {"f_quick_connect", "_Quick Connect ..."}, {"f_connect_in_tab", "Connect in Ta_b"}, {"f_reconnect", "_Reconnect"}, {"f_reconnect_all", "Reconnect _All"}, {"f_disconnect", "_Disconnect"}, {"f_disconnect_all", "Disc_onnect All"}, {"f_clone_session", "Clo_ne Session"}, {"f_lock_session", "Loc_k Session ..."}, {"f_print", "_Print"}, {"f_print_setup", "Print Set_up ..."}, {"f_log_session", "_Log Session"}, {"f_recent_session", "Recent Session"}, {"f_exit", "E_xit"}, } }; static struct lcrt_language_config iedit = { .table_name = LCRT_IEDIT_TABLE, .members = LCRT_E_NUMBER, .config = { {"e_menuitem", "_Edit"}, {"e_copy", "_Copy"}, {"e_paste", "_Paste"}, {"e_copy_and_paste", "C_opy and Paste"}, {"e_select_all", "Select _All"}, {"e_find", "_Find ..."}, {"e_clear_scrollback", "Clear Scroll_back"}, {"e_clear_screen", "Clear _Screen"}, {"e_clear_screen_and_scrollback", "Clear Screen and Scrollbac_k"}, {"e_reset", "_Reset"}, {"e_show_menubar", "Show Menubar"}, } }; static struct lcrt_language_config iview = { .table_name = LCRT_IVIEW_TABLE, .members = LCRT_V_NUMBER, .config = { {"v_menuitem", "_View"}, {"v_menubar", "_Menu Bar"}, {"v_toolbar", "_Toolbar"}, {"v_status_bar", "_Status Bar"}, {"v_always_on_top", "_Always on Top"}, {"v_full_screen", "_Full Screen"}, } }; static struct lcrt_language_config ioptions = { .table_name = LCRT_IOPTIONS_TABLE, .members = LCRT_O_NUMBER, .config = { {"o_menuitem", "_Options"}, {"o_session_options", "_Session Options ..."}, {"o_global_options", "_Global Options ..."}, {"o_auto_save_options", "_Auto Save Options"}, {"o_save_settings_now", "Save Settings _Now"}, } }; static struct lcrt_language_config ihelp = { .table_name = LCRT_IHELP_TABLE, .members = LCRT_H_NUMBER, .config = { {"h_menuitem", "_Help"}, {"h_help", "help"}, {"h_home_page", "_Home Page"}, {"h_check_update", "_Check update"}, {"h_about", "_About"}, {"h_missing_doc", "Missing help document!"}, {"h_no_new_version", "There is not new version!"}, {"h_new_version", "There is a new verison:%s\nDownload page: %s"}, {"h_check_update_err", "Check update error: may be network is unreachable!"}, } }; static struct lcrt_language_config itoolbar = { .table_name = LCRT_ITOOLBAR_TABLE, .members = LCRT_B_NUMBER, .config = { {"b_connect", "Connect"}, {"b_quick_connect", "Quick connect"}, {"b_connect_on_tab", "Conect in tab"}, {"b_reconnect", "Reconnect current session"}, {"b_disconnect", "Disconnect current session"}, {"b_copy", "Copy"}, {"b_paste", "Paste"}, {"b_terminal", "Open a terminal"}, } }; static struct lcrt_language_config iconnect = { .table_name = LCRT_ICONNECT_TABLE, .members = LCRT_C_NUMBER, .config = { {"c_connect_in_tab", "Connect in Tab"}, {"c_connect", "Connect"}, {"c_quick_connect", "Quick Connect"}, {"c_rename", "Rename a session"}, {"c_delete", "Delete a session"}, {"c_find", "Find a session"}, {"c_session_option", "Session option"}, {"c_mkdir", "Create new folder"}, {"c_session", "Sessions"}, {"c_show_dialog_on_startup", "_Show dialog on startup"}, {"c_connect_button", "Connect"}, {"c_close_button", "Close"}, {"c_warn_msg", "Are you sure you want to delete the selected item ?"}, {"c_err_msg", "There is no memory to create window"}, } }; static struct lcrt_language_config ilock = { .table_name = LCRT_ILOCK_TABLE, .members = LCRT_K_NUMBER, .config = { {"k_lock_title", "Lock Session"}, {"k_unlock_title", "Unlock Session"}, {"k_lock_tip", "Enter password for session and will be used\nwhen unlock the session."}, {"k_unlock_tip", "Enter password to unlock the session."}, {"k_password", "Password: "}, {"k_repassword", "Retype password:"}, {"k_cancel", "Cancel"}, {"k_ok", "OK"}, {"k_error", "Password do not match!"}, {"k_err_msg", "There is no memory to create dialog"}, } }; static struct lcrt_language_config ilogin = { .table_name = LCRT_ILOGIN_TABLE, .members = LCRT_L_NUMBER, .config = { {"l_login", "Login"}, {"l_info", "Input username & password:"}, {"l_again", "Username or password error:"}, {"l_username", "Username:"}, {"l_password", "Password:"}, {"l_remember", "Remember ?"}, {"l_okbutton", "OK"}, {"l_cancelbutton", "Cancel"}, {"l_err_msg", "There is no memory to create dialog"}, } }; static struct lcrt_language_config ipopup = { .table_name = LCRT_IPOPUP_TABLE, .members = LCRT_P_NUMBER, .config = { {"p_rename", "Rena_me"}, {"p_reconnect", "_Reconnect"}, {"p_disconnect", "_Disconnect"}, {"p_close", "_Close"}, {"p_lock_session", "Loc_k Session ..."}, {"p_unlock_session", "Unloc_k Session ..."}, {"p_clone_session", "Clo_ne Session"}, {"p_session_options", "Session _Options ..."}, } }; static struct lcrt_language_config iqconnect = { .table_name = LCRT_IQCONNECT_TABLE, .members = LCRT_Q_NUMBER, .config = { {"q_connect", "Quick connect"}, {"q_session_option", "Session Option"}, {"q_lb_protocol", " Protocol:"}, {"q_lb_hostname", " Hostname:"}, {"q_lb_username", " Username:"}, {"q_lb_firewall", " Firewall:"}, {"q_lb_port", " Port: "}, {"q_lb_frame", "Authentication"}, {"q_cb_passwd", "Password"}, {"q_cb_publickey", "PublicKey"}, {"q_cb_keyboard", "KeyBoard Interactive"}, {"q_cb_gssapi", "GSSAPI"}, {"q_cb_rsa", "RSA"}, {"q_cb_tis", "TIS"}, {"q_bt_properties", "Properties..."}, {"q_lb_default_command", " Command:"}, {"q_cb_show_qconnect", "Show Quick connect on startup"}, {"q_cb_save_session", "Save Session"}, {"q_cb_open_in_a_tab", "Open in a tab"}, {"q_bt_connect", "Connect"}, {"q_bt_ok", "OK"}, {"q_bt_cancel", "Cancel"}, {"q_err_msg", "There is no memory to create window"}, {"q_sport", " Port:"}, {"q_sbaud_rate", " Baud rate:"}, {"q_sdata_bits", " Data bits:"}, {"q_sparity", " Parity:"}, {"q_sstop_bits", " Stop bits:"}, {"q_sflow_control", "Flow control"}, {"q_shell", " Shell:"}, {"q_ptitle", "Password Properties"}, {"q_pprompt", "Change password"}, {"q_pstore_password", " Store password:"}, {"q_pconfirm_password", " Confirm password:"}, {"q_pcancel", "Cancel"}, {"q_pok", "OK"}, {"q_ppw_unmatch", "Password can not match!"}, {"q_snot_found", "Shell is not found!\n"}, } }; static struct lcrt_language_config irename = { .table_name = LCRT_IRENAME_TABLE, .members = LCRT_R_NUMBER, .config = { {"r_title", "Rename"}, {"r_tip", "Enter new name:"}, {"r_cancel", "Cancel"}, {"r_ok", "OK"}, {"r_error", "There has a same one, try an another!"}, {"r_err_msg", "There is no memory to create dialog"}, } }; static struct lcrt_language_config imkdir = { .table_name = LCRT_IMKDIR_TABLE, .members = LCRT_M_NUMBER, .config = { {"m_title", "New folder"}, {"m_tip", "Enter new folder name:"}, {"m_cancel", "Cancel"}, {"m_ok", "OK"}, {"m_error", "There has a same one, try an another!"}, {"m_err_msg", "There is no memory to create dialog"}, } }; static struct lcrt_language_config istatus = { .table_name = LCRT_ISTATUS_TABLE, .members = LCRT_S_NUMBER, .config = { {"s_tooltip", "Linux Remote login Tool"}, {"s_show_status", "Main Window"}, {"w_quit", "Quit"}, {"w_window_exit", "There are %d session connected, do you want to quit ?"}, {"w_session_disconnect", "Do you wish to disconnect from %s ?"}, } }; static struct lcrt_language_config isettings = { .table_name = LCRT_ISETTINGS_TABLE, .members = LCRT_T_NUMBER, .config = { {"dialog_settings", "Global options"}, {"g_nb_general", "General"}, {"g_lb_language_support", "Language support"}, {"g_lb_language_support_note", "Select language support, and will be effect on\nnext time."}, {"g_lb_current_language", "Current language:"}, {"g_lb_dialog", "Dialog"}, {"g_rb_connect", "Show connect dialog on startup"}, {"g_rb_quick_connect", "Show quick connect dialog on startup"}, {"g_rb_none", "None"}, {"g_lb_view", "View"}, {"g_cb_show_toolbar", "Show toolbar"}, {"g_cb_show_statusbar", "Show statusbar"}, {"k_nb_keybindings", "Keybindings"}, {"k_lb_keyboard_shortcut", "Keyboard shortcuts"}, {"k_lb_keyboard_shortcuts_note", "Here you can change keyboard shortcuts for\nvarious actions."}, {"k_cb_enable_f10", "Enable the menu shortcut key(F10 by default)"}, {"t_nb_terminal", "Terminal"}, {"t_lb_terminal_settings", "Terminal settings"}, {"t_lb_terminal_note", "These settings for the virtual terminal emulator\nwidget(VTE)only apply if the VTE library could be \nloaded."}, {"t_lb_font", "Terminal font:"}, {"t_lb_foregroud_color", "Font color:"}, {"t_lb_background_color", "Background color:"}, {"t_lb_background_image", "Background image:"}, {"t_lb_transparent", "Transparent "}, {"t_tp_transparent", "Notice: only transparent is set to 0, the background image can be displayed."}, {"t_lb_scrollback_lines", "Scrollback lines:"}, {"t_cb_bell", "Terminal bell"}, {"t_bt_restore_defaul", "Reset"}, {"a_nb_application", "Application"}, {"a_lb_application", "Applications"}, {"a_lb_application_note", "As you known, lcrt will invoke local application\nwhen you open a connect such as ssh, so in here,\nyou can config it."}, {"a_lb_shell", "shell:"}, {"a_lb_ssh", "ssh:"}, {"a_lb_telnet", "telnet:"}, {"lb_applybutton", "Apply"}, {"lb_cancelbutton", "Cancel"}, {"lb_okbutton", "OK"}, {"error_msg", "There is no memory to create dialog"}, } }; static struct lcrt_language_config iaccels = { .table_name = LCRT_IACCELS_TABLE, .members = LCRT_KB_NUMBER, .config = { {"kb_action", "Action"}, {"kb_shortcut_key", "Shortcut key"}, {"kb_file", "File"}, {"kb_f_connect", "Connect"}, {"kb_f_quick_connect", "Quick Connect"}, {"kb_f_connect_in_tab", "Connect In Tab"}, {"kb_f_reconnect", "Reconnect"}, {"kb_edit", "Edit"}, {"kb_e_copy", "Copy"}, {"kb_e_paste", "Paste"}, {"kb_e_find", "Find"}, {"kb_session", "Session"}, {"kb_s_clone", "Clone"}, {"kb_s_close", "Close"}, {"kb_s_move_next", "Move To Next"}, {"kb_s_move_prev", "Move To Prev"}, {"kb_s_switch_next", "Switch To Next"}, {"kb_s_switch_prev", "Switch To Prev"}, {"kb_warn_msg", "The shortcut key \"%s\" is already bound to the \"%s\" action"}, {"kb_err_msg", "There is no memory to create dialog"} } }; static struct lcrt_language_config iterminal = { .table_name = LCRT_ITERMINAL_TABLE, .members = LCRT_TM_NUMBER, .config = { {"tm_connection_timed_out", "Connection timed out!"}, {"tm_connection_refused", "Connection refused!"}, {"tm_connection_failed", "Username or password error,exit!"}, {"tm_connection_prog_not_found", "Can not find the programe \"%s\",please install it!"}, {"tm_connection_not_support", "Current version not support!"}, {"tm_serial_error", "Can't open \"%s\",%s."}, } }; static struct lcrt_language_config ifind = { .table_name = LCRT_IFIND_TABLE, .members = LCRT_I_NUMBER, .config = { {"i_title", "Find"}, {"i_tip_connect", "Enter the name of session you want find:"}, {"i_tip_edit", "Enter the string you want find:"}, {"i_cancel", "Cancel"}, {"i_prev", "Previous"}, {"i_next", "Next"}, {"i_info", "There is nothing find!"}, {"i_err_msg", "There is no memory to create dialog"}, } }; struct lcrt_language en_US = { .language_name = "English", .db_name = "en_US.db", .language = { &ifile, &iedit, &iview, &ioptions, &ihelp, &itoolbar, &iconnect, &ilock, &ilogin, &ipopup, &iqconnect, &irename, &imkdir, &istatus, &isettings, &iaccels, &iterminal, &ifind, }, }; lcrt-1.1.2/language/de_DE.h0000664000175000017500000000016511750112142012272 00000000000000#ifndef __LCRT_de_DE_H__ #define __LCRT_de_DE_H__ #include "language.h" extern struct lcrt_language de_DE; #endif lcrt-1.1.2/language/language.c0000664000175000017500000000607311750361516013127 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 20 Feb 2011 01:58:51 PM CST * * Description: */ //#define __LCRT_DEBUG__ #include #include #include #include "language.h" #include "mkconfig.h" #include "de_DE.h" #include "en_US.h" #include "zh_CN.h" #include "debug.h" #define LANGUAGE_DB_PATH "../etc/language" #define LANG_C "../src/lang.c" static struct lcrt_language *languages[LCRT_SUPPORT_LANGUAGE] = { &en_US, &zh_CN, &de_DE, }; int main(int args, char *argv[]) { int i, j, k; struct lcrt_config db; char db_name[256]; struct lcrt_language_config **language; FILE *fp; if ((fp = fopen(LANG_C, "w")) == NULL) { perror(LANG_C); return -1; } fprintf(fp, "#include \n\n"); fprintf(fp, "static struct lcrt_support_language lcrt_support_languages[LCRT_SUPPORT_LANGUAGE] = {\n"); for (i = 0; i < LCRT_SUPPORT_LANGUAGE; i++) { language = (struct lcrt_language_config **)languages[i]->language; printf("make %s\n", languages[i]->db_name); fprintf(fp, " {\"%s\", \"%s\"},\n",languages[i]->language_name, languages[i]->db_name); snprintf(db_name, sizeof(db_name), "%s/%s", LANGUAGE_DB_PATH, languages[i]->db_name); lcrt_config_init(&db, db_name, NULL); for (j = 0; j < LCRT_LANGUAGE_NUMBER; j++) { db.exec(&db, "CREATE TABLE %s( \ name VARCHAR(%d) PRIMARY KEY, \ value VARCHAR(%d))", language[j]->table_name, LCRT_CONFIG_NAME_LEN, LCRT_CONFIG_VALUE_LEN); for (k = 0; k < language[j]->members; k++) { debug_print("[%-10s|%-10s]: name = [%-32s] value = [%s]\n", basename((char *)languages[i]->db_name), language[j]->table_name, language[j]->config[k].name, language[j]->config[k].value); #if 0 db.exec(&db, "UPDATE %s SET value='%s' WHERE name='%s'", language[j]->table_name, language[j]->config[k].value, language[j]->config[k].name); if (db.changes(&db) == 0) #endif { db.exec(&db, "INSERT INTO %s VALUES('%s', '%s')", language[j]->table_name, language[j]->config[k].name, language[j]->config[k].value); } } } db.close(&db); } fprintf(fp, "};\n"); fprintf(fp, "const struct lcrt_support_language *lcrt_get_languages()\n"); fprintf(fp, "{\n"); fprintf(fp, " return (const struct lcrt_support_language *)lcrt_support_languages;\n"); fprintf(fp, "}\n"); fclose(fp); return 0; } lcrt-1.1.2/language/en_US.h0000664000175000017500000000016511750112142012343 00000000000000#ifndef __LCRT_en_US_H__ #define __LCRT_en_US_H__ #include "language.h" extern struct lcrt_language en_US; #endif lcrt-1.1.2/language/Makefile.am0000664000175000017500000000322711750112142013217 00000000000000lcrt_LANGUAGES = en_US.db zh_CN.db de_DE.db noinst_PROGRAMS = make_language make_language_SOURCES = \ en_US.c en_US.h \ zh_CN.c zh_CN.h \ de_DE.c de_DE.h \ language.c language.h \ $(top_srcdir)/src/mkconfig.c $(top_srcdir)/src/mkconfig.h \ $(top_srcdir)/src/foperate.c $(top_srcdir)/src/foperate.h make_language_LDADD = \ $(LCRT_LIB_DEPS_LIBS) make_language_CFLAGS = \ -DLCRT_INSTALL_DIR="\"$(datadir)/$(PACKAGE)\"" \ -DLCRT_VERSION="\"$(VERSION)\"" INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ $(LCRT_LIB_DEPS_CFLAGS) LANGUAGE_CONFIG_PATH = $(top_srcdir)/etc/language/ lcrt_DATABASES = $(addprefix $(LANGUAGE_CONFIG_PATH), $(lcrt_LANGUAGES)) all: $(lcrt_DATABASES) $(lcrt_DATABASES): make_language @ rm -rf $(top_srcdir)/etc @ mkdir -p $(LANGUAGE_CONFIG_PATH) @ echo "make language database:" @ echo "=============================================================================" @ ./$< install-data-local: echo "$(MKDIR_P) $(DESTDIR)${datadir}/${PACKAGE}/etc/language" $(MKDIR_P) $(DESTDIR)${datadir}/${PACKAGE}/etc/language echo "$(INSTALL_DATA) $(lcrt_DATABASES) '$(DESTDIR)${datadir}/${PACKAGE}/etc/language'" $(INSTALL_DATA) $(lcrt_DATABASES) $(DESTDIR)${datadir}/${PACKAGE}/etc/language uninstall-local: echo " (cd '$(DESTDIR)${datadir}/${PACKAGE}/etc/language' && rm -f $(lcrt_LANGUAGES))" (cd $(DESTDIR)${datadir}/${PACKAGE}/etc/language && rm -f $(lcrt_LANGUAGES)) clean-local: @if test -d $(LANGUAGE_CONFIG_PATH) ;then \ echo "(cd '$(LANGUAGE_CONFIG_PATH)' && rm -f $(lcrt_LANGUAGES))"; \ (cd $(LANGUAGE_CONFIG_PATH) && rm -f $(lcrt_LANGUAGES)); \ fi @if test -d $(top_srcdir)/etc ; then \ rm -rf $(top_srcdir)/etc; \ fi lcrt-1.1.2/language/zh_CN.h0000664000175000017500000000016511750112142012333 00000000000000#ifndef __LCRT_zh_CN_H__ #define __LCRT_zh_CN_H__ #include "language.h" extern struct lcrt_language zh_CN; #endif lcrt-1.1.2/language/language.h0000664000175000017500000000112211750361516013122 00000000000000#ifndef __LCRT_LANGUAGE_H__ #define __LCRT_LANGUAGE_H__ #include "mkconfig.h" #define LCRT_SUPPORT_LANGUAGE 3 #define LCRT_LANGUAGE_NUMBER 18 struct __lcrt_language_config { char name[LCRT_CONFIG_NAME_LEN]; char value[LCRT_CONFIG_VALUE_LEN]; }; struct lcrt_language_config { char *table_name; int members; struct __lcrt_language_config config[64]; }; struct lcrt_language { char *language_name; char *db_name; struct lcrt_language_config *language[LCRT_LANGUAGE_NUMBER]; }; struct lcrt_support_language { char *language_name; char *db_name; }; #endif lcrt-1.1.2/language/Makefile.in0000664000175000017500000006316411750112300013232 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ 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 = : noinst_PROGRAMS = make_language$(EXEEXT) subdir = language DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 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 = PROGRAMS = $(noinst_PROGRAMS) am_make_language_OBJECTS = make_language-en_US.$(OBJEXT) \ make_language-zh_CN.$(OBJEXT) make_language-de_DE.$(OBJEXT) \ make_language-language.$(OBJEXT) \ make_language-mkconfig.$(OBJEXT) \ make_language-foperate.$(OBJEXT) make_language_OBJECTS = $(am_make_language_OBJECTS) am__DEPENDENCIES_1 = make_language_DEPENDENCIES = $(am__DEPENDENCIES_1) make_language_LINK = $(CCLD) $(make_language_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(make_language_SOURCES) DIST_SOURCES = $(make_language_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCRT_LIB_DEPS_CFLAGS = @LCRT_LIB_DEPS_CFLAGS@ LCRT_LIB_DEPS_LIBS = @LCRT_LIB_DEPS_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lcrt_LANGUAGES = en_US.db zh_CN.db de_DE.db make_language_SOURCES = \ en_US.c en_US.h \ zh_CN.c zh_CN.h \ de_DE.c de_DE.h \ language.c language.h \ $(top_srcdir)/src/mkconfig.c $(top_srcdir)/src/mkconfig.h \ $(top_srcdir)/src/foperate.c $(top_srcdir)/src/foperate.h make_language_LDADD = \ $(LCRT_LIB_DEPS_LIBS) make_language_CFLAGS = \ -DLCRT_INSTALL_DIR="\"$(datadir)/$(PACKAGE)\"" \ -DLCRT_VERSION="\"$(VERSION)\"" INCLUDES = \ -I$(top_builddir) \ -I$(top_srcdir)/src \ $(LCRT_LIB_DEPS_CFLAGS) LANGUAGE_CONFIG_PATH = $(top_srcdir)/etc/language/ lcrt_DATABASES = $(addprefix $(LANGUAGE_CONFIG_PATH), $(lcrt_LANGUAGES)) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign language/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign language/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) make_language$(EXEEXT): $(make_language_OBJECTS) $(make_language_DEPENDENCIES) @rm -f make_language$(EXEEXT) $(make_language_LINK) $(make_language_OBJECTS) $(make_language_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make_language-de_DE.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make_language-en_US.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make_language-foperate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make_language-language.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make_language-mkconfig.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make_language-zh_CN.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` make_language-en_US.o: en_US.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-en_US.o -MD -MP -MF $(DEPDIR)/make_language-en_US.Tpo -c -o make_language-en_US.o `test -f 'en_US.c' || echo '$(srcdir)/'`en_US.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-en_US.Tpo $(DEPDIR)/make_language-en_US.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='en_US.c' object='make_language-en_US.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-en_US.o `test -f 'en_US.c' || echo '$(srcdir)/'`en_US.c make_language-en_US.obj: en_US.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-en_US.obj -MD -MP -MF $(DEPDIR)/make_language-en_US.Tpo -c -o make_language-en_US.obj `if test -f 'en_US.c'; then $(CYGPATH_W) 'en_US.c'; else $(CYGPATH_W) '$(srcdir)/en_US.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-en_US.Tpo $(DEPDIR)/make_language-en_US.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='en_US.c' object='make_language-en_US.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-en_US.obj `if test -f 'en_US.c'; then $(CYGPATH_W) 'en_US.c'; else $(CYGPATH_W) '$(srcdir)/en_US.c'; fi` make_language-zh_CN.o: zh_CN.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-zh_CN.o -MD -MP -MF $(DEPDIR)/make_language-zh_CN.Tpo -c -o make_language-zh_CN.o `test -f 'zh_CN.c' || echo '$(srcdir)/'`zh_CN.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-zh_CN.Tpo $(DEPDIR)/make_language-zh_CN.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='zh_CN.c' object='make_language-zh_CN.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-zh_CN.o `test -f 'zh_CN.c' || echo '$(srcdir)/'`zh_CN.c make_language-zh_CN.obj: zh_CN.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-zh_CN.obj -MD -MP -MF $(DEPDIR)/make_language-zh_CN.Tpo -c -o make_language-zh_CN.obj `if test -f 'zh_CN.c'; then $(CYGPATH_W) 'zh_CN.c'; else $(CYGPATH_W) '$(srcdir)/zh_CN.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-zh_CN.Tpo $(DEPDIR)/make_language-zh_CN.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='zh_CN.c' object='make_language-zh_CN.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-zh_CN.obj `if test -f 'zh_CN.c'; then $(CYGPATH_W) 'zh_CN.c'; else $(CYGPATH_W) '$(srcdir)/zh_CN.c'; fi` make_language-de_DE.o: de_DE.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-de_DE.o -MD -MP -MF $(DEPDIR)/make_language-de_DE.Tpo -c -o make_language-de_DE.o `test -f 'de_DE.c' || echo '$(srcdir)/'`de_DE.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-de_DE.Tpo $(DEPDIR)/make_language-de_DE.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='de_DE.c' object='make_language-de_DE.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-de_DE.o `test -f 'de_DE.c' || echo '$(srcdir)/'`de_DE.c make_language-de_DE.obj: de_DE.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-de_DE.obj -MD -MP -MF $(DEPDIR)/make_language-de_DE.Tpo -c -o make_language-de_DE.obj `if test -f 'de_DE.c'; then $(CYGPATH_W) 'de_DE.c'; else $(CYGPATH_W) '$(srcdir)/de_DE.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-de_DE.Tpo $(DEPDIR)/make_language-de_DE.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='de_DE.c' object='make_language-de_DE.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-de_DE.obj `if test -f 'de_DE.c'; then $(CYGPATH_W) 'de_DE.c'; else $(CYGPATH_W) '$(srcdir)/de_DE.c'; fi` make_language-language.o: language.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-language.o -MD -MP -MF $(DEPDIR)/make_language-language.Tpo -c -o make_language-language.o `test -f 'language.c' || echo '$(srcdir)/'`language.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-language.Tpo $(DEPDIR)/make_language-language.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='language.c' object='make_language-language.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-language.o `test -f 'language.c' || echo '$(srcdir)/'`language.c make_language-language.obj: language.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-language.obj -MD -MP -MF $(DEPDIR)/make_language-language.Tpo -c -o make_language-language.obj `if test -f 'language.c'; then $(CYGPATH_W) 'language.c'; else $(CYGPATH_W) '$(srcdir)/language.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-language.Tpo $(DEPDIR)/make_language-language.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='language.c' object='make_language-language.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-language.obj `if test -f 'language.c'; then $(CYGPATH_W) 'language.c'; else $(CYGPATH_W) '$(srcdir)/language.c'; fi` make_language-mkconfig.o: $(top_srcdir)/src/mkconfig.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-mkconfig.o -MD -MP -MF $(DEPDIR)/make_language-mkconfig.Tpo -c -o make_language-mkconfig.o `test -f '$(top_srcdir)/src/mkconfig.c' || echo '$(srcdir)/'`$(top_srcdir)/src/mkconfig.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-mkconfig.Tpo $(DEPDIR)/make_language-mkconfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/mkconfig.c' object='make_language-mkconfig.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-mkconfig.o `test -f '$(top_srcdir)/src/mkconfig.c' || echo '$(srcdir)/'`$(top_srcdir)/src/mkconfig.c make_language-mkconfig.obj: $(top_srcdir)/src/mkconfig.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-mkconfig.obj -MD -MP -MF $(DEPDIR)/make_language-mkconfig.Tpo -c -o make_language-mkconfig.obj `if test -f '$(top_srcdir)/src/mkconfig.c'; then $(CYGPATH_W) '$(top_srcdir)/src/mkconfig.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/mkconfig.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-mkconfig.Tpo $(DEPDIR)/make_language-mkconfig.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/mkconfig.c' object='make_language-mkconfig.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-mkconfig.obj `if test -f '$(top_srcdir)/src/mkconfig.c'; then $(CYGPATH_W) '$(top_srcdir)/src/mkconfig.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/mkconfig.c'; fi` make_language-foperate.o: $(top_srcdir)/src/foperate.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-foperate.o -MD -MP -MF $(DEPDIR)/make_language-foperate.Tpo -c -o make_language-foperate.o `test -f '$(top_srcdir)/src/foperate.c' || echo '$(srcdir)/'`$(top_srcdir)/src/foperate.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-foperate.Tpo $(DEPDIR)/make_language-foperate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/foperate.c' object='make_language-foperate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-foperate.o `test -f '$(top_srcdir)/src/foperate.c' || echo '$(srcdir)/'`$(top_srcdir)/src/foperate.c make_language-foperate.obj: $(top_srcdir)/src/foperate.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -MT make_language-foperate.obj -MD -MP -MF $(DEPDIR)/make_language-foperate.Tpo -c -o make_language-foperate.obj `if test -f '$(top_srcdir)/src/foperate.c'; then $(CYGPATH_W) '$(top_srcdir)/src/foperate.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/foperate.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/make_language-foperate.Tpo $(DEPDIR)/make_language-foperate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/foperate.c' object='make_language-foperate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(make_language_CFLAGS) $(CFLAGS) -c -o make_language-foperate.obj `if test -f '$(top_srcdir)/src/foperate.c'; then $(CYGPATH_W) '$(top_srcdir)/src/foperate.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/foperate.c'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-local 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-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-local clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-local all: $(lcrt_DATABASES) $(lcrt_DATABASES): make_language @ rm -rf $(top_srcdir)/etc @ mkdir -p $(LANGUAGE_CONFIG_PATH) @ echo "make language database:" @ echo "=============================================================================" @ ./$< install-data-local: echo "$(MKDIR_P) $(DESTDIR)${datadir}/${PACKAGE}/etc/language" $(MKDIR_P) $(DESTDIR)${datadir}/${PACKAGE}/etc/language echo "$(INSTALL_DATA) $(lcrt_DATABASES) '$(DESTDIR)${datadir}/${PACKAGE}/etc/language'" $(INSTALL_DATA) $(lcrt_DATABASES) $(DESTDIR)${datadir}/${PACKAGE}/etc/language uninstall-local: echo " (cd '$(DESTDIR)${datadir}/${PACKAGE}/etc/language' && rm -f $(lcrt_LANGUAGES))" (cd $(DESTDIR)${datadir}/${PACKAGE}/etc/language && rm -f $(lcrt_LANGUAGES)) clean-local: @if test -d $(LANGUAGE_CONFIG_PATH) ;then \ echo "(cd '$(LANGUAGE_CONFIG_PATH)' && rm -f $(lcrt_LANGUAGES))"; \ (cd $(LANGUAGE_CONFIG_PATH) && rm -f $(lcrt_LANGUAGES)); \ fi @if test -d $(top_srcdir)/etc ; then \ rm -rf $(top_srcdir)/etc; \ 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: lcrt-1.1.2/language/zh_CN.c0000664000175000017500000004463311750755533012357 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : NiuTao * Created Time: Sun 20 Feb 2011 01:54:10 PM CST * * Description: */ #include #include "iconnect.h" #include "iedit.h" #include "ifile.h" #include "ifind.h" #include "ihelp.h" #include "ilock.h" #include "ilogin.h" #include "ioptions.h" #include "ipopup.h" #include "iqconnect.h" #include "irename.h" #include "istatusbar.h" #include "istatus.h" #include "itoolbar.h" #include "iview.h" #include "isettings.h" #include "iaccels.h" #include "inotebook.h" #include "imkdir.h" #include "language.h" static struct lcrt_language_config ifile = { .table_name = LCRT_IFILE_TABLE, .members = LCRT_F_NUMBER, .config = { {"f_menuitem", "文件(_F)"}, {"f_connect", "连接(_C) ..."}, {"f_quick_connect", "快速连接(_Q) ..."}, {"f_connect_in_tab", "在标签中打开(_B)"}, {"f_reconnect", "釿–°è¿žæŽ¥(_R)"}, {"f_reconnect_all", "å…¨éƒ¨é‡æ–°è¿žæŽ¥(_A)"}, {"f_disconnect", "æ–­å¼€(_D)"}, {"f_disconnect_all", "全部断开(_O)"}, {"f_clone_session", "克隆会è¯(_N)"}, {"f_lock_session", "é”定会è¯(_K) ..."}, {"f_print", "打å°(_P)"}, {"f_print_setup", "打å°è®¾ç½®(_U) ..."}, {"f_log_session", "记录会è¯(_L)"}, {"f_recent_session", "最近访问"}, {"f_exit", "退出(_E)"}, } }; static struct lcrt_language_config iedit = { .table_name = LCRT_IEDIT_TABLE, .members = LCRT_E_NUMBER, .config = { {"e_menuitem", "编辑(_E)"}, {"e_copy", "å¤åˆ¶(_C)"}, {"e_paste", "粘贴(_P)"}, {"e_copy_and_paste", "å¤åˆ¶å¹¶ç²˜è´´(_O)"}, {"e_select_all", "全选(_A)"}, {"e_find", "查找(_F) ..."}, {"e_clear_scrollback", "清除回滚(_B)"}, {"e_clear_screen", "清除å±å¹•(_S)"}, {"e_clear_screen_and_scrollback", "清除å±å¹•和回滚(_K)"}, {"e_reset", "é‡ç½®(_R)"}, {"e_show_menubar", "显示主èœå•(_M)"}, } }; static struct lcrt_language_config iview = { .table_name = LCRT_IVIEW_TABLE, .members = LCRT_V_NUMBER, .config = { {"v_menuitem", "查看(_V)"}, {"v_menubar", "èœå•æ (_M)"}, {"v_toolbar", "工具æ (_T)"}, {"v_status_bar", "çŠ¶æ€æ (_S)"}, {"v_always_on_top", "总在最上(_A)"}, {"v_full_screen", "å…¨å±(_F)"}, } }; static struct lcrt_language_config ioptions = { .table_name = LCRT_IOPTIONS_TABLE, .members = LCRT_O_NUMBER, .config = { {"o_menuitem", "选项(_O)"}, {"o_session_options", "会è¯é€‰é¡¹(_S) ..."}, {"o_global_options", "全局选项(_G) ..."}, {"o_auto_save_options", "自动ä¿å­˜é€‰é¡¹(_A)"}, {"o_save_settings_now", "立刻ä¿å­˜è®¾ç½®(_N)"}, } }; static struct lcrt_language_config ihelp = { .table_name = LCRT_IHELP_TABLE, .members = LCRT_H_NUMBER, .config = { {"h_menuitem", "帮助(_H)"}, {"h_help", "帮助主题"}, {"h_home_page", "主页(_H)"}, {"h_check_update", "检查更新(_D)"}, {"h_about", "关于(_A)"}, {"h_missing_doc", "没有找到帮助文档!"}, {"h_no_new_version", "没有新版本!"}, {"h_new_version", "检查到新版本:%s\n下载页é¢: %s"}, {"h_check_update_err", "检查新版本出错,å¯èƒ½ç”±äºŽç½‘络ä¸å¯è¾¾!"}, } }; static struct lcrt_language_config itoolbar = { .table_name = LCRT_ITOOLBAR_TABLE, .members = LCRT_B_NUMBER, .config = { {"b_connect", "连接"}, {"b_quick_connect", "快速连接"}, {"b_connect_on_tab", "在标签中连接"}, {"b_reconnect", "釿–°è¿žæŽ¥"}, {"b_disconnect", "断开连接"}, {"b_copy", "å¤åˆ¶"}, {"b_paste", "粘贴"}, {"b_terminal", "打开终端"}, } }; static struct lcrt_language_config iconnect = { .table_name = LCRT_ICONNECT_TABLE, .members = LCRT_C_NUMBER, .config = { {"c_connect_in_tab", "在标签中连接"}, {"c_connect", "连接"}, {"c_quick_connect", "快速连接"}, {"c_rename", "é‡å‘½å会è¯"}, {"c_delete", "删除会è¯"}, {"c_find", "查找会è¯"}, {"c_session_option", "会è¯é€‰é¡¹"}, {"c_mkdir", "新建目录"}, {"c_session", "会è¯"}, {"c_show_dialog_on_startup", "å¯åŠ¨æ—¶æ˜¾ç¤º(_S)"}, {"c_connect_button", "连接(_C)"}, {"c_close_button", "关闭"}, {"c_warn_msg", "确定删除选中会è¯?"}, {"c_err_msg", "创建窗å£å¤±è´¥!"}, } }; static struct lcrt_language_config ilock = { .table_name = LCRT_ILOCK_TABLE, .members = LCRT_K_NUMBER, .config = { {"k_lock_title", "é”定会è¯"}, {"k_unlock_title", "è§£é”会è¯"}, {"k_lock_tip", "输入é”定密ç ï¼Œè¯¥å¯†ç ä¼šåœ¨\nè§£é”会è¯çš„æ—¶å€™ç”¨åˆ°."}, {"k_unlock_tip", "输入解é”密ç ."}, {"k_password", "密ç : "}, {"k_repassword", "冿¬¡è¾“入密ç :"}, {"k_cancel", "关闭"}, {"k_ok", "确定"}, {"k_error", "密ç ä¸åŒ¹é…!"}, {"k_err_msg", "无法创建窗å£!"}, } }; static struct lcrt_language_config ilogin = { .table_name = LCRT_ILOGIN_TABLE, .members = LCRT_L_NUMBER, .config = { {"l_login", "登录"}, {"l_info", "输入用户å和密ç :"}, {"l_again", "ç”¨æˆ·åæˆ–密ç é”™è¯¯:"}, {"l_username", "用户å:"}, {"l_password", "密ç :"}, {"l_remember", "è®°ä½å¯†ç ?"}, {"l_okbutton", "确定"}, {"l_cancelbutton", "关闭"}, {"l_err_msg", "无法创建窗å£!"}, } }; static struct lcrt_language_config ipopup = { .table_name = LCRT_IPOPUP_TABLE, .members = LCRT_P_NUMBER, .config = { {"p_rename", "é‡å‘½å(_M)"}, {"p_reconnect", "釿–°è¿žæŽ¥(_R)"}, {"p_disconnect", "æ–­å¼€(_D)"}, {"p_close", "关闭(_C)"}, {"p_lock_session", "é”定会è¯(_K) ..."}, {"p_unlock_session", "è§£é”会è¯(_K) ..."}, {"p_clone_session", "克隆会è¯(_N)"}, {"p_session_options", "会è¯é€‰é¡¹(_O) ..."}, } }; static struct lcrt_language_config iqconnect = { .table_name = LCRT_IQCONNECT_TABLE, .members = LCRT_Q_NUMBER, .config = { {"q_connect", "快速连接"}, {"q_session_option", "会è¯é€‰é¡¹"}, {"q_lb_protocol", " åè®®:"}, {"q_lb_hostname", " 主机å:"}, {"q_lb_username", " 用户å:"}, {"q_lb_firewall", " 防ç«å¢™:"}, {"q_lb_port", " 端å£: "}, {"q_lb_frame", "认è¯"}, {"q_cb_passwd", "Password"}, {"q_cb_publickey", "PublicKey"}, {"q_cb_keyboard", "KeyBoard Interactive"}, {"q_cb_gssapi", "GSSAPI"}, {"q_cb_rsa", "RSA"}, {"q_cb_tis", "TIS"}, {"q_bt_properties", "属性 ..."}, {"q_lb_default_command", " 默认命令:"}, {"q_cb_show_qconnect", "在å¯åŠ¨æ—¶æ˜¾ç¤ºå¿«é€Ÿè¿žæŽ¥"}, {"q_cb_save_session", "ä¿å­˜ä¼šè¯"}, {"q_cb_open_in_a_tab", "在新标签中打开"}, {"q_bt_connect", "连接"}, {"q_bt_ok", "确定"}, {"q_bt_cancel", "关闭"}, {"q_err_msg", "无法创建窗å£!"}, {"q_sport", " 端å£:"}, {"q_sbaud_rate", " 波特率:"}, {"q_sdata_bits", " æ•°æ®ä½:"}, {"q_sparity", " 奇嶿 ¡éªŒä½:"}, {"q_sstop_bits", " åœæ­¢ä½:"}, {"q_sflow_control", "æµæŽ§åˆ¶"}, {"q_shell", " 终端:"}, {"q_ptitle", "密ç å±žæ€§"}, {"q_pprompt", "修改密ç "}, {"q_pstore_password", " 输入密ç :"}, {"q_pconfirm_password", " 确认密ç :"}, {"p_pcancel", "å–æ¶ˆ"}, {"p_pok", "确定"}, {"p_ppw_unmatch", "密ç ä¸åŒ¹é…!"}, {"q_snot_found", "æœªæ‰¾åˆ°å¯æ‰§è¡Œç¨‹åº!\n"}, } }; static struct lcrt_language_config irename = { .table_name = LCRT_IRENAME_TABLE, .members = LCRT_R_NUMBER, .config = { {"r_title", "é‡å‘½å"}, {"r_tip", "输入新åç§°:"}, {"r_cancel", "关闭"}, {"r_ok", "确定"}, {"r_error", "å·²ç»æœ‰ç›¸åŒå称的会è¯ï¼Œè¯·é‡æ–°è¾“å…¥!"}, {"r_err_msg", "无法创建窗å£!"}, } }; static struct lcrt_language_config imkdir = { .table_name = LCRT_IMKDIR_TABLE, .members = LCRT_M_NUMBER, .config = { {"m_title", "新建目录"}, {"m_tip", "输入新目录å:"}, {"r_cancel", "关闭"}, {"m_ok", "确定"}, {"m_error", "å·²ç»æœ‰ç›¸åŒå称的会è¯ï¼Œè¯·é‡æ–°è¾“å…¥!"}, {"m_err_msg", "无法创建窗å£!"}, } }; static struct lcrt_language_config istatus = { .table_name = LCRT_ISTATUS_TABLE, .members = LCRT_S_NUMBER, .config = { {"s_tooltip", "Linux下的远程登录工具"}, {"s_show_status", "显示主窗å£"}, {"w_quit", "退出"}, {"w_window_exit", "当剿œ‰%d个会è¯å·²ç»è¿žæŽ¥ï¼Œæ˜¯å¦é€€å‡º?"}, {"w_session_disconnect", "确定从%s 断开连接?"}, } }; static struct lcrt_language_config isettings = { .table_name = LCRT_ISETTINGS_TABLE, .members = LCRT_T_NUMBER, .config = { {"dialog_settings", "全局选项"}, {"g_nb_general", "常规"}, {"g_lb_language_support", "语言支æŒ"}, {"g_lb_language_support_note", "选择软件界é¢çš„语言显示,设置会在é‡å¯è½¯ä»¶åŽç”Ÿæ•ˆ."}, {"g_lb_current_language", "当å‰è¯­è¨€:"}, {"g_lb_dialog", "å¯¹è¯æ¡†"}, {"g_rb_connect", "å¯åŠ¨æ—¶æ˜¾ç¤ºè¿žæŽ¥å¯¹è¯æ¡†"}, {"g_rb_quick_connect", "å¯åŠ¨æ—¶æ˜¾ç¤ºå¿«é€Ÿè¿žæŽ¥å¯¹è¯æ¡†"}, {"g_rb_none", "䏿˜¾ç¤º"}, {"g_lb_view", "显示"}, {"g_cb_show_toolbar", "显示工具æ "}, {"g_cb_show_statusbar", "æ˜¾ç¤ºçŠ¶æ€æ "}, {"k_nb_keybindings", "å¿«æ·é”®"}, {"k_lb_keyboard_shortcut", "å¿«æ·é”®"}, {"k_lb_keyboard_shortcuts_note", "设置å„ç§æ“作的快æ·é”®ï¼Œè®¾ç½®ä¼šåœ¨é‡å¯è½¯ä»¶åŽç”Ÿæ•ˆ."}, {"k_cb_enable_f10", "å¯ç”¨èœå•å¿«æ·é”®(默认是 F10)"}, {"t_nb_terminal", "虚拟终端"}, {"t_lb_terminal_settings", "虚拟终端设置"}, {"t_lb_terminal_note", "以下是对虚拟终端(VTE)çš„è®¾ç½®ã€‚åªæœ‰VTE库被载入时\n这些设置æ‰ä¼šç”Ÿæ•ˆ."}, {"t_lb_font", "终端字体:"}, {"t_lb_foregroud_color", "字体颜色:"}, {"t_lb_background_color", "背景颜色:"}, {"t_lb_background_image", "背景图片:"}, {"t_lb_transparent", "逿˜Žåº¦: "}, {"t_tp_transparent", "åªæœ‰é€æ˜Žåº¦è¢«è®¾ç½®ä¸º0的时候,背景图片æ‰ä¼šæ˜¾ç¤º."}, {"t_lb_scrollback_lines", "回滚行数:"}, {"t_cb_bell", "终端å“铃"}, {"t_bt_restore_defaul", "æ¢å¤é»˜è®¤"}, {"a_nb_application", "应用软件"}, {"a_lb_application", "应用软件设置"}, {"a_lb_application_note", "LCRT在è¿è¡Œæ—¶ä¼šè°ƒç”¨æœ¬åœ°çš„应用程åºä»¥å»ºç«‹\n连接,在这里你å¯ä»¥è®¾ç½®è¢«è°ƒç”¨çš„应用软件."}, {"a_lb_shell", "shell:"}, {"a_lb_ssh", "ssh:"}, {"a_lb_telnet", "telnet:"}, {"lb_applybutton", "应用"}, {"lb_cancelbutton", "å–æ¶ˆ"}, {"lb_okbutton", "确定"}, {"error_msg", "åˆ›å»ºå¯¹è¯æ¡†å¤±è´¥!"}, } }; static struct lcrt_language_config iaccels = { .table_name = LCRT_IACCELS_TABLE, .members = LCRT_KB_NUMBER, .config = { {"kb_action", "行为"}, {"kb_shortcut_key", "å¿«æ·é”®"}, {"kb_file", "文件"}, {"kb_f_connect", "连接"}, {"kb_f_quick_connect", "快速连接"}, {"kb_f_connect_in_tab", "在标签中打开"}, {"kb_f_reconnect", "釿–°è¿žæŽ¥"}, {"kb_edit", "编辑"}, {"kb_e_copy", "å¤åˆ¶"}, {"kb_e_paste", "粘贴"}, {"kb_e_find", "查找"}, {"kb_session", "会è¯"}, {"kb_s_clone", "克隆"}, {"kb_s_close", "关闭"}, {"kb_s_move_next", "å‘å‰ç§»åЍ"}, {"kb_s_move_prev", "å‘åŽç§»åЍ"}, {"kb_s_switch_next", "切æ¢åˆ°å‰ä¸€ä¸ª"}, {"kb_s_switch_prev", "切æ¢åˆ°åŽä¸€ä¸ª"}, {"kb_warn_msg", "å¿«æ·é”®\"%s\"å·²ç»è¢«ç»‘定到\"%s\"ä¸Šï¼Œè¯·é‡æ–°é€‰æ‹©!"}, {"kb_err_msg", "åˆ›å»ºå¯¹è¯æ¡†å¤±è´¥!"} } }; static struct lcrt_language_config iterminal = { .table_name = LCRT_ITERMINAL_TABLE, .members = LCRT_TM_NUMBER, .config = { {"tm_connection_timed_out", "连接超时!"}, {"tm_connection_refused", "连接失败,å¯èƒ½è¿œç«¯æœåŠ¡æ²¡æœ‰å¼€å¯!"}, {"tm_connection_failed", "ç”¨æˆ·åæˆ–密ç é”™è¯¯!"}, {"tm_connection_prog_not_found", "没有找到程åº\"%s\", 请安装ï¼"}, {"tm_connection_not_support", "当å‰ç‰ˆæœ¬ä¸æ”¯æŒï¼"}, {"tm_serial_error", "无法打开 \"%s\",%s."}, } }; static struct lcrt_language_config ifind = { .table_name = LCRT_IFIND_TABLE, .members = LCRT_I_NUMBER, .config = { {"i_title", "查找"}, {"i_tip_connect", "è¾“å…¥ä½ è¦æŸ¥æ‰¾çš„会è¯å:"}, {"i_tip_edit", "è¾“å…¥ä½ è¦æŸ¥æ‰¾çš„字符串å:"}, {"i_cancel", "å–æ¶ˆ"}, {"i_prev", "上一个"}, {"i_next", "下一个"}, {"i_info", "未找到!"}, {"i_err_msg", "内存ä¸è¶³!"}, } }; struct lcrt_language zh_CN = { .language_name = "简体中文", .db_name = "zh_CN.db", .language = { &ifile, &iedit, &iview, &ioptions, &ihelp, &itoolbar, &iconnect, &ilock, &ilogin, &ipopup, &iqconnect, &irename, &imkdir, &istatus, &isettings, &iaccels, &iterminal, &ifind, }, }; lcrt-1.1.2/language/de_DE.c0000664000175000017500000004613211750755570012313 00000000000000/* * Copyright (c) 2009-~ Niu Tao * * This source code is released for free distribution under the terms of the * GNU General Public License * * Author : Manfred Mueller * Created Time: Tue 29 Mar 2011 07:19:45 PM CEST * File Name : de_DE.c * * Description: */ #include #include "iconnect.h" #include "iedit.h" #include "ifile.h" #include "ifind.h" #include "ihelp.h" #include "ilock.h" #include "ilogin.h" #include "ioptions.h" #include "ipopup.h" #include "iqconnect.h" #include "irename.h" #include "istatusbar.h" #include "istatus.h" #include "itoolbar.h" #include "iview.h" #include "isettings.h" #include "iaccels.h" #include "inotebook.h" #include "imkdir.h" #include "language.h" static struct lcrt_language_config ifile = { .table_name = LCRT_IFILE_TABLE, .members = LCRT_F_NUMBER, .config = { {"f_menuitem", "_Datei"}, {"f_connect", "_Verbinden ..."}, {"f_quick_connect", "_Schnell verbinden ..."}, {"f_connect_in_tab", "In Ta_b verbinden"}, {"f_reconnect", "_Erneut verbinden"}, {"f_reconnect_all", "_Alle erneut verbinden"}, {"f_disconnect", "_Trennen"}, {"f_disconnect_all", "Alle T_rennen"}, {"f_clone_session", "Sitzung Klo_nen"}, {"f_lock_session", "Sitzung _sperren ..."}, {"f_print", "_Drucken"}, {"f_print_setup", "Ein_stellungen drucken ..."}, {"f_log_session", "_Sitzungsprotokoll"}, {"f_recent_session", "Letzte Sitzung"}, {"f_exit", "E_nde"}, } }; static struct lcrt_language_config iedit = { .table_name = LCRT_IEDIT_TABLE, .members = LCRT_E_NUMBER, .config = { {"e_menuitem", "_Bearbeiten"}, {"e_copy", "_Kopieren"}, {"e_paste", "_Einfügen"}, {"e_copy_and_paste", "K_opieren und Einfügen"}, {"e_select_all", "_Alle auswählen"}, {"e_find", "_Finden ..."}, {"e_clear_scrollback", "_Verlauf löschen"}, {"e_clear_screen", "_Bildschirm löschen"}, {"e_clear_screen_and_scrollback", "Bildschirm und _Verlauf _löschen"}, {"e_reset", "Ver_werfen"}, {"e_show_menubar", "Menü anzeigen"}, } }; static struct lcrt_language_config iview = { .table_name = LCRT_IVIEW_TABLE, .members = LCRT_V_NUMBER, .config = { {"v_menuitem", "_Anzeige"}, {"v_menubar", "_Menü"}, {"v_toolbar", "_Werkzeugleiste"}, {"v_status_bar", "_Statusleiste"}, {"v_always_on_top", "_Immer oben"}, {"v_full_screen", "_Vollbild"}, } }; static struct lcrt_language_config ioptions = { .table_name = LCRT_IOPTIONS_TABLE, .members = LCRT_O_NUMBER, .config = { {"o_menuitem", "_Optionen"}, {"o_session_options", "_Sitzungs-Optionen ..."}, {"o_global_options", "_Globale Optionen ..."}, {"o_auto_save_options", "Optionen _automatisch speichern"}, {"o_save_settings_now", "Einstellungen _jetzt speichern"}, } }; static struct lcrt_language_config ihelp = { .table_name = LCRT_IHELP_TABLE, .members = LCRT_H_NUMBER, .config = { {"h_menuitem", "_Hilfe"}, {"h_help", "Hilfe"}, {"h_home_page", "_Webseite"}, {"h_check_update", "_Aktualisierung"}, {"h_about", "_Über"}, {"h_missing_doc", "Hilfedokument fehlt!"}, {"h_no_new_version", "Ihre Version ist aktuell!"}, {"h_new_version", "Neuere Version %s gefunden!\nHerunterladen von: %s"}, {"h_check_update_err", "Aktualisierungsfehler: Das Netzwerk ist nicht erreichbar!"}, } }; static struct lcrt_language_config itoolbar = { .table_name = LCRT_ITOOLBAR_TABLE, .members = LCRT_B_NUMBER, .config = { {"b_connect", "Verbinden"}, {"b_quick_connect", "Schnell verbinden"}, {"b_connect_on_tab", "In Tab verbinden"}, {"b_reconnect", "Aktuelle Sitzung erneut verbinden"}, {"b_disconnect", "Aktuelle Sitzung trennen"}, {"b_copy", "Kopieren"}, {"b_paste", "Einfügen"}, {"b_terminal", "Ein Terminal öffnen"}, } }; static struct lcrt_language_config iconnect = { .table_name = LCRT_ICONNECT_TABLE, .members = LCRT_C_NUMBER, .config = { {"c_connect_in_tab", "In Tab verbinden"}, {"c_connect", "Verbinden"}, {"c_quick_connect", "Schnell verbinden"}, {"c_rename", "Eine Sitzung umbenennen"}, {"c_delete", "Eine Sitzung löschen"}, {"c_find", "Eine Sitzung finden"}, {"c_session_option", "Sitzungs-_Optionen"}, {"c_mkdir", "Neuen Ordner erstellen"}, {"c_session", "Sitzungen"}, {"c_show_dialog_on_startup", "_Startdialog anzeigen"}, {"c_connect_button", "Verbinden"}, {"c_close_button", "Schliessen"}, {"c_warn_msg", "Wollen Sie das Objekt wirklich löschen ?"}, {"c_err_msg", "Keine Daten zum Speichern vorhanden"}, } }; static struct lcrt_language_config ilock = { .table_name = LCRT_ILOCK_TABLE, .members = LCRT_K_NUMBER, .config = { {"k_lock_title", "Sitzung sperren"}, {"k_unlock_title", "Sitzung entsperren"}, {"k_lock_tip", "Das eingegebene Passwort wird zum \nEntsperren der Sitzung verwendet."}, {"k_unlock_tip", "Bitte ein Passwort zum Entsperren eingeben."}, {"k_password", "Passwort: "}, {"k_repassword", "Passwort wiederholen:"}, {"k_cancel", "Abbrechen"}, {"k_ok", "OK"}, {"k_error", "Passworte stimmen nicht überein!"}, {"k_err_msg", "Keine Daten zum Speichern vorhanden"}, } }; static struct lcrt_language_config ilogin = { .table_name = LCRT_ILOGIN_TABLE, .members = LCRT_L_NUMBER, .config = { {"l_login", "Anmeldung"}, {"l_info", "Benutzer & Passwort angeben:"}, {"l_again", "Benutzer- oder Passwort-Fehler:"}, {"l_username", "Benutzer:"}, {"l_password", "Passwort:"}, {"l_remember", "Merken ?"}, {"l_okbutton", "OK"}, {"l_cancelbutton", "Abbrechen"}, {"l_err_msg", "Keine Daten zum Speichern vorhanden"}, } }; static struct lcrt_language_config ipopup = { .table_name = LCRT_IPOPUP_TABLE, .members = LCRT_P_NUMBER, .config = { {"p_rename", "U_mbenennen"}, {"p_reconnect", "_Erneut verbinden"}, {"p_disconnect", "_Trennen"}, {"p_close", "_Schliessen"}, {"p_lock_session", "Sitzung s_perren ..."}, {"p_unlock_session", "Sitzung entspe_rren ..."}, {"p_clone_session", "Sitzung _kopieren"}, {"p_session_options", "Sitzungs-_Optionen ..."}, } }; static struct lcrt_language_config iqconnect = { .table_name = LCRT_IQCONNECT_TABLE, .members = LCRT_Q_NUMBER, .config = { {"q_connect", "Schnell verbinden"}, {"q_session_option", "_Sitzungs-Optionen"}, {"q_lb_protocol", " Protokoll:"}, {"q_lb_hostname", " Rechner:"}, {"q_lb_username", " Benutzer:"}, {"q_lb_firewall", " Firewall:"}, {"q_lb_port", " Port: "}, {"q_lb_frame", "Authentifizierung"}, {"q_cb_passwd", "Passwort"}, {"q_cb_publickey", "PublicKey"}, {"q_cb_keyboard", "KeyBoard Interactive"}, {"q_cb_gssapi", "GSSAPI"}, {"q_cb_rsa", "RSA"}, {"q_cb_tis", "TIS"}, {"q_bt_properties", "Eigenschaften..."}, {"q_lb_default_command", " Commando:"}, {"q_cb_show_qconnect", "Schnellverbindung beim Start anzeigen"}, {"q_cb_save_session", "Sitzung speichern"}, {"q_cb_open_in_a_tab", "In Tab öffnen"}, {"q_bt_connect", "Verbinden"}, {"q_bt_ok", "OK"}, {"q_bt_cancel", "Abbrechen"}, {"q_err_msg", "Keine Daten zum Speichern vorhanden"}, {"q_sport", " Port:"}, {"q_sbaud_rate", " Baud rate:"}, {"q_sdata_bits", " Data bits:"}, {"q_sparity", " Paritet:"}, {"q_sstop_bits", " Stop bits:"}, {"q_sflow_control", "flow-kontrol"}, {"q_shell", " Schale:"}, {"q_ptitle", "Password Properties"}, {"q_pprompt", "Passwort ändern"}, {"q_pstore_password", " Store password:"}, {"q_pconfirm_password", " Passwort bestätigen:"}, {"p_pcancel", "Abbrechen"}, {"p_pok", "OK"}, {"p_ppw_unmatch", "Das Passwort kann nicht überein!"}, {"q_snot_found", "Shell ist nicht gefunden!\n"}, } }; static struct lcrt_language_config irename = { .table_name = LCRT_IRENAME_TABLE, .members = LCRT_R_NUMBER, .config = { {"r_title", "Umbenennen"}, {"r_tip", "Neuen Namen angeben:"}, {"r_cancel", "Abbrechen"}, {"r_ok", "OK"}, {"r_error", "Angegebener Name bereits vorhanden!"}, {"r_err_msg", "Keine Daten zum Speichern vorhanden"}, } }; static struct lcrt_language_config imkdir = { .table_name = LCRT_IMKDIR_TABLE, .members = LCRT_M_NUMBER, .config = { {"m_title", "Neuer Ordner"}, {"m_tip", "Geben Sie den neuen Ordnernamen:"}, {"m_cancel", "Abbrechen"}, {"m_ok", "OK"}, {"m_error", "Angegebener Name bereits vorhanden!"}, {"m_err_msg", "Keine Daten zum Speichern vorhanden"}, } }; static struct lcrt_language_config istatus = { .table_name = LCRT_ISTATUS_TABLE, .members = LCRT_S_NUMBER, .config = { {"s_tooltip", "Linux -Werkzeug für entfernte Anmeldung"}, {"s_show_status", "Haupt-Fenster"}, {"w_quit", "Beenden"}, {"w_window_exit", "%d Sitzung(en) aktiv, wollen Sie wirklich trennen ?"}, {"w_session_disconnect", "Verbindung zu %s trennen?"}, } }; static struct lcrt_language_config isettings = { .table_name = LCRT_ISETTINGS_TABLE, .members = LCRT_T_NUMBER, .config = { {"dialog_settings", "Globale Optionen"}, {"g_nb_general", "Allgemein"}, {"g_lb_language_support", "Sprachunterstützung"}, {"g_lb_language_support_note", "Zum Aktivieren der neuen Sprache\nbitte die Anwendung neu starten."}, {"g_lb_current_language", "Aktuelle Sprache:"}, {"g_lb_dialog", "Dialog"}, {"g_rb_connect", "Verbindungsdialog beim Start anzeigen"}, {"g_rb_quick_connect", "Schnellverbindungsdialog beim Start anzeigen"}, {"g_rb_none", "Kein"}, {"g_lb_view", "Anzeige"}, {"g_cb_show_toolbar", "Werkzeugleiste anzeigen"}, {"g_cb_show_statusbar", "Statusleiste anzeigen"}, {"k_nb_keybindings", "Tastenbelegung"}, {"k_lb_keyboard_shortcut", "Tastatur-Schnellbefehle"}, {"k_lb_keyboard_shortcuts_note", "Hier können Sie Tasten mit Befehlen belegen."}, {"k_cb_enable_f10", "Aktivieren Sie das Menü Tastenkombination(F10 \nstandardmäßig)"}, {"t_nb_terminal", "Terminal"}, {"t_lb_terminal_settings", "Terminal-Einstellungen"}, {"t_lb_terminal_note", "Die Einstellungen für den virtuellen Terminal-\nEmulator gelten nur, falls die VTE-Bibliothek\ngeladen werden kann."}, {"t_lb_font", "Terminal-Schrift:"}, {"t_lb_foregroud_color", "Schrift-Farbe:"}, {"t_lb_background_color", "Hintergrund-Farbe:"}, {"t_lb_background_image", "Hintergrund-Bild:"}, {"t_lb_transparent", "Transparent "}, {"t_tp_transparent", "HINWEIS: Zum Anzeigen des Bildes muss die Transparenz auf 0 gestellt sein."}, {"t_lb_scrollback_lines", "Zu rollende Zeilen:"}, {"t_cb_bell", "Terminal-Glocke"}, {"t_bt_restore_defaul", "Zurücksetzen"}, {"a_nb_application", "Anwendung"}, {"a_lb_application", "Anwendungen"}, {"a_lb_application_note", "LCRT kann eine vorher hier konfigurierte lokale\nAnwendung starten, sobald sie eine Verbindung\nherstellen."}, {"a_lb_shell", "shell:"}, {"a_lb_ssh", "ssh:"}, {"a_lb_telnet", "telnet:"}, {"lb_applybutton", "Anwenden"}, {"lb_cancelbutton", "Abbrechen"}, {"lb_okbutton", "OK"}, {"error_msg", "Keine Daten zum Speichern vorhanden"}, } }; static struct lcrt_language_config iaccels = { .table_name = LCRT_IACCELS_TABLE, .members = LCRT_KB_NUMBER, .config = { {"kb_action", "Aktion"}, {"kb_shortcut_key", "Befehl"}, {"kb_file", "Datei"}, {"kb_f_connect", "Verbinden"}, {"kb_f_quick_connect", "Schnell verbinden"}, {"kb_f_connect_in_tab", "In Tab verbinden"}, {"kb_f_reconnect", "Erneut verbinden"}, {"kb_edit", "Bearbeiten"}, {"kb_e_copy", "Kopieren"}, {"kb_e_paste", "Einfügen"}, {"kb_e_find", "Finden"}, {"kb_session", "Sitzung"}, {"kb_s_clone", "Kopieren"}, {"kb_s_close", "Schliessen"}, {"kb_s_move_next", "Gehe zum Nächsten"}, {"kb_s_move_prev", "Gehe zum Vorherigen"}, {"kb_s_switch_next", "Zum Nächsten umschalten"}, {"kb_s_switch_prev", "Zum Vorherigen umschalten"}, {"kb_warn_msg", "Die Taste \"%s\" ist bereits mit Befehl \"%s\" belegt"}, {"kb_err_msg", "Keine Daten zum Speichern vorhanden"} } }; static struct lcrt_language_config iterminal = { .table_name = LCRT_ITERMINAL_TABLE, .members = LCRT_TM_NUMBER, .config = { {"tm_connection_timed_out", "Zeitüberschreitung!"}, {"tm_connection_refused", "Verbindungsaufnahme verweigert!"}, {"tm_connection_failed", "Benutzer- oder Passwort-Fehler, ABBRUCH!"}, {"tm_connection_prog_not_found", "Können Sie nicht das programe \"%s\", installieren Sie diese!"}, {"tm_connection_not_support", "Aktuelle Version nicht unterstützt!"}, {"tm_serial_error", "Kann nicht geöffnet werden \"%s\",%s."}, } }; static struct lcrt_language_config ifind = { .table_name = LCRT_IFIND_TABLE, .members = LCRT_I_NUMBER, .config = { {"i_title", "Finden"}, {"i_tip_connect", "Geben Sie den Namen der Session finden Sie:"}, {"i_tip_edit", "Geben Sie die Zeichenfolge finden Sie:"}, {"i_cancel", "Abbrechen"}, {"i_prev", "Vorherige"}, {"i_next", "Nächste"}, {"i_info", "Es gibt nichts zu finden!"}, {"i_err_msg", "Keine Daten zum Speichern vorhanden"}, } }; struct lcrt_language de_DE = { .language_name = "Deutsch", .db_name = "de_DE.db", .language = { &ifile, &iedit, &iview, &ioptions, &ihelp, &itoolbar, &iconnect, &ilock, &ilogin, &ipopup, &iqconnect, &irename, &imkdir, &istatus, &isettings, &iaccels, &iterminal, &ifind, }, }; lcrt-1.1.2/gnome/0000775000175000017500000000000011752203002010557 500000000000000lcrt-1.1.2/gnome/Makefile.am0000664000175000017500000000050611750112142012536 00000000000000EXTRA_DIST = lcrt.desktop define install-menuitem test -z $(DESTDIR)${datadir}/$(1) || $(MKDIR_P) $(DESTDIR)/${datadir}/$(1) $(INSTALL_DATA) $(2) $(DESTDIR)${datadir}/$(1) endef install-data-local: $(call install-menuitem,applications,lcrt.desktop) uninstall-local: rm -f $(DESTDIR)${datadir}/applications/lcrt.desktop lcrt-1.1.2/gnome/lcrt.desktop0000664000175000017500000000151111750112142013036 00000000000000[Desktop Entry] Encoding=UTF-8 Name=lcrt Name[en_US]=Linux Remote Login Tool Name[zh_CN]=Linux远程登录工具 Name[de_DE]=Linux Remote Login-Tool Comment[en_US]=Auto connect to remote ssh or telnet server without enter username or password(since you had saved them once). Comment[en_CN]=自动登录到远程ssh或者telnetæœåŠ¡å™¨ä¸Šè€Œä¸éœ€è¦è¾“å…¥ç”¨æˆ·åæˆ–者密ç (如果你已ç»ä¿å­˜äº†è¿™äº›ä¿¡æ¯)。 Comment[de_DE]=Automatisches Verbinden mit Remote-SSH oder Telnet-Server ohne Eingabe Benutzername oder Passwort (da Sie hatte sie einmal gespeichert). TryExec=lcrt Exec=lcrt Icon=lcrt-logo.xpm Type=Application X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=lcrt X-GNOME-Bugzilla-Component=BugBuddyBugs X-GNOME-Bugzilla-Version=0.0.1 Categories=GNOME;GTK;Utility; StartupNotify=true X-Ubuntu-Gettext-Domain=lcrt lcrt-1.1.2/gnome/Makefile.in0000664000175000017500000002175711750112300012556 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = gnome DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac 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 = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LCRT_LIB_DEPS_CFLAGS = @LCRT_LIB_DEPS_CFLAGS@ LCRT_LIB_DEPS_LIBS = @LCRT_LIB_DEPS_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = lcrt.desktop all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gnome/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign gnome/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-local define install-menuitem test -z $(DESTDIR)${datadir}/$(1) || $(MKDIR_P) $(DESTDIR)/${datadir}/$(1) $(INSTALL_DATA) $(2) $(DESTDIR)${datadir}/$(1) endef install-data-local: $(call install-menuitem,applications,lcrt.desktop) uninstall-local: rm -f $(DESTDIR)${datadir}/applications/lcrt.desktop # 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: lcrt-1.1.2/configure0000775000175000017500000061502311750112300011306 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for lcrt 1.1.2. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: niutao0602@gmail.com about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &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='lcrt' PACKAGE_TARNAME='lcrt' PACKAGE_VERSION='1.1.2' PACKAGE_STRING='lcrt 1.1.2' PACKAGE_BUGREPORT='niutao0602@gmail.com' PACKAGE_URL='' ac_unique_file="src/Makefile.am" ac_default_prefix=/usr # 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_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS EGREP GREP CPP RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC LCRT_LIB_DEPS_LIBS LCRT_LIB_DEPS_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG 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_dependency_tracking enable_debug ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LCRT_LIB_DEPS_CFLAGS LCRT_LIB_DEPS_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures lcrt 1.1.2 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/lcrt] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of lcrt 1.1.2:";; 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] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-debug debug program(default is no) Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LCRT_LIB_DEPS_CFLAGS C compiler flags for LCRT_LIB_DEPS, overriding pkg-config LCRT_LIB_DEPS_LIBS linker flags for LCRT_LIB_DEPS, overriding pkg-config CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory 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 lcrt configure 1.1.2 generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------- ## ## Report this to niutao0602@gmail.com ## ## ----------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 $as_echo_n "checking for int$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main () { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done 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_find_intX_t # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $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_member # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done 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_find_uintX_t # 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 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 lcrt $as_me 1.1.2, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # 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_config_headers="$ac_config_headers config.h" am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='lcrt' VERSION='1.1.2' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' #GNOME_INIT check_deps() { echo "$LCRT_LIB_DEPS_PKG_ERRORS" echo "If the packages is not found,you can install them with follow command:" echo "In Unbutu/Debian system:" echo " sudo apt-get install libgtk2.0-dev libvte-dev libsqlite3-dev" echo "In Fedora/CentOS:" echo " sudo yum install gtk-devel vte-devel sqlite3-devel" echo "" exit 1 } if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LCRT_LIB_DEPS" >&5 $as_echo_n "checking for LCRT_LIB_DEPS... " >&6; } if test -n "$LCRT_LIB_DEPS_CFLAGS"; then pkg_cv_LCRT_LIB_DEPS_CFLAGS="$LCRT_LIB_DEPS_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LCRT_LIB_DEPS_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 " 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LCRT_LIB_DEPS_LIBS"; then pkg_cv_LCRT_LIB_DEPS_LIBS="$LCRT_LIB_DEPS_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 \""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 ") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LCRT_LIB_DEPS_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 " 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LCRT_LIB_DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 " 2>&1` else LCRT_LIB_DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk+-2.0 >= 2.0.0 vte >= 0.22.2 sqlite3 >= 3.0.0 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LCRT_LIB_DEPS_PKG_ERRORS" >&5 check_deps elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } check_deps else LCRT_LIB_DEPS_CFLAGS=$pkg_cv_LCRT_LIB_DEPS_CFLAGS LCRT_LIB_DEPS_LIBS=$pkg_cv_LCRT_LIB_DEPS_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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 #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' 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'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 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 # Checks for libraries. if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" # Checks for header files. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #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 fcntl.h inttypes.h libintl.h limits.h stddef.h stdint.h stdlib.h string.h sys/file.h sys/ioctl.h sys/mount.h sys/param.h sys/time.h unistd.h sqlite3.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" case $ac_cv_c_int32_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define int32_t $ac_cv_c_int32_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define off_t long int _ACEOF fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" if test "x$ac_cv_member_struct_stat_st_blksize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_STAT_ST_BLKSIZE 1 _ACEOF fi ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi # Checks for library functions. for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in $ac_header_list 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_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi for ac_func in clock_gettime fdatasync ftruncate getcwd gettimeofday localtime_r memmove memset mkdir munmap select strchr strerror strstr do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done #debug options support # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; CFLAGS="${CFLAGS} -D__LCRT_DEBUG__ -Wall" fi ac_config_files="$ac_config_files Makefile src/Makefile language/Makefile help/Makefile help/man/Makefile help/man/lcrt.1 pixmaps/Makefile gnome/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by lcrt $as_me 1.1.2, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac 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="\\ lcrt config.status 1.1.2 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "language/Makefile") CONFIG_FILES="$CONFIG_FILES language/Makefile" ;; "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;; "help/man/Makefile") CONFIG_FILES="$CONFIG_FILES help/man/Makefile" ;; "help/man/lcrt.1") CONFIG_FILES="$CONFIG_FILES help/man/lcrt.1" ;; "pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES pixmaps/Makefile" ;; "gnome/Makefile") CONFIG_FILES="$CONFIG_FILES gnome/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"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo " lcrt-$VERSION: prefix: ${prefix} source code location: ${srcdir} compiler: ${CC} " lcrt-1.1.2/Doxyfile0000664000175000017500000017355711750112142011124 00000000000000# Doxyfile 1.6.1 # 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 (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = lcrt # 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 = doc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # 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: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # 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 # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # 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 = YES # 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. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # 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 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 regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_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 INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = 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 # 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 = # 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 OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = 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 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # 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 = NO # 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 = YES # 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 # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # 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 classes 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 HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # 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 # 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 # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # 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 SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = 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 the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # 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 # 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 consists 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 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 # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # 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 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # 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. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) 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 = language src help pixmaps gnome # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # 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 *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h *.c # 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 = YES # 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. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # 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. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # 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. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. 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 # 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 REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = 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 #--------------------------------------------------------------------------- # 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. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! 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 HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # 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 compiled 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 directory. 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 CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # 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 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # 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 = 1 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value 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, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # 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 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = YES #--------------------------------------------------------------------------- # 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 = YES # 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 = YES # 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 # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = 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 optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # 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 assignments. 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 = NO # 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 = .3 # 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. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML 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 `xml' will be used as the default path. XML_OUTPUT = xml # 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 = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # 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 Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # 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_DEFINED 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. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF 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::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. 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 superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # 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 = YES # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # 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 the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # 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 CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # 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 # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = 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 in 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 DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # 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 intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES