vdk-2.4.0/0000777000000000000000000000000010052401037006004 5vdk-2.4.0/doc/0000777000000000000000000000000010052401037006551 5vdk-2.4.0/doc/doxy/0000777000000000000000000000000010052401037007534 5vdk-2.4.0/doc/doxy/Doxyfile.in0000644000000000000000000004535507233634406011616 # Doxyfile 1.1.0 # This file describes the settings to be used by doxygen for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of word surrounded # by quotes) that should identify the project. PROJECT_NAME = "@PACKAGE@ @VERSION@" # 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 = @top_srcdir@/doc/doxy # 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: # Dutch, French, Italian, Czech, Swedish, German and Japanese OUTPUT_LANGUAGE = English # 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 # 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 # If the EXTRACT_ALL tag is set to YES all classes and functions will be # included in the documentation, even if no documentation was available. 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 = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members inside documented classes or files. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all # undocumented classes. HIDE_UNDOC_CLASSES = YES # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the ALWAYS_DETAILS_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 FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. STRIP_FROM_PATH = # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a class diagram (in Html and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. CLASS_DIAGRAMS = YES # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # If the CASE_SENSE_NAMES tag is set to NO (the default) 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. CASE_SENSE_NAMES = YES # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES # If the JAVADOC_AUTOBRIEF tag is set to YES (the default) 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-style will # behave just like the Qt-style comments. JAVADOC_AUTOBRIEF = YES # if the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # reimplements. INHERIT_DOCS = YES # if the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # 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 #--------------------------------------------------------------------------- # 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 = . @top_srcdir@/vdk # 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 all files are included. FILE_PATTERNS = *.cc *.h *.hh # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = #--------------------------------------------------------------------------- # 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 = @GENERATE_HTML@ # 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 = # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = NO # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO #--------------------------------------------------------------------------- # 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 = YES # 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 use to specify a prefix that should be ignored # while generating the index headers. IGNORE_PREFIX = VDK #--------------------------------------------------------------------------- # 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 = @GENERATE_LATEX@ # 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 = # 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 = a4 # 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 #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # For now this is experimental and is disabled by default. The RTF output # is optimised for Word 97 and may not look too pretty with other 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 = # 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 a WORD or other. # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO #--------------------------------------------------------------------------- # 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 = @GENERATE_MAN@ # 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 = # 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 #--------------------------------------------------------------------------- # 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 = 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 = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = @TAG_SIGC@ # 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 tag. EXPAND_ONLY_PREDEF = NO #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = @PERL@ #--------------------------------------------------------------------------- # Configuration options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. BIN_ABSPATH = @DOXYGEN@ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. EXT_DOC_PATHS = vdk-2.4.0/doc/doxy/Makefile.in0000644000000000000000000002207210052331516011524 # Makefile.in generated by automake 1.7.8 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ GNOMEDEFINE = @GNOMEDEFINE@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GNOME_VDK = @GNOME_VDK@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_VDK_AGE = @LT_VDK_AGE@ LT_VDK_CURRENT = @LT_VDK_CURRENT@ LT_VDK_RELEASE = @LT_VDK_RELEASE@ LT_VDK_REVISION = @LT_VDK_REVISION@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIGCDEFINE = @SIGCDEFINE@ SIGC_CFLAGS = @SIGC_CFLAGS@ SIGC_LIBS = @SIGC_LIBS@ STRIP = @STRIP@ TAG_SIGC = @TAG_SIGC@ TESTSIGCVDK = @TESTSIGCVDK@ TESTVDK = @TESTVDK@ VDK_RELEASE_DATE = @VDK_RELEASE_DATE@ VDK_VERSION = @VDK_VERSION@ VDK_VERSION_MAJOR = @VDK_VERSION_MAJOR@ VDK_VERSION_MICRO = @VDK_VERSION_MICRO@ VDK_VERSION_MINOR = @VDK_VERSION_MINOR@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ # In EXTRA_DIST variable you must put every file which isn't use # to be compiled. # In gif_files and jpg_files you add all the screenshots you take # or other images used for generating the documentation gif_files = \ vdkform.gif \ vdklogo.gif jpg_files = EXTRA_DIST = \ $(gif_files)\ $(jpg_files) subdir = doc/doxy ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = Doxyfile DIST_SOURCES = DIST_COMMON = $(srcdir)/Makefile.in Doxyfile.in Makefile.am all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/doxy/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) Doxyfile: $(top_builddir)/config.status Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: tags: TAGS TAGS: ctags: CTAGS CTAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-info-am docs: Doxyfile $(DOXYGEN) @if test -n "$(DOXYGEN)"; then \ if test $(GENERATE_HTML) = YES; then \ if test -n "$(gif_files)"; then \ cp -f *.gif html/; \ fi; \ if test -n "$(jpg_files)"; then \ cp -f *.jpg html/; \ fi; \ fi; \ if test $(GENERATE_LATEX) = YES; then \ cd latex/ && $(MAKE); \ fi; \ else \ echo "*************************************"; \ echo "* You don't have doxygen installed. *"; \ echo "* Please install it if you want to *"; \ echo "* generate the docs by yourself. *"; \ echo "*************************************"; \ fi distclean: rm -rf html latex man # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: vdk-2.4.0/doc/doxy/Makefile.am0000644000000000000000000000203407233635352011523 DOXYGEN = @DOXYGEN@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ # In EXTRA_DIST variable you must put every file which isn't use # to be compiled. # In gif_files and jpg_files you add all the screenshots you take # or other images used for generating the documentation gif_files = \ vdkform.gif \ vdklogo.gif jpg_files = EXTRA_DIST = \ $(gif_files)\ $(jpg_files) docs: Doxyfile $(DOXYGEN) @if test -n "$(DOXYGEN)"; then \ if test $(GENERATE_HTML) = YES; then \ if test -n "$(gif_files)"; then \ cp -f *.gif html/; \ fi; \ if test -n "$(jpg_files)"; then \ cp -f *.jpg html/; \ fi; \ fi; \ if test $(GENERATE_LATEX) = YES; then \ cd latex/ && $(MAKE); \ fi; \ else \ echo "*************************************"; \ echo "* You don't have doxygen installed. *"; \ echo "* Please install it if you want to *"; \ echo "* generate the docs by yourself. *"; \ echo "*************************************"; \ fi distclean: rm -rf html latex man vdk-2.4.0/doc/doxy/vdkform.gif0000644000000000000000000007703407233635334011642 GIF87a;̙ffffffffffff3f33f3f3f3333f333333̙̙̙̙̙̙f̙ff3f3f333ff3ff3f33f3f̙̙3f33ff33f3fff3f3f3f33f3fffff3f3f̙33fff̙̙3ff̙f3f3f3ff̙33fff3ff3ff3f3fff333f33ff,;@    ּ BPD6`/Z+T8"@ 4U`@DHPZx]</_{ M{ѐ5l'}FLzSF@UԜRVejAQ "> TNu 5lخoB]u\^uSD_y:W_ˆ ׯ>G *Ys`peY" *(zaң\L8BB. ! sM;@ N0wΟN}4:'tm%nV首F*nᨍ y' !`YhFD&**vrÊK~ZnBiТ+ꖞ{eYk 'kR(&ݹ/B(ᢈ܈*n(%n)w~+'p$:R)qܲ'z%w2:z"^j綠F݂K Wغ^>S`I3@%J{bt~ :@C97w :8) ޸)7N9)`θ&9~L RӋ)[[K!Χ-?N? 9=? ǟ%OA7q;XRz.cx0C` ` 65Q\;,kW]NNaYP]Ҁ0 (C(1 O`P@8#p@!9vpq9@"t?8 piL#=0O0~`x@`[L78fq n8mFF"!DBRpDAo Y@[Sը~BxV2ߕfXM) P=b, UAH\fZ."UՃPlqT@(@+ L8tRHFLGAM0 !8.zbTL@A2p\(}MXt۔/M5)ܒZ6M#-4h Ѧ`"-Q LNTA7$ VjXM^Xc=&Lq֣Ve 8X$ktc>?6GCuPEoS`0AhKU{+ 0p6 hXo` }fbF# t%9)g=<زĜB Ȃ X_VajsH]Cx'gnv;|E" ŭ.UªM m= ]4A H0{h HJ.< ۪@ |VBdHҦ %- 0kaKr ĒˢVv\ٲpuMe*T4 @ V85PZ62O ps da X "ՙl&=f@YE3}40h@koظ-`Su-NZ(&CО(e ^@Zaz=lnHdo5 .a0S J&L_μ d ލMT)3ʜ da/Bt p%1Dx&~᮵`7-_>g+}_8ar(6J@;d#I R/ hC ,A gB.E0` ` F8,;$صU(#Gd02! k@}!ԄYI0́sIDt D}YIM@P̖Ƕ$pZ20EH*h"25w!5)%n' 1"pEaA]"`]UUhFO[owc32$R2u7rw):KP ]BsċA7bwW&X#҇ #ac.!(335,1Eт-BΘ00HE]u^g-QTTOQ#%$C>Y7+;BX\'N?&+[ЗJxhAc-h/X'Y.61CB[z"6_RG%{<'7{}8?`i784S%p@c@90jFa{7Ha4P3s@$4R$7eW"p&`)3P"[b%/a@&pv,&@ie4~؁/‡{2&$GnK[Iw چBZ-0w@+-W>A9O6}CP`B0)}>3@G2sCG[80FX %8dB@8;pN!? HTGJ3NgX88ɖ9eag9>`m_O&'9p?񳛉sNhD8ɚ~4)Yc@D@8S3;H.@)$W2_ E:8uN2EG+9>HGٹ$8)#G@G? .G9hH*{O5B9gԝA&$A HWI!$.y>@+HӤ։@G *p>;P:))Y" ӑT*b!XC4by#&G?X#*|cGܲ2=xf G!g44uԤ`NOz*ӫ?O=HH|I# aჄw/BSGyڃ(҃G>H[RtZ(cC)(S!2y0#{$XE~ %b;D22S&6Ns3[)Bs6 ٪0!;3r)bb'dd:"",#i/C!TC9!. C+bZq%9۳,BAR:+M U;C b/C1hK R ;y-1;o² RO>9/ 4Fs-w!1%J[_ªRI,/a"3C&H%Ne7#Z%NE(rd"{.-2a5ReR&YbLr;i6˚#B322 ֍ sjR`Swb[^[$& l .! P`/)1Sb8;@E-Uɛʠ#G|1Daɪ$SL p TD a!0 &qpr ,P|ʩl_^afVPe˳ BDq\5qg^Q4AAL:  Ѓyq{'' "=$ lP+,@ ZR xP a ԃKAĶ ѠQ@6ܷԁj]dN=`QիՆ !<ػ"[3rBJ)[rmA+z(3t6#+6ף0yAAfG-*Km.VRRYR/ c 1t K)˃{%#}M"+*XI粮j)z狾-\Ԧ(K}ܬ}(;|[-R~3MdU5p/B!YP ##+x"RsI6;Z*-ޝw2%kSd( B1[:~[B1AK<& "*p8,"M-ڢR-[VS -8ّ:8+M"i,6q7=$$,"X^Ge(7a31H#Ar#QQIa.*Q@DDh(OA (G3#C^.эB<6Dj˱[v0 @ u;s!2YL8in?^zi)>F308@3jQ|DQ$s$4#2!s C!k7FpjA>#y^&b.[&HFf7R"5lJ fp ߷}G8p$i|4iiEyF/watae8aS3{5b!&8R`IB[; *kI^# R#5$#hm0q6p*R`RpDR( 0,R*>$;pi40|Op4OGu_kT|UG73p`di4?eH7!QaYR$P 5^1222ihG# (4ߺ;;,HTuFg(zN-QQz&qTT=^`VeLƔLzhl$q_H3OgtMFHOrDLOP|w stP86 P!Q`DCq1y؉00Q z1 !1:1J9r p !A 1 M@"!!a*ؐ-lK!Omo{pN@ (PС @d~;fСq )r Y4hH1<^X` ND C 4 S A"L!aR8"e!Qq aS!V ˓O]nMP2tU+ @&d(A]zpɛM3hlΧ4aI9f0#$l4r(;%rcG $S|K5qSݬ]MedAHqiZVhŽ"_D.ebuGJ"xW-l0XԂwRĀB /X""\(XJ/B X/YACY !`L I*<j ?(0C?0CYl>p %PBp6o$GoЃK%ՔCM TeV)Hh*H!Kxax$KhDK, DYݵ!  ` B##0;( f4J{ LC:E!!(`dDL̐`fh?H@&PE耑o?6ovGp09Љq)tAlPA (XB|-\F^EI~@xDK}$ _@67rKv+:d}*~@F Y0lP@ +y )ɈPnjc48?( l>|oYnypýds:DK--Q(I @@#V3TyDPu ""`;^ ̤tݢ+r(|.h`]BV_!h\l[s @9A\1 6P7-Yh`Es9!R%c @ W@( %)hR\[ὮOF(*U ^"!;avc#"`hN1$Pve "yW",oЅrqCZ'0 CB`f7q̸B7*S Č(U>#DwHXra- 9 AY!mH,*uLF(YTKqneS}Lc |aZ:H2Y~T<cME =ىLvzǏ]yMYb x0A0ޘd!9rAoV,,C00GinӁO`:#;Lb 2ZHDXuMNL0YR=1>"ɐ P4rjTB";־`#]8ă c z ,9m1AV[,-Ҳ98K,}~%<0(3EF @%؁qBj*# h7 D;Cĵz |; t5Ot'  Ú# iaA@`a Tw0!/XG2] Bt؅ =J*dI uscȩtAx5}WXez!? &=l{ a&BIt ąqbIH{[4p 6\ ,(wtw|%([rj`\CP5{^"n!-ͫWRDKff,=h\'9 ycXi]E$0Z-h-, A]?[lOg q8Nq8v`O<űmM(&voN̨qIⰼЮ 0] P,yEWT5G}b(3ȇKCBd ?BϦxCTKwV(}9,>g_|-~&ӷ~lfZ֠zX沊FǚM7ޱn8z}H/{J;qWboO<+^javZpaw}N>]ȼl+jׅuqg {ρ/lh3hEG5.7?3gp; 8&P`Yx0 (8 %*Hh*X18@$X`A(CHEhGI L8LH @RR3ЄRXZB(!& ! [: @(@`1x89@W/ȃ/Ȅ!@HL(II# ؉ @ PH88P 08X 怋 ͨ `/"  hX٨؍`/ hC k8' b1# w| (rh` /xhˈhXY1 &k.k"l0 3F}o`Gl+IHƓ+)ՠ(( xBh(؍ Z@ÎǘWʰ \=Eh(W(!!P t; pbC#P. )  % i)x߈䈍) kКiـ@` 雿7|skYF,)|s9:ٜvi 9i ɝٝ[oz` 4! !驗9AɎ0jq888##C8֘ hh "ZSf M @1J ;"$"$Š 'pGz*'5p6p56P s虛tIWJtW|{|G=~铦}h{{q{郦Ǧw}z~m{Gr*rs}~|C~Gg:~7`M{|*Lr:7Pma  sW9#[g5|'Y$PNs4#%gXf1Cw= ДK3D @r5d7wult xv@("} *v*Dj?jopW݊FC\W7Ki s uq4wg 2o&KOuk5 + gw;Gv'pMywjs {*7VV*wik(Ĕ@'׳x2 7nLPJ[WPNújvW q!#[AGE /' Bq$t wp~2WDOG5yV;Z +#B}b,Vwl׸G'zCxGwNʲMP5x`O RuT#󻌗@[7ǗSZ?*Ku7``yPE c+, X(j4up,2ڻM!wvp`h[h6i !SWtpuH5u{s"w+62BXt T qr| W]sIp]ܮ{@ MQ Lk[xtR˱{y=gT,r(NGwvPwkJV,7Zb@Q,OAq (J7rp^r!&3P " b9¡'31Q:,4A405`]/dRJ"`)j !Jip5_\x ư@gȵ|wwqwຘvO*қC&.Q0 R0ŨP5o> \q&H UL`L`NC]MaL)˱a3A&p\@E )wF]2^m,voJz@{TŔb0`'tq⁨8!TB Q@Fyfl/&5&/  V@q @ed^9Pڥ#a.8`‹@@0DpJA7_PȥipKtqdзS=W / ˨ `}>aXҞ 7;Wp݄~o$Q]=F^aRG.cR&:IO5?C N S,y;P OC~+>}ǐ .z $ ֋0a` h]aߝ~/X1*m,:A@S4(F 7D887); é!Y1! !+ +!    ܃݄߃ $ }68B NB:4`IH trx@bbƏ3<0҄&NƤAD&vqsǎt= 1ļoz^(8cFg(beg@)tJ#өc( *ԊXhHARPȒ-P@#]K-"@[WgKk2aYX VYB P/ (P% e͈hIc7VЌte?, CQAHP?TCI_CMș ]uU\t4]v75PxD c"[%S4B$BP)Dp%K "EB $MLR%Yz``Ly!!I 8_X.lU(cP/0dBY7Y@M=,h$CNi %Ac\L`B3I$oQ/I< \0m$A<DPA U2&u2Kmє!D K^'fQŠ*G@vi^uP ??7 7>drcbp )H@M u B rq=s`"Ч}K,Ed@gi &4YQe]\ht^tZ0|'"ڳz*hX]Lun(pdDGAҍpC 9Iu{Av&Ǎ)AW: I 4U T N GdX "1@w VFD@XWn,U :%-?,t%/֧d5U.(ێ?\dU_kيuV,bV0@F?Uc 97q(IŖ2L“zI0 $&mAÄ C1\UMYȰ2 fB$L PfNe` Yj't]24Tz 01/1_ Lx? ,?o5-14aA6#%!P4)0 qr\ X @h4-:HA'v`sJx(v*zAp~?): /!e@Bx dU]¤)o*ȋ@"_@ H#,fE`#B^DS( k}DbPZ !x,fWl].j@Ƙ=-QnK9wAz$4rV l9O T=I"^aUTd\42 |\0bHW/S4#k:*Pq_ܐb-[jiAaĠ!`?6 Vp0hd ը>m A zN  ,:ґu8Ga-} `5VEw~ pɃLRdza`/n2~g @|Nl  X@, hP xV 4OC;'NO4OPꨮH f8 b``HY8@@`=EX @nP#a^F 8xģe}~0Zgbы"XY)Gig GL@wݠ B`N@( ."&9%lOC!hABNxZeV!Wq HcPqݖ J08`P xͶ( s;^3p#|AWyržy{)uCk* Bȇ*8\Ih9JwABlaD%D<`r@5(Mꈚn] `j6$ ?3d>v&HsO'N D-liM^]BpF5`)`.}}Q#J# (UHU 1R`5c]$Ũ=> B'x"{ф0YREhz>06$, _r*t`~6*B+  k'T@y[|r NoWe0plwfgl0g)1 }װ7`)P@ NlwT' gy@wGQ #|yP:Ё{6W| qGpwhϣB!'DQlX5BtwZ$h&W_DS'=w|v}z%+C ї?ӈ]A:v la&/Ch :pRI9: 8kB{K|Vv'!0*gB[R00%/qG% pa9"c'U0/<(x'et'Fs_<"/Qh\ь*1JK`2%G@=pra菽+p8 Vvxa_;W` (9A0cXz3BAA1v46V@3@0U 6!A11!qu`4J ͣ[:A6I7yf8dk'g::v040@!µQTZҡv)C% sx_MX||'rE;&Q%8i&pA`wI' WPxC8 S1 ?Ip;PAgpH3W(/?<3g[9,'Qq_B=|b9[b !f'$qc%ah/qz"(kiRd&&Оxᓔw9bA!UoAcdVvWB Z*WXzq7 2sH]y5 J!Jj xp'7 W>A0YThA؂wQF'vWt!(!wa^DVw4AW)la hR{qq bv9o{  U+ I,_Z*KLjpz ] sOS b|~xapIe1t#@ qE [;ߋ \cl`4Ė =*;+˾Wb{kyxucl 72To |¸@2Q'l ˽  l'<˽ yP C̽0{ "1,+܄M̽j zzxĐG s|! RI+K A3I~'+!czR>}} q 2DՋE&6|>W}g:no<)XH ȲPpY[!tթ3X* GzT|4Bvs1:ܓ̜G VJ{ ʇ p4~HW'hwF'!; iuz6FWgpߩ z4@swx zٽ 9FNܠT2^G Fn'=A.PV&\ndF68>w`^f~h0En~A>!PwZNpP@)0v%49 ^+閞鑞鍞 # n@~ꎎ9#!>0.~#a9. N nxq@֎ٮ rg2,? 55_#05PP9.U>5UP"6 ? ??/R_??Ґ( *( 1?&o3b  = ۰zE?0JL)خfRGrٞ @%ٞP3& &Os~W;CEF__?GP$_ FGb$E_~5$$5n4M,koE/k _.0gd @amo?.N`p=/z3oz3= G 7 0@0i鰘y 9 Y*(a +K( HLH,,L :@ MaPA ` / ON@ ?@ Ay0OA`dA U" dAY* B`*U-kt*P\t)O A)AџJJ)PM~ U2jҤ:M%m4t"8JYU BPܙceEx„!pA y SBʼn ѳG {VAWx d%ay7۝&ڱ`өQEI)yA[j :jeGlD=ѻ}[ki-9GBA TvfÙeHf) Y/P`A6@_L(`5ҌnDp2.o,']5^1@T4$U*Y Uq5 d59{[E%LeY}i f9 fc*pefYmU e 0A C1p`e=BڏilTW?g f" CxB+a aBs``6ZᾚCR`/@S 0w_(%7(U̡推r쫊Za Dީ"l"bx(8ʶB7, @FsL!!HFDP?S! PS! (:3)P.cDp[ $<,d%?H;xel 6'mHTf#HI"{Bd# Kp"YNFs|NdN1;7E|\88F4.<񎇼a/s!Rs~4m'<,IOjQM#,Au!G5yBjNDKҠ ա%J)&d$BjR>Zb49;EJՄ5t c=TwKrȥ4xуfE$iU@UiJ9SJ󞛓(EVS)@E43;9h;YaqVKDD8gtGktX&a2mA%ddBl|Ey놜;ɊX&vM;Es' rЛ'0e;Ҍz^EHH?PE::@3PxZhIY_ڟy;pRڊXzWoGDg`PthɈh59Ek7 Ns_$yܪJAu/  S MQ !0(( KX3_ 9zU L@MVLLRLzzۉ?i &@AbO 5j Ũ9È D{fhv@x$We\S"!СQ0dw9@:&M{&Lp9`[@z; 3 X˿_\8gd[$˺PΚ \8 U}8-GdNTm \mA1OtlWc>мBdλ0\0b{ëi9Eˢ-J`|[mEɪ 8\]Dj@}Fp՟nA0+tX`H?wby;L6*xqq'X%kdШ+P 5X 2J 4ZڮXK_n) P1`UҋSE~pĥJHE{S.~k⻞H*̮,hȊA@VqFKl`НHGgD  :h҆`6 p1#_2*2!30C9 ,"2X 2z$`VyMM`DHݮҤz̮ˇH^*)@%eeO .{ m7A#NH9jDzN FO̩t! gDU `0l"*;# ]@ & rz{x`.!Y(+ޢ? ЮUNZή ?到1a, ,"澎U]PM-}ӥ懲hG y׬Sn;:9&4):3)<4:)@r_ l@dAC nċ#xPBP=ALr WHYdDIH`͕iG( D@@$"49$X]<`TFyTpWTJ(M 7R0]FxKt(bGEcF7GlFiC9 A7?`FQrA88,xd`}Jhv/z3RMZpyXeT1D U%R%v%A Tէ$L梋&.A   |3cܼ#d93`8V%<ǃ:p<@(}tANHMЁ 'EDEE"$K¾P Ki2Ht`'B~!¤d`+$x%TM5YIҋʰhB⦶0Պr@% 5B2a&t di96 lcc<<m)dq qFP7ADE ^,+,8 +$腀"̰K1n0Au]?nmy,.d.X`$ $DÂ@"b^~NU5t dB$G7!L hapZ V%@qPK(CmnP;aP?]lQP] \PIe ?BPQ8H% x.ra^D‰o'sY~0E`B$HX7M(͵ cSjCr Q;O(S ^ `/6I M"x`$AJ₏7T[ŲtBGszH@ P l 'PA l`RA\&$YX&ff(/C jHD ÈB*S! " Ap^ȂVT 8rBE)6 $&XeAD➀s7I1ԅO ^T LC(%S7/l xf1e!OƁ@^@|"i[L ǘ;r@)3m hp\ 7HUqc-Q D,:/x 5-J0.pY n@V?k|T"@}X(ȋ%rХ}&`A  z^ @.A60*`c \Bt fb|g bcFDA@3"sAmVbNO%Mgq׼"b @HE@H _tP y덠LPC2;Fex8`A)-."ʃl\ XYÊm^@J[ Ke(#a @4>crɠjS:Tx-=R?'&Hphҝr%J*@bą<_Hq Ҕh#mV^͡VL`py k'KHm4 0| €XMg:g&#*Qu[/y7@ֵ(֔m H`T(C= ],Y9(fF:b vP@n\\’>HMH#hnu~K_CW_J2ƞjO~z:^4|a @2f/ @_u+;A%V&_\HcŮrn|c `@&1JPtPpL` vu_t$`(zH!,K@d ).@nq@Iq{[J2!ۂ1& 'e o@ [tG6)]sARf澛0Ef `)%f. vQ":NpP7qWSP&0@)p(i"D 2`H'b>%Ka-pɱQ `^j@>HrK%A$P8R8C)fI-}pmCB5de l3Cu}LO%2v;iN:7TiGuYK.y}^Դ1 =|yxOWX7T;&p('6cYy|(rrF:`sIII@k\`8=[``TxSj %MB|cQ\6CT44RU]LZui8fvdh}״%#kV^*;{* p wxS5e5/  pG}.Ķ*tA9  8ad?ti3RIA+T e&1UdnlVBP%|a0X]jUx;#f si}הf+! (N0wd+r+ v4h0OE15%$16܀sAR8)Yzg'Sa1@@0sR'@tI"/RtEWTPj@}UtE6KT;+9i.}h6fT/}id}3f_@_:dYPQQM`! @Pp)P--Z#%BN$Rײ-]RH3? (BQI fucA8i++s@$S0|aaLfTPnQL3*sch0P҇.)TwYf]U]5)If}uMYw p`oa P`3=SGpqGCP %`?Gj'#nW6'`1GZPjS{Dj!Er* KP8$b7 0.5|{KAc7[cB+!}cT`'`Ȫ`}Ouf/fT׷}q)Mp pN_  `Ae0|:U5]dL`@VK`'B.KPҮ JBQH?.j7$ d@i !(EhA+9q'Jéi'A?TJtJ+x:AP=0Ԗu!3tV9):.`cfc1jaw1W! !}! D9* {P"S%PjjrJ@`@V41W,r./QgG*&QJƜK(qG0Bꣻj0p+p'p:TT^wim V pN0é Ku>66b1Ю8?i .'.! !GBɪ"q6kHMc=F"I(rrNY‰2A}'Q"R XM[VwD2r QN5(i#aa9ơb&"KhFZ`5[0:+‡Ldct Ֆ0E{]Yz'QmfdfsMЖMwl qɗ,u6{l!flɣSh.dk8TY!YJGF `RQ ű8 vQB@|(Lzvtua"dkp :unH=ۢ3 sY}jY)uUGɈЖ2 c+B z?Z\ZҌe A ̫EՅCHKP7|HF&/ebŞT0 ױ.0!ĦClݍ(ןyBÕݦbaʎ'(dDJu{0P3)t PEV  9`3& &@B(MͻC~0( U;s3ҿ ܜFA\ѸSBـdP !"&eL &U1Y|<BC)R&d ݁4$TO!2%%`43DWȇIt@CVHiǸxI9D!. dA g $ij@-^9RR t(S9rzTHd0sM!` R*&h;!IjGXu eLe !U"Tub)-I?E:(PMڏ vc\\h CV9SH%hQ-3kT i4.l4nU$%l ]b[hCxɎ v@'P[XR I1 -FIy?Z!]%zd$~V02 ϬW@:]AnbLL11tD+2e"v@Ҵ]9!7 AꈗaKQ ` HF=&XX" .7س ]!GrJ 1κ'P0 wea eXDr"{ݤP -Ѽzwm>}bt)*%uh0AA 8`>xƧ LeEVGgȇ`/6>T, BN1t98d!r;ϜeGd>+@/x@A'x*(0}X-&9)` p1vakK.JA!$' 6P6SBV:`D|!Ju! &廔]OX!TjU7fQN;-f#s8ir@"D!8Q4p80GՒ?n@:kf 2a,)3)@H,pQa 4/)Y!{ɐWx-]7pجtҙjwь՛a16/nm,n'kctݽ"[5K*o֠(ѻ^s% [C>@:2~_FWطZ_ nt~&~cE #[l5fp,mQg&C g^tgYh2G,af[PArVgIBIc6mрߠim\cc[A2q$fb݇wf(Ġk(^fWBfP|WZ50AmHYv_%0hHcB6 rr!n1Z>BŇYQe* -#B HQ_R0nbP!t'cWefv5z8҉#Ife3p`Rq`#C\[*j I gq ?O8֘^8ms8t@A]'^h:fYQ)a[XAeia瘄A2`iq Q#ĉ1I;՘fsT[+n2:ÎiiX,FiQg'g G|i+42a/clB8Ғv\pnѓjFh#"V(ϖ3 &8w_ ehh8!v#';V "&hx]BIE PragIfa}Զ(s&cf7՗+9I5w瘇(hy ecpfSXF$?Gq5bL27rjr9h-`z󓤅g Yv'yraIH؏kERȆp@yr '{ҠH8#GB$#k#Q|x=8ŘQrBFwy7~Xy3)il RYhyVA!a#(56dh]'ԙNyhr ۖ疢=cUɉZlvSk70ANiQ@$,r2gh{_iZy眉Pmg]Ħ \iX*JVz@YJII?X:>:,OؓIėw=1f$D"`@ ڨYI Z92JbZ D *ڔ c Awbz a8̊B0JD:Jw $ " $Izj܊Jz w.+@ڱZ* 0ۮꯏ&*EBbCKkڈB嬛wLp\o  c;+""q{{˷0t˷+Kk@p  ``; wkK {5+ `Q=Ƹ P๿˻ù@;p۹ȋ&0+kի۫K0{k&P{;+![;PKK @ 5 LL LdKKP ;vdk-2.4.0/doc/doxy/vdklogo.gif0000644000000000000000000004475607233635342011643 GIF87a^M;GuqI7eJ _3SG"kiG+#ƌߦ^mi. &arH.pϚMnlLب-gNk 3k)MK2)')ۋPiO*mDDDE, EdջpnojK;`ݫiH7quG4|%*eLmYXH(ܷٕ2Xi68<B֗Pxc)S(||WbW,nI_7kĩ QVn({Ɖ>w]ه;%Y@|CLHF)6&8orPz\we Dղ̛ Y6bV&H67lʼnh;UbLu5 ǗNJKd*HɦAhKfڸԘ=yt:x+_ĩY̬\x8fPXy>rYeI7y988ÖnZHɇmƊ{^KvGddtzyyyne_+Rnp4H{peķ~xvrF(\ԎtGl`y\5W(CV8B_HK{*@Mm`V}Dx7*4mn7yqzf?=,^uH*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8s>ϟ@cZѣH/MLK#ԧK JЩׂK>K,֡aT+lFWa'WW~a*2 $F,p-"KLl0 I\.Ϡ!X:͛e\/^di,헷έ{mӋ<`nj;TgdnzS\$lhHR@':5i0P`dzr #^#"+C(9tL J"w>P0Cu2g6OL2@Ÿr2<&" qhRaL v3g&7YSK~C=ZϢj8E=0QF+)VOLX%VƂ&dN0g2rb智JUȯf5`RA6)4OLvԨ)rPST#IEO o#E/hUAuIW )H>0}nCpwV638'°Q)3{Ka3i%MtapA 8jFVOF5$+GNqB B @ũ}XAVMDW`2"XHB v;Ͱ6V0u](v<Rk2 h/f`-WT,7ot zKdȝ}_կ~'6o~j/1)b_Np-`8)-C vl4p :3HW'չy&0ci bz\Ji4Hz#Wjl}@jR7Q8WߥFhBDPu ŗW5YDn:o;g!C3 hPg:?tkPNFa?\/4n [ \gMl)BV1= z6ՐjZguD`v \+H Z79Q vxa(oGA j(Mx1m0(  A[{iDԅJIo{tӚ7K-(t pV"7/aTUtky{HP0n0G~MF\NЀԦZğ돽MOtpiKk{ȡ.QeQhnYSg+0qouy9H 0}8!?bX' v WxD> HN8=,BOrCtճzoMT7{YGde`j| j'kyc@erkk<GK i[n0sly0V0~xM~Wst ܦyɄn6H=un"XuMo R-c3p{QfpAFJ vPk !kCw.fI[ʰa m◃\ 8M x~s1A*Vczn0 WzyzHo${eob^{c w AƁFErOk#w'Fc 阎~H 0Q &=hRN(nGWz=VB&%H M0E^^9oWYvhkhk!)wkyk-CXb fָpw i0 i0 p\ > A).~@s E0zN8P9(R5Gŕ*9٤X]Heu9k_0hpI*&q't$)4[giF} w x`  pi  0 Gp=Y@ َr}~FRBWM  U s"Hwz(d.TMdY _cMVQP* G Kz)ؙ )j=4nX `IRg4f4㶦}E+/)>M4S9`duxTH6J] x]k_*Fģf5Xpi* * JړRAp4tyhbjeZh4s2'̄=YIR~t>sIuZOIYVfo EqHgU$yq*.{q` ' w@"\ ;p:dr&M8r;bȏJ'hbi'4ӲtSSfY YZzv""@ 9#gԐ _  ZX詞DpKH{ `z7=%z_0|Ƒ~;e˹1Y*|K0Q4i{ Mٰ۸Ш{whf f4,I4SUY07𧁺 zl =`Z `buVm <ijWU hk;+&̱9 J)9)DE> II=3t>tHUS5%!{D"Ƿ ")0JʼʅJ&Y YP  Ŵž\ ̾vP. XZZyuK-Kw)<S8 RȂqR9^Y9PHupC.StϪ sXq| %X`ZP} ˴]Lnֽli*PDG6ό.{d§Ȁn:Ö9 MTuV@O@ĸf|w@qPPBp b ˹Z impm]` i& G(-RzbӺve:n:s$#>MqtJ pؚT vO ྅e\FP0 7pmf-Ѹ ]~ @hwLݾ=}?cRݴ4š2jwLJ|Pw)U;aPP@಍a= ۱巼dblAPit]؝{<+LnHnBd)d*Nfp|;H,@UlYqa@Y>`S^-̐\೬mdy0;H[»ʚ]¥;sbݦ{h9H+uヮcȋ k׭n3 @ Tڣl1@ .0N~ b= ] `N>h^m( J|.n|ڕJ ^Y{ݧiC:qNA䇚wAP0P0<`p hb~h^fV|=3 ʠMȪ)DM_9W{@\p6_0:See}LZ} QqFPTٰ70 ]~ֿ;?ꉿ_LK? ؋B(Bִ4u囸pήp˜EU OUZ ˘%IbgRJ1oBֶ eifmcB`Luۼx(ԅBT_c SZiGuXv:;;,틖>|3f <|v,Iq1c 9~H%MD2%Wt9H`ݜ3?t&С3@:CK)G)[ )oąUB0ռF(e͚MCnXC\u`x% %8'qzU܇=5(-9W",48 LTILZL BӬBЌ([n(a\6$ #?(R nGn$\I'':J(뎏 /<)Ҫbj">3딴- -+ ?4xV|p#,#DB+"3ye-A ^b72z 2UUW)&Xji9|.% 쮫Xʪz"Y +<,~1-L2/@8[%<\?ăae#b^0o3 - Pb 0E/EPMToDUz85VuhZnY'X[j뒢),7X+f33ό"ll/@N`4[󑯈Kɫ}{ғ>Lnӟ¿/Ya XB'hEq@J*z!0P&T{vy_C0撯l^CA qytnۻHB є%}W`rVœyu0lNY[5&grKBͩ/ߚ#휖'yՋL/txicv^0@[Hvf1{ +T2Ah|&><wvg8.K==J _TGkrpS( ҋ11z.5c!1ȹ(*/膑ky3&8Z:#]h\>:)0"'**vHE8*vs0x{ۃ-7p;&l30;ۻs"2d+5l@-8-MAv`px∆1Գ+Z.- )5q٣==*cp,{6:U/AYY@YpEiX)02!hh-K+Ps;Q{Ðzr3?0=?9@ Ch '/Bx3JcCK8L((>CW}+ lR HJ^R4H5x, 62(L5XSfFny&`̍O7CJ8C J58W(+p 6s df-X?,\3X=;lt6(p$2 2@6/-0L8O;=dRy%*i\=Yd59J$ a1+ˍ6,6X#[hW& 8Ӥ4nP ^ %Aӓڕ>r:$f ;gk,PQ؄ ufJ;;[N5LpdXÆ-:sK! ?@NCU:Y ݫ'\ R=H=A!pӁޫO|6k5,coWp }^x7@hS=f=XlP°UC$5^j{0A4Kr;NbS_e-NCw|!93  ǕϕD%]bbE]-͙a2\0B2Q ڊV`l] H 8o]NaMxMЄFEޕL"P8`Dm[^3bm[%nud4_\E%4|2ykk8GL+-p ?߆PΣSAK%%`7O1ŵ8R A>3UL۝<ݥp7dJ Є7 Zv]:75Ͱ(] I8]џG^MJ?s1$6TC=+-@4@LN<cOxI1Zc)}:N0]Y xb爆r&)yneJ}J0K&^F181`187t[MaBh͈ b~k)荦Τ++Q iH`kCy(4i8lrfRBTFU΍D]$qKqFjY=&65R0dwH ¬J@aMj&fፆJPN1@,N,g?`Ge\=H[9XB)h*lM -\Ɔ @lh<.rH?|xmi681hY5f5~c8~&]ҭR<![B# ӹSɺOB;q) 6"c6n(:ӭs!pk3^ C02ϘM5o1<;E[pTx3ub?eh8ogvgͳ3GheT^v3`NӼҊ(mʭpg~\:fv{K/"g_jD??4,80%[偀_`9juYyE${@y4gMhBprv:D"'sӃdbx鷆fovgXz]XB8_sT \lQ̾4 tp2tR8|f׎c/cۮYLOH=.Tt8H/L,h/, x/{&npup]Jܸu(,hW:Ґt2AClأ:vɲ])+:VlK-!)փF5JΨ=r-:(ҤC0 ' &2cm4 bV˭BʩP%\k;xSo_fI@ 'n,L̚%Hx3h5D)=(U+*?ЀOYĉ p@Q\*l.s%8 ÃNDV < d:TJދ/@#Phb 1%`LFqQHs, 09 Kϵ$('؄NQ!S.UQKuS҆T V'q<054hώ[l]0s$5^}W`~F!biaQeaeg9iZQ0  0gEҹ'\php)-\oSpij]<ށx&{> ~M 48vlT =*4$aK؜p :OլPLE;↣1 .K3X 6uŌx9ŻԔ%0$y1d^{9)SR %cZBƥdaf&gdkj )QAmz^E*5[!ݞ LvwxV D4su4D=3L Š-L*ñd$f[mMy8-l U \&5gQ@~A9K]E90eY2d9f Zki*32xlɀMʁ6|tj< up2mJ,z8X@mH41CEd4`G%Coc,:'Ģ?RAU-.` *RNplp3"qG!@ 7$}ť.HZR㤁E00E2`JfԺ'MCMi>C~0GFF+Ph8>F[pmb iRD6/mo=mBl x]B;;A&ƭ,=7htk+KBSہ!RfwىJ~|9mED' +\a2 BF l$p"f%)I-)nsi\tM+P+ ljV}RkΠq:^Gh^ ,a Hc"H  `#X!s+ E{0Oݓdӆ&prbw0:(uL7)N*atTuL<(&`.c%ւ.d= רٜZ:mAEV> >NEXĞ]PdZ8 aC[!01V$@P?T#5)xG¥ צx*tMKN9L8#:\}bM~b< H?(X\>$NY\5D>),EnR!9CXCXf 9 d t#8\KbL,,p$L B dL"lAam[(BH%RSPeX_C0%h3mӞp lQ @.XIB p*]B]0\b՟_Z/\X"(c>YAV]Beԑ/bi w˰gJfoMᔘ|.E@jcYAt>jPCVfֿ[ow6b:Y c槅'n'}%1$b^\Fh lh ިgtS^Ch)eZ(6;^d<\<(*0@iA$A-RH^mV\LZJ}2l8B )*Aw:)& @#d)(6X|?\?@rX-|***pl?j)*Zi!uu葈^ꨶ*$"ꢾ`AfH*|b-L*ZĪr|ꫲj~j*jiiK}@~kjdƪr+Z+BC"Czó~AKj*t (,z+&ނu΃&l>캆jj,WOƁ@\:*2KnkB+. HN춪+B āΆ*B͸2-FlD-m.@b-vb *Zil:CBKAAX2,N~* j*,Ǧlv&.ZA <6lórn)xᲄ mnxntf.Toj X+զ*1*/{.tj./ojp20p$0+ಃ|n123`sFc0A,r7K;4IJά2"stKPks@*2s6O@@{k2/KG5a6?X8!{J'kT5:X 2oqm3Pj략d4fp!7nC?{j6X.ނwKGGo3(S~{^zujSP8L0u5˳R@zpw6B 7>9LA~Fn'KlW3| ;ꪦN􃘮{z?H7y6Ät,8K@N:u _5[ F,[/1bk;LƁ |'r,x x| ={0Z۷yW+1틇yc-;Hf;6gB1;*lD)>lwpߋWy+>2o+3;|}Ȯk~벗9f{;Ϛ62@jN;CJKx-t_nMgPƳ1@aEGA:PaÅZޒR#*ubEA9dI'QT$A ]LxK!ąJyM#޼ِG;:-B}.̙&G/Mif9eW_;R3Qa;-͋TѥBj V6e!GhV z\F,RadFWF^5u!? 3 V[A?N]:*ʼ d,`.I TI ;ekW:@ά$#/< fC؄t 0 ,CX+ȬX<&fGA!TaH}S7,%/>҈5/2x:Y6.d: b`; iA# P?l"AX%Xf=z0r7'AHNܡ*'9f]4e _4s*DuDӀlp ǓU %}L0IBlIXAxUƍ#" r4ЎYT8 t,dpDCY܁kgOGVxA9i/I ^MwJ*%!BP*0(iB:Y: E $$T r'.d]X O>H,hL1 "C)}S]|ЫBl@K д ) J > /ƨ s8(bR! XJV.@Dڄ!1Ī]3%QAD, r`8^otGX <@ M؉GS)'ٕC]ɇV^aڐx:iV 93Y ~~#PuE/Ic(n=d!wHC6򑑜d%/$n|(O1.re-o]f1e6ќXmvg9ϙuf<{; Ѕ6hE/є t!;vdk-2.4.0/doc/Makefile.in0000644000000000000000000003576710052331516010560 # Makefile.in generated by automake 1.7.8 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ GNOMEDEFINE = @GNOMEDEFINE@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GNOME_VDK = @GNOME_VDK@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_VDK_AGE = @LT_VDK_AGE@ LT_VDK_CURRENT = @LT_VDK_CURRENT@ LT_VDK_RELEASE = @LT_VDK_RELEASE@ LT_VDK_REVISION = @LT_VDK_REVISION@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIGCDEFINE = @SIGCDEFINE@ SIGC_CFLAGS = @SIGC_CFLAGS@ SIGC_LIBS = @SIGC_LIBS@ STRIP = @STRIP@ TAG_SIGC = @TAG_SIGC@ TESTSIGCVDK = @TESTSIGCVDK@ TESTVDK = @TESTVDK@ VDK_RELEASE_DATE = @VDK_RELEASE_DATE@ VDK_VERSION = @VDK_VERSION@ VDK_VERSION_MAJOR = @VDK_VERSION_MAJOR@ VDK_VERSION_MICRO = @VDK_VERSION_MICRO@ VDK_VERSION_MINOR = @VDK_VERSION_MINOR@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ SUBDIRS = doxy EXTRA_DIST = \ vdk-config-2.txt\ doxy/Doxyfile.in\ doxy/Makefile.in\ vdk-config-2.1 man_MANS = vdk-config-2.1 subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = DIST_SOURCES = NROFF = nroff MANS = $(man_MANS) RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ ps-recursive install-info-recursive uninstall-info-recursive \ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive DIST_COMMON = $(srcdir)/Makefile.in Makefile.am DIST_SUBDIRS = $(SUBDIRS) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: man1dir = $(mandir)/man1 install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done # 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): @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS 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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if (etags --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ else \ include_option=--include; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && \ tags="$$tags $$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; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) $(mkinstalldirs) $(distdir)/doxy @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" \ distdir=../$(distdir)/$$subdir \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(MANS) installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(man1dir) 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_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: info: info-recursive info-am: install-data-am: install-man install-exec-am: install-info: install-info-recursive install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-man uninstall-info: uninstall-info-recursive uninstall-man: uninstall-man1 .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ clean-generic clean-libtool clean-recursive ctags \ ctags-recursive distclean distclean-generic distclean-libtool \ distclean-recursive distclean-tags distdir dvi dvi-am \ dvi-recursive info info-am info-recursive install install-am \ install-data install-data-am install-data-recursive \ install-exec install-exec-am install-exec-recursive \ install-info install-info-am install-info-recursive install-man \ install-man1 install-recursive install-strip installcheck \ installcheck-am installdirs installdirs-am \ installdirs-recursive maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am \ pdf-recursive ps ps-am ps-recursive tags tags-recursive \ uninstall uninstall-am uninstall-info-am \ uninstall-info-recursive uninstall-man uninstall-man1 \ uninstall-recursive docs: cd doxy && $(MAKE) docs # 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: vdk-2.4.0/doc/Makefile.am0000644000000000000000000000024307347027661010544 SUBDIRS = doxy EXTRA_DIST = \ vdk-config-2.txt\ doxy/Doxyfile.in\ doxy/Makefile.in\ vdk-config-2.1 docs: cd doxy && $(MAKE) docs man_MANS = vdk-config-2.1 vdk-2.4.0/doc/vdk-config-2.txt0000644000000000000000000001454707206652621011445 CONFIGURING PACKAGES TO WORK WITH VDK ------------------------------------- Compiling a program succesfully against the VDK libraries can require a large number of command line options to your compiler and linker that are hard to guess correctly. The additional libraries required may, for example, depend on the manner which VDK was configured Several tools are included in this package to make process easier. First, there is the shell script 'gtk-config' (installed in $exec_prefix/bin): Invoking vdk-config ------------------- vdk-config takes the following flags: --version Prints out the version of VDK installed --help Prints out a short help --cflags Prints '-I' flags pointing to the installed header files --libs Prints out the linker flags necessary to link a program against GTK --libs-only-L Prints out the -L-R part of --libs --libs-only-l Prints out the -l part of --libs --prefix[=PREFIX] If PREFIX is specified, overrides the configured value of $prefix. (And of exec-prefix, unless --exec-prefix is also specified) Otherwise, prints out the configured value of $prefix --exec-prefix[=PREFIX] If PREFIX is specified, overrides the configured value of $exec_prefix. Otherwise, prints out the configured value of $exec_prefix Example of using vdk-config --------------------------- Typically, vdk-config will be used within a configure script, as described below. It, however, can also be used directly from the command line to compile a simple program. For example: cc -o simple `vdk-config --cflags` simple.c `vdk-config --libs` This command line might expand to (for example): cc -o simple -I/usr/local/lib/glib/include -I/usr/local/include \ -I/usr/X11R6/include simple.c -L/usr/local/lib -L/usr/X11R6/lib \ -lvdk -lvdkcompo -lgtk -lgdk -lglib -lXi -lXext -lX11 -lm Not only is the form using vdk-config easier to type, it will work on any system, no matter how VDK was configured. AM_PATH_VDK ----------- For packages configured using GNU automake, VDK also provides a macro to automate the process of running VDK. AM_PATH_VDK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) This macro: * Determines the location of VDK using vdk-config, which is either found in the user's path, or from the environment variable VDK_CONFIG * Tests the installed libraries to make sure that there version is later than MINIMUM-VERSION. (A default version will be used if not specified) * If the required version was found, sets the VDK_CFLAGS variable to the output of `vdk-config --cflags` and the VDK_LIBS variable to the output of `vdk-config --libs`, and calls AC_SUBST() for these variables so they can be used in generated makefiles, and then executes ACTION-IF-FOUND. * If the required version was not found, sets VDK_CFLAGS and VDK_LIBS to empty strings, and executes ACTION-IF-NOT-FOUND. This macro is in file 'vdk.m4' which is installed in $datadir/aclocal. Note that if automake was installed with a different --prefix than VDK, you will either have to manually move vdk.m4 to automake's $datadir/aclocal, or give aclocal the -I option when running it. Configuring a package that uses AM_PATH_VDK ------------------------------------------- Simply make sure that vdk-config is in your path, and run the configure script. Notes: * The directory where the VDK libraries are installed needs to be found by your system's dynamic linker. This is generally done by editing /etc/ld.so.conf and running ldconfig Or by: setting the environment variable LD_LIBRARY_PATH, or, as a last resort, Giving a -R or -rpath flag (depending on your linker) when running configure, for instance: LDFLAGS=-R/usr/home/vdk/lib ./configure * You can also specify a vdk-config not in your path by setting the VDK_CONFIG environment variable to the name of the executable * If you move the VDK package from its installed location, you will need either need to modify vdk-config script manually to point to the new location or rebuild VDK. Advanced note: * configure flags --with-vdk-prefix=PREFIX --with-vdk-exec-prefix=PREFIX are provided to override the prefix and exec-prefix that were stored in the vdk-config shell script by VDK's configure. You are generally better off configuring VDK with the right path to begin with. Example of a package using AM_PATH_VDK -------------------------------------- The following shows how to build a simple package using automake and the AM_PATH_VDK macro. The program used here is the testinput.c You should first read the introductory portions of the automake Manual, if you are not already familiar with it. Two files are needed, 'configure.in', which is used to build the configure script: ==configure.in=== dnl Process this file with autoconf to produce a configure script. AC_INIT(testinput.c) AM_INIT_AUTOMAKE(testinput.c, 1.0.0) AC_PROG_CC AM_PROG_CC_STDC AC_PROG_INSTALL AM_PATH_VDK_2(2.0.0, [LIBS="$LIBS $GTK_LIBS" CFLAGS="$CFLAGS $VDK_CFLAGS"], AC_MSG_ERROR(Cannot find VDK: Is vdk-config in path?)) AC_OUTPUT(Makefile) ================= The only command in this which is not standard for automake is the AM_PATH_VDK_2() macro. That command does the following: If a VDK version greater than 2.0.0 is found, adds $VDK_LIBS to $LIBS and $VDK_CFLAGS to $CFLAGS. Otherwise, dies with the error message "Cannot find VDK: Is vdk-config-2 in path?" And the 'Makefile.am', which will be used to build the Makefile. == Makefile.am == bin_PROGRAMS = testinput testinput_SOURCES = testinput.c ================= This Makefile.am, says that we are building a single executable, from a single sourcefile 'testinput.c'. Since every program we are building uses VDK we simply added the VDK options to $LIBS and $CFLAGS, but in other circumstances, we might want to specify them on a per-program basis: for instance by adding the lines: testinput_LDADD = $(VDK_LIBS) INCLUDES = $(VDK_CFLAGS) to the Makefile.am. Now execute the following commands: automake --add-missing aclocal autoconf You now have a package that can be built in the normal fashion ./configure make make install VDK Team [Note: this file is stolen and adapted to VDK from gtk/docs/gtk-config.txt written for gtk-config script written by Owen Taylor] vdk-2.4.0/doc/vdk-config-2.10000644000000000000000000000305307331674057010762 .TH VDK 1 "" Version 2.0.0 .SH NAME vdk-config - The VDK (2) C++ Library config script .SH SYNOPSIS .B vdk-config-2 [\-v \-\-version] [\-h \-\-help] [\-l \-\-libs] [\-\-libs\-only\-L] [\-\-libs\-only\-l] [\-c \-\-cflags] [\-d \-\-define] .SH DESCRIPTION .PP \fIvdk-config-2\fP is a tool that is used to configure to determine the compiler and linker flags that should be used to compile and link programs that use \fIVDK(2)\fP. It is also used internally to the .m4 macros for GNU autoconf that are included with \fIVDK(2)\fP. . .SH OPTIONS .l \fIvdk-config\fP accepts the following options: .TP 8 .B \-v \-\-version Print the currently installed version of \fIVDK\fP on the standard output. .TP 8 .B \-h \-\-help Print a short help on the standard output. .TP 8 .B \-l \-\-libs Print the linker flags that are necessary to link a \fIVDK\fP program. .TP 8 .B \-\-libs\-only\-L Print only the \-L/\-R part of the \-\-libs. .TP 8 .B \-\-libs\-only\-l Print only the \-l part of the \-\-libs. .TP 8 .B \-c \-\-cflags Print the compiler flags that are necessary to compile a \fIVDK(2)\fP program. .TP 8 .B \-d \-\-define Add to the compiler flags a \fI-D_VDK_\fP. .SH SEE ALSO .BR gtk-config-2.0 (1), .SH COPYRIGHT Copyright \(co 2000 VDK Team Copyright \(co 1998 Owen Taylor Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. vdk-2.4.0/vdk/0000777000000000000000000000000010052401036006567 5vdk-2.4.0/vdk/Makefile.in0000644000000000000000000007633310052331517010572 # Makefile.in generated by automake 1.7.8 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ GNOMEDEFINE = @GNOMEDEFINE@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GNOME_VDK = @GNOME_VDK@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ # -release $(GTK_RELEASE) INCLUDES = -I$(top_srcdir)/include @INCLUDES@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = $(GTK_CFLAGS) LIBOBJS = @LIBOBJS@ #$(SIGC_CFLAGS) LIBS = $(GTK_LIBS) $(SIGC_LIBS) LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_VDK_AGE = @LT_VDK_AGE@ LT_VDK_CURRENT = @LT_VDK_CURRENT@ LT_VDK_RELEASE = @LT_VDK_RELEASE@ LT_VDK_REVISION = @LT_VDK_REVISION@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIGCDEFINE = @SIGCDEFINE@ SIGC_CFLAGS = @SIGC_CFLAGS@ SIGC_LIBS = @SIGC_LIBS@ STRIP = @STRIP@ TAG_SIGC = @TAG_SIGC@ TESTSIGCVDK = @TESTSIGCVDK@ TESTVDK = @TESTVDK@ VDK_RELEASE_DATE = @VDK_RELEASE_DATE@ VDK_VERSION = @VDK_VERSION@ VDK_VERSION_MAJOR = @VDK_VERSION_MAJOR@ VDK_VERSION_MICRO = @VDK_VERSION_MICRO@ VDK_VERSION_MINOR = @VDK_VERSION_MINOR@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ lib_LTLIBRARIES = libvdk.la vdkincludedir = $(includedir)/vdk2/vdk # gtkcombobutton.h # FileTreeDialog.h # dirtree.h # gtkdatabox.h # gtkeditor.h # gtksheet.h # gtkitementry.h\ # gtkdirtree.h # gtkfilelist.h # gtkiconfilesel.h # gtkiconlist.h # coolbar.h # coolbutton.h # vdkdatabox.h # panedform.h # scrolledForm.h # vdkgrid.h # vdkcolorbrowser.h # label_togglebutton.h # pix_togglebutton.h # togglebutton.h # regex.h # gtkextext.h # messagebox.h # text.h # vdkregex.h # vdktextview.h # vdkpacker.h vdkinclude_HEADERS = \ regex.h\ gtksourcebuffer.h\ gtktextsearch.h \ gtksourcetag.h\ gtksourceview.h\ gtkundomanager.h \ gtksourceview-marshal.h\ gtktextregion.h\ vdkeditor.h\ \ gtkdatabox.h\ gtkdataboxmarshal.h\ \ FileDialog.h\ FileSaveAsDialog.h\ abstract_button.h\ application.h\ boxes.h\ button.h\ canvas.h\ chart.h\ checkbutton.h\ colors.h\ combo.h\ container.h\ dlist.h\ entry.h\ evbrowser.h\ evhandle.h\ evlisthandle.h\ evobjhandle.h\ filedlg.h\ fixed.h\ forms.h\ frame.h\ handlebox.h\ image.h\ label.h\ menu.h\ messagebox.h\ notebook.h\ numentry.h\ paned.h\ panelbar.h\ pixmaps.h\ progressbar.h\ radiobtngroup.h\ rawpixbuf.h\ rawobj.h\ rawpixmap.h\ scrolled.h\ separator.h\ siglisthandle.h\ slider.h\ spins.h\ statusbar.h\ tables.h\ timer.h\ toolbar.h\ tooltips.h\ value_sem_list.h\ vdk.h\ vdkarray.h\ vdkbtrees.h\ vdkcalendar.h\ vdkclist.h\ vdkcomboentry.h\ vdkcsortlist.h\ vdkctree.h\ vdkcursor.h\ vdkcustom.h\ vdkcustombutton.h\ vdkdatabox.h\ vdkdate.h\ vdkdrawarea.h\ vdkdnd.h\ vdkfont.h\ vdkfeatures.h\ vdkfilechooser.h\ vdkheap.h\ vdkhlbutton.h\ vdkhlbuttonbar.h\ vdkinchannel.h\ vdkobj.h\ vdkprops.h\ vdkstring.h\ vdktextview.h\ vdktreeview.h\ vdkthread.h\ vdktypes.h\ vdkutils.h\ widcontain.h\ eventbox.h\ sigc_addon.h\ sigc_events.h\ sigc_eventsignals.h\ sigc_eventtraits.h\ vdkgnomeapp.h\ vdkgnomeform.h\ vdkgnomeappbar.h\ vdkgnomededit.h\ vdkgnomeentry.h\ vdkfileicondlg.h\ vdkdockable.h # coolbar.cc # coolbutton.cc # FileTreeDialog.cc # dirtree.c # gtkdatabox.c # vdkdatabox.cc # gtksheet.c # gtkitementry.c # gtkdirtree.c # gtkfileicons.c # gtkfilelist.c # gtkiconfilesel.c # gtkiconlist.c # vdkgrid.cc # vdkfileicondlg.cc # panedform.cc # scrolledForm.cc # evbrowser.cc # vdkcolorbrowser.cc # label_togglebutton.cc # pix_togglebutton.cc # togglebutton.cc # regex.c # gtkextext.c # messagebox.cc # text.cc # vdkregex.cc # vdkpacker.cc libvdk_la_SOURCES = \ regex.c\ gtksourcebuffer.c\ gtktextsearch.c \ gtksourcetag.c\ gtksourceview.c\ gtkundomanager.c \ gtksourceview-marshal.c\ gtktextregion.c\ vdkeditor.cc\ \ gtkdatabox.c\ gtkdataboxmarshal.c\ \ abstract_button.cc\ application.cc\ boxes.cc\ button.cc\ canvas.cc\ checkbutton.cc\ colors.cc\ entry.cc\ filedlg.cc\ fixed.cc\ forms.cc\ frame.cc\ handlebox.cc\ image.cc\ label.cc\ menu.cc\ msgdialog.cc \ notebook.cc\ numentry.cc\ paned.cc\ pixdata.cc\ pixmaps.cc\ progressbar.cc\ radiobtngroup.cc\ rawobj.cc\ rawpixbuf.cc\ rawpixmap.cc\ scrolled.cc\ separator.cc\ slider.cc\ spins.cc\ statusbar.cc\ tables.cc\ timer.cc\ toolbar.cc\ tooltips.cc\ vdkcalendar.cc\ vdkcomboentry.cc\ vdkclist.cc\ vdkcsortlist.cc\ vdkctree.cc\ vdkcustom.cc\ vdkcustombutton.cc\ vdkdate.cc\ vdkdatabox.cc\ vdkdrawarea.cc\ vdkdnd.cc\ vdkfilechooser.cc\ vdkinchannel.cc\ vdkfont.cc\ vdkhlbutton.cc\ vdkhlbuttonbar.cc\ vdkobj.cc\ vdkstring.cc\ vdktextview.cc\ vdktreeview.cc\ vdkthread.cc\ widcontain.cc\ eventbox.cc\ vdkdockable.cc\ \ FileDialog.cc\ FileSaveAsDialog.cc\ chart.cc\ combo.cc\ folder_collapsed.xpm\ folder_expanded.xpm\ panelbar.cc\ \ vdkgnomeapp.cc\ vdkgnomeform.cc\ vdkgnomeappbar.cc\ vdkgnomededit.cc\ vdkgnomeentry.cc libvdk_la_LDFLAGS = \ -version-info $(LT_VDK_CURRENT):$(LT_VDK_REVISION):$(LT_VDK_AGE) EXTRA_DIST = \ rgb.cc\ sigc_events.cc\ sigc_eventsignals.cc\ sigc_eventtraits.cc subdir = vdk ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = vdkfeatures.h LTLIBRARIES = $(lib_LTLIBRARIES) libvdk_la_LIBADD = am_libvdk_la_OBJECTS = regex.lo gtksourcebuffer.lo gtktextsearch.lo \ gtksourcetag.lo gtksourceview.lo gtkundomanager.lo \ gtksourceview-marshal.lo gtktextregion.lo vdkeditor.lo \ gtkdatabox.lo gtkdataboxmarshal.lo abstract_button.lo \ application.lo boxes.lo button.lo canvas.lo checkbutton.lo \ colors.lo entry.lo filedlg.lo fixed.lo forms.lo frame.lo \ handlebox.lo image.lo label.lo menu.lo msgdialog.lo notebook.lo \ numentry.lo paned.lo pixdata.lo pixmaps.lo progressbar.lo \ radiobtngroup.lo rawobj.lo rawpixbuf.lo rawpixmap.lo \ scrolled.lo separator.lo slider.lo spins.lo statusbar.lo \ tables.lo timer.lo toolbar.lo tooltips.lo vdkcalendar.lo \ vdkcomboentry.lo vdkclist.lo vdkcsortlist.lo vdkctree.lo \ vdkcustom.lo vdkcustombutton.lo vdkdate.lo vdkdatabox.lo \ vdkdrawarea.lo vdkdnd.lo vdkfilechooser.lo vdkinchannel.lo \ vdkfont.lo vdkhlbutton.lo vdkhlbuttonbar.lo vdkobj.lo \ vdkstring.lo vdktextview.lo vdktreeview.lo vdkthread.lo \ widcontain.lo eventbox.lo vdkdockable.lo FileDialog.lo \ FileSaveAsDialog.lo chart.lo combo.lo panelbar.lo \ vdkgnomeapp.lo vdkgnomeform.lo vdkgnomeappbar.lo \ vdkgnomededit.lo vdkgnomeentry.lo libvdk_la_OBJECTS = $(am_libvdk_la_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/FileDialog.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/FileSaveAsDialog.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/abstract_button.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/application.Plo ./$(DEPDIR)/boxes.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/button.Plo ./$(DEPDIR)/canvas.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/chart.Plo ./$(DEPDIR)/checkbutton.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/colors.Plo ./$(DEPDIR)/combo.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/entry.Plo ./$(DEPDIR)/eventbox.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/filedlg.Plo ./$(DEPDIR)/fixed.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/forms.Plo ./$(DEPDIR)/frame.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtkdatabox.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtkdataboxmarshal.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtksourcebuffer.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtksourcetag.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtksourceview-marshal.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtksourceview.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtktextregion.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtktextsearch.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/gtkundomanager.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/handlebox.Plo ./$(DEPDIR)/image.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/label.Plo ./$(DEPDIR)/menu.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/msgdialog.Plo ./$(DEPDIR)/notebook.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/numentry.Plo ./$(DEPDIR)/paned.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/panelbar.Plo ./$(DEPDIR)/pixdata.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/pixmaps.Plo ./$(DEPDIR)/progressbar.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/radiobtngroup.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/rawobj.Plo ./$(DEPDIR)/rawpixbuf.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/rawpixmap.Plo ./$(DEPDIR)/regex.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/scrolled.Plo ./$(DEPDIR)/separator.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/slider.Plo ./$(DEPDIR)/spins.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/statusbar.Plo ./$(DEPDIR)/tables.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/timer.Plo ./$(DEPDIR)/toolbar.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/tooltips.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkcalendar.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkclist.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkcomboentry.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkcsortlist.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkctree.Plo ./$(DEPDIR)/vdkcustom.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkcustombutton.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkdatabox.Plo ./$(DEPDIR)/vdkdate.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkdnd.Plo ./$(DEPDIR)/vdkdockable.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkdrawarea.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkeditor.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkfilechooser.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkfont.Plo ./$(DEPDIR)/vdkgnomeapp.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkgnomeappbar.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkgnomededit.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkgnomeentry.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkgnomeform.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkhlbutton.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkhlbuttonbar.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkinchannel.Plo ./$(DEPDIR)/vdkobj.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkstring.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdktextview.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdkthread.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/vdktreeview.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/widcontain.Plo COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ DIST_SOURCES = $(libvdk_la_SOURCES) HEADERS = $(vdkinclude_HEADERS) DIST_COMMON = $(srcdir)/Makefile.in $(vdkinclude_HEADERS) Makefile.am \ vdkfeatures.h.in SOURCES = $(libvdk_la_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .cc .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu vdk/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) vdkfeatures.h: $(top_builddir)/config.status vdkfeatures.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ libLTLIBRARIES_INSTALL = $(INSTALL) install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" = "$$p" && dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libvdk.la: $(libvdk_la_OBJECTS) $(libvdk_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libvdk_la_LDFLAGS) $(libvdk_la_OBJECTS) $(libvdk_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileDialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileSaveAsDialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abstract_button.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/application.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/button.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canvas.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chart.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkbutton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colors.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/combo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/entry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventbox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filedlg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixed.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/forms.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frame.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkdatabox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkdataboxmarshal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtksourcebuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtksourcetag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtksourceview-marshal.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtksourceview.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtktextregion.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtktextsearch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkundomanager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handlebox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/menu.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msgdialog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/notebook.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numentry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paned.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panelbar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixdata.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixmaps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progressbar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radiobtngroup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawobj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawpixbuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawpixmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scrolled.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/separator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slider.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spins.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statusbar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/toolbar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tooltips.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkcalendar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkclist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkcomboentry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkcsortlist.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkctree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkcustom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkcustombutton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkdatabox.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkdate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkdnd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkdockable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkdrawarea.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkeditor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkfilechooser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkfont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkgnomeapp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkgnomeappbar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkgnomededit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkgnomeentry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkgnomeform.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkhlbutton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkhlbuttonbar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkinchannel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkobj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkstring.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdktextview.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdkthread.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdktreeview.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widcontain.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCC_TRUE@ fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCC_TRUE@ fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` .c.lo: @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ @am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCC_TRUE@ fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .cc.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .cc.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` .cc.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: vdkincludeHEADERS_INSTALL = $(INSTALL_HEADER) install-vdkincludeHEADERS: $(vdkinclude_HEADERS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(vdkincludedir) @list='$(vdkinclude_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(vdkincludeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(vdkincludedir)/$$f"; \ $(vdkincludeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(vdkincludedir)/$$f; \ done uninstall-vdkincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(vdkinclude_HEADERS)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(vdkincludedir)/$$f"; \ rm -f $(DESTDIR)$(vdkincludedir)/$$f; \ done ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS 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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(vdkincludedir) 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_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-vdkincludeHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ uninstall-vdkincludeHEADERS .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am \ install-libLTLIBRARIES install-man install-strip \ install-vdkincludeHEADERS installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-info-am uninstall-libLTLIBRARIES \ uninstall-vdkincludeHEADERS # 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: vdk-2.4.0/vdk/regex.h0000644000000000000000000004437007472530657010026 /* Definitions for data structures and routines for the regular expression library, version 0.12. Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _REGEX_H #define _REGEX_H 1 /* POSIX says that must be included (by the caller) before . */ #ifdef VMS /* VMS doesn't have `size_t' in , even though POSIX says it should be there. */ #include #endif /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned reg_syntax_t; /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ #define RE_BACKSLASH_ESCAPE_IN_LISTS (1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ #define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then `{...}' defines an interval, and \{ and \} are literals. If not set, then `\{...\}' defines an interval. */ #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \ matches . If not set, then \ is a back-reference. */ #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ #define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_UNMATCHED_RIGHT_PAREN_ORD) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. Some systems (erroneously) define this in other header files, but we want our value, so remove any previous define. */ #ifdef RE_DUP_MAX #undef RE_DUP_MAX #endif #define RE_DUP_MAX ((1 << 15) - 1) /* POSIX `cflags' bits (i.e., information for `regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (REG_EXTENDED << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (REG_ICASE << 1) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (REG_NEWLINE << 1) /* POSIX `eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* If any error codes are removed, changed, or added, update the `re_error_msg' table in regex.c. */ typedef enum { REG_NOERROR = 0, /* Success. */ REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ REG_BADPAT, /* Invalid pattern. */ REG_ECOLLATE, /* Not implemented. */ REG_ECTYPE, /* Invalid character class name. */ REG_EESCAPE, /* Trailing backslash. */ REG_ESUBREG, /* Invalid back reference. */ REG_EBRACK, /* Unmatched left bracket. */ REG_EPAREN, /* Parenthesis imbalance. */ REG_EBRACE, /* Unmatched \{. */ REG_BADBR, /* Invalid contents of \{\}. */ REG_ERANGE, /* Invalid range end. */ REG_ESPACE, /* Ran out of memory. */ REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ REG_EEND, /* Premature end. */ REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields `buffer', `allocated', `fastmap', `translate', and `no_sub' can be set. After the pattern has been compiled, the `re_nsub' field is available. All other fields are private to the regex routines. */ struct re_pattern_buffer { /* [[[begin pattern_buffer]]] */ /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ unsigned char *buffer; /* Number of bytes to which `buffer' points. */ unsigned long allocated; /* Number of bytes actually used in `buffer'. */ unsigned long used; /* Syntax setting with which the pattern was compiled. */ reg_syntax_t syntax; /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *fastmap; /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ char *translate; /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in `re_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see `re_compile_fastmap' (the `duplicate' case). */ unsigned can_be_null : 1; /* If REGS_UNALLOCATED, allocate space in the `regs' structure for `max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #define REGS_UNALLOCATED 0 #define REGS_REALLOCATE 1 #define REGS_FIXED 2 unsigned regs_allocated : 2; /* Set to zero when `regex_compile' compiles a pattern; set to one by `re_compile_fastmap' if it updates the fastmap. */ unsigned fastmap_accurate : 1; /* If set, `re_match_2' does not return information about subexpressions. */ unsigned no_sub : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned not_bol : 1; /* Similarly for an end-of-line anchor. */ unsigned not_eol : 1; /* If true, an anchor at a newline matches. */ unsigned newline_anchor : 1; /* [[[end pattern_buffer]]] */ }; typedef struct re_pattern_buffer regex_t; /* search.c (search_buffer) in Emacs needs this one opcode value. It is defined both in `regex.c' and here. */ #define RE_EXACTN_VALUE 1 /* Type for byte offsets within the string. POSIX mandates this. */ typedef int regoff_t; /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { unsigned num_regs; regoff_t *start; regoff_t *end; }; /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, `re_match_2' returns information about at least this many registers the first time a `regs' structure is passed. */ #ifndef RE_NREGS #define RE_NREGS 30 #endif /* POSIX specification for registers. Aside from the different names than `re_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ /* To avoid duplicating every routine declaration -- once with a prototype (if we are ANSI), and once without (if we aren't) -- we use the following macro to declare argument types. This unfortunately clutters up the declarations a bit, but I think it's worth it. */ #if __STDC__ #define _RE_ARGS(args) args #else /* not __STDC__ */ #define _RE_ARGS(args) () #endif /* not __STDC__ */ /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the `re_syntax_options' variable. */ extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global `re_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. */ extern const char *re_compile_pattern _RE_ARGS ((const char *pattern, int length, struct re_pattern_buffer *buffer)); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern int re_search _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, int range, struct re_registers *regs)); /* Like `re_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern int re_search_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers *regs, int stop)); /* Like `re_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern int re_match _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, struct re_registers *regs)); /* Relates to `re_match' as `re_search_2' relates to `re_search'. */ extern int re_match_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, struct re_registers *regs, int stop)); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least `NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, unsigned num_regs, regoff_t *starts, regoff_t *ends)); /* 4.2 bsd compatibility. */ extern char *re_comp _RE_ARGS ((const char *)); extern int re_exec _RE_ARGS ((const char *)); /* POSIX compatibility. */ extern int regcomp _RE_ARGS ((regex_t *preg, const char *pattern, int cflags)); extern int regexec _RE_ARGS ((const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags)); extern size_t regerror _RE_ARGS ((int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)); extern void regfree _RE_ARGS ((regex_t *preg)); #endif /* not __REGEXP_LIBRARY_H__ */ /* Local variables: make-backup-files: t version-control: t trim-versions-without-asking: nil End: */ vdk-2.4.0/vdk/gtksourcebuffer.h0000644000000000000000000001546207613266403012104 /* gtksourcebuffer.h * * Copyright (C) 1999,2000,2001,2002 by: * Mikael Hermansson * Chris Phelps * Jeroen Zwartepoorte * * 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. */ #ifndef __GTK_SOURCE_BUFFER_H__ #define __GTK_SOURCE_BUFFER_H__ #include #include #include G_BEGIN_DECLS #define GTK_TYPE_SOURCE_BUFFER (gtk_source_buffer_get_type ()) #define GTK_SOURCE_BUFFER(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_SOURCE_BUFFER, GtkSourceBuffer)) #define GTK_SOURCE_BUFFER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_SOURCE_BUFFER, GtkSourceBufferClass)) #define GTK_IS_SOURCE_BUFFER(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_SOURCE_BUFFER)) #define GTK_IS_SOURCE_BUFFER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SOURCE_BUFFER)) typedef struct _GtkSourceBuffer GtkSourceBuffer; typedef struct _GtkSourceBufferClass GtkSourceBufferClass; typedef struct _GtkSourceBufferPrivate GtkSourceBufferPrivate; typedef struct _GtkSourceBufferMarker GtkSourceBufferMarker; struct _GtkSourceBuffer { GtkTextBuffer TextBuffer; GtkSourceBufferPrivate *priv; }; struct _GtkSourceBufferClass { GtkTextBufferClass parent_class; void (* can_undo) (GtkSourceBuffer *buffer, gboolean can_undo); void (* can_redo) (GtkSourceBuffer *buffer, gboolean can_redo); }; struct _GtkSourceBufferMarker { int line; char *name; }; /* Creation. */ GType gtk_source_buffer_get_type (void); GtkSourceBuffer *gtk_source_buffer_new (GtkTextTagTable *table); void gtk_source_buffer_attach_to_view (GtkSourceBuffer *buffer, GtkTextView *view); /* Properties. */ void gtk_source_buffer_set_check_brackets (GtkSourceBuffer *buf, gboolean check_brackets); gboolean gtk_source_buffer_get_highlight (GtkSourceBuffer *buffer); void gtk_source_buffer_set_highlight (GtkSourceBuffer *buf, gboolean highlight); /* Tags methods. */ gint gtk_source_buffer_get_tag_start (GtkTextIter *iter); gint gtk_source_buffer_get_tag_end (GtkTextIter *iter); GtkSyntaxTag *gtk_source_buffer_iter_has_syntax_tag (GtkTextIter *iter); void gtk_source_buffer_highlight_region (GtkSourceBuffer *sbuf, GtkTextIter *start, GtkTextIter *end); /* Regex methods. */ gint gtk_source_buffer_regex_search (const gchar *text, gint pos, Regex *regex, gboolean forward, GtkSourceBufferMatch *match); gint gtk_source_buffer_regex_match (const gchar *text, gint pos, gint end, Regex *regex); GList *gtk_source_buffer_get_regex_tags (GtkSourceBuffer *buffer); void gtk_source_buffer_purge_regex_tags (GtkSourceBuffer *buffer); void gtk_source_buffer_install_regex_tags (GtkSourceBuffer *buffer, GList *entries); void gtk_source_buffer_sync_syntax_regex (GtkSourceBuffer *buffer); GtkSyntaxTag *gtk_source_buffer_iter_has_syntax_tag (GtkTextIter *iter); /* Get only the syntax, pattern, or embedded entries. */ GList *gtk_source_buffer_get_syntax_entries (GtkSourceBuffer *buffer); GList *gtk_source_buffer_get_pattern_entries (GtkSourceBuffer *buffer); GList *gtk_source_buffer_get_embedded_entries (GtkSourceBuffer *buffer); /* Utility methods. */ gchar *gtk_source_buffer_convert_to_html (GtkSourceBuffer *buffer, const gchar *title); gboolean gtk_source_buffer_find_bracket_match (GtkTextIter *orig); /* Undo/redo methods. */ gboolean gtk_source_buffer_can_undo (const GtkSourceBuffer *buffer); gboolean gtk_source_buffer_can_redo (const GtkSourceBuffer *buffer); void gtk_source_buffer_undo (GtkSourceBuffer *buffer); void gtk_source_buffer_redo (GtkSourceBuffer *buffer); int gtk_source_buffer_get_undo_levels (GtkSourceBuffer *buffer); void gtk_source_buffer_set_undo_levels (GtkSourceBuffer *buffer, int undo_levels); void gtk_source_buffer_begin_not_undoable_action (GtkSourceBuffer *buffer); void gtk_source_buffer_end_not_undoable_action (GtkSourceBuffer *buffer); /* Line marker methods. */ void gtk_source_buffer_line_add_marker (GtkSourceBuffer *buffer, gint line, const gchar *marker); void gtk_source_buffer_line_set_marker (GtkSourceBuffer *buffer, gint line, const gchar *marker); gboolean gtk_source_buffer_line_remove_marker (GtkSourceBuffer *buffer, gint line, const gchar *marker); const GList *gtk_source_buffer_line_get_markers (GtkSourceBuffer *buffer, gint line); gint gtk_source_buffer_line_has_markers (GtkSourceBuffer *buffer, gint line); gint gtk_source_buffer_line_remove_markers (GtkSourceBuffer *buffer, gint line); GList *gtk_source_buffer_get_all_markers (GtkSourceBuffer *buffer); gint gtk_source_buffer_remove_all_markers (GtkSourceBuffer *buffer, gint line_start, gint line_end); /* IO utility methods. */ gboolean gtk_source_buffer_load (GtkSourceBuffer *buffer, const gchar *filename, GError**error); gboolean gtk_source_buffer_save (GtkSourceBuffer *buffer, const gchar *filename, GError**error); gboolean gtk_source_buffer_load_with_character_encoding (GtkSourceBuffer *buffer, const gchar *filename, const gchar *encoding, GError**error); gboolean gtk_source_buffer_save_with_character_encoding (GtkSourceBuffer *buffer, const gchar *filename, const gchar *encoding, GError **error); G_END_DECLS #endif /* __GTK_SOURCE_BUFFER_H__ */ vdk-2.4.0/vdk/gtktextsearch.h0000644000000000000000000000672107613265512011562 /* GtkTextSearch * * * Copyright (C) 2002 Mikael Hermansson * * 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. */ #ifndef _GTK_TEXT_SEARCH__H_ #define _GTK_TEXT_SEARCH__H_ #include G_BEGIN_DECLS #define GTK_TYPE_TEXT_SEARCH (gtk_text_search_get_type ()) #define GTK_TEXT_SEARCH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_TEXT_SEARCH, GtkTextSearch)) #define GTK_TEXT_SEARCH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TEXT_SEARCH, GtkTextSearchClass)) #define GTK_IS_TEXT_SEARCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TEXT_SEARCH)) #define GTK_IS_TEXT_SEARCH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TEXT_SEARCH)) typedef struct _GtkTextSearch GtkTextSearch; typedef struct _GtkTextSearchClass GtkTextSearchClass; typedef gboolean (*GtkTextSearchForeachFunc) (GtkTextIter *match_start, GtkTextIter *match_end, gpointer data); typedef enum { GTK_ETEXT_SEARCH_VISIBLE_ONLY, /* TODO */ GTK_ETEXT_SEARCH_TEXT_ONLY, GTK_ETEXT_SEARCH_CASE_INSENSITIVE, GTK_ETEXT_SEARCH_REGEXP /* TODO: this is not yet implemented */ }GtkETextSearchFlags; struct _GtkTextSearch { GObject parent; gchar *search_for; /* the text to search for */ gchar *offset; /* offset in search_for used in forward find char callback */ GtkTextBuffer *buffer; GtkTextMark *mark_current; GtkTextMark *mark_stop; GtkETextSearchFlags sflags; gint is_matched : 1; }; struct _GtkTextSearchClass { GObjectClass parent; }; GType gtk_text_search_get_type (void); GtkTextSearch * gtk_text_search_new (GtkTextBuffer *buffer, const GtkTextIter *start, const char *search, GtkETextSearchFlags sflags, const GtkTextIter *limit); void gtk_text_search_set (GtkTextSearch *search, GtkTextBuffer *buffer, const GtkTextIter *start, const char *searchfor, GtkETextSearchFlags sflags, const GtkTextIter *limit); void gtk_text_search_set_interval (GtkTextSearch *search, GtkTextBuffer *buffer, const GtkTextIter *start, const GtkTextIter *end); gboolean gtk_text_search_forward (GtkTextSearch *search, GtkTextIter *match_start, GtkTextIter *match_end); gboolean gtk_text_search_backward (GtkTextSearch *search, GtkTextIter *match_start, GtkTextIter *match_end); gint gtk_text_search_forward_foreach (GtkTextSearch *search, GtkTextSearchForeachFunc func, gpointer data); gint gtk_text_search_backward_foreach (GtkTextSearch *search, GtkTextSearchForeachFunc func, gpointer data); G_END_DECLS #endif vdk-2.4.0/vdk/gtksourcetag.h0000644000000000000000000001054207613265507011404 /* gtksourcetag.h * * Copyright (C) 2001 * Mikael Hermansson * Chris Phelps * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License* along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __GTK_SOURCE_TAG_H__ #define __GTK_SOURCE_TAG_H__ #include #include #include G_BEGIN_DECLS #define GTK_TYPE_SYNTAX_TAG (gtk_syntax_tag_get_type ()) #define GTK_SYNTAX_TAG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_SYNTAX_TAG, GtkSyntaxTag)) #define GTK_SYNTAX_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_SYNTAX_TAG, GtkSyntaxTagClass)) #define GTK_IS_SYNTAX_TAG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_SYNTAX_TAG)) #define GTK_IS_SYNTAX_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SYNTAX_TAG)) #define GTK_SYNTAX_TAG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_SYNTAX_TAG, GtkSyntaxTagClass)) #define GTK_TYPE_PATTERN_TAG (gtk_pattern_tag_get_type ()) #define GTK_PATTERN_TAG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_PATTERN_TAG, GtkPatternTag)) #define GTK_PATTERN_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PATTERN_TAG, GtkPatternTagClass)) #define GTK_IS_PATTERN_TAG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_PATTERN_TAG)) #define GTK_IS_PATTERN_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PATTERN_TAG)) #define GTK_PATTERN_TAG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PATTERN_TAG, GtkPatternTagClass)) #define GTK_TYPE_EMBEDDED_TAG (gtk_embedded_tag_get_type ()) #define GTK_EMBEDDED_TAG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_EMBEDDED_TAG, GtkEmbeddedTag)) #define GTK_EMBEDDED_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_EMBEDDED_TAG, GtkEmbeddedTagClass)) #define GTK_IS_EMBEDDED_TAG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_EMBEDDED_TAG)) #define GTK_IS_EMBEDDED_TAG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_EMBEDDED_TAG)) #define GTK_EMBEDDED_TAG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_EMBEDDED_TAG, GtkEmbeddedTagClass)) typedef struct _GtkSourceBufferMatch { gint startpos; gint endpos; }GtkSourceBufferMatch; /* FIXME: regex routines is NOT UTF8 compat... */ typedef struct _Regex { struct re_pattern_buffer buf; struct re_registers reg; gint len; }Regex; typedef struct _GtkSyntaxTag GtkSyntaxTag; typedef struct _GtkSyntaxTagClass GtkSyntaxTagClass; typedef struct _GtkPatternTag GtkPatternTag; typedef struct _GtkPatternTagClass GtkPatternTagClass; typedef struct _GtkEmbeddedTag GtkEmbeddedTag; typedef struct _GtkEmbeddedTagClass GtkEmbeddedTagClass; struct _GtkSyntaxTag { GtkTextTag parent_instance; gchar *start; Regex reg_start; Regex reg_end; }; struct _GtkSyntaxTagClass { GtkTextTagClass parent_class; }; struct _GtkPatternTag { GtkTextTag parent_instance; Regex reg_pattern; }; struct _GtkPatternTagClass { GtkTextTagClass parent_class; }; struct _GtkEmbeddedTag { GtkTextTag parent_instance; Regex reg_outside; Regex reg_inside; }; struct _GtkEmbeddedTagClass { GtkTextTagClass parent_class; }; GType gtk_syntax_tag_get_type(void) G_GNUC_CONST; GtkTextTag* gtk_syntax_tag_new(const gchar *name, const gchar *patternstart, const gchar *patternend); GType gtk_pattern_tag_get_type(void) G_GNUC_CONST; GtkTextTag* gtk_pattern_tag_new(const gchar *name, const gchar *pattern); GType gtk_embedded_tag_get_type(void) G_GNUC_CONST; GtkTextTag* gtk_embedded_tag_new(const gchar *name, const gchar *outside, const gchar *inside); gboolean gtk_source_compile_regex (const gchar *pattern, Regex *regex); G_END_DECLS #endif vdk-2.4.0/vdk/gtksourceview.h0000644000000000000000000000546207613266402011603 /* gtksourceview.h * * Copyright (C) 2001 * Mikael Hermansson * Chris Phelps * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License* along with this program; if not, write to the Free * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef __GTK_SOURCE_VIEW_H__ #define __GTK_SOURCE_VIEW_H__ #include #include #include G_BEGIN_DECLS #define GTK_TYPE_SOURCE_VIEW (gtk_source_view_get_type ()) #define GTK_SOURCE_VIEW(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_SOURCE_VIEW, GtkSourceView)) #define GTK_SOURCE_VIEW_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_SOURCE_VIEW, GtkSourceViewClass)) #define GTK_IS_SOURCE_VIEW(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_SOURCE_VIEW)) #define GTK_IS_SOURCE_VIEW_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_SOURCE_VIEW)) typedef struct _GtkSourceView GtkSourceView; typedef struct _GtkSourceViewClass GtkSourceViewClass; struct _GtkSourceView { GtkTextView parent; guint tab_stop; gint show_line_numbers :1; gint line_number_space; guint show_line_pixmaps :1; GHashTable *pixmap_cache; gchar *delete_range; }; struct _GtkSourceViewClass { GtkTextViewClass parent_class; void (*undo) (); void (*redo) (); }; GType gtk_source_view_get_type(void); GtkWidget *gtk_source_view_new(void); GtkWidget *gtk_source_view_new_with_buffer(GtkSourceBuffer *buffer); void gtk_source_view_set_show_line_numbers(GtkSourceView *view, gboolean show); gboolean gtk_source_view_get_show_line_numbers(GtkSourceView *view); void gtk_source_view_set_show_line_pixmaps(GtkSourceView *view, gboolean show); gboolean gtk_source_view_get_show_line_pixmaps(GtkSourceView *view); void gtk_source_view_set_tab_stop(GtkSourceView *view, gint tab_stop); gint gtk_source_view_get_tab_stop(GtkSourceView *view); /* Get the width in pixels */ gint gtk_source_view_get_tab_stop_width(GtkSourceView *view); gboolean gtk_source_view_add_pixbuf(GtkSourceView *view, const gchar *key, GdkPixbuf *pixbuf, gboolean overwrite); GdkPixbuf *gtk_source_view_get_pixbuf(GtkSourceView *view, const gchar *key); G_END_DECLS #endif /* end of SOURCE_VIEW_H__ */ vdk-2.4.0/vdk/gtkundomanager.h0000644000000000000000000000601607613266403011705 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * gtkundomanager.h * This file is part of gtksourceview, but copied from gtk * * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi * * 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. * * */ /* * Modified by the gtk Team, 1998-2001. See the AUTHORS file for a * list of people on the gtk Team. * See the ChangeLog files for a list of changes. */ #ifndef __GTK_UNDO_MANAGER_H__ #define __GTK_UNDO_MANAGER_H__ #include G_BEGIN_DECLS #define GTK_TYPE_UNDO_MANAGER (gtk_undo_manager_get_type ()) #define GTK_UNDO_MANAGER(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_UNDO_MANAGER, GtkUndoManager)) #define GTK_UNDO_MANAGER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_UNDO_MANAGER, GtkUndoManagerClass)) #define GTK_IS_UNDO_MANAGER(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_UNDO_MANAGER)) #define GTK_IS_UNDO_MANAGER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_UNDO_MANAGER)) #define GTK_UNDO_MANAGER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_UNDO_MANAGER, GtkUndoManagerClass)) typedef struct _GtkUndoManager GtkUndoManager; typedef struct _GtkUndoManagerClass GtkUndoManagerClass; typedef struct _GtkUndoManagerPrivate GtkUndoManagerPrivate; struct _GtkUndoManager { GObject base; GtkUndoManagerPrivate *priv; }; struct _GtkUndoManagerClass { GObjectClass parent_class; /* Signals */ void (*can_undo) (GtkUndoManager *um, gboolean can_undo); void (*can_redo) (GtkUndoManager *um, gboolean can_redo); }; GType gtk_undo_manager_get_type (void) G_GNUC_CONST; GtkUndoManager *gtk_undo_manager_new (GtkSourceBuffer *buffer); gboolean gtk_undo_manager_can_undo (const GtkUndoManager *um); gboolean gtk_undo_manager_can_redo (const GtkUndoManager *um); void gtk_undo_manager_undo (GtkUndoManager *um); void gtk_undo_manager_redo (GtkUndoManager *um); int gtk_undo_manager_get_undo_levels (GtkUndoManager *um); void gtk_undo_manager_set_undo_levels (GtkUndoManager *um, int undo_levels); void gtk_undo_manager_begin_not_undoable_action (GtkUndoManager *um); void gtk_undo_manager_end_not_undoable_action (GtkUndoManager *um); G_END_DECLS #endif /* __GTK_UNDO_MANAGER_H__ */ vdk-2.4.0/vdk/gtksourceview-marshal.h0000644000000000000000000000050407613265510013217 #ifndef __gtksourceview_marshal_MARSHAL_H__ #define __gtksourceview_marshal_MARSHAL_H__ #include G_BEGIN_DECLS /* VOID:BOOLEAN (./gtksourceview-marshal.list:1) */ #define gtksourceview_marshal_VOID__BOOLEAN g_cclosure_marshal_VOID__BOOLEAN G_END_DECLS #endif /* __gtksourceview_marshal_MARSHAL_H__ */ vdk-2.4.0/vdk/gtktextregion.h0000644000000000000000000000446007613265510011574 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * * gtktextregion.h - GtkTextMark based region utility functions * * This file is part of the GtkSourceView widget * * Copyright (C) 2002 Gustavo Girldez * * 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. */ #ifndef __GTK_TEXT_REGION_H__ #define __GTK_TEXT_REGION_H__ #include G_BEGIN_DECLS typedef struct _GtkTextRegion GtkTextRegion; GtkTextRegion *gtk_text_region_new (GtkTextBuffer *buffer); void gtk_text_region_destroy (GtkTextRegion *region); GtkTextBuffer *gtk_text_region_get_buffer (GtkTextRegion *region); void gtk_text_region_clear_zero_length_subregions (GtkTextRegion *region); void gtk_text_region_add (GtkTextRegion *region, GtkTextIter *start, GtkTextIter *end); void gtk_text_region_substract (GtkTextRegion *region, GtkTextIter *start, GtkTextIter *end); gint gtk_text_region_subregions (GtkTextRegion *region); gboolean gtk_text_region_nth_subregion (GtkTextRegion *region, guint subregion, GtkTextIter *start, GtkTextIter *end); GtkTextRegion *gtk_text_region_intersect (GtkTextRegion *region, GtkTextIter *start, GtkTextIter *end); void gtk_text_region_debug_print (GtkTextRegion *region); G_END_DECLS #endif /* __GTK_TEXT_REGION_H__ */ vdk-2.4.0/vdk/vdkeditor.h0000644000000000000000000002357307472774412010710 /* * =========================== * VDK Visual Development Kit * Version 2.0.0 * February 2001 * =========================== * * Copyright (C) 1998,199,2000,2001 Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _vdkeditor_h #define _vdkeditor_h #if HAVE_CONFIG_H #include #endif #include #include #include #define INSERT_MARK "insert" typedef VDKValueList TokenList; typedef VDKValueListIterator TokenListIterator; /* Syntax editor class */ /*! \class VDKEditor \brief Provides a nice source editor wrapping Mike Hammerson GtkSourceView. Editor provides: - syntax higlighting - undo capability - parenthesis matching - word completion */ class VDKEditor : public VDKObject { // signal section private: virtual void LocalConnect(); static int TabHandler (GtkWidget *widget, GdkEvent *ev, gpointer gp); static void HandleRealize(GtkWidget*, gpointer); protected: TokenList* tokenlist; GtkSourceBuffer* buffer; GtkWidget* view; bool MakeCompletion(const char* word); void ShowTipWindow(char* word); void AddToken(); int ShowParenMatch(int start,char keyval, GtkWidget* widget, bool insert, int restore); static int OnKeyRelease (GtkWidget *widget, GdkEvent *ev, gpointer gp); static void OnBufferChanged(GtkWidget* buf, gpointer gp); public: /*! Constructor \param owner \param buffer NULL widget will make his own buffer, otherwise will share \param left_border if greater than 0 a left window will be made with size \par tip left_border should be greater than zero if user wants activate ShowLineNumbers property. */ VDKEditor(VDKForm* owner, GtkSourceBuffer* buff = NULL); /*! Destructor */ virtual ~VDKEditor(); /*! Loads tokens list for word completions from file, returns a newly constructed list to be assigned to editor with SetTokens(). User is responsible to delete token list when no longer in use. File format : simply a token per line. \param filename */ static TokenList* LoadTokens( const char* filename); /*! Sets/gets a tokens list to editor \param tkl a valid token list address, if tkl == NULL return editor token list address */ TokenList* SetTokens(TokenList* tkl = NULL) { if(tkl) tokenlist = tkl; return tokenlist; } virtual void SetForeground(VDKRgb rgb, GtkStateType state = GTK_STATE_NORMAL); virtual void SetBackground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); virtual void SetFont(VDKFont* font); /*! Gets text buffer. */ GtkSourceBuffer* Buffer(void) { return buffer; } /*! Scrolls to a pointer pos or (default) to current pointer position, leaving pixels free */ void Scroll (int pointer = -1, int margin = 0); /*! Scrolls to a line,column leaving pixels free */ void Scroll(int line, int col, int margin = 0); /*! Gets a word \param pos, position into text buffer, if pos == -1 gets the word at insertion point. */ char* GetWord(int pos = -1); /* Sets/gets syntax higlighting */ VDKReadWriteValueProp Syntax; /*! Sets/gets text insertion position expressed in chars from text beginning. (counting from 0, gets -1 on failure) */ VDKReadWriteValueProp Pointer; /*! Sets/gets text insertion position expressed in column offset */ VDKReadWriteValueProp Column; /*! Sets/gets text insertion position expressed in lines */ VDKReadWriteValueProp Line; /* Gets buffer length in chars */ VDKReadOnlyValueProp Length; /* Sets/gets text view editable */ VDKReadWriteValueProp Editable; /* Sets/gets tab stops */ VDKReadWriteValueProp TabStop; /* Sets/gets max undo (dummy for now) */ VDKReadWriteValueProp MaxUndo; /* Sets/gets text line auto select (dummy for now) */ VDKReadWriteValueProp LineAutoSelect; /* Sets/gets text show line numbers (dummy for now) */ VDKReadWriteValueProp ShowLineNumbers; /*! Gets first visible line (lines are counted from 0) */ VDKReadOnlyValueProp FirstVisibleLine; /*! Gets last visible line (lines are counted from 0) */ VDKReadOnlyValueProp LastVisibleLine; /*! Sets/gets modified flag */ VDKReadWriteValueProp Changed; /*! Load text buffer with a file \param filename */ bool LoadFromFile(const char* filename); /*! Clears text buffer deleting all text. */ void Clear(); /*! Returns a text segment \param start starting position \param end ending position, if -1 all text buffer from start to end will be returned. \par Tip Invisible chars won't be included. Returned address should be g_free()'d by user. */ gchar* GetChars(int start = 0, int end = -1); /*! Save buffer to file */ bool SaveToFile( const char* filename); // dummy bool Undo(); /*! Inserts a new line at insertion point */ void Eol() { TextInsert("\n"); } /*! Inserts text at cursor position. \param txt null terminating string to be inserted \param nchars how many chars have to be inserted (-1 means all) */ void TextInsert(const char* txt, int nchar = -1); /*! Forward delete chars from insertion point */ void ForwardDelete(int nchars); /*! Backward delete chars from insertion point */ void BackwardDelete(int nchars); /*! Answer if a line is visible or not line are counted from 0 \param line */ bool IsLineVisible(int line) { return (line >= FirstVisibleLine) && (line <= LastVisibleLine); } /*! Gets line number at a buffer position \param offset buffer offset position (counting from 0) on error returns -1 */ int GetLineAtOffset(int offset); /*! Install syntax table. If a color arg is left to NULL no higligth will be done on that word set, if a font arg is left to NULL makes default font to be used. \param key_color color for language keywords \param key_font related font \param gtk_color color for gtk_xxx_xxx and VDK functions/members \param gtk_font related font \param macro_color color for macros \param macro_font related font \param pp_color color for prepocessor directives \param pp_font related font \param const_color color for constants (numbers,chars,strings) \param const_font related font \param comment_color for remarks \param comment_font related font */ void InstallSyntaxTable (VDKColor *key_color, VDKFont *key_font, VDKColor *gtk_color, VDKFont *gtk_font, VDKColor *macro_color, VDKFont *macro_font, VDKColor *pp_color, VDKFont *pp_font, VDKColor *const_color, VDKFont *const_font, VDKColor *comment_color, VDKFont *comment_font ); /*! Clear syntax table */ void ClearSyntaxTable(); /*! Scrolls to a pointer pos or (default) to current pointer position, leaving pixels free */ void ScrollToPos (int pointer = -1, int margin = 0); /*! Scrolls to a line,column leaving pixels free */ void ScrollToLine(int line, int col, int margin = 0); /*! Select text from start to end position */ void SelectText(int start, int end); /*! Unselect any previous selected text */ void UnselectText(); /*! Add an icoon for line markers \param image a VDKPixbuf to be displayed \param icon_key an unique string as image id \param overwite if true non unique keys will have icons overwritten */ bool AddMarkIcon(VDKPixbuf* image, const char * icon_key, bool overwrite = true); /*! Add a mark on line numbers \param line where mark will be displayed \param icon_key an unique string as image id */ void AddLineMark(int line, const char* icon_key); /*! Remove a mark on line numbers \param line where mark will be removed from \param icon_key */ void RemoveLineMark(int line, const char* icon_key); /*! Remove all marks on line numbers \param line where marks will be removed from */ void RemoveLineMarks(int line); /*! Remove all markers */ void RemoveAllLineMarks(); /* properties setting/getting functions */ void SetSyntax(bool f); void SetPointer(int p); int GetPointer(); void SetLine(int r); int GetLine(); void SetTabStop(int r); int GetTabStop(); void SetColumn(int r); int GetColumn(); unsigned int GetLength(); bool GetEditable(); void SetEditable(bool f); void SetShowLineNumbers(bool f); bool GetShowLineNumbers(void); int GetFirstVisibleLine(); int GetLastVisibleLine(); bool GetChanged(); void SetChanged(bool f); void SetMaxUndo(int ); }; /* showed hints forms */ class Tipwin: public VDKForm { VDKLabel* label; char* tip; public: Tipwin(VDKForm* owner, char* tip): VDKForm(owner,NULL,v_box,GTK_WINDOW_POPUP),tip(tip) {} ~Tipwin() {} void Setup(void); }; #endif vdk-2.4.0/vdk/gtkdatabox.h0000644000000000000000000003554007614017434011032 /* GtkDatabox - An extension to the gtk+ library * Copyright (C) 1998 - 2002 Dr. Roland Bock * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This 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 Lesser 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. */ /* gtkdatabox.h */ #ifndef __GTK_DATABOX_H__ #define __GTK_DATABOX_H__ #include #include /* We need this to pack a table containing the data, */ /* scrollbars, rulers etc.*/ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define GTK_TYPE_DATABOX (gtk_databox_get_type ()) #define GTK_DATABOX(obj) GTK_CHECK_CAST (obj, gtk_databox_get_type (), GtkDatabox) #define GTK_DATABOX_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_databox_get_type (), GtkDataboxClass) #define GTK_IS_DATABOX(obj) GTK_CHECK_TYPE (obj, gtk_databox_get_type ()) #define GTK_IS_DATABOX_CLASS(klass) GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_DATABOX) #define GTK_DATABOX_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_DATABOX, GtkDataboxClass)) typedef struct _GtkDatabox GtkDatabox; typedef struct _GtkDataboxClass GtkDataboxClass; typedef enum /* Types of data display */ { GTK_DATABOX_NOT_DISPLAYED = 0, /* hidden */ GTK_DATABOX_POINTS, /* Simple points or rectangles */ GTK_DATABOX_LINES, /* Lines connecting data points */ GTK_DATABOX_BARS, /* Vertical bars from X axis to data points */ GTK_DATABOX_CROSS_SIMPLE, /* X and Y axis */ GTK_DATABOX_GRID, /* Grid like in an oscilloscope */ } GtkDataboxDataType; typedef struct { gint x; gint y; } GtkDataboxCoord; /* Pixel coordinates */ typedef struct { gfloat x; gfloat y; } GtkDataboxValue; /* Data coordinates */ struct _GtkDatabox { GtkVBox box; /* This list contains the data sets that are to be drawn. */ GList *data; /* Table containing the display, scrollbars and rulers */ GtkWidget *table; /* This is where we display the data */ GtkWidget *draw; /* The rulers */ GtkWidget *hrule; GtkWidget *vrule; /* The scrollbars and their adjustments */ GtkWidget *hscroll; GtkWidget *vscroll; GtkAdjustment *adjX; GtkAdjustment *adjY; /* The pixmap for double buffering */ GdkPixmap *pixmap; /* A number of flags (zoom enabled/disabled, etc.) */ /* FIXME selection_flag should be included here */ gulong flags; /* Is there an active selection? It is safe to let this untouched. */ gboolean selection_flag; /* Number of values of the largest data set currently in the databox */ guint max_points; /* An array of max_points points */ GdkPoint *points; /* The selection box is drawn using this gc. You can manipulate it * by using * gtk_databox_show_selection_filled or * gtk_databox_hide_selection_filled */ GdkGC *select_gc; /* Size (in pixel) of the display area */ GtkDataboxCoord size; /* Position (pixel) of the last mouse click */ GtkDataboxCoord marked; /* During creation of a selection box this is the second corner of * the box, opposed to marked */ GtkDataboxCoord select; /* The extrema of the data values. These are calculated when * gtkdatabox_rescale is called. You can set them directly via * gtkdatabox_rescale_with_values. */ GtkDataboxValue min; GtkDataboxValue max; /* The visible extrema in the top-left and bottom-right corner. * These are influenced by zooming and scrolling. */ GtkDataboxValue top_left; GtkDataboxValue bottom_right; /* Factor for translation of data values to screen coordinates * and vice versa. This is influenced by zooming and the extrema of * the data. You can use gtk_databox_rescale_with_values for * manipulating the extrema. */ GtkDataboxValue factor; /* If we zoom to far into the data, we will get funny results, because * of overflow effects. Therefore zooming has to be limited. * The default zoom limit is 0.01, meaning that you can magnify your * data by a factor of 100. * Use gtk_set_zoom_limit to change this value. */ gfloat zoom_limit; }; struct _GtkDataboxClass { GtkVBoxClass parent_class; void (*gtk_databox) (GtkDatabox * box); /* Funktion pointers for signals, needed (mostly) for gtk-- wrapper */ /* For use of the signals, see "examples/signals.c" */ void (*gtk_databox_zoomed) (GtkDatabox * box, GtkDataboxValue * top_left, GtkDataboxValue * bottom_right); void (*gtk_databox_marked) (GtkDatabox * box, GtkDataboxCoord * marked); void (*gtk_databox_selection_started) (GtkDatabox * box, GtkDataboxCoord * marked); void (*gtk_databox_selection_changed) (GtkDatabox * box, GtkDataboxCoord * marked, GtkDataboxCoord * select); void (*gtk_databox_selection_stopped) (GtkDatabox * box, GtkDataboxCoord * marked, GtkDataboxCoord * select); void (*gtk_databox_selection_cancelled) (GtkDatabox * box); }; guint gtk_databox_get_type (void); /* Before you can do much useful with the rest of the functions you will need a GtkDatabox. The following function creates one for you :-) */ GtkWidget *gtk_databox_new (void); /* When you have added new data or changed "old" data, you have to tell GtkDatabox to redraw the data, otherwise you will see no changes. This might be the most often called function... */ void gtk_databox_redraw (GtkDatabox * box); /* The next few functions allow you to make your data known to the GtkDatabox. After all, the GtkDatabox is nothing without your data :-) */ /* This function is used to add two arrays of float values to the list of data of the GtkDatabox. One array contains the X values the other contains the Y values of your data points. GtkDatabox will not copy or backup the data. You have to make sure that X and Y pointers will stay valid until you remove the data from the GtkDatabox or until you destroy the GtkDatabox itself. You also have to define the color, size/width and type of the data for display. See the GtkDataboxDataType enumeration for the type options. If you want to add a grid or coordinate system, choose the appropriate type and use any float arrays you happen to have, because the data is obsolete in thes cases. Configuration of the grid is done with the gtk_databox_data_set_grid_config function. After adding data you may need to rescale the GtkDatabox thus assuring that your data will be visible on the screen. Use gtk_databox_rescale and gtk_databox_rescale_with_values for this purpose. The return value is the internal index of the data. */ gint gtk_databox_data_add_x_y (GtkDatabox * box, guint length, gfloat * X, gfloat * Y, GdkColor color, GtkDataboxDataType type, guint dot_size); /* This function is used for adding another set of data to your GtkDatabox that has the same Y values as one of the added data sets but has different X values. See gtk_databox_data_add_x_y for additional information. */ gint gtk_databox_data_add_x (GtkDatabox * box, guint length, gfloat * X, gint shared_Y_index, GdkColor color, GtkDataboxDataType type, guint dot_size); /* This function is used for adding another set of data to your GtkDatabox that has the same X values as one of the added data sets but has different Y values. See gtk_databox_data_add_x_y for additional information. */ gint gtk_databox_data_add_y (GtkDatabox * box, guint length, gfloat * Y, gint shared_X_index, GdkColor color, GtkDataboxDataType type, guint dot_size); /* The next two funtions are used to remove data sets from the GtkDatabox. They remove the set with the given index or all sets. When removing only one set, X or Y data that has been used for several data sets will be taken care of. */ gint gtk_databox_data_remove (GtkDatabox * box, gint index); gint gtk_databox_data_remove_all (GtkDatabox * box); /* In contrast to the two functions above the following functions not only erase the data references from GtkDatabox's memory, the data arrays are also freed. */ gint gtk_databox_data_destroy (GtkDatabox * box, gint index); gint gtk_databox_data_destroy_all (GtkDatabox * box); /* The following two functions are used to adjust the GtkDatabox to your data. By default, the GtkDatabox will display data in a range of (-0.5, -0.5) to (1.5, 1.5). Typically you data will not fit well into this range. By calling gtk_databox_rescale the GtkDatabox will analyse your data and make itself fit around the data, leaving a border of a few pixels for optical reasons. By calling gtk_databox_rescale_with_values you can define the range of visible data yourself. This is helpful when your data will be undergoing changes but you know the theoretical maximum minimum values. In that case you can once rescale the GtkDatabox with these extrema and your data will always fit in (that is, if your theory is correct). Defining the extrema yourself is also useful if your data contains a few "wrong" values that are far away from the interesting parts.*/ void gtk_databox_rescale (GtkDatabox * box); void gtk_databox_rescale_with_values (GtkDatabox * box, GtkDataboxValue min, GtkDataboxValue max); /* Use the following functions to get or set the color and type of your displayed data. The index is the return value of gtk_databox_data_add_x_y or similar function. */ gint gtk_databox_data_get_color (GtkDatabox * box, gint index, GdkColor * color); gint gtk_databox_data_set_color (GtkDatabox * box, gint index, GdkColor color); gint gtk_databox_data_get_type (GtkDatabox * box, gint index, GtkDataboxDataType * type, guint * dot_size); gint gtk_databox_data_set_type (GtkDatabox * box, gint index, GtkDataboxDataType type, guint dot_size); /* The next two functions do nothing useful unless the data type is GRID. Adding data and using it as grid or coordinate cross afterwards looks crazy at first, but it has a lot of benefits, like GC management (that is one of my own benefits) or being able to make sure that you have your grid below, between or on top of the rest of the data (that is supposed to be your benefit...) */ gint gtk_databox_data_get_grid_config (GtkDatabox * box, gint index, guint * hlines, guint * vlines); gint gtk_databox_data_set_grid_config (GtkDatabox * box, gint index, guint hlines, guint vlines); /* The following function calculates the "data coordinates" for a given pair of pixel coordinates. The results of this calculation depend on your current zoom/scroll status, and on the last rescale action, see gtk_databox_rescale and gtk_databox_rescale_with_values. */ void gtk_databox_data_get_value (GtkDatabox * box, GtkDataboxCoord coord, GtkDataboxValue * value); /* Get the minimum X/Y and the maximum X/Y "data coordinates". These are the coordinates of the bottom-left and top-right corners when you zoom out completely (shift + button-3). The result depends on the last call of gtk_databox_rescale or gtk_databox_rescale_with_values */ void gtk_databox_data_get_extrema (GtkDatabox * box, GtkDataboxValue * min, GtkDataboxValue * max); /* Get the "data coordinates" (not the pixel coordinates) of the bottom-left and top-right corners of the visible data currently shown in the GtkDatabox. When zoomed out completely the result will be the same as for gtk_databox_data_get_extrema The result depends on the last call of gtk_databox_rescale or gtk_databox_rescale_with_values */ void gtk_databox_data_get_visible_extrema (GtkDatabox * box, GtkDataboxValue * min, GtkDataboxValue * max); /* Even you are happy with the default behaviour of the GtkDatabox you should also take a look at the following functions. They might even increase you satisfaction :-) */ /* By default, the GtkDatabox will come with a pair of scrollbars and rulers. Use the following functions to get rid of them or get them back again */ void gtk_databox_show_rulers (GtkDatabox * box); void gtk_databox_hide_rulers (GtkDatabox * box); void gtk_databox_show_scrollbars (GtkDatabox * box); void gtk_databox_hide_scrollbars (GtkDatabox * box); /* Decide whether the selection box is filled or not, the default is not filled */ void gtk_databox_show_selection_filled (GtkDatabox * box); void gtk_databox_hide_selection_filled (GtkDatabox * box); /* Selection is possible as default, but you may disable that feature */ void gtk_databox_enable_selection (GtkDatabox * box); void gtk_databox_disable_selection (GtkDatabox * box); /* Zooming into the data and back is enabled as default, but you can disable zooming if it makes you nervous*/ void gtk_databox_enable_zoom (GtkDatabox * box); void gtk_databox_disable_zoom (GtkDatabox * box); /* When you zoom into the GtkDatabox, you might stumble over dubious effects like lines or points that are not where you would expect them to be. These are range overflow or limited precision problems. These problems are avoided if you simply do not zoom into the data ever deeped, but stop at some point. This point is the so-called zoom limit. It is a value between 0 and 1 (use other values at your own risk), the default is 0.01. It defines the smallest fraction in X and Y dimension that can be zoomed to. Thus, the default allows you to see everything enlarged by a maximum factor of 100. If you think you need to play with that behaviour, use the following two functions, to get and set the zoom limit. Note: Zooming in very deep might make the GtkDatabox rather slow when you are displaying your data as lines. */ void gtk_databox_set_zoom_limit (GtkDatabox * box, gfloat zoom_limit); gfloat gtk_databox_get_zoom_limit (GtkDatabox * box); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __GTK_DATABOX_H__ */ vdk-2.4.0/vdk/gtkdataboxmarshal.h0000644000000000000000000000165507614017453012403 #ifndef __gtk_databox_marshal_MARSHAL_H__ #define __gtk_databox_marshal_MARSHAL_H__ #include G_BEGIN_DECLS /* VOID:VOID (/dev/stdin:1) */ #define gtk_databox_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID /* VOID:POINTER (/dev/stdin:2) */ #define gtk_databox_marshal_VOID__POINTER g_cclosure_marshal_VOID__POINTER /* VOID:POINTER,POINTER (/dev/stdin:3) */ extern void gtk_databox_marshal_VOID__POINTER_POINTER (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); G_END_DECLS #endif /* __gtk_databox_marshal_MARSHAL_H__ */ vdk-2.4.0/vdk/FileDialog.h0000644000000000000000000000675707257655167010727 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef FILEDIALOG_H #define FILEDIALOG_H #include // undef this and you can use regex library // so in dialog filter: '*\.(cc|h)$' #define _USE_FNMATCH #ifndef _USE_FNMATCH # include #else # include #endif #include extern "C" { #include } // typedef VDKArray FileStringArray; typedef VDKValueList FileStringList; typedef VDKValueListIterator FileStringListIterator; /*! \class VDKFileDialog \brief Provides a file selection modal window that supports multiple file selection. \par Usage \code #include FileStringArray selections; VDKFileDialog *child = new VDKFileDialog( Application()->MainForm, &selections, "File Open dialog"); child->Filter = "*.cc"; child->ShowModal(); for( int t = 0; t < selections.size(); t++) { printf("\nselection:%s",(char*) selections[t]); fflush(stdout); } \endcode On return selections will be an empty array if user presses "cancel" button. \par Tip #define _USE_FNMATCH Undefining above line into FileDialog.h and recompiling make possible to use regex library for filters. i.e: \code child->Filter = "*\.(cc|h)$" \endcode */ class VDKFileDialog: public VDKForm { VDKBox* listbox; VDKString home; bool init(); FileStringList* load_dir(char* dir, int mask); // mode == 0 filter dirs, 1 filters files FileStringList* filter(FileStringList* list, int mode = 0); void LoadFileList(FileStringList* list); void LoadDirList(FileStringList* list); void LoadDir(char* dir = (char*) NULL); protected: VDKString first_pcwd,pcwd; FileStringArray* selections; VDKCustomList *dirlist; VDKCustomList *filelist; VDKEntry *filetype; VDKCustomButton *open,*cancel; VDKLabel *dir_label,*filetypeLabel; VDKCheckButton *hiddenCb; bool DirListDoubleClick(VDKObject* sender); bool OpenClick(VDKObject*); bool CancelClick(VDKObject*); bool ToggleHidden(VDKObject*); bool SetFileMask(VDKObject*); public: /*! Sets/gets file filter */ VDKReadWriteValueProp Filter; VDKFileDialog(VDKForm* owner, FileStringArray* selections, char* title = "", GtkWindowType display = GTK_WINDOW_TOPLEVEL); virtual ~VDKFileDialog() {} bool CanClose(); virtual void Setup(void) {} virtual void OnShow(VDKForm*); void SetFilter(VDKString f) { Filter(f); } VDKString GetFilter(void) { VDKString filter = Filter; return VDKString(filter); } DECLARE_SIGNAL_MAP(VDKFileDialog); }; #endif vdk-2.4.0/vdk/FileSaveAsDialog.h0000644000000000000000000000323707206652367012011 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef FILESAVEASDIALOG_H #define FILESAVEASDIALOG_H #include /*! \class VDKFileSaveAsDialog \brief This class is a file "SaveAs" selection modal window. \par Usage Same as VDKFileDialog but does not hadle multiple files and warns user if he/she attempts to overwrite a file. */ class VDKFileSaveAsDialog : public VDKFileDialog { protected: bool SaveClick(VDKObject*); bool SetFileMask(VDKObject*); bool FileSelected(VDKObject*); bool CheckOverwrite(char*); public: VDKFileSaveAsDialog(VDKForm* owner, FileStringArray* selections, char* title = "", GtkWindowType display = GTK_WINDOW_TOPLEVEL); virtual ~VDKFileSaveAsDialog(); DECLARE_SIGNAL_MAP(VDKFileSaveAsDialog); }; #endif vdk-2.4.0/vdk/abstract_button.h0000644000000000000000000000505507206652367012105 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef ABSTRACTBUTTON_H #define ABSTRACTBUTTON_H #include /*! \class VDKAbstractButton \brief This class provides a common base for different types of buttons This class and some of his subclasses can be better substituted with VDKCustomButton and childs. */ class VDKAbstractButton: public VDKObject { public: VDKReadWriteValueProp Relief; VDKAbstractButton(VDKForm* owner); virtual ~VDKAbstractButton(); virtual void SetForeground(VDKRgb, GtkStateType) {} virtual void SetFont(VDKFont*) {} void SetRelief(GtkReliefStyle style) { gtk_button_set_relief(GTK_BUTTON(widget), style); } GtkReliefStyle GetRelief() { return gtk_button_get_relief(GTK_BUTTON(widget)); } #ifdef USE_SIGCPLUSPLUS public: /*! Extended LS signal system: Received when button is clicked */ VDKSignal0 OnButtonClicked; /*! Extended LS signal system: Received when button is pressed */ VDKSignal0 OnButtonPressed; /*! Extended LS signal system: Received when mouse leaves button */ VDKSignal0 OnButtonLeave; protected: /* This method establishes the connection to sigc-signals in a concrete subclass. Wid is the underlaying used gtk-widget */ static void make_gtksigc_connection(VDKAbstractButton* obj, GtkWidget* wid); private: static void _handle_clicked(GtkWidget* wid, gpointer obj); static void _handle_pressed(GtkWidget* wid, gpointer obj); static void _handle_leave(GtkWidget* wid, gpointer obj); #endif }; #endif vdk-2.4.0/vdk/application.h0000755000000000000000000002152510027561062011177 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. \latexonly \htmlonly
\endhtmlonly \section RELEASE NOTES This version is a beta release of next VDK 2.0 series, so take in account that by no means is guaranteed to be stable or API will be matained unchanged across next versions. \section general General considerations \arg 1. Almost all VDKObjects must be constructed on the heap with the new operator, any copy-initializing and/or assignement operations between objects are prohibited and will be flagged as a compilation error. \arg 2. No memory freeing and/or deleting is required, all new'ed objects will be automatically destroyed immediately before application termination or with a timed garbage collection that can be installed/uninstalled by programmer. However VDKObject(s) can be explicitely freed with the Destroy() method. \arg 3. Both GTK+ "signals" mechanism and the "event" dispatch are available for programmer use but are handled in a different way. \arg 4. VDK uses the "property" concepts introduced with RAD, therefore using properties is encouraged even if it's also possible to have usual functions to set/get objects attributes. \arg 5. The word "window" used in Gtk+ is here replaced with "Form". \arg 6. VDK is consists into two separated modules: - VDK Core Library that contains kernel and only Gtk+ wrapped widgets. - VDK Components that contains totally new widgets and/or those not yet stable enough to be inserted into the core library. \section design VDK DESIGN NOTES VDK was designed to be more a C++ framework based on Gtk+ widget set library than a thin-layer wrapper. VDK hides on the background as much gtk+ work as possible rather than wrap all gtk+ function calls. Using VDK one will realize that many one-to-one statement with gtk+ are not wrapped. Even if is possible to make use of VDK without knowing gtk+, more experienced user will take advantage of knowing gtk+ calls and conventions. At this end VDK provides method to access and use underlying gtk+ widgets. User should also read and know following gtk+/gdk distribution files: - gdk/gdktypes.h - gtk/gtkenums.h - gdk/gdkkeysyms.h VDK is used as base library of VDKBuilder RAD tool, using VDK with VDKBuilder is highly encouraged since user can concentrate his attention to the application rather than gui construction. Also in this case a good knowledge of VDK is a good way to take advantage from using VDKBuilder. \section net VDK ON THE NET VDK and VDKBuilder have their own web site: http://vdkbuilder/sourceforge.net (primary site) A mailing list is available for users support, users are encouraged to subscribe it from web site. \author \arg Mario Motta mmotta@guest.net \arg Ionutz Borcoman borco@borco-ei.eng.hokudai.ac.jp (Ion is no longer an active member) \arg Tim Lorenz Tim.Lorenz@stud.uni-hannover.de \arg Pierre-Louis Malatray pierrelouis.malatray@free.fr \arg George Boutwell gboutwell@yahoo.com \par Note This manual is a living document and changes with the development of VDK. I hope that the hints and tips will be useful. More information can be obtained from the examples source files in ./testvdk. Comments and suggestions are welcome. \par Copyright (c) 1998,1999,2000,2001,20020000 VDK Team Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being "with no Invariants sections", with the Front-Cover Texts being "with no Front-Cover Texts", and with the Back-Cover Texts being "with no Back-Cover Texts". */ #ifndef APPLICATION_H #define APPLICATION_H #include #include #include class VDKForm; /*! \class VDKApplication * \brief Application object. * * This class initializes GTK+ library and starts event loop. * Normally user overrides this class using his own application object. * Application objects are responsible to manage also terminating and * clean-up procedures. */ class VDKApplication { int gcTag,idleTag; VDKString rcfile; protected: /* ! \internal garbage collection callback, invoked from a gtk_timeout established by the user with SetGarbageCollection() */ static int GcCallback(gpointer app); public: /*! * Must be initialized by the user otherwise an useless default * main form will be created */ VDKForm* MainForm; /*! * Constructor, receives main() arguments and pass them to * GTK* library. * \param rc if isn't NULL resource file will be loaded * and parsed. * \param have_locale if true let's VDK to invoke gtk_set_locale() * and support any languages that GTK supports. */ VDKApplication(int* argc, char** argv, char* rcf = (char*) NULL, bool have_locale = false); /*! * Destructor */ virtual ~VDKApplication(); /*! * Initiates event loop */ void Run(void); /*! * Terminates event loop and quits GTK* library. * This method is called after a destroy event on MainForm, * user normally doesn't care of it. */ void Terminate(void); /*! * Returns underlying gtk+ window of the application main form */ GtkWidget* MainWindow(); /*! * Initializes Main form, user must override this one in his own * application object. */ virtual void Setup() = 0; /*! Provide a modal dialog window for messages to user. \param mode - \c MB_OK provide only one button with a "Ok" default caption - \c MB_YESNO provides two button with "Yes" and "No" default captions. - \c MB_OKCANCEL provides two button with "Ok" and "Cancel" default captions. Mode can be ored with: - \c MB_ICONSTOP provides a warning icon - \c MB_ICONINFORMATION provides a "information icon" - \c MB_ICONQUESTION provides a question mark icon - \c MB_ICONERROR provides an error icon MessageBox returns an integer that depends on modes and user response: - \c IDOK, user pressed OK button in MB_OK or MB_OKCANCEL mode - \c IDYES, user pressed YES button in MB_YESNO mode - \c IDNO, user pressed NO button in MB_YESNO mode - \c IDCANCEL, user pressed NO button in MB_OKCANCEL mode \param oktex \param canceltext Args not more used, mantained for compat with vdk series 1.x.y Both OK,YES and NO buttons captions can be customized using and arguments. \param wait if set other than 0 makes MessageBox automatically closed after msecs with IDCANCEL or IDNO result. Tip: MessageBox accepts CR as "yes/ok" and ESC as "no/cancel" default answers. */ gint VDKMessageBox(char* caption, char* text, int mode = VDK_OK, char *oktext = (char*) NULL, char *canceltext = (char*) NULL, unsigned int wait = 0); // gint VDKFileChooser(char* caption); /*! Sets idle callback function, if a previous idle callback was installed, uninstall it. /param /c idlecb idle callback function must be declared as: void idlecb(gpointer data); /param /c data will be passed to user defined function and must be a non NULL pointer otherwise SetIdleCallback won't work. */ void SetIdleCallback(GtkFunction idlecb = NULL , gpointer data = (gpointer) NULL); /*! Set a timed garbage collection that will be invoked each msecs. */ void SetGarbageCollection(unsigned int tick = 1000); /*! Remove timed garbage collection. */ void RemoveGarbageCollection(); /*! Set a resource file. Tip: this should be done before Run()ning app. */ void SetResourceFile(char* rcf); /*! Indicates if the resource file was loaded and parsed */ bool HasResources() { return ! rcfile.isNull(); } }; #endif vdk-2.4.0/vdk/boxes.h0000644000000000000000000000401007206652373010012 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef BOXES_H #define BOXES_H #include #include /*! \class VDKBox * \brief One of the most used widget containers. * * This class provides boxes used as VDKObject containers */ class VDKBox: public VDKObjectContainer { public: /*! Constructor \param owner the form that owns box \param mode either vertical (mode == v_box) or horizontal (mode == h_box) */ VDKBox(VDKForm* owner = (VDKForm*) NULL,int mode = v_box); /*! Destructor */ virtual ~VDKBox(); /*! Adds an object to the box \param obj the object to be added \param justify how the object has to be packed into box, can be one of the following \arg l_justify will be appended to other objects \arg r_justify will be prepended to other objects \param expand object will expand \param fill object will fill all available space \param padding object with be padded with pixels */ virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 0); }; #endif vdk-2.4.0/vdk/button.h0000644000000000000000000000303307206652373010211 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef BUTTON_H #define BUTTON_H #ifndef yes #define yes true #define no false #endif #include #include class VDKTooltip; class VDKButton: public VDKAbstractButton { protected: VDKForm* owner; GtkWidget* box; void _add_default(); GdkPixmap* def_pixmap; VDKTooltip* tip; public: VDKButton(VDKForm* owner, char* tip = (char*) NULL); virtual ~VDKButton() { if(def_pixmap) gdk_pixmap_unref(def_pixmap); } virtual void SetForeground(VDKRgb , GtkStateType ) {} virtual void SetFont(VDKFont*){} }; #endif vdk-2.4.0/vdk/canvas.h0000644000000000000000000000737307435224100010147 /* * =========================== * VDK Visual Develeopment Kit * Version 0.6.1 * May 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * Modified by Tamas Kohegyi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef CANVAS_H #define CANVAS_H #include #include #include /*! \class VDKCanvas \brief This class provides a canvas widget. \par Widget operation notes: Drawing operation on canvas aren't done directly on the screen but using an offscreen backing pixmap. When necessary relevant portion of (or all) backing image is copied to screen.This makes drwaing muchfaster and avoids flickering. All user drawing operations should be followed by Draw() or Redraw() to effectively see the wanted effect. When applicable the best way is to connect with and write an expose-event response function where make all necessary drawing operations followed by a Redraw() call. See canvaswin.cc on ./testvdk directory for more detailed informations. \par Tips: By default canvas uses owner background and foreground, these can be set using properties. \par Examples: in ./testvdk/canvascompo.cc */ class VDKCanvas: public VDKObject { protected: // bool dragFlag,startdragFlag; VDKColor* background; bool setFg,setBg,setF; GdkGC *gc; void DrawBackground(); GdkFont* canvasFont; public: static int ConfigureEvent(GtkWidget* w, GdkEventConfigure* event, void* o); static int ExposeEvent(GtkWidget* w, GdkEventExpose* event, void* o); GdkPixmap *pixmap; // buffered pixmap void Reset(); // recreate the buffered bixmap /* * properties */ /*! default is true. It clears and refreshes the screen during the configure event. User can disable it to control the draw during the configure event */ VDKReadWriteValueProp EnableClear; public: VDKCanvas(VDKForm* owner, int w = 100, int h = 100); virtual ~VDKCanvas(); /*! clears canvas area */ void Clear(); void DrawString(int x, int y, char* text); void DrawText(int x, int y, char* text, int n); void DrawPoint(int x, int y); void DrawLine(int x, int y, int x1, int y1); void DrawRect(int filled,int x, int y, int w, int h); void DrawArc(int filled,int x,int y, int width, int height,int angle1, int angle2); void DrawPolygon(int filled,GdkPoint *points, gint npoints); void DrawPoints(GdkPoint *points, int npoints); void DrawSegments(GdkSegment *segs, int nsegs); void DrawLines(GdkPoint *points, int npoints); void DrawPixmap(int x, int y, char *pixfile); void DrawPixmap(int x, int y, VDKRawPixmap* pix); void DrawPixmap(int x, int y, char ** data); /*! * force a redrawing without expose_event */ void Redraw(); void SetForeground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); void SetBackground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); void SetFont(VDKFont* f); }; #endif vdk-2.4.0/vdk/chart.h0000644000000000000000000002162007206652401007771 /* * =========================== * VDK Component Library * Version 0.2 * =========================== * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * =========================================== * This library is a component of: * VDK Visual Development Kit * Version 0.4.1 * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * =========================================== * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef CHART_H #define CHART_H #include /*! \class Coord \brief provides a 2D object */ class Coord { public: double x,y; Coord(double x = 0.0, double y = 0.0):x(x),y(y) {} ~Coord() {} }; typedef VDKValueList CoordList; typedef VDKValueListIterator CoordListIterator; typedef VDKArray Darray; class VDKChart; //////////////////////////////// /*! \class Series \brief Is a list of 2D points with some propreties and behaviours added */ class Series: public CoordList { Coord max,min; VDKString title; public: /*! Sets/gets color (defaults to black) */ VDKReadWriteValueProp Color; /*! Sets/gets line style (defaults to GDK_LINE_SOLID) can be: \arg GDK_LINE_SOLID \arg GDK_LINE_ON_OFF_DASH \arg GDK_LINE_DOUBLE_DASH */ VDKReadWriteValueProp LineStyle; /*! Sets/gets line width (defaults to 1) */ VDKReadWriteValueProp LineWidth; /*! Sets/gets line cap style (defaults to GDK_CAP_NOT_LAST) can be: \arg GDK_CAP_NOT_LAST \arg GDK_CAP_BUTT \arg GDK_CAP_ROUND \arg GDK_CAP_PROJECTING */ VDKReadWriteValueProp LineCapStyle; /*! Sets/gets line join style (defaults to GDK_JOIN_MITER) can be: \arg GDK_JOIN_MITER \arg GDK_JOIN_ROUND \arg GDK_JOIN_BEVEL */ VDKReadWriteValueProp LineJoinStyle; /*! Constructor \param title series title (should be unique) */ Series(char* title): CoordList(), title(title), Color("Color",this,VDKRgb(0,0,0)), LineStyle("LineStyle",this,GDK_LINE_SOLID), LineWidth("LineWidth",this,1), LineCapStyle("LineCapStyle",this,GDK_CAP_NOT_LAST), LineJoinStyle("LineJoinStyle",this,GDK_JOIN_MITER) {} /*! Destructor */ ~Series() {} /*! Adds a 2D point to a series \param x x coordinate \param y y coordinate */ void Add(double x, double y); /*! Adds an array of 2D points to series \param x array \param y array \param n array length */ void Add(double* x, double* y, int n); /*! Returns minimum 2D point of a series */ Coord Min() { return min; } /*! Returns maximum 2D point of a series */ Coord Max() { return max; } /*! Returns series title */ char* Title() { return (char*) title; } /*! Equality operator */ bool operator==(Series& s) { return title == s.title; } }; typedef VDKList SeriesList; typedef VDKListiterator SeriesListIterator; /////////////////////////////////// /*! \class ChartAxis \internal */ class ChartAxis { VDKRect domain; VDKChart* owner; public: ChartAxis():owner((VDKChart*) NULL) {} ChartAxis(VDKChart* owner,int w, int h); ChartAxis(ChartAxis& a); ~ChartAxis() {} void Draw(); VDKRect& Domain() { return domain; } }; enum { chart_class = 4096, linechart_class, scatteredchart_class, barchart_class }; /////////////////////////////////// /*! \class VDKChart \brief Provides a char base class VDKChart is a component that allows to plot 2D data in various format, is a base class that implements common functionalities to all subclasses actually supported: \arg VDKLineChart \arg VDKScatteredChart \arg VDKBarChart \par Usage Use of VDKChart is straigthforward, user adds 2D points to a Series, eventually sets some series font and properties. VDKChart will assure data plotting and takes care of rescaling/resizing stuff. \par Subclassing VDKChart Normally user should override only Plot() in order to draw data in desired format. \par EXAMPLES Into ./testvdk/chart.cc */ class VDKChart: public VDKCanvas { protected: GtkWidget *tip_window; VDKPoint size; double xn1,yn1,xn2,yn2,xv1,yv1,xv2,yv2,kx,ky; Coord domainmax,domainmin; SeriesList series; bool OnConfigure(VDKObject* sender, GdkEvent* event); bool OnClick(VDKObject* sender, GdkEvent* event); bool OnClickRelease(VDKObject* sender, GdkEvent* event); ChartAxis axis; void ComputeDomainLimits(Series* s); virtual void DrawChart(); void DrawTitle(); void DrawTicks(); void DrawLabels(); public: /*! Sets/gets char border, this area is left to draw axis, title and labels. Defaults to 20 but a larger border is often better. */ VDKReadWriteValueProp ChartBorder; /*! Sets/gets chart title */ VDKReadWriteValueProp Title; /*! Sets/gets x axis label */ VDKReadWriteValueProp LabelX; /*! Sets/gets y axis label */ VDKReadWriteValueProp LabelY; /*! Sets get how many decimal digits are displayed int x labels */ VDKReadWriteValueProp LabelXDigits; /*! Sets get how many decimal digits are displayed int y labels */ VDKReadWriteValueProp LabelYDigits; /*! Constructor \param owner \param w width \param h height */ VDKChart(VDKForm* owner, int w = 100, int h = 100); /*! Destructor */ virtual ~VDKChart(); /*! Returns chart_class */ virtual int isA() { return chart_class; } /*! Adds a series to chart \param s series to be added. Series name is checked for unicity, if a match is found will substitute the old series that will be destroyed. So series to be added should be always constructed in the heap with new operator. */ void AddSeries(Series* s); /*! Clears chart destroying all series */ void Clear(); void SetChartBorder(int b); int GetChartBorder() { return ChartBorder; } /*! Returns chart gc */ GdkGC* GC() { return gc; } /*! Sets drawing color, this affects plottin area only, to change axiz, titles and labels color use Foreground property */ void SetColor(VDKRgb rgb); /*! Sets line attributes */ void SetLineAttributes(gint lineWidth, GdkLineStyle lineStyle, GdkCapStyle capStyle, GdkJoinStyle joinStyle); /*! Plots data,placeholder for subclasses. \param p point to be plotted \param i i-th point of the series \param s series address \par Programming tips Items p contains coordinates ready to be plotted, scaled or resized to chart size and data domain. */ virtual void Plot(VDKPoint& p , int i, Series* s) {} DECLARE_EVENT_LIST(VDKChart); }; /////////////////////////////////////// /*! \class VDKLineChart \provides a line chart */ class VDKLineChart: public VDKChart { public: VDKLineChart(VDKForm* owner, int w = 100, int h = 100): VDKChart(owner,w,h) {} virtual ~VDKLineChart() {} /*! Plots data */ virtual void Plot(VDKPoint& p, int t, Series*); /*! Returns linechart_class */ virtual int isA() { return linechart_class; } }; /////////////////////////////////////// /*! \class VDKScatteredChart \provides a line chart */ class VDKScatteredChart: public VDKChart { public: VDKScatteredChart(VDKForm* owner, int w = 100, int h = 100): VDKChart(owner,w,h) {} virtual ~VDKScatteredChart() {} virtual void Plot(VDKPoint& p, int t, Series*); virtual int isA() { return scatteredchart_class; } }; /////////////////////////////////////// /*! \class VDKBarChart \brief Provides a bar chart */ class VDKBarChart: public VDKChart { public: /*! Sets/gets bar width */ VDKReadWriteValueProp BarWidth; /* Sets/gets label flag */ VDKReadWriteValueProp Labels; VDKBarChart(VDKForm* owner, int w = 100, int h = 100): VDKChart(owner,w,h), BarWidth("BarWidth",this,20), Labels("Labels",this,true) {} virtual ~VDKBarChart() {} /*! Plots data */ virtual void Plot(VDKPoint& p, int t, Series*); /*! Returns barchart_class */ virtual int isA() { return barchart_class; } }; #endif vdk-2.4.0/vdk/checkbutton.h0000644000000000000000000000554307423244104011205 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * Modify by Salmaso Raffaele 10 Jan 1999 * added 2 property: Caption and CaptionWrap * added new constructor option: tooltip * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef CHECKBUTTON_H #define CHECKBUTTON_H #include #include #include class VDKForm; /*! \class VDKCheckButton \brief this calls provides a check button widget \par Signals: toggled_signal, received whenever check button is pressed */ class VDKCheckButton: public VDKAbstractButton { VDKTooltip* tooltip; protected: int connectId; static void ToggleEvent(GtkWidget *wid, gpointer obj); public: // properties /*! Setting this property toggles check button state and emits toggled_signal. Can be used to check button state as well */ VDKReadWriteValueProp Checked; /*! Sets/gets button caption */ VDKReadWriteValueProp Caption; /*! Sets/gets button caption wrap */ VDKReadWriteValueProp CaptionWrap; /*! Constructor \param owner owner form \param label a null terminated string \param tip a null terminated string */ VDKCheckButton(VDKForm* owner,char* label = (char*) NULL, char* tip = 0); virtual ~VDKCheckButton() {} /*! Toggles check button state */ void Toggle() { Checked = Checked ? false : true; } void SetChecked(bool flag) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(widget),flag);} bool GetChecked() { return GTK_TOGGLE_BUTTON(widget)->active ? true : false; } void SetCaption (char* str); char* GetCaption (); void SetCaptionWrap (bool flag); bool GetCaptionWrap (); virtual void SetForeground(VDKRgb color, GtkStateType state); virtual void SetFont(VDKFont* font); #ifdef USE_SIGCPLUSPLUS public: /*! Extended LS signal system: Received when button is toggled */ VDKSignal1 OnButtonToggled; #endif }; #endif vdk-2.4.0/vdk/colors.h0000644000000000000000000000364607206652403010203 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #ifndef COLORS_H #define COLORS_H /*! \class VDKColor \brief provides a raw color object */ class VDKColor: public VDKRawObject { GdkColor *color; GdkColormap *colormap; public: /*! Constructor \param obj color owner \param red component (0-255) \param green component \param blue component */ VDKColor(VDKObject* obj, int red, int green, int blue); /*! Constructor \param obj color owner \param rgb a VDKRgb reference */ VDKColor(VDKObject* obj, VDKRgb rgb); /*! Constructor \param obj color owner \param name names are those provided in rgb X database (normally on /usr/lib/X11/rgb.txt ) */ VDKColor(VDKObject* obj, char* name); /*! Destructor */ virtual ~VDKColor(); /*! GdkColor* conversion */ GdkColor* Color() { return color; } /*! GdkColor* conversion */ operator GdkColor*() { return color; } }; #endif vdk-2.4.0/vdk/combo.h0000644000000000000000000001766207247217133010006 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ /* This is a wrapper for GtkCombo. Author: Eric T. Wienke ===================================================================== Limitations: Listitems only setable via SetPopdownStrings which gets mapped to gtk_list_item_new_with_label. There is no high-level interface to GtkList and GtkListItem which would allow to insert any object to the List. Probably not really needed for a Combobox anyway. One problem is that the GetPopdownStrings won't work if Gtk functions are used to add anything else to the ListItems. Possible solution: Write wrappers for GtkList and GtkListItem and and provide a interface for them in the VDKCombo class. (too much work for this widget alone, would GtkList be of any other use?) ====================================================================== */ #ifndef COMBO_H #define COMBO_H #include #include typedef VDKValueList StringList; typedef VDKValueListIterator StringListIterator; /*! \class VDKCombo \brief Provides a simplified wrapper for gtkcombo \author Eric T. Wienke \par Signals \arg \b activate_signal received when the Enter key is pressed in the Entry. \arg \b changed_signal received when text in Entry is changed. \arg \b selection_changed_signal, received when the selection in the List is changed. This happens when an item has been selected or unselected. This means that the signal is received more than once on a new selection. Always check the Selected property for a value of -1. \arg \b focus_in_signal received when Entry gets focus. \arg \b focus_out_signal received when Entry loses focus. */ class VDKCombo: public VDKObject { static int FocusOutEvent(GtkWidget *w, GdkEventFocus *event, gpointer wid); static int FocusInEvent(GtkWidget *w, GdkEventFocus *event, gpointer wid); protected: int changeConnect; VDKObjectSignal s_activated, s_changed, s_selected; GList *popdownlist; StringList popdownstr; void SortList(); VDKString buffer; public: // properties /*! Set/Get the text in the Entry */ VDKReadWriteValueProp Text; /*! Same as Editable property in VDKEntry. Setting it to false allows you to provide a read-only list to select from, without the user being able to enter text. */ VDKReadWriteValueProp Editable; /*! Default: false. Setting Sorted to true will automatically sort the listitems alphabetically and maintain the list sorted whenever a new item is added */ VDKReadWriteValueProp Sorted; /*! Entry text visibility flag. (As in VDKEntry) */ VDKReadWriteValueProp Hidden; /*! Default: false. Whether the Combo box should check for equality in the list case-sensitive or not. */ VDKReadWriteValueProp CaseSensitive; /*! A StringList corresponding to the Text of the Listitems. Use this function to add items to the list, \code StringList sl = mycombo->PopdownStrings; VDKString s("New line"); sl.add(s); mycombo->PopdownStrings = sl; \endcode Since StringList is of type VDKValueList you can use all functions of VDKValueList to manipulate the list. It is very convenient to access the StringList by index: \code int sel = mycombo->Selected; char *seltext = (sel == -1) ? "None" : (char*)(mycombo->GetPopdownStrings())[sel]; printf("Selected item is %s\n",seltext); \endcode \par Tip Note the use of the get function GetPopdownStrings() instead of the property because it was used within an expression. \code mycombo->PopdownStrings[sel]; \endcode would result in a compilation error. You can however use a typecast: \code ((StringList)mycombo->PopdownStrings)[sel] \endcode */ VDKReadWriteValueProp PopdownStrings; /*! Returns the index of the currently selected item in the dropdown list or -1 if no item is selected. See PopdownStrings for example usage. */ VDKReadOnlyValueProp Selected; /*! Constructor \param def is an optional initial value to be shown in the Entrybox. \param combo internal use, leave it as NULL. */ VDKCombo(VDKForm* owner, char* def = (char*) NULL, GtkWidget* combo = NULL); /*! */ virtual ~VDKCombo(); void SetText(char* text); char* GetText(); void SetEditable(bool flag) { gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(widget)->entry),flag); } bool GetEditable() { return Editable; } void SetSorted(bool flag) { if(flag && !Sorted) SortList(); } bool GetSorted() { return Sorted; } void SetBackground(VDKRgb rgb, GtkStateType state); void SetHidden(bool flag) { gtk_entry_set_visibility(GTK_ENTRY(GTK_COMBO(widget)->entry), ! flag) ; } bool GetHidden() { return ! Hidden; } void SetPopdownStrings(StringList); StringList GetPopdownStrings(); void SetCaseSensitive(bool flag) { gtk_combo_set_case_sensitive(GTK_COMBO(widget),flag); } bool GetCaseSensitive() { return (bool)(GTK_COMBO(widget)->case_sensitive); } void UseArrows(bool flag) { gtk_combo_set_use_arrows(GTK_COMBO(widget),flag); } void UseArrowsAlways(bool flag) { gtk_combo_set_use_arrows_always(GTK_COMBO(widget),flag); } void SetValueInList(int val, bool ok_if_empty) { gtk_combo_set_value_in_list(GTK_COMBO(widget),val,ok_if_empty); } void ClearList(); void SelectItem(int item) { gtk_list_select_item(GTK_LIST(GTK_COMBO(widget)->list), item); } void UnselectItem(int item) { gtk_list_unselect_item(GTK_LIST(GTK_COMBO(widget)->list), item); } int GetSelected(); #ifdef USE_SIGCPLUSPLUS public: /*! Extended LS signal system: Received when an item is selected \param int selected item */ VDKSignal1 OnItemSelect; /*! Extended LS signal system: Received when an item is unselected \param unselected item */ VDKSignal1 OnItemUnselect; /*! Extended LS signal system: Received when an item is changed \param int item \param char* changed text */ VDKSignal2 OnItemTextChanged; /*! Extended LS signal system: Received when an item is activated \param int activated item */ VDKSignal1 OnItemActivate; protected: static void make_gtksigc_connection(VDKCombo*); private: static void _handle_item_select(GtkWidget* list, GtkWidget* item, gpointer obj); static void _handle_item_unselect(GtkWidget* list, GtkWidget* item, gpointer obj); static void _handle_item_text_changed(GtkWidget*, gpointer obj); static void _handle_item_activate(GtkWidget*, gpointer obj); #endif /* USE_SIGCPLUSPLUS */ }; #endif /* not implemented: void gtk_combo_set_item_string (GtkCombo *combo, GtkItem *item, gchar *item_value) Probably useless until GtkList and GtkListItem are implemented. */ vdk-2.4.0/vdk/container.h0000644000000000000000000000464107206652406010663 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef CONTAINER_H #define CONTAINER_H /******************* * Class VDKContainer * *******************/ /*! \class VDKContainer \brief provides a base class for generic containers */ template class VDKContainer { protected: T* data; int count; public: /*! makes a container \param size */ VDKContainer(int count=0): data(count > 0 ? new T[count]: 0), count(count) { } virtual ~VDKContainer() { if (data) delete[] data; } /*! Ordinal access operator */ T& operator[](int n) { return data[n]; } /*! Return container size */ int size(){return count;} /*! Copy-initializer */ VDKContainer(const VDKContainer& c); /*! Assignement operator */ VDKContainer& operator=(const VDKContainer& c); /*! Equality operator */ int operator ==(const VDKContainer& c); }; template VDKContainer::VDKContainer(const VDKContainer& c) { data=0; *this=c; } template VDKContainer& VDKContainer::operator=(const VDKContainer& c) { if (this!= &c) { if(data)delete[]data; count=c.count; data= count >0 ?new T[count]:0; for (int i=0;i int VDKContainer::operator ==(const VDKContainer& c) { int i=0; if(count!=c.count)return 0; for (;(i * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef DLIST_H #define DLIST_H // just a cosmetic capitalizing (suggestion by Ionutz Borcoman) #define VDKListIterator VDKListiterator /* ============ VDKItem class ============ */ template class VDKItem { public: T* x; VDKItem* next,*prev; VDKItem(T* x): x(x), next((VDKItem*) 0),prev((VDKItem*)0) { } ~VDKItem() { } }; /*! \class VDKList \brief Provides a reference semantic double linked list VDKList has a reference semantic, all managed objects are pointers to their original values. This calls is widely used for vdk internals. \par Implementation notes I suggest to use typedef like this: \code typedef VDKList SomeClassList; typedef VDKListIterator SomeClassListIterator; \endcode */ template class VDKList { VDKItem* head,* tail; int count; // append to list void addToTail(VDKItem* i) { if(! head) head = tail = i; else { tail->next = i; i->prev=tail; tail = i; } count++; } // over head loading void addToHead(VDKItem* i) { if(! head) head = tail = i; else { head->prev = i; i->next = head; head = i; } count++; } // insert at pos void insertVDKItem(VDKItem* i, int pos); // fetch an VDKItem at position VDKItem* fetch(int n); // assign VDKItems to container void assign(VDKList& l); // on reference semantic copy-assign is prohibited VDKList(VDKList& c) { count = 0; head = tail = (VDKItem* ) 0; assign(c); } VDKList& operator=(VDKList& l) { // avoid l = l; if(this != &l) { flush(); assign(l); } return *this; } /* class interface methods */ public: /*! Constructor, makes an empty lis */ VDKList() : head(0),tail(0),count(0) {} /*! Destructor. VDKList does not owns object pointed thus not provide to their destruction. Destruction of pointed objects must be explicit. \code // delete pointed objects SomeClassListIterator li(list); for(li;li++) delete li.current(); \endcode */ ~VDKList() { flush(); } /*! Appends a pointer to type T to the list. To mantain reference integrity no same pointer will be added twice. \param t type T pointer */ void add(T* t) { if(!find(t)) addToTail(new VDKItem(t)); /*! Prepends a pointer to type T to the list. To mantain reference integrity no same pointer will be added twice. \param t type T pointer */} void addH(T* t) { if(! find(t)) addToHead(new VDKItem(t)); } /*! Insert a pointer to type T to the list. To mantain reference integrity no same pointer will be added twice. \param t type T pointer \param pos ordinal position */ void insertAt(T* t, int pos) { if(!find(t)) insertVDKItem(new VDKItem(t),pos); } /*! Membership operator, return NULL if not found \param x address to be searched for */ T* find(T* x); /*! \internal */ T* listhead() { return fetch(0)->x; } /*! find position of type object, returns ordinal position, -1 on failure \param x address to be searched for */ int at(T* x); /*! Ordinal access operator */ T* operator[](int n) { return fetch(n)->x; } /*! Remove a pointer from list \param x address to be removed */ int remove(T* x); /*! Returns list size */ int size() { return count; } /*! Flushes list */ void flush(); /*! \internal */ VDKItem* Head() { return head; } /*! \internal */ VDKItem* Tail() { return tail; } }; /*! \class VDKListiterator \brief Provides a VDKList iterator */ template class VDKListiterator { VDKItem *head,*tail,*p; public: /*! Constructor \param a VDKList reference */ VDKListiterator(VDKList& c) { p = head = c.Head(); tail = c.Tail(); } /*! Destructor */ virtual ~VDKListiterator() {} /*! Incremental operator (postfix) */ void operator++() { p = p->next; } /*! Incremental operator (infix) */ void operator++(int) { p = p->next; } /*! Decremental operator (postfix) */ void operator--() { p = p->prev; } /*! Decremental operator (infix) */ void operator--(int) { p = p->prev; } /*! Goes to list head */ void first() { p = head; } /*! Goes to list tail */ void last() { p = tail; } /*! Return 0 at the list end */ operator int() { return p != (VDKItem*) 0; } /*! Returns currently pointed object */ T* current() { return p->x; } /*! \internal */ VDKItem* Next(VDKItem *t) { return t->next;} /*! \internal */ VDKItem* Head() { return head; } /*! \internal */ T* Now(VDKItem * t) { return t->x; } /*! Rewind iterator */ void restart() { p = head; } }; // //NON-INLINE MEMBER FUNCTIONS /*======================= PRIVATE: assign VDKItems copyng them from another list =======================*/ template void VDKList::assign(VDKList& l) { VDKListiterator ci(l); while(ci) { add(ci.current()); ci++; } } /*========================== PRIVATE: fetch VDKItem at n position ===========================*/ template VDKItem* VDKList::fetch(int n) { int t = 0; if(n >= count || n < 0) return (VDKItem*) 0; VDKItem* p = head; for( ;p && (t < n) ; t++, p = p->next); return p; } /*================================ PRIVATE: find ordinal position of VDKItem containing a type object, return -1 if not found ================================*/ template int VDKList::at(T* x) { register int t = 0; VDKItem* p = head; for(; p && (p->x != x);p = p->next,t++) ; return p ? t : -1; } /*=========== flushes list ============*/ template void VDKList::flush() { VDKItem*p = head; VDKItem*p1; while(p) { p1 = p->next; delete p; p = p1; } head = tail = 0; count = 0; } /* ============================ find(type) , iterate over container to find an object. hint: compare pointers only.. so is good only for identities.. ============================ */ template T* VDKList::find(T* x) { VDKItem* p; for(p = head; p && (p->x != x); p = p->next) ; return p ? p->x : (T*) 0; } /* ============================ remove a type. Return a 1 or 0 (not removed) ============================== */ template int VDKList::remove(T* x) { VDKItem* cur; int n = at(x); // object not found if(n < 0) return 0; else cur = fetch(n); // removing head if(cur == head) { head = cur->next; // one element list if(head != (VDKItem*) 0) head->prev = (VDKItem*) 0; else tail = (VDKItem*) 0; } else { // remove tail or intermediate element cur->prev->next = cur->next; if(cur != tail) cur->next->prev = cur->prev; // remove tail else tail = cur->prev; } delete cur; count--; return 1; } /* insert an item a position */ template void VDKList::insertVDKItem(VDKItem* i, int pos) { int t = 0; VDKItem* p = NULL; for(p = head; p && t < pos; p=p->next,t++) ; if(!p) addToTail(i); else if(p->prev) { p->prev->next = i; i->prev = p->prev; p->prev = i; i->next = p; count++; } else addToHead(i); } #endif vdk-2.4.0/vdk/entry.h0000644000000000000000000000637310030605333010030 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef ENTRY_H #define ENTRY_H #include #include #include //#include /*! \class VDKEntry \brief This class provides a gtkentry wrapper \par SIGNALS \arg \b activate_signal received when the user presses Enter key \arg \b changed_signal received when user presses other than an editing key \arg \b focus_in_signal received when widget gains focus \arg \b focus_out_signal received when widget looses focus \par EXAMPLES In ./testvdk/entrieswin.cc */ class VDKEntry: public VDKObject { static int FocusOutEvent(GtkWidget *w, GdkEventFocus *event, gpointer wid); static int FocusInEvent(GtkWidget *w, GdkEventFocus *event, gpointer wid); VDKString buffer; protected: int changeConnect; VDKObjectSignal s_activated, s_changed; public: // properties /*! Read/write entry text. \code char* p = "a text"; entry->Text = p; printf("\ntext:%s",(char*) entry->Text); fflush(stdout); \endcode */ VDKReadWriteValueProp Text; /*! Enable/disable editing */ VDKReadWriteValueProp Editable; /*! Enable/disable text visibility \par Tip Use this property set to true to make a "secret" entry field */ VDKReadWriteValueProp Hidden; // VDKEntry(VDKForm* owner,int maxLen = 0, char* def = (char*) NULL); virtual ~VDKEntry(); /*! Enables word completion \param completion_list a NULL terminating string array */ void SetCompletion(char** completion_list); /*! Add a completion word to completion list \param completion_item */ void AddCompletionItem(char* completion_item); /*! Remove a completion word from completion list \param completion_item */ void RemoveCompletionItem(char* completion_item); /* */ void SetText(char* text); char* GetText(); void SetEditable(bool flag) { gtk_entry_set_editable(GTK_ENTRY(widget),flag); } bool GetEditable() { return Editable; } virtual void SetBackground(VDKRgb rgb, GtkStateType state); virtual void SetForeground(VDKRgb rgb, GtkStateType state); virtual void SetFont(VDKFont* font); void SetHidden(bool flag) { gtk_entry_set_visibility(GTK_ENTRY(widget), ! flag) ; } bool GetHidden() { return ! Hidden; } }; #endif vdk-2.4.0/vdk/evbrowser.h0000644000000000000000000000266507206652412010720 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef EVBROWSER_H #define EVBROWSER_H #include class VDKForm; class VDKEventBrowser: public VDKObject { protected: static int HandleTimerTick(gpointer obj); unsigned int timerId; unsigned int tick; bool started; public: // properties VDKEvent EventType; GdkEvent *Event; bool RemoveEvent; // VDKEventBrowser(VDKForm* owner, unsigned int tick = 100); ~VDKEventBrowser(); void Start(); void Stop(); bool Started() { return started; } }; #endif vdk-2.4.0/vdk/evhandle.h0000644000000000000000000001761607315525453010477 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef EVHANDLE_H #define EVHANDLE_H #include #include #include /* ============================================== SIGNAL DISPATCHER ROUTINES ============================================== */ /* _VDKSignalTable_: Obj/Signal/Response method Table */ template class _VDKSignalTable_ { public: typedef bool (T::*PMF)(VDKObject* sender); VDKObject* T::*Pm; /* member offset */ int signal; /* signal type (see enum VDKSignal in vdkobj.h) */ PMF Pmf; /* member function offset */ bool connected; /* connected flag, if false denies signal */ }; /* Signal response function map declaration: declare a static signal table for each form */ #define DECLARE_SIGNAL_MAP(_Parent_Class_) \ private:\ static _VDKSignalTable_< _Parent_Class_ > _STEntries_[];\ typedef _VDKSignalTable_< _Parent_Class_ >::PMF _Member_;\ typedef _Parent_Class_ _Parent_MyClass_;\ protected:\ virtual int VDKSignalResponseTableSize();\ public:\ virtual int VDKSignalResponse(GtkWidget* , int signal, void*, void*,bool);\ virtual int SignalDetach(VDKObject* Pm, int signal);\ virtual bool SignalAttach(int slot); /* define form signal response function that in turn call object signal response function algorithm: 1. scan table until find table end 2. if matches object and signal then slot is found 3. if slot is connected 4. bind object address with member function class offset 5. call callback 6. if callback return true consider signal "treated" 7. if signal is treated finish otherwise recursively call himself to ancestor class */ #define DEFINE_SIGNAL_MAP(_Parent_Class_,base)\ \ int _Parent_Class_::VDKSignalResponse(GtkWidget* mobj, \ int signal, void* obj, void* real_sender, bool treated) \ {\ int t=0;\ /*bool treated = false;*/\ VDKObject* vdkobj = reinterpret_cast(obj);\ VDKObject* real = reinterpret_cast(real_sender);\ for(;_STEntries_[t].Pm != NULL ;t++)\ {\ VDKObject* _Parent_Class_::*memberOffset = _STEntries_[t].Pm;\ if ( ((*this).*memberOffset == vdkobj) &&\ (_STEntries_[t].signal == signal) )\ {\ if (_STEntries_[t].connected)\ {\ bool(_Parent_Class_::*response)(VDKObject* sender)= \ _STEntries_[t].Pmf;\ if(((*this).*response)(real) == true)\ treated = true;\ }\ /*break;*/\ }\ }\ if(treated) return 1;\ else return base::VDKSignalResponse(mobj,signal,obj,real_sender, treated);\ }\ \ \ int _Parent_Class_::VDKSignalResponseTableSize()\ {\ int t = 0;\ for(;_STEntries_[t].Pm != NULL;t++)\ ;\ return t;\ }\ \ \ \ int _Parent_Class_::SignalDetach(VDKObject* Pm, int signal)\ {\ int t=0;\ for(;_STEntries_[t].Pm != NULL ;t++)\ {\ VDKObject* _Parent_Class_::*memberOffset = _STEntries_[t].Pm;\ if ( ((*this).*memberOffset == Pm) &&\ (_STEntries_[t].signal == signal) &&\ _STEntries_[t].connected != false)\ {\ _STEntries_[t].connected = false;\ return t;\ }\ }\ return -1;\ }\ \ \ \ bool _Parent_Class_::SignalAttach(int slot)\ {\ if( (slot >= 0) && (slot <= VDKSignalResponseTableSize()) )\ {\ _STEntries_[slot].connected = true;\ return true;\ }\ else\ return false;\ }\ \ \ _VDKSignalTable_< _Parent_Class_ > _Parent_Class_::_STEntries_[] = { /* fill static signal table */ #define ON_SIGNAL(_obj_,_SIGNAL_,_member_) \ { reinterpret_cast(&_Parent_MyClass_::_obj_),\ _SIGNAL_,&_Parent_MyClass_::_member_,true} /* */ #define END_SIGNAL_MAP ,{ NULL, 0, NULL, false} }; /* */ /* ============================================== EVENT DISPATCHER ROUTINES ============================================== */ /* EVENTTableEntry: Event-ObjectCallback Table Entry */ template class EVENTTableEntry { public: // typedef void (T::*PMF)(VDKObject* sender, GdkEvent* event); typedef bool (T::*PMF)(VDKObject* sender, GdkEvent* event); VDKObject* T::*Pm; /* pointer to member offset */ GdkEventType event; /* event type (see enum VDKevent in vdkobj.h) */ PMF Pmf; /* pointer to member function */ bool connected; }; /* Events response function map declaration: declare a static events table for each form */ #define DECLARE_EVENT_MAP(_EVENTclass_) \ private:\ static EVENTTableEntry< _EVENTclass_ > __OCBEventEntries[];\ typedef EVENTTableEntry< _EVENTclass_ >::PMF _EvMember_;\ typedef _EVENTclass_ _EVENTmyclass_;\ protected:\ virtual int VDKEventResponseTableSize();\ public:\ virtual int VDKEventResponse(GtkWidget* , GdkEvent* , void*, void*,bool);\ virtual int EventDetach(VDKObject* , VDKEvent event);\ virtual bool EventAttach(int slot); /* define form EVENT response function that in turn call object EVENT response function */ #define DEFINE_EVENT_MAP(_EVENTclass_,base) \ int _EVENTclass_::VDKEventResponse(GtkWidget* wid, GdkEvent* event, void* obj, void* real_sender, bool treated) \ \ {\ int t=0;\ /*bool treated = false;*/\ VDKObject* vdkobj = reinterpret_cast(obj);\ VDKObject* real = reinterpret_cast(real_sender);\ for(;__OCBEventEntries[t].Pm != NULL ;t++)\ {\ VDKObject* _EVENTclass_::*memberOffset = __OCBEventEntries[t].Pm;\ if( ((*this).*memberOffset == vdkobj) &&\ (__OCBEventEntries[t].event == ((GdkEventAny*)event)->type) )\ {\ if (__OCBEventEntries[t].connected)\ {\ bool (_EVENTclass_::*response)\ (VDKObject* , GdkEvent* ) = \ __OCBEventEntries[t].Pmf;\ if(((*this).*response)(real,event))\ treated = true;\ }\ /*break;*/\ }\ }\ if(treated) return 1;\ else return base::VDKEventResponse(wid,event,obj,real_sender, treated); \ }\ \ \ \ int _EVENTclass_::VDKEventResponseTableSize()\ {\ int t = 0;\ for(;__OCBEventEntries[t].Pm != NULL;t++)\ ;\ return t;\ }\ \ \ \ int _EVENTclass_::EventDetach(VDKObject* Pm, VDKEvent event)\ {\ int t=0;\ for(;__OCBEventEntries[t].Pm != NULL ;t++)\ {\ VDKObject* _EVENTclass_::*memberOffset = __OCBEventEntries[t].Pm;\ if ( ((*this).*memberOffset == Pm) &&\ (__OCBEventEntries[t].event == (GdkEventType) event)&&\ __OCBEventEntries[t].connected != false)\ {\ __OCBEventEntries[t].connected = false;\ return t;\ }\ }\ return -1;\ }\ \ \ \ bool _EVENTclass_::EventAttach(int slot)\ {\ if( (slot >= 0) && (slot <= VDKEventResponseTableSize()) )\ {\ __OCBEventEntries[slot].connected = true;\ return true;\ }\ else\ return false;\ }\ \ \ EVENTTableEntry< _EVENTclass_ > _EVENTclass_::__OCBEventEntries[] = { /* fill static EVENT table */ #define ON_EVENT(_obj_,_EVENT_,_member_) \ /* {reinterpret_cast(&_EVENTmyclass_::_obj_), (GdkEventType) _EVENT_,&(_EVENTmyclass_::_member_),true} */ \ {reinterpret_cast(&_EVENTmyclass_::_obj_), (GdkEventType) _EVENT_,&_EVENTmyclass_::_member_,true} /* */ #define END_EVENT_MAP ,{ NULL , (GdkEventType) 0, NULL,false} }; #endif vdk-2.4.0/vdk/evlisthandle.h0000644000000000000000000001366007336243460011364 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef EVLISTHANDLE_H #define EVLISTHANDLE_H #include // #include #include #include #include #define VDK_EVENT_NAME_LENGHT 63 /* ============================================== EVENT LIST ROUTINES ============================================== */ template class _VDK_Event_Unit { public: typedef bool (T::*PMF)(VDKObject* sender, GdkEvent* event); VDKObject* Pm; // VDKString event; /* Event name ala Gtk+ */ char event[VDK_EVENT_NAME_LENGHT+1]; PMF Pmf; /* member function offset */ gint slot; /* gtk+ slot returned by gtk_signal_connect() */ bool connected; GtkObject* gtkobj; /* gtk object */ /* _VDK_Event_Unit(VDKObject* Pm, char* event, PMF Pmf): Pm(Pm),event(event),Pmf(Pmf), slot(-1),connected(true) {} */ _VDK_Event_Unit(VDKObject* Pm, char* ev, PMF Pmf): Pm(Pm),Pmf(Pmf), slot(-1),connected(true) { std::strncpy(event,ev,VDK_EVENT_NAME_LENGHT); // for safe event[VDK_EVENT_NAME_LENGHT] ='\0'; } /* bool operator ==(_VDK_Event_Unit& su) { return (event == su.event) && (Pm == su.Pm); } */ bool operator ==(_VDK_Event_Unit& su) { return ((!std::strcmp(event,su.event)) && (Pm == su.Pm)); } }; #define DECLARE_EVENT_LIST(_owner_class) \ \ private:\ typedef _VDK_Event_Unit<_owner_class> _EventUnit;\ typedef VDKValueList< _EventUnit > _EventCallbackList;\ typedef VDKValueListIterator< _EventUnit > _EventCallbackListIterator;\ _EventCallbackList _event_cbList;\ public:\ /*virtual bool FindEventAtClassLevel(VDKObject* Pm, VDKString& event);*/\ virtual bool FindEventAtClassLevel(VDKObject* Pm, char* event);\ /*virtual bool FindEventAtParentLevel(VDKObject* Pm, VDKString& event);*/\ virtual bool FindEventAtParentLevel(VDKObject* Pm, char* event);\ virtual int VDKEventUnitResponse(GtkWidget* , char* , GdkEvent* , void*);\ \ \ \ int EventConnect(VDKObject* object, char* event,\ bool (_owner_class::*Pmf)(VDKObject* sender, GdkEvent*), bool after = false);\ int EventConnect(char* event,\ bool (_owner_class::*Pmf)(VDKObject* sender, GdkEvent*), bool after = false)\ {\ return EventConnect(this, event, Pmf,after);\ }\ \ \ bool EventDisconnect(int slot); /* */ #define DEFINE_EVENT_LIST(_owner_class, _ancestor_class)\ \ \ /*bool _owner_class::FindEventAtClassLevel(VDKObject* Pm, VDKString& event)*/\ bool _owner_class::FindEventAtClassLevel(VDKObject* Pm, char* event)\ {\ _EventUnit su(Pm,event, (bool (_owner_class::*)(VDKObject*, GdkEvent*)) NULL);\ if(_event_cbList.find(su))\ return true;\ else\ return _ancestor_class::FindEventAtClassLevel(Pm,event);\ }\ \ \ /*bool _owner_class::FindEventAtParentLevel(VDKObject* Pm, VDKString& event)*/\ bool _owner_class::FindEventAtParentLevel(VDKObject* Pm, char* event)\ {\ VDKObject* parent;\ for(parent = Parent(); parent; parent = parent->Parent())\ if(parent->FindEventAtClassLevel(Pm,event))\ return true;\ return false;\ }\ \ \ \ int _owner_class::EventConnect(VDKObject* obj, char* event,\ bool (_owner_class::*Pmf)(VDKObject* sender, GdkEvent*), bool after)\ {\ bool found = false;\ VDKObjectEventUnit* su = new VDKObjectEventUnit(this,obj,event);\ euList.add(su);\ _EventUnit sigUnit(obj,event,Pmf);\ found = obj->FindEventAtClassLevel(sigUnit.Pm,sigUnit.event) || \ obj->FindEventAtParentLevel(sigUnit.Pm,sigUnit.event);\ if(!found)\ sigUnit.slot = after ? gtk_signal_connect_after(GTK_OBJECT(obj->ConnectingWidget()),event,\ GTK_SIGNAL_FUNC(VDKObject::VDKEventUnitPipe),\ reinterpret_cast(su) ):\ gtk_signal_connect(GTK_OBJECT(obj->ConnectingWidget()),event,\ GTK_SIGNAL_FUNC(VDKObject::VDKEventUnitPipe),\ reinterpret_cast(su) );\ else\ sigUnit.slot = (_event_cbList.size()+1)*-1;\ sigUnit.gtkobj = obj->ConnectingWidget() != NULL ? \ GTK_OBJECT(obj->ConnectingWidget()) : NULL;\ _event_cbList.add(sigUnit);\ return sigUnit.slot;\ }\ \ \ \ bool _owner_class::EventDisconnect(int slot)\ {\ int t = 0;\ _EventCallbackListIterator li(_event_cbList);\ for(;li;li++,t++)\ {\ _EventUnit su = li.current();\ if(su.slot == slot)\ {\ if(su.slot > 0)\ gtk_signal_disconnect(su.gtkobj,su.slot);\ _event_cbList.unlink(t);\ return true;\ }\ }\ return false;\ }\ \ \ int _owner_class::VDKEventUnitResponse(GtkWidget* mobj,\ char* event,\ GdkEvent* evType,\ void* obj)\ {\ bool treated = false;\ VDKObject* vdkobj = reinterpret_cast(obj);\ _EventCallbackListIterator li(_event_cbList);\ for(;li;li++)\ {\ _EventUnit su = li.current();\ if ( (su.Pm == vdkobj) &&\ (!std::strcmp(su.event,event) && su.connected))\ {\ bool(_owner_class::*response)(VDKObject* sender, GdkEvent* )= \ su.Pmf;\ if(((*this).*response)(vdkobj, evType) == true)\ treated = true;\ }\ }\ if(treated)\ return 1;\ else\ return _ancestor_class::VDKEventUnitResponse(mobj,event,evType,obj);\ } #endif vdk-2.4.0/vdk/evobjhandle.h0000644000000000000000000001573307206652422011164 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef EVJOBHANDLE_H #define EVJOBHANDLE_H #include #include /* ============================================== OBJECT_SIGNAL DISPATCHER ROUTINES ============================================== */ /* OBJECT_SIGNALTableEntry: Obj/Signal/Response method Table Entry */ template class OBJECT_SIGNALTableEntry { public: typedef bool (T::*OBJPMF)(VDKObject* sender); int signal; /* signal type (see enum VDKSignal in vdkobj.h) */ OBJPMF Pmf; /* pointer to member function */ bool connected; /* connected flag, if false deny signal */ }; /* Signal response function map declaration: declare a static signal table for each object class */ #define DECLARE_OBJECT_SIGNAL_MAP(_OBJECT_SIGNALclass_) \ private:\ static OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ > __OC_OBJ_Bentries[];\ typedef OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ >::OBJPMF _Member_;\ typedef _OBJECT_SIGNALclass_ _OBJECT_SIGNALmyclass_;\ protected:\ virtual int VDKObjectSignalResponseTableSize();\ public:\ virtual int VDKObjectSignalResponse(GtkWidget*,int signal,void*, bool);\ virtual int ObjectSignalDetach(int signal);\ virtual bool ObjectSignalAttach(int slot); /* define form signal response function that in turn call object signal response function */ #define DEFINE_OBJECT_SIGNAL_MAP(_OBJECT_SIGNALclass_,base)\ \ \ \ \ int _OBJECT_SIGNALclass_::VDKObjectSignalResponse(GtkWidget* mobj, int signal, void* obj, bool treated) \ {\ int t=0;\ VDKObject* vdkobj = static_cast(obj);\ /*bool treated = false;*/\ for(;__OC_OBJ_Bentries[t].signal >= 0 ;t++)\ {\ if( (__OC_OBJ_Bentries[t].signal == signal) )\ {\ if (__OC_OBJ_Bentries[t].connected)\ {\ bool (_OBJECT_SIGNALclass_::*response)(VDKObject* sender)=\ __OC_OBJ_Bentries[t].Pmf;\ if(((*this).*response)(vdkobj))\ treated = true;\ }\ /*break;*/\ }\ }\ if(treated) return 1;\ else return base::VDKObjectSignalResponse(mobj,signal,obj, treated); \ }\ \ \ \ int _OBJECT_SIGNALclass_::VDKObjectSignalResponseTableSize()\ {\ int t = 0;\ for(;__OC_OBJ_Bentries[t].signal >= 0;t++)\ ;\ return t;\ }\ \ \ \ int _OBJECT_SIGNALclass_::ObjectSignalDetach(int signal)\ {\ int t=0;\ for(;__OC_OBJ_Bentries[t].signal>= 0 ;t++)\ {\ if((__OC_OBJ_Bentries[t].signal == signal) &&\ __OC_OBJ_Bentries[t].connected != false)\ {\ __OC_OBJ_Bentries[t].connected = false;\ return t;\ }\ }\ return -1;\ }\ \ \ \ bool _OBJECT_SIGNALclass_::ObjectSignalAttach(int slot)\ {\ if( (slot >= 0) && (slot <= VDKObjectSignalResponseTableSize()) )\ {\ __OC_OBJ_Bentries[slot].connected = true;\ return true;\ }\ else\ return false;\ }\ \ \ OBJECT_SIGNALTableEntry< _OBJECT_SIGNALclass_ > _OBJECT_SIGNALclass_::__OC_OBJ_Bentries[] = { /* fill static signal table */ #define ON_OBJECT_SIGNAL(_OBJECT_SIGNAL_,_member_) \ {_OBJECT_SIGNAL_,&(_OBJECT_SIGNALmyclass_::_member_),true} /* */ #define END_OBJECT_SIGNAL_MAP ,{-1, NULL,false} }; /* ============================================== OBJECT_EVENT DISPATCHER ROUTINES ============================================== */ /* OBJECT_EVENTTableEntry: Event-ObjectCallback Table Entry */ template class OBJECT_EVENTTableEntry { public: typedef bool (T::*OBJPMF)(VDKObject* sender, GdkEvent* event); GdkEventType event; /* event type (see enum VDKevent in vdkobj.h) */ OBJPMF Pmf; /* pointer to member function */ bool connected; }; /* Events response function map declaration: declare a static events table for each form */ #define DECLARE_OBJECT_EVENT_MAP(_OBJECT_EVENTclass_) \ private:\ static OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ > __OCBOBJECT_EVENTEntries[];\ typedef OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ >::OBJPMF _EvMember_;\ typedef _OBJECT_EVENTclass_ _OBJECT_EVENTmyclass_;\ protected:\ virtual int VDKObjectEventResponseTableSize();\ public:\ virtual int VDKObjectEventResponse(GtkWidget* , GdkEvent* , void*, bool);\ virtual int ObjectEventDetach(VDKEvent event);\ virtual bool ObjectEventAttach(int slot); /* define form OBJECT_EVENT response function that in turn call object OBJECT_EVENT response function */ #define DEFINE_OBJECT_EVENT_MAP(_OBJECT_EVENTclass_,base) \ int _OBJECT_EVENTclass_::VDKObjectEventResponse(GtkWidget* wid, GdkEvent* event, void* obj, bool treated) \ {\ int t=0;\ VDKObject* vdkobj = static_cast(obj);\ for(;__OCBOBJECT_EVENTEntries[t].event >= 0 ;t++)\ {\ if((__OCBOBJECT_EVENTEntries[t].event == ((GdkEventAny*)event)->type) )\ {\ if (__OCBOBJECT_EVENTEntries[t].connected)\ {\ bool (_OBJECT_EVENTclass_::*response)\ (VDKObject* , GdkEvent* )= \ __OCBOBJECT_EVENTEntries[t].Pmf;\ if(((*this).*response)(vdkobj,event))\ treated = true;\ }\ /*break;*/\ }\ }\ if(treated) return 1;\ else return base::VDKObjectEventResponse(wid,event,obj, treated); \ }\ \ \ \ int _OBJECT_EVENTclass_::VDKObjectEventResponseTableSize()\ {\ int t = 0;\ for(;__OCBOBJECT_EVENTEntries[t].event>= 0;t++)\ ;\ return t;\ }\ \ \ \ int _OBJECT_EVENTclass_::ObjectEventDetach(VDKEvent event)\ {\ int t=0;\ for(;__OCBOBJECT_EVENTEntries[t].event >= 0 ;t++)\ {\ if((__OCBOBJECT_EVENTEntries[t].event == (GdkEventType) event) &&\ __OCBOBJECT_EVENTEntries[t].connected != false)\ {\ __OCBOBJECT_EVENTEntries[t].connected = false;\ return t;\ }\ }\ return -1;\ }\ \ \ \ bool _OBJECT_EVENTclass_::ObjectEventAttach(int slot)\ {\ if( (slot >= 0) && (slot <= VDKObjectEventResponseTableSize()) )\ {\ __OCBOBJECT_EVENTEntries[slot].connected = true;\ return true;\ }\ else\ return false;\ }\ \ \ OBJECT_EVENTTableEntry< _OBJECT_EVENTclass_ > _OBJECT_EVENTclass_::__OCBOBJECT_EVENTEntries[] = { /* fill static OBJECT_EVENT table */ #define ON_OBJECT_EVENT(_OBJECT_EVENT_,_member_) \ {(GdkEventType) _OBJECT_EVENT_,&(_OBJECT_EVENTmyclass_::_member_),true} /* */ #define END_OBJECT_EVENT_MAP ,{(GdkEventType) -1, NULL,false} }; #endif vdk-2.4.0/vdk/filedlg.h0000644000000000000000000000422607206652423010305 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef FILEDLG_H #define FILEDLG_H #include #include /*! \class VDKFileSel \brief Wraps GtkFileSelection This class is a file selection modal form ala Gtk+ \par Usage \code char selection[256]; strcpy(selection,"*.h"); // sets default file mask // is the owner form VDKFileSel *dlg = new VDKFileSel(this,selection,"Open header"); dlg->ShowModal(); if(*selection) cout << selection << '\n'; \endcode */ class VDKFileSel: public VDKForm { VDKFileSel(VDKApplication* app, char* selection, gchar* title = NULL, GtkWindowType display = GTK_WINDOW_TOPLEVEL); protected: GtkWidget* fileSel; VDKObject* ok_button,*cancel_button; VDKObjectSignal ok_s_clicked; VDKObjectSignal cancel_s_clicked; char* selection; public: VDKFileSel(VDKForm* owner, char* selection, gchar* title = ""); virtual ~VDKFileSel(); /*! placeholder */ virtual void OnExpose( VDKForm*, GdkRectangle) {} /*! placeholder */ virtual void OnRealize(VDKForm*) {} /*! placeholder */ virtual void Setup() {} bool Ok(VDKObject*); bool Cancel(VDKObject*); void Show() { VDKForm::ShowModal();} DECLARE_SIGNAL_MAP(VDKFileSel); }; #endif vdk-2.4.0/vdk/fixed.h0000644000000000000000000000347407206652423010002 /* * =========================== * VDK Visual Develeopment Kit * Version 0.5 * December 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef FIXED_H #define FIXED_H #include #include /*! \class VDKFixed \brief This class wraps gtkfixed container In this container the gtk+ auto layout capability is disabled, all widgets are inserted in a fixed way with theri owns coordinates. */ class VDKFixed: public VDKObjectContainer { public: VDKFixed(VDKForm* owner); virtual ~VDKFixed(); /*! Add an object to a fixed at , coordinates. \internal \par Tip user should ignore this method since is used mostby the vdkbuilder. */ virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 0); /*! Add an object to fixed using coordinates. \param x x coordinate relative to fixed origin \param y y coordinate relative to fixed origin */ void Put(VDKObject* obj, int x, int y); }; #endif vdk-2.4.0/vdk/forms.h0000644000000000000000000002367407325452473010042 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef FORMS_H #define FORMS_H #include #include #include #include #include #include #include #include class VDKObject; class VDKColor; class VDKForm; class VDKFont; class VDKBox; class VDKRawPixmap; typedef VDKList ChildList; typedef VDKListiterator ChildListIterator; typedef VDKList ObjectList; typedef VDKListiterator ObjectListIterator; /*! \class VDKForm \brief VDKForm widgets, generally the outermost widget container. This class provides a common interface with GTK+ windows that are here called "Forms". VDKForm provides common functionalities for all derived classes.
\htmlonly
\endhtmlonly
*/ class VDKForm : public VDKObject { private: /*! copy and assignement prohibited */ VDKForm(VDKForm& ):VDKObject( NULL) {} /*! copy and assignement prohibited */ VDKForm& operator=(VDKForm& ) { return *this; } protected: /*! \internal */ void SignalsConnect(); /*! owner application address */ VDKApplication* app; /*! child and child garbage list */ ChildList childs,childsGarbage; /*! underlaying gtk+ window */ GtkWidget *window; /*! default inner box */ VDKBox* box; /*! modal flag */ bool isModal; /*! never showed flag */ bool never_showed; /* position storage */ VDKPoint _oldPos; /*! size storage */ VDKPoint _oldSize; /*! counts how many modal childs we have should be always max 1 */ int modalCount; /* \internal */ static int ConfigureEvent(GtkWidget* , GdkEventConfigure* ev, gpointer gp); /* \internal */ static gboolean WindowStateEvent (GtkWidget *widget, GdkEventWindowState *event); /* \internal */ static int DestroyEvent (GtkWidget*, gpointer gp); /* \internal */ static int DeleteEvent(GtkWidget* , GdkEvent* , gpointer gp); /* \internal */ static int ExposeEvent(GtkWidget* , GdkEventExpose* ev, gpointer gp); /* \internal */ static void RealizeSignal(GtkWidget* , gpointer gp); /* \internal */ static int MapEvent(GtkWidget* , GdkEvent* ev ,gpointer gp); /* \internal */ static int UnmapEvent(GtkWidget* , GdkEvent* ev ,gpointer gp); /* \internal */ static int FocusInEvent(GtkWidget* , GdkEvent* ev ,gpointer gp); /* \internal */ static int FocusOutEvent(GtkWidget* , GdkEvent* ev ,gpointer gp); /* \internal */ static void SizeAllocateSignal(GtkWidget *widget, GtkAllocation *allocation, gpointer gp); public: /* properties */ VDKReadWriteValueProp Visible; VDKReadWriteValueProp Title; VDKReadWriteValueProp Position; VDKReadWriteValueProp Iconized; VDKReadWriteValueProp BackgroundPixmap; VDKReadWriteValueProp FocusWidget; /* constructors */ /*! constructor, makes a main form, application child \param app the application that owns the form \param title \param mode as inner box should be, either vertical (v_box) or horizontal (h_box) \param display display type can be one of the following: - GTK_WINDOW_TOPLEVEL - GTK_WINDOW_DIALOG - GTK_WINDOW_POPUP behavio_ vdksdl_form_hur depends on window manager */ VDKForm(VDKApplication* app, char* title = (char*) NULL, int mode = v_box, GtkWindowType display = GTK_WINDOW_TOPLEVEL); /*! constructor, makes a child form \param owner the form that owns the child form \param title \param mode as inner box should be, either vertical (v_box) or horizontal (h_box) \param display display type can be one of the following: - GTK_WINDOW_TOPLEVEL - GTK_WINDOW_DIALOG - GTK_WINDOW_POPUP behaviour depends on window manager */ VDKForm(VDKForm* owner, char* title = (char*) NULL, int mode = v_box, GtkWindowType display = GTK_WINDOW_TOPLEVEL); /*! \internal */ VDKForm(VDKApplication* app, GtkWidget* wid, char* title = (char*) NULL); #if HAVE_GNOME /*! \internal */ VDKForm(VDKForm* owner, GtkWidget* wid, char* title = (char*) NULL); #endif /*! Destructor */ virtual ~VDKForm(); /*! Explicitely destroy a form. */ bool Destroy(); /*! \internal */ virtual int isA() { return form_class; } /*! return inner box */ VDKBox* Box() { return box; } /*! Shows form. \param pos indicates initial form position, can be one of the following: - GTK_WIN_POS_NONE - GTK_WIN_POS_CENTER - GTK_WIN_POS_MOUSE - GTK_WIN_POS_CENTER_ALWAYS */ virtual void Show(GtkWindowPosition pos = GTK_WIN_POS_NONE); /*! Hides form */ virtual void Hide(); /*! Shows a form in modal behaviour \param pos indicates initial form position, can be one of the following: - GTK_WIN_POS_NONE - GTK_WIN_POS_CENTER - GTK_WIN_POS_MOUSE - GTK_WIN_POS_CENTER_ALWAYS */ virtual void ShowModal(GtkWindowPosition pos = GTK_WIN_POS_NONE); /*! Return if a showed window is modal or not */ bool IsModal() { return isModal; } /*! Add an object to the form. Tip: will be actually added to inner box same as form->Box()->Add(); \param obj the object to be added \param justify where the object wil be added, can be: - l_justify packed to end (appended) - r_justify packed to start (prepended) \param expand if true objet will expand from container center \param fill if true object will fill all available space \param padding how many pixels are left around object */ virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 1); /*! \internal */ void AddChild(VDKForm* child); /*! Return form owner Tip: returns NULL id is main form */ VDKForm* Owner() { return owner; } /*! \internal */ void RemoveChild(VDKForm* child); /*! Placeholder for subclasses. User should override this returning a false (don't close) or true (close) value. */ virtual bool CanClose(void); /*! Closes the form, if form is main application form it quits application as well. Call CanClose() before, if it returns true closes the form otherwise form won't be closed. */ virtual void Close(void); // this makes a VDKForm an abstract class /*! Must be overridden by subclasses, in this method user fills form with useful widgets */ virtual void Setup(void) = 0; void SetTitle(VDKString title) { gtk_window_set_title(GTK_WINDOW(window),(char*) title); } VDKString GetTitle(void) { VDKString title = Title; return VDKString(title); } GtkWidget* Window() { return window; } VDKApplication* Application() { return app; } void CloseChilds(void); void CollectGarbage(); ObjectList& Objects(void) { return items; } ChildList& Childs(void) { return childs; } ChildList& ChildsGarbage(void) { return childsGarbage; } /*! Raises form */ void Raise(); /*! Lower form */ void Lower(); void SetVisible(bool flag) { if(flag) Show(); else Hide(); } bool GetVisible() { return GTK_WIDGET_VISIBLE(window); }; /* */ void SetIcon(VDKRawPixmap*); void SetIconName(char* name); void SetPosition(VDKPoint p); VDKPoint GetPosition(); // void SetDefaultSize(VDKPoint p); void SetFormSize(VDKPoint p) { if(window) gdk_window_resize(window->window,p.X(),p.Y()); } bool GetIconized(); void SetIconized(bool flag); void SetBackgroundPixmap(VDKRawPixmap* pix); void SetFocusWidget(VDKObject* focuswidget); /* event response (place holders for subclasses) */ static void ButtonPressEvent(GtkWidget* , GdkEventButton* ev, gpointer gp); virtual void OnExpose( VDKForm* sender, GdkRectangle area); virtual void OnChildClosing(VDKForm* child); virtual void OnShow(VDKForm* sender); virtual void OnRealize(VDKForm* sender); virtual void OnConfigure(VDKForm* sender); virtual void OnMove(VDKForm* sender); virtual void OnResize(VDKForm* sender, VDKPoint& size); virtual void OnIconize(VDKForm* sender); virtual void OnRestore(VDKForm* sender); virtual void OnFormActivate(VDKForm* sender, bool in_out); /* Answers to a MS Windows-like message. Not very useful, just added to facilitate porting my neural lib from MS Windows to VDK. Casual user should override in his own forms. */ virtual int WindozeMessage(int /*msg*/, unsigned int /*wParam*/, long unsigned int /*lParam*/) { return 0; } }; #endif vdk-2.4.0/vdk/frame.h0000644000000000000000000000501007206652431007760 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef FRAME_H #define FRAME_H #include #include #include #include /*! \class VDKFrame \brief This class wraps a gtkframe widget \par EXAMPLES In ./testvdk/rbuttonwin.cc */ class VDKFrame: public VDKObjectContainer { protected: VDKBox* box; void SetLabel(char* label) { gtk_frame_set_label(GTK_FRAME(widget),label); } void SetShadow(int shadow) { gtk_frame_set_shadow_type(GTK_FRAME(widget),(GtkShadowType) shadow); } void SetAlign(int j); public: // properties /*! Sets/gets frame label */ __rwproperty(VDKFrame, char*) Label; /*! Sets/gets frame shadow Can be on of the following: \arg \b shadow_none \arg \b shadow_in \arg \b shadow_out \arg \b shadow_etched_in \arg \b shadow_etched_out */ __rwproperty(VDKFrame, int) Shadow; /*! Sets/gets label alignement Can be on of the following: \arg \b l_justify align to left \arg \b c_justify align to center \arg \b r_justify align to right */ __rwproperty(VDKFrame, int) Align; /*! Constructor \param owner \param label \param mode , either v_box (vertical box) or h_box \param shadow */ // VDKFrame(VDKForm* owner, char* label = (char*) NULL, int mode = v_box, int shadow = shadow_in); ~VDKFrame() {} /*! Add an widget to frame \param obj \param justify \param expand \param fill \param padding */ void Add(VDKObject* obj,int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 0); }; #endif vdk-2.4.0/vdk/handlebox.h0000644000000000000000000000357007206652431010643 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef HANDLEBOX_H #define HANDLEBOX_H #include /*! \class VDKHandleBox \brief This class provides a gtkhandle box wrapper \par SIGNALS \arg \b child_attached_signal received when widget is attached to owner \arg \b child_detached_signal received when widget is detached from owner \par EXAMPLES In ./testvdk/tbarwin.cc */ class VDKHandleBox: public VDKObjectContainer { protected: static void HandleBoxSignal (GtkWidget* ,GtkWidget *, gpointer ); public: // properties /*! Use this property to access the widget contained into an handlebox */ VDKReadOnlyValueProp Child; /*! Constructor \param owner */ VDKHandleBox(VDKForm* owner); /*! Destructor */ virtual ~VDKHandleBox(); /*! Add an widget to handlebox */ virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 0); }; #endif vdk-2.4.0/vdk/image.h0000755000000000000000000000523710022076720007755 /* * =========================== * VDK Visual Development Kit * Version 2.0 * Feebruary 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef VDKIMAGE_H #define VDKIMAGE_H #include #include class VDKTooltip; /*! \class VDKImage \brief Provides an image widget This widget should substitute VDKPixmap object that from now should be considered deprecated. \par TIP Constructing with or set to NULL will make only the inner event box. Thus allowing to construct an empty image that can be later initialized with SetImage(). User should cast NULL to either char* or char** to avoid ambiguity */ class VDKImage: public VDKObject { protected: int width,height; VDKPixbuf* pixmap; GtkWidget* pixmapWid; VDKTooltip* tip; VDKPixbuf* oldRawPix; public: /*! Constructor \param owner \param pixfile \param tip */ VDKImage(VDKForm* owner, const char* pixfile, char* tip = NULL, bool sensitive = false); /*! Constructor \param owner \param pixdata \param tip */ VDKImage(VDKForm* owner, const char** pixdata, char* tip = NULL, bool sensitive = false); /*! Destructor */ virtual ~VDKImage(); /*! Return image width */ int Width() { return width; } /*! Return image height */ int Height() { return height; } /*! Returns the pixbuf contained into VDKImage */ VDKPixbuf* SetImage() { return oldRawPix; } /*! Change the raw pixbuf contained into VDKImage \param file pixbuf file */ VDKPixbuf* SetImage(const char* file); /*! Change the raw pixmap contained into VDKImage \param newpix */ VDKPixbuf* SetImage(VDKPixbuf* newpix); /*! Change the raw pixbuf contained into VDKImage \param pixdata pixmap data */ VDKPixbuf* SetImage(const char** pixdata); }; #endif vdk-2.4.0/vdk/label.h0000644000000000000000000000375207315525454007765 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * Modify by Salmaso Raffaele 10 Jan 1999 * added 2 property: Caption and CaptionWrap * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef LABEL_H #define LABEL_H #include /*! \class VDKLabel \brief Provides a gtklabel wrapper \par EXAMPLES Almost all ./testvdk/.*cc */ class VDKLabel: public VDKObject { public: // /*! Sets/gets label text justification */ VDKReadWriteValueProp Justify; /*! Sets/gets label text */ VDKReadWriteValueProp Caption; /*! Sets/gets label text wrap */ VDKReadWriteValueProp CaptionWrap; /*! Constructor \param owner \param label \param justify */ VDKLabel(VDKForm* owner, const char* label, GtkJustification justify = GTK_JUSTIFY_LEFT); virtual ~VDKLabel(); void SetCaption (const char* str); const char* GetCaption (); void SetCaptionWrap (bool flag); bool GetCaptionWrap (); void SetJustify(GtkJustification jtype); GtkJustification GetJustify() { return Justify; } }; #endif vdk-2.4.0/vdk/menu.h0000644000000000000000000001617607275237116007656 /* * =========================== * VDK Visual Development Kit * Version 0.4 * Revision 0.2 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef MENU_H #define MENU_H #include #include #include #include #include class VDKForms; class VDKMenubar; class VDKOptionMenu; /*! \class VDKMenu \brief Provides a menu items container \par PROGRAMMING TIPS Making a menu bar should be easier than the "hard way" in GTK+. Here an example: \code MyForm::Setup() { // makes a new menu bar menubar = new VDKMenubar(this); // makes a menu to be attached as first menu to menu bar menu1 = new VDKMenuItem(menubar,"_File..",mini_ofolder_xpm); // attach help menu to menu bar (rightmost) menu2 = new VDKMenuItem(menubar,"_Help",book_xpm,r_justify); // makes menu1 submenu VDKMenu *menu = new VDKMenu(this); menu11 = new VDKMenuItem(menu,"_Open"); menu12 = new VDKMenuItem(menu,"_Close"); menu->Separator(); menu13 = new VDKMenuItem(menu,"_Quit.."); // attach menu to menu1 menu1->Add(menu); // add menubar and an empty labelto form Add(menubar); } \endcode */ class VDKMenu: public VDKObjectContainer { protected: GtkAccelGroup *accel_group; public: /*! Constructor \param owner */ VDKMenu(VDKForm* owner); /*! Destructor */ virtual ~VDKMenu(); /*! Provides a menu separator */ void Separator(); virtual void SetFont(VDKFont* font); /*! Pops menu */ void Popup(guint button = 0, guint32 activate_time = 0); void Add(VDKObject* wid, int justify = l_justify, int expand = true, int fill = true , int padding = false); /*! Return accelerator group assigned to menu */ GtkAccelGroup *AccelGroup() { return accel_group; } }; /*! \class VDKMenuItem \brief Provides a menu item \par SIGNALS \arg \b activate_signal Received whenever user selects an item \par TIP Menu item caption line is parsed and an acceleartor is installed if an underscore is found. By default installs Alt + underscored key \code VDKMenuItem *item = new VDKMenuItem(menu,"_Accelerated"); // alt+a triggers activate_signal \endcode If accelerated menu item does not have submenus using accelerated key makes activate_signal to be emitted, otherwise the submenu branch will be displayed \par EXAMPLES In ./testvdk/testvdk.cc */ class VDKMenuItem: public VDKObject { protected: VDKObjectSignal s_activated; VDKMenu* menu; GtkWidget *box,*lbl,*pixmapWidget, *tickWidget; GdkPixmap* pixmap,*tickPixmap; bool ticked; guint accelerator_key; guint8 modkey; public: /*! Sets/gets menu item marked state */ __rwproperty(VDKMenuItem,bool) Checked; /*! Sets/gets menu item caption */ __rwproperty(VDKMenuItem,const char*) Caption; /*! Constructor, makes a menu item to be assigned to a menu \param menu owner menu \param prompt menu caption \param pixmap pixmap data \param key accelerator key \param modkey accelerator key modifier \param accel wheter should contain an accelerator or not A pixmap will be packed at start if isn't NULL. Leaving to default value makes
* GtkDatabox 0.1.11.0 * * widget. * Some of the functions have been modified in order to return * a value, instead to change the value sent as parameter, as * I have thought this is more in the VDK spirit. Also, wherever * the case, I used a VDKColor instead of GdkColor, for the same * reason: VDK spirit. * * The data box has the following styles (but check * \e GtkDataboxDataType for other styles): * \arg GTK_DATABOX_NOT_DISPLAYED * \arg GTK_DATABOX_POINTS * \arg GTK_DATABOX_LINES * \arg GTK_DATABOX_BARS * \arg GTK_DATABOX_CROSS_SIMPLE, * \arg GTK_DATABOX_GRID * * Public Members * \arg None. * * Properties * \arg bool \b Rulers * \arg bool \b Scrollbars * \arg bool \b Zoom * \arg GtkDataboxValue \b Mark \e (read-only) * \arg GtkDataboxValue \b Select \e (read-only) * \arg GtkDataboxCoord \b TopLeft \e (read-only) * \arg GtkDataboxCoord \b BottomRight \e (read-only) * * Static Table Signals * \arg \b databox_zoomed_signal Emitted when databox is zoomed. * \arg \b databox_marked_signal Emitted when mouse is clicked in databox. * \arg \b databox_selection_started_signal Emitted when a selection is started in databox. * \arg \b databox_selection_changed_signal Emitted when the selection is changed. * \arg \b databox_selection_stopped_signal Emitted when the selection is finished. * \arg \b databox_selection_canceled_signal Emitted when the selection is canceled * (by clicking outside the selection). * * Dynamic Table Signals * \arg \b "databox_zoomed" * \arg \b "databox_marked" * \arg \b "databox_selection_started" * \arg \b "databox_selection_changed" * \arg \b "databox_selection_stopped" * \arg \b "databox_selection_canceled" * * Dynamic table signals are different from the equivalent databox signals in * that that they do not send values of the marked point or selection, for * instance. These values can be read using the \e read-only properties. * * \author Ionutz Borcoman * \date March 1999 * \author Mario Motta that have done the porting to vdk 2.x * \date May 2002 */ class VDKDataBox: public VDKObject { public: //! Constructor. VDKDataBox(VDKForm *owner); //! Destructor. ~VDKDataBox(); //! Shows or hides the rulers. VDKReadWriteValueProp Rulers; void SetRulers(bool); //! Show or hides the scrollbars. VDKReadWriteValueProp Scrollbars; void SetScrollbars(bool); //! Enable or disable the zoom. VDKReadWriteValueProp Zoom; void SetZoom(bool); //! Read the value of the top left corner of the window after a zoom. VDKReadOnlyValueProp TopLeft; //! Read the value of the bottom right corner of the window after a zoom. VDKReadOnlyValueProp BottomRight; //! Read the value of the marked (where you clicked down the mouse) point. VDKReadOnlyValueProp Mark; //! Read the value of the selection. VDKReadOnlyValueProp Select; //! Get the color of a dataset. /*! \param index dataset index * \return pointer to a VDKColor identical with the one of the dataset. * \bug The returned value is a pointer to a new allocated VDKColor. Therefore, * it will not reflect furthure changes in the color of the \e index dataset. * You can free memory associated with it using Destroy() method. */ VDKColor* GetColor(int index); //! Set the color of a dataset. /*! \param index dataset index * \param color new color for the dataset * \param redraw constrols if we call or not a subsequent Redraw(). * Set to \e false if you don't want a redraw. */ void SetColor(int index, VDKColor *color, bool redraw = true); //! Get data value. /*! \param coord screen coordinates of a point. * \return data value associated with the \e coord. */ GtkDataboxValue GetValue(GtkDataboxCoord coord); //! Get the extreme values. /*! \param min returns the minimum x and y values of the databox. * \param max returns the maximum x and y values of the databox. * \param visible if true, then \e min and \e max are computed * for the visible window; otherwise, they are * computed for the whole databox. */ void GetExtrema(GtkDataboxValue& min, GtkDataboxValue& max, bool visible = true); //! Rescale the databox using given minimum and maximum values. /*! \param min the minimum x and y values. * \param max the maximum x and y values. */ void Rescale(GtkDataboxValue min, GtkDataboxValue max); /*! \brief Rescale the databox using the minimum and maximum * values from the datasets associated with the databox. */ void Rescale(); //! Redraw the databox. Use it after you change your datas. void Redraw(); //! Remove a single dataset. /*! \param index index of dataset to be removed. * \return 0 on success. */ gint RemoveData(gint index); //! Remove all datasets. /*! \return 0 on success. */ gint RemoveData(); //! Remove a single dataset and destroy data associated with it. /*! \param index index of dataset to be destroyed. * \return 0 on success. * \bug this function destroys data associated using g_free(). * Do not use it, unless you have used g_new() to allocate * the memory for your data. */ gint DestroyData(gint index); //! Remove all datasets and destroy data associated with them. /*! \return 0 on success. * \sa Destroy(gint) */ gint DestroyData(); //! Add a dataset. /*! Both X and Y must be supplied. Also the number of points and a color * to be used for ploting the dataset. * \param length number of points from the dataset. * \param X pointer to x vector of data. * \param Y pointer to y vector of data. * \param color color for the ploting the dataset * \param type type of points. * \param dotsize size of the dots used. * \return index of the dataset added, on success, or -1, on error. */ gint AddXY(guint length, gfloat *X, gfloat *Y, VDKColor *color, GtkDataboxDataType type = GTK_DATABOX_POINTS, guint dotSize = 1); //! Add a dataset. /*! You must supply a X vector of data and an index to an existent Y vector. * Also the number of points and a color to be used for ploting the dataset. * If the number of points of X and shared Y vector are different, an error * is generated. * \param length number of points from the dataset. * \param X pointer to x vector of data. * \param indexSharedY index to a shared y vector of data. * \param color color for the ploting the dataset * \param type type of points. * \param dotsize size of the dots used. * \return index of the dataset added, on success, or -1, on error. */ gint AddX (guint length, gfloat *X, guint indexSharedY, VDKColor *color, GtkDataboxDataType type = GTK_DATABOX_POINTS, guint dotSize = 1); //! Add a dataset. /*! You must supply a Y vector of data and an index to an existent X vector. * Also the number of points and a color to be used for ploting the dataset. * If the number of points of X and shared Y vector are different, an error * is generated. * \param length number of points from the dataset. * \param Y pointer to y vector of data. * \param indexSharedX index to a shared x vector of data. * \param color color for the ploting the dataset * \param type type of points. * \param dotsize size of the dots used. * \return index of the dataset added, on success, or -1, on error. */ gint AddY (guint length, gfloat *Y, guint indexSharedX, VDKColor *color, GtkDataboxDataType type = GTK_DATABOX_POINTS, guint dotSize = 1); virtual void SetBackground(VDKRgb color, GtkStateType state); protected: // Signal handling functions static gint _zoomed(GtkDatabox *box, GtkDataboxValue *top_left, GtkDataboxValue *bottom_right, gpointer); static gint _marked(GtkDatabox *, GtkDataboxCoord *mark, gpointer gp); static gint _selectionStarted(GtkDatabox *, GtkDataboxCoord *mark, gpointer gp); static gint _selectionChanged(GtkDatabox *, GtkDataboxCoord *mark, GtkDataboxCoord *select, gpointer gp); static gint _selectionStoped(GtkDatabox *, GtkDataboxCoord *mark, GtkDataboxCoord *select, gpointer gp); static gint _selectionCanceled(GtkDatabox *, gpointer gp); }; #endif vdk-2.4.0/vdk/vdkdate.h0000755000000000000000000001147210022077055010315 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKDATE_H #define VDKDATE_H #include //#include #ifndef CALDATEDEBUG #define Assert(condition) /* do nothing */ #else #include #define Assert(condition) assert(condition) #endif /* gregorian calendar adopted on oct 15, 1582 */ #define IGREG (15L+31L*(10L+12L*1582L)) enum { ddmmyyyy,mmddyyyy }; /* =================== CALENDAR DATE CLASS =================== */ /*! \class calendardate \brief provides a date object */ class calendardate { protected: int day,month,year; long julian; long Julian(void); void Caldate(void); //friend ostream& operator<<(ostream& os, calendardate& d); char* InternalBuffer(); int mode; public: /*! Constructor, uses system date \param mode date format \arg \b mmddyyyy english format month-day-year \arg \b ddmmyyyy european format day-month-year */ calendardate(int mode = mmddyyyy); /*! Constructor \param day \param month \param year \param mode date format \arg \b mmddyyyy english format month-day-year \arg \b ddmmyyyy european format day-month-year */ calendardate(int day, int month, int year, int mode = mmddyyyy): day(day),month(month),year(year),mode(mode) { julian = Julian(); } /*! Constructor \param julian jiulian date \param mode date format \arg \b mmddyyyy english format month-day-year \arg \b ddmmyyyy european format day-month-year */ calendardate(long julian, int mode = mmddyyyy) : julian(julian),mode(mode) { Caldate(); } /*! Constructor \param s date string \param mode date format \arg \b mmddyyyy english format month-day-year \arg \b ddmmyyyy european format day-month-year \param sep separator char */ calendardate(char* s, int mode = mmddyyyy, char* sep =".-/"); /*! Destructor */ virtual ~calendardate() {} /*! Return date as julian date */ operator long() { return julian; } /*! Returns day index: 0 = sunday, 1 = monday,... 6 = saturday */ int DayIndex() { return (julian+1) % 7; } /*! Returns day */ int Day() { return day; } /*! Returns month */ int Month() { return month; } /*! Returns year */ int Year() { return year; } /*! Returns an internal buffer formatted in "week-day month day year" format. \par Tip Do not modify directly this buffer, copy it before use. */ char* CalendarDate(); /*! date operations */ calendardate operator+(long d) { return calendardate(julian+d); } calendardate operator-(long d) { return calendardate(julian-d); } long operator-(calendardate& d) { return julian - d.julian; } calendardate& operator+=(long d) { *this = calendardate (julian+d); return *this; } calendardate& operator-=(long d) { *this = calendardate (julian-d); return *this; } /*! Returns an internal buffer formatted in "dd/mm/yyyy" or "mm/dd/yyyy" format, do not modify directly this buffer, copy it before use */ operator char*(); /*! Returns an internal buffer formatted in "yyyymmdd" format, do not modify directly this buffer, copy it before use */ char* AsString(); /*! validation */ bool Valid() { return julian >= 0; } /*! relational operations */ bool operator==(calendardate& d) { return julian == d.julian; } bool operator<(calendardate& d) { return julian < d.julian; } bool operator!=(calendardate& d) { return julian != d.julian; } bool operator>(calendardate& d) { return julian > d.julian; } bool operator>=(calendardate& d) { return julian >= d.julian; } bool operator<=(calendardate& d) { return julian <= d.julian; } }; /* ! leap year */ inline bool Leap(int y) { return !(y%4) && ( y%100 || !(y%400)); } /*! MakeDate() Makes a date \param s a string in ""yyyymmdd" format */ calendardate MakeDate(char* s, int mode = mmddyyyy); #endif vdk-2.4.0/vdk/vdkdrawarea.h0000644000000000000000000001575607441651074011206 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * March 2002 * =========================== * * Copyright (C) 2002, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _VDKDRAWAREA_H #define _VDKDRAWAREA_H #include #include #include class VDKDrawingArea; /*! \class VDKDrawTool \brief This class and subclasses provid customized drawing tools for VDKDrawingArea widget */ class VDKDrawTool: public VDKNotCopyAble { protected: VDKDrawingArea* owner; GdkPixmap *tile; public: /*! Constructor \arg owner VDKDrawingArea that owns the tool */ VDKDrawTool (VDKDrawingArea* owner); /*! Destructor */ virtual ~VDKDrawTool (); /*! Set how your drawing is filled, following modes are supported: - GDK_SOLID draw with the foreground color - GDK_TILED draw with a tiled pixmap */ VDKReadWriteValueProp Fill; /*! Determines how the bit values for the source pixels are combined with the bit values for destination pixels to produce the final result. Only a few of these values are usually useful: for colored images, only GDK_COPY, GDK_XOR and GDK_INVERT are generally useful. For bitmaps, GDK_AND and GDK_OR are also useful. Supported modes: GDK_COPY, GDK_INVERT, GDK_XOR, GDK_CLEAR, GDK_AND, GDK_AND_REVERSE, GDK_AND_INVERT, GDK_NOOP, GDK_OR, GDK_EQUIV, GDK_OR_REVERSE, GDK_COPY_INVERT, GDK_OR_INVERT, GDK_NAND, GDK_NOR, GDK_SET */ VDKReadWriteValueProp Function; void SetFill (GdkFill fill); /*! Sets tile pixmap, valid only on GDK_TILED mode \arg tfile a file containing a pixmap */ void SetTile (const char* tfile); /*! Sets tile pixmap, valid only on GDK_TILED fill mode \arg tdata a string array of pixmap data */ void SetTile (char** tdata); /*! Sets tile pixmap, valid only on GDK_TILED fill mode \arg tile a valid GdkPixmap, cam be obtained using VDKDrawTool::Tile() */ void SetTile (GdkPixmap* tile); /*! Returns a tile \arg tdata a string array of pixmap data */ GdkPixmap *Tile(char** tdata); /*! Returns a tile \arg tfile a file containing a pixmap */ GdkPixmap *Tile(const char* tfile); void SetFunction(GdkFunction f); }; /*! \class VDKPen \brief This class provides a Pen to customize drawing. */ class VDKPen: public VDKDrawTool { public: /*! Constructor \arg owner VDKDrawingArea that owns the tool */ VDKPen (VDKDrawingArea* owner); /*! Destructor */ virtual ~VDKPen () {} /*! Sets/gets pen drawing color, valid only on GDK_SOLID fill mode */ VDKReadWriteValueProp Color; /*! Sets/gets pen thickness */ VDKReadWriteValueProp Thickness; /*! Sets/gets pen line style, supported modes: - GDK_LINE_SOLID - GDK_LINE_ON_OFF_DASH - GDK_LINE_DOUBLE_DASH */ VDKReadWriteValueProp Style; /*! Sets/gets pen cap style, supported modes: - GDK_CAP_NOT_LAST the same as GDK_CAP_BUTT for lines of non-zero width. for zero width lines, the final point on the line will not be drawn. - GDK_CAP_BUTT the ends of the lines are drawn squared off and extending to the coordinates of the end point. - GDK_CAP_ROUND the ends of the lines are drawn as semicircles with the diameter equal to the line width and centered at the end point. - GDK_CAP_PROJECTING the ends of the lines are drawn squared off and extending half the width of the line beyond the end point. */ VDKReadWriteValueProp Cap; /*! Sets/gets pen join style, supported modes: - GDK_JOIN_MITER the sides of each line are extended to meet at an angle. - GDK_JOIN_ROUND the sides of the two lines are joined by a circular arc. - GDK_JOIN_BEVEL the sides of the two lines are joined by a straight line which makes an equal angle with each line. */ VDKReadWriteValueProp Join; // void SetColor (VDKRgb color); void SetThickness (int t); void SetStyle (GdkLineStyle style); void SetCap (GdkCapStyle cap); void SetJoin (GdkJoinStyle join); }; /*! \class VDKBrush \brief This class provides a brush to customize drawing. Actually unused, left for future improuvments */ class VDKBrush: public VDKDrawTool { public: VDKBrush (VDKDrawingArea* owner): VDKDrawTool (owner){} virtual ~VDKBrush () {} }; /*! \class VDKDrawingArea \brief This class provides a drawing area widget. This widget should substitute VDKCanvas which is now deprecated but will continue to be supported even if not enhanced more. However VDKCanvas is not really deprecated, simply VDKDrawingArea is a better widget, much powerfull and easy to use. */ class VDKDrawingArea: public VDKObject { private: static void RealizeEvent (GtkWidget* wid, gpointer gp ); protected: GdkGC* _gc; public: /*! The pen drawing tool */ VDKPen* Pen; /*! The brush drawing tool (actually unused) */ VDKBrush *Brush; /*! Constructor \arg owner VDKForm */ VDKDrawingArea(VDKForm* owner); /*! Destructor */ virtual ~VDKDrawingArea(); /*! Clears canvas area */ void Clear(); void DrawString(int x, int y, char* text); void DrawText(int x, int y, char* text, int n); void DrawPoint(int x, int y); void DrawLine(int x, int y, int x1, int y1); void DrawRect(gint filled, int x, int y, int w, int h); void DrawArc(int filled,int x,int y, int width, int height,int angle1, int angle2); void DrawPolygon(int filled,GdkPoint *points, gint npoints); void DrawPoints(GdkPoint *points, int npoints); void DrawSegments(GdkSegment *segs, int nsegs); void DrawLines(GdkPoint *points, int npoints); void DrawPixbuf(int x, int y, const char *pixfile); void DrawPixbuf(int x, int y, VDKPixbuf* pix); void DrawPixbuf(int x, int y, const char ** data); void SetForeground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); void SetBackground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); GdkGC* GC () { return _gc; } GdkDrawable* Drawable () { return widget->window; } virtual void SetFont(VDKFont* f); }; #endif vdk-2.4.0/vdk/vdkdnd.h0000644000000000000000000001422307206652533010151 /* * =========================== * VDK Visual Development Kit * Version 1.0.3 * November 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * Based on ISDataBox * Developed by Ionutz Borcoman * based on GtkDatabox - An extension to the gtk+ library * Copyright (C) 1998-1999 Roland Bock * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _vdkdnd_h #define _vdkdnd_h #include #include #include #include #include #include #define dnd_base_signal user_signal/2 // target side #define dnd_dropped_signal dnd_base_signal #define dnd_get_data_signal dnd_base_signal + 1 #define dnd_drag_leave_signal dnd_base_signal + 2 #define dnd_drag_motion_signal dnd_base_signal + 3 // forward declaration class VDKDnD; /* */ class VDKDnDEntry { protected: VDKObject* object; VDKDnD* dnd; GtkWidget* widget; public: VDKDnDEntry(VDKObject* object, VDKDnD* dnd, GtkWidget* widget); VDKObject* Object() { return object; } ~VDKDnDEntry() {} friend class VDKDnD; }; typedef VDKList VDKDnDTable; typedef VDKListIterator VDKDnDIterator; /*! \class VDKDnD \brief Provides dnd support \par Description This class provides support for gtk+ drag an drop VDKDnD can be viewed from two sides: \arg Source side: the widget that is dragged. Source widget are normally non-containers widgets. \arg Target side: the widget that accept (is the target) of a dragged widget. Target widgets are normally containers widget even if not compulsory Widgets can be both sources and targets, so VDKDnD class supports m:n relationship between widgets interested in dnd. VDKDnD class provides support for both sides. \par SIGNALS Both signals for static and dynamic tables are provided. \arg dnd_dropped_signal \arg "dnd_dropped" Received by target when a dragged widget is dropped into target \arg dnd_get_data_signal \arg "dnd_get_data" Received when source data are transferred to dnd widget (not very useful for a normal user) \arg dnd_drag_motion_signal \arg "dnd_drag_motion" Received by target when a dragged widget icon mouves over the target widget \arg dnd_drag_leave_signal \arg "dnd_drag_leave" Received by target when a dragged widget icon leaves the target widget \par TIP Signals using dynamic tables are handled by vdk overriding gtk+, thus user must connect with dynamic tables setting arg always false. \code SignalConnect(target,"dnd_dropped",&DndForm::OnDrop,false); \endcode \par EXAMPLES In ./testvdk/dnd.cc */ class VDKDnD : public VDKRawObject { protected: VDKDnDTable sources, targets; GtkTargetEntry *target_table; int n_entries; // target side static gboolean drag_drop(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer gp); static void drag_leave (GtkWidget *widget, GdkDragContext *context, guint time, gpointer data); static gboolean drag_motion (GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer data); // source side static void source_drag_data_get(GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, gpointer data); public: /*! The widget that actually is being dragged */ VDKReadOnlyValueProp DragSource; /*! Receiving a dnd_drag_motion signal, DragPoint contains mouse coordinates. */ VDKReadOnlyValueProp DragPoint; /* Constructor \param owner \param target_table target table \param n_entries entries on target table */ VDKDnD(VDKForm* owner, GtkTargetEntry* target_table, guint n_entries); /*! Destructor */ virtual ~VDKDnD(); /*! Add a widget as dnd target. */ void AddTarget(VDKObject* target); /*! Add a widget as dnd source. */ void AddSource(VDKObject* source); /*! Remove a target from target list */ void RemoveTarget(VDKObject* target); /*! Remove a target from source list */ void RemoveSource(VDKObject* source); /*! Sets widget dragging icon */ void SetIcon(VDKObject* object, VDKRawPixmap* pixmap); /*! Return sources dnd tables. \par Tip VDKDnDTable class is a VDKList of VDKDnDEntry class objects. Each VDKDnDEntry object has a method Object() that returns source/target widget address. VDKDnDIterator class for accessing table is provided as well. */ VDKDnDTable* DnDSources() { return &sources; } /*! Return sources dnd target tables. */ VDKDnDTable* DnDTargets() { return &targets; } }; #endif vdk-2.4.0/vdk/vdkfont.h0000644000000000000000000000411107210246737010345 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKFONT_H #define VDKFONT_H #include #include class VDKForm; /*! \class VDKFont \brief Provides a raw font. */ class VDKFont: public VDKRawObject { char* fontName; // STUB PangoFontDescription *pangoDes; public: /*! Constructor \param fname font name */ VDKFont(char* fname); /*! Constructor \param obj owner object \param fname font name */ VDKFont(VDKObject* obj, char* name); /*! Destructor */ virtual ~VDKFont(); /*! Return font height, 0 on failure */ int Height(const char* s); /*! Return font width, 0 on failure */ int Width(const char* s); /*! Equality operator */ bool operator==(VDKFont& f); /*! Return font name */ operator char*(); /*! GdkFont* conversion, user should gdk_font_unref() after use */ operator GdkFont*(); /*! GdkFont* conversion, user should gdk_font_unref() after use */ GdkFont* AsGdkFont(); /*! Return font id (not more used) */ int FontId(); /*! Returns pango font description */ PangoFontDescription * AsPangoFontDescription(); }; #endif vdk-2.4.0/vdk/vdkfeatures.h0000644000000000000000000000276110052331535011213 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 * * vdkfeatures.h added by Salmaso Raffaele 1999-01-20 */ #ifndef _vdkfeatures_h #define _vdkfeatures_h #define VDK_VERSION_MAJOR 2 #define VDK_VERSION_MINOR 4 #define VDK_VERSION_MICRO 0 #define VDKCOMPO_VERSION_MAJOR @VDKCOMPO_VERSION_MAJOR@ #define VDKCOMPO_VERSION_MINOR @VDKCOMPO_VERSION_MINOR@ #define VDKCOMPO_VERSION_MICRO @VDKCOMPO_VERSION_MICRO@ #define VDK_MAJOR_VERSION 2 #define VDK_MINOR_VERSION 4 #define VDK_MICRO_VERSION 0 #define VDK_REVISION 0 #define VDK_VERSION 2.4.0 #define VDKCOMPO_VERSION @VDKCOMPO_VERSION@ #endif vdk-2.4.0/vdk/vdkfilechooser.h0000644000000000000000000001230410030341703011663 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.4 * March 2004 * =========================== * * Copyright (C) 1998 - 2004 Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _vdkfc_form_h_ #define _vdkfc_form_h_ #ifdef HAVE_CONFIG_H #include #endif #include typedef VDKArray FileStringArray; /*! \class VDKFileChooser \brief Provides a wrap for GtkFileChooser widget \par Usage \code #include FileStringArray selections; VDKFileChooser* fc = new VDKFileChooser(this, &selections,"File chooser"); // fc->MultiSelection = true; // comment out for multi selection mode fc->AddFilterPattern("All files","*"); fc->AddFilterPattern("C sources","*.c"); fc->AddFilterPattern("CC sources","*.cc"); fc->AddFilterPattern("C/CC headers","*.h"); fc->SetDefaultFilter("All files"); fc->ShowModal(); // returns selections array filled with 1 or more filenames pending // on selection mode (set with MultiSelection property) if(selections.size() == 1) { printf("\nSelected:%s",(char*) selections[0]); fflush(stdout); } else if(selections.size() > 1) { for(int t = 0; t < selections.size(); t++) printf("\nSelected:%s",(char*) selections[t]); fflush(stdout); } \endcode On return selections will be an empty array if user presses "cancel" button. */ class VDKFileChooser: public VDKForm { // gui object declarations private: VDKObject* filechooser; static void file_activated (GtkFileChooser *filechooser, gpointer user_data); FileStringArray* selections; public: /*! * Constructor * \param owner * \param selections a FileStringArray pointer * \param title window title */ VDKFileChooser(VDKForm* owner, FileStringArray* selections, char* title); virtual ~VDKFileChooser(); /* ! \internal called internally by constructor */ private: void Setup(void); protected: VDKBox* mainbox; protected: VDKBox* fcbox; protected: VDKSeparator* separator0; protected: VDKBox* buttonbox; protected: VDKCustomButton* okButton; protected: VDKCustomButton* cancelButton; bool OnokButtonClick(VDKObject* sender); bool OncancelButtonClick(VDKObject* sender); public: DECLARE_SIGNAL_MAP(VDKFileChooser); /* declaring signal and events dynamics tables */ DECLARE_SIGNAL_LIST(VDKFileChooser); DECLARE_EVENT_LIST(VDKFileChooser); // declares two static used to initialize // form display type and initial position static GtkWindowType VDKFileChooser::DisplayType; static GtkWindowPosition VDKFileChooser::InitialPosition; // /*! * Add a filter based on a pattern * \param name a human readable name * \param pattern a filter pattern (ie: *.cc") */ void AddFilterPattern(char* name, char* pattern); /*! * set filter as default * \param name a human readable name */ void SetDefaultFilter(char* name); void AddMimeType(char* name, char* mime); /*! * remove filter from filter's list * \param name a human readable name */ void RemoveFilter(char* name); // properties /*! setting this property to true allow selecting more than one file (false by default) */ VDKReadWriteValueProp MultiSelection; /*! sets file chooser mode, can be one of following: - GTK_FILE_CHOOSER_ACTION_OPEN Indicates open mode. The file chooser will only let the user pick an existing file. (this is the default mode) - GTK_FILE_CHOOSER_ACTION_SAVE Indicates save mode. The file chooser will let the user pick an existing file, or type in a new filename. - GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER Indicates an Open mode for selecting folders. The file chooser will let the user pick an existing folder. - GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER Indicates a mode for creating a new folder. The file chooser will let the user name an existing or new folder. */ VDKReadWriteValueProp Action; // properties functors bool GetMultiSelection() { return gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER(sigwid)); } void SetMultiSelection(bool ms) { gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(sigwid),ms); } GtkFileChooserAction GetAction() { return gtk_file_chooser_get_action(GTK_FILE_CHOOSER(sigwid)); } void SetAction(GtkFileChooserAction a) { gtk_file_chooser_set_action (GTK_FILE_CHOOSER(sigwid),a); } }; #endif // end of file:vdkfc.h vdk-2.4.0/vdk/vdkheap.h0000644000000000000000000000624407206652534010326 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKHEAP_H #define VDKHEAP_H #include inline int parent(int i) { return ((i-1) >> 1); } inline int left(int i) { return ((i << 1) + 1); } inline int right(int i) { return ((i << 1) + 2); } /*! \class VDKHeap \brief provide a templatized Heap \par Description VDKHeap class has a value semantic, all objects are copied from original values. All managed type T objects should provide: \arg a default constructor: T::T() \arg a copy initializer: T::T(T& t) \arg an assignement operator: T& T::operator=(T& t) \arg an equality and less-than operators: \arg bool T::operator==(T& t) \arg bool T::operator<(T& t) \par Implementation notes I suggest to use typedef's like: \code typedef VDKHeap SomeClassHeap; \endcode */ template class VDKHeap: public VDKContainer { public: /*! Constructor makes an empty heap */ VDKHeap(): VDKContainer(0) {} /*! Constructor \param source an array of type T obejcts \param array size */ VDKHeap(T* source, int size); /*! Destructor */ virtual ~VDKHeap() {} /*! Sorts on nlog(n) time */ void Sort(void); protected: void Heapify(int i,int heapsize); void BuildHeap(void); }; // make an heap copyng data from T type source vector template VDKHeap::VDKHeap(T* source, int size): VDKContainer(size) { for(int i = 0; i < size; i++) data[i] = source[i]; BuildHeap(); } // HEAPIFY template void VDKHeap::Heapify(int i, int heapsize) { int l = left(i), r = right(i), largest = i; if( (l < heapsize) && (data[l] > data[i])) largest = l; if( (r < heapsize) && (data[r] > data[largest])) largest = r; if(largest != i) { T temp = data[i]; data[i] = data[largest]; data[largest] = temp; Heapify(largest,heapsize); } } // BUILDHEAP template void VDKHeap::BuildHeap(void) { for (int i = (size()-1)/2 ; i >= 0; i--) Heapify(i,size()); } // HEAPSORT template void VDKHeap::Sort(void) { int heapsize = size(); int i = heapsize-1; for(; i > 0; i--) { T temp = data[0]; data[0] = data[i]; data[i] = temp; heapsize--; Heapify(0,heapsize); } } #endif vdk-2.4.0/vdk/vdkhlbutton.h0000644000000000000000000000535207613765067011257 /* * =========================== * VDK Visual Development Kit * Version 2.0.3 * January 2003 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // #ifndef _vdk_hlbutton_h // put your code below here #define _vdk_hlbutton_h #include #include /*! \class VDKHLButton \brief (HL stands for HighLighted) this class provides a button that behaves like Netscape buttons, it highlights when mouse is over. Parent class API left unchanged. This widget can be used alone or packed into a VDKHLButtonBar */ class VDKHLButton: public VDKCustomButton { protected: VDKPixbuf* normal_pix, *pixellated_pix, *darkened_pix; bool OnEnter (VDKObject*, GdkEvent*); bool OnLeave (VDKObject*, GdkEvent*); bool OnClickRelease (VDKObject*, GdkEvent*); bool OnClickPress (VDKObject*, GdkEvent*); public: /*! constructor \param owner the owner form \param pixfile a graphic file (accepts both .xpm and .png) \param label a label (but these buttons look better without label) \param type \parm position label position related to pixmap */ VDKHLButton (VDKForm *owner, const char *pixfile, const char *label = NULL, unsigned int type=VDK_CBUTTON_UNTOGGLED|VDK_CBUTTON_NORMAL, GtkPositionType position=GTK_POS_RIGHT); /*! constructor \param owner the owner form \param pixdata a graphic data (only .xpm format) \param label a label (but these buttons look better without label) \param type \parm position label position related to pixmap */ VDKHLButton (VDKForm *owner, const char **pixdata, const char *label = NULL, unsigned int type=VDK_CBUTTON_UNTOGGLED|VDK_CBUTTON_NORMAL, GtkPositionType position=GTK_POS_RIGHT); virtual ~VDKHLButton () {} void Setup (void); DECLARE_EVENT_LIST (VDKHLButton); }; #endif vdk-2.4.0/vdk/vdkhlbuttonbar.h0000644000000000000000000000361207613765066011740 /* * =========================== * VDK Visual Development Kit * Version 2.0.3 * January 2003 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _vdkhlbuttonbar_h // put your code below here #define _vdkhlbuttonbar_h #include #include #include #include typedef VDKList BList; typedef VDKListIterator ButtonListIterator; class VDKHLButtonBar: public VDKFrame { protected: BList blist; bool OnClick (VDKObject* sender); public: VDKHLButtonBar (VDKForm* owner, int mode = h_box, int shadow = shadow_none); virtual ~ VDKHLButtonBar (); BList* ButtonList() { return &blist; } void AddButton (const char** pixdata, const char* tip = NULL, const char* text = NULL); void AddButton (const char* pixfile, const char* tip = NULL, const char* text = NULL); VDKHLButton* operator[](int n); VDKReadWriteValueProp ButtonPressed; DECLARE_SIGNAL_LIST (VDKHLButtonBar); }; // #endif vdk-2.4.0/vdk/vdkinchannel.h0000644000000000000000000000432407420650214011334 /* * Copyright (C) 1999-2001 Jonathan R. Hudson * Developed by Jonathan R. Hudson * Modified by Mario Motta * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _vdk_in_channel_h_ #define _vdk_in_channel_h_ #include #include #define INPUT_SIGNAL (user_signal-1024) /*! \class VDKInputChannel * \brief This class allows you to monitor inputs from one or more * file descriptors and define member function(s) to be called whenever * some activity is detected on that file descriptor. * * More informations can be found into an appendix of VDK/VDKBuilder tutorial * Signals: * INPUT_SIGNAL * "input_signal" */ class VDKInputChannel: public VDKObject { private: void SetSignal(VDKObject*, GdkInputCondition); protected: static void HandleIO(gpointer obj, gint source, GdkInputCondition condition); gint tag; int fd; GdkInputCondition condition; public: /*! Constructor \param owner the form that owns the input channel \param fd file descriptor \param condition the condition that activates the fd. */ VDKInputChannel (VDKForm* owner, int fd, GdkInputCondition condition = GDK_INPUT_READ); /*! destructor */ virtual ~VDKInputChannel(); /*! Returns the file descriptor associated with the object */ int getfd() {return fd;} /*! Returns the condition that caused the VDK signal to be fired. */ int getcondition() {return condition;} }; #endif vdk-2.4.0/vdk/vdkobj.h0000644000000000000000000005105307336242416010157 /* -*- c++ -*- */ /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKOBJ_H #define VDKOBJ_H #include #include #include #include #include #include #include #ifdef USE_SIGCPLUSPLUS # include # include # include #endif /* USE_SIGCPLUSPLUS */ class VDKForm; class VDKTooltip; class VDKFont; class VDKObject; /*! partially filled enum for isA() response */ enum { object_class, form_class , container_class}; /* */ typedef VDKList ItemList; typedef VDKListiterator ItemListIterator; /*! This struct maps an object with a signal, used for static tables */ struct VDKObjectSignal { void* obj; int signal; }; /*! This struct maps an object with a signal used for dynamics tables */ class VDKObjectSignalUnit { public: void* owner; void* obj; VDKString signal; VDKObjectSignalUnit(void* owner,void *obj, char* signal): owner(owner),obj(obj),signal(signal) {} ~VDKObjectSignalUnit() {} }; /*! Object connected signal list */ typedef VDKList SignalUnitList; typedef VDKListiterator SignalUnitListIterator; /*! This struct maps an object with an event used for dynamics tables */ class VDKObjectEventUnit { public: void* owner; void* obj; VDKString signal; VDKObjectEventUnit(void* owner,void *obj, char* signal): owner(owner),obj(obj),signal(signal) {} ~VDKObjectEventUnit() {} }; /*! Object connected event list */ typedef VDKList EventUnitList; typedef VDKListiterator EventUnitListIterator; /* ============= SIZE PROPERTY ============= */ typedef VDKReadWriteValueProp SizeOProp; class SizeObjectProp: public SizeOProp { public: SizeObjectProp(){} SizeObjectProp(char* name, VDKObject* object, void (VDKObject::*write)(VDKPoint) = NULL, VDKPoint (VDKObject::*read)(void) = NULL) : SizeOProp(name,object,VDKPoint(0,0),write,read) {} void operator = (VDKPoint); operator VDKPoint(); }; /* =============== VDKOBJECT CLASS =============== */ typedef VDKList RawList; typedef VDKListiterator RawListIterator; /*! \class VDKObject This class is the base class of a wide hierarchy, provides common functionalities to all derived classe */ #ifndef USE_SIGCPLUSPLUS class VDKObject : public VDKNotCopyAble #else class VDKObject : public SigC::Object, public VDKNotCopyAble #endif { public: /* properties */ /*! Setting one of these this properties will set/get object background color. Naming convention follows Gtk+ one. Example: form->NormalBackground = VDKRgb(255,0,0); (Tip: VDKRgb is a structure defined in vdkutils.h. Remember that some objects are transparent, so if you want to set the background color, you actually have to set the background color of the parent, VDKLabel is an example. */ VDKReadWriteValueProp NormalBackground; VDKReadWriteValueProp PrelightBackground; VDKReadWriteValueProp InsensitiveBackground; VDKReadWriteValueProp ActiveBackground; VDKReadWriteValueProp SelectedBackground; VDKReadWriteValueProp Foreground; /*! Setting this property will set the object font. i.e.: obj->Font = new VDKFont(obj,"X-font-string-chock-full-o-dashes-goes-in-here"); */ VDKReadWriteValueProp Font; /*! Setting this property will set/get object minimum size. */ SizeObjectProp Usize; /*! Setting this property will set/get object sensitivity. */ VDKReadWriteValueProp Enabled; /*! Setting this property will set/get object cursor type. */ VDKReadWriteValueProp Cursor; /*! Setting this property will show/hide or get object visibility */ VDKReadWriteValueProp Visible; int Tag; // GTK_STATE_NORMAL = 0, GTK_STATE_ACTIVE, GTK_STATE_PRELIGHT, // GTK_STATE_SELECTED,GTK_STATE_INSENSITIVE void SetNormalBackground(VDKRgb c) { SetBackground(c,GTK_STATE_NORMAL); } void SetPrelightBackground(VDKRgb c) { SetBackground(c,GTK_STATE_PRELIGHT); } void SetInsensitiveBackground(VDKRgb c) { SetBackground(c,GTK_STATE_INSENSITIVE); } void SetActiveBackground(VDKRgb c) { SetBackground(c,GTK_STATE_ACTIVE); } void SetSelectedBackground(VDKRgb c) { SetBackground(c,GTK_STATE_SELECTED); } /*! Gets object background color */ VDKRgb GetBackground(GtkStateType state = GTK_STATE_NORMAL); /*! Gets object foreground color */ VDKRgb GetForeground(GtkStateType state = GTK_STATE_NORMAL); private: /* copy and assignement prohibited */ friend class VDKRawObject; // VDKObject(VDKObject& ) {} // VDKObject& operator=(VDKObject& ) { // return *this; // } VDKTooltip* tip; protected: ItemList items; ItemList garbages; RawList raws; SignalUnitList suList; EventUnitList euList; /*! stock connected signal */ VDKObjectSignal s_clicked,s_pressed,s_released,s_enter,s_leave, s_list_select,s_list_unselect,s_list_click_column,s_realize, s_toggled,s_value_changed,s_child_attached,s_child_detached; VDKForm* owner; /*! underlaying gtk+ widget */ GtkWidget* widget; /*! underlaying gtk+ widget widget and sigwid could be different, e.g into composite widget made of a container with some inner widget. See Widget() and WrappedWidget() */ GtkWidget* sigwid; /*! Object parent, where the signal flows if not stopped */ VDKObject* parent; /*! \internal */ static int VDKEventPipe(GtkWidget* w, GdkEvent* event, void* obj); /*! \internal */ void _setBackground_(GtkWidget* wid, int red,int green, int blue, GtkStateType state); /*! \internal */ void _setForeground_(GtkWidget* wid, int red,int green, int blue, GtkStateType state); /*! \internal */ void _setFont_(GtkWidget* wid, VDKFont* f); /*! \internal */ void ConnectDefaultEvents(); /*! \internal */ void ConnectDefaultSignals(); /*! \internal */ void SignalEmit(int signal, int level); /*! \internal */ virtual void ShowWidget(bool visible); public: /*! Constructor, make an object that belongs to form. */ VDKObject(VDKForm* owner = NULL); /*! Contructor, makes an object instance from an already gtk+ created object. */ VDKObject(VDKForm* owner, GtkWidget* widget); /*! Destructor */ virtual ~VDKObject(); /*! Explicitely destroy an object freeing associated memory. Tip: never use delete operator otherwise garbage collection will fail and program probably will crash. */ bool Destroy(); /*! returns an enum id (incomplete and not so useful) */ virtual int isA() { return object_class; } /*! Returns object owner form. */ VDKForm* Owner() { return owner; } /*! Returns underlying GTK+ widget. */ virtual GtkWidget* Widget(); /*! Same as WrappedWidget(). */ GtkWidget* ConnectingWidget(); /*! Returns underlying wrapped Gtk+ widget, useful in those cases when VDKObject is a composite one. Happens in many composite widgets, i.e a container with some inner widgets, that underlaying widget isn't which answers to signals. In this case the container is the and one of the inner widgets is the , wich is responsible to answers signal/event.You have to connect with the last one. An example is VDKText where Widget() return packing box not text itself. Tip: In doubt use always WrappedWidget() instead of Widget(), is always safer. */ GtkWidget* WrappedWidget(); /*! Sets object font */ virtual void SetFont(VDKFont* f); /*! Gets object font */ VDKFont* GetFont() { return Font; } /*! Set object visibility \param visible either true or false */ void SetVisible(bool visible); /*! Returns object visibility */ bool GetVisible() { return GTK_WIDGET_VISIBLE(widget); } /*! Sets object assigned cursor */ void SetCursor(VDKCursorType); /*! Gets object assigned cursor */ VDKCursorType GetCursor() { return Cursor; } /*! Sets object foreground \param color a VDKRgb object \param state can be one of the gtk+ widget states */ virtual void SetForeground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); void SetNormalForeground(VDKRgb color) { SetForeground(color); } /*! Sets object background \param color a VDKRgb object \param state can be one of the gtk+ widget states */ virtual void SetBackground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); /*! Sets object minimum size \param w width \param h height */ void SetSize(int w, int h) { if(GTK_IS_WIDGET(widget)) gtk_widget_set_usize(GTK_WIDGET(widget),w,h); } /*! Sets object minimum size \param s, a VDKPoint object */ void SetUsize(VDKPoint s) { SetSize(s.X(),s.Y()); } /* Sets/unsets object sensitivity \param flag, either true or false Tip: with flag=false object does not answer to signal/events */ virtual void Enable(bool flag = true); /* Returns if the object is enable or not */ bool GetEnabled() { return Enabled; } /*! Sets object tip. */ virtual void SetTip(char* ); /*! Add on abiect to the object. \param obj the object to be added \param justify where the object wil be added, can be: - l_justify packed to end (appended) - r_justify packed to start (prepended) \param expand if true object will expand \param fill if true object will fill all available space \param padding how many pixels are left around object */ virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 0); /*! Return contained objects list */ ItemList& Items() { return items; } /*! \internal */ ItemList& Garbages() { return garbages; } /*! \internal */ RawList& Raws() { return raws; } /*! Draw an object */ void Draw(GdkRectangle* area = NULL); /*! placeholder for subclasses. This method is called whenever an object is added to a container. */ virtual void Setup() {} /*! Emit a signal (static tables) \param signal */ void SignalEmit(int signal); /*! Emit a signal (dynamic tables) \param signal */ void SignalEmit(char* sig); /*! Emit a signal directly to parent (static tables) \param signal */ void SignalEmitParent(int signal) { SignalEmit(signal,Parent_level); } /*! Emit a signal directly to parent (dynamic tables) \param signal */ void SignalEmitParent(char* sig); /*! Grab the focus to itself */ void GrabFocus(); /*! \internal */ void AddItem(VDKObject* item); /*! \internal */ void RemoveItem(VDKObject* item); /*! \internal */ void RemoveItems(); /* ==================== signal/event management ====================== */ /*! Sets object parenthood */ VDKObject* Parent(VDKObject* p = NULL) { if(p) parent = p; return parent; } // signal and events default dispatchers for class level /*! \internal */ static void VDKSignalPipe(GtkWidget* w, void* obj); /*! \internal */ virtual int VDKObjectSignalResponse(GtkWidget* , int , void*, bool) { return FALSE; } /*! \internal */ virtual int VDKObjectEventResponse(GtkWidget* , GdkEvent*, void*, bool) { return FALSE; } virtual int ObjectSignalDetach(int , int ) { return -1; } virtual bool ObjectSignalAttach(int ) { return false; } virtual int ObjectEventDetach(VDKEvent ) { return -1; } virtual bool ObjectEventAttach(int ) { return false; } protected: virtual int VDKObjectSignalResponseTableSize() { return 0; } virtual int VDKObjectEventResponseTableSize() { return 0; } /* */ // signal and events default dispatchers for parent level public: /*! \internal */ virtual int VDKSignalResponse(GtkWidget* , int , void*, void *, bool) { return 0; } /*! \internal */ virtual int VDKEventResponse(GtkWidget* , GdkEvent* , void*, void*, bool ) { return 0; } virtual int SignalDetach(VDKObject* , int ) { return -1; } virtual bool SignalAttach(int ) { return false; } virtual int EventDetach(VDKObject* ,VDKEvent ) { return -1; } virtual bool EventAttach(int ) { return false; } protected: /*! \internal */ virtual int VDKSignalResponseTableSize() { return 0; } /*! \internal */ virtual int VDKEventResponseTableSize() { return 0; } /* ==================== signal management ala Gtk+ ====================== */ public: /*! Placeholder for subclasses, at this level does nothing. Connects an object-signal to a method \param obj connected object \param signal signal to be connected \param method class method that answers to signal \param gtk (default is true) if you set this arg to false no real connection is made with gtk+ signal system and signal is handled internally by vdk. This allow to define and use your own signals without register them to gtk+ \param after (default is false) if set to true connect signal in the "after" slot, meaninigfull only if previous arg is set to true. */ int SignalConnect(VDKObject* obj, char* signal, bool (VDKObject::*method)(VDKObject*), bool gtk = true, bool after = false) { return -1; } /*! Placeholder for subclasses, at this level does nothing. Connects -signal to a method \param signal signal to be connected \param method class method that answers to signal \param gtk (default is true) if you set this arg to false no real connection is made with gtk+ signal system and signal is handled internally by vdk. This allow to define and use your own signals without register them to gtk+ \param after (default is false) if set to true connect signal in the "after" slot, meaninigfull only if previous arg is set to true. */ int SignalConnect(char* signal , bool (VDKObject::*method)(VDKObject*), bool gtk = true, bool after = false) { return -1; } // general signal unit response (at this level simply answer false) virtual int VDKSignalUnitResponse(GtkWidget* , char* , void*) { return 0; } /*! disconnect this from connection \param connection must be achieved with a previous SignalConnect() call */ bool SignalDisconnect(int connection) { return false; } // find signal at class level /*! \internal */ virtual bool FindSignalAtClassLevel(VDKObject* , char* ) // virtual bool FindSignalAtClassLevel(VDKObject* , VDKString& ) { return false; } // find signal at parent level /*! \internal */ // virtual bool FindSignalAtParentLevel(VDKObject* , VDKString& ) virtual bool FindSignalAtParentLevel(VDKObject* , char* ) { return false; } protected: // unique Gtk+ callback that redirects to // above VDKSignalUnitResponse() /*! \internal */ static void VDKSignalUnitPipe(GtkWidget* , void* ); /* ==================== event management ala Gtk+ ====================== */ public: /*! \internal */ // virtual bool FindEventAtClassLevel(VDKObject* , VDKString& ) virtual bool FindEventAtClassLevel(VDKObject* , char* ) { return false; } /*! \internal */ // virtual bool FindEventAtParentLevel(VDKObject* , VDKString& ) virtual bool FindEventAtParentLevel(VDKObject* , char* ) { return false; } /*! \internal */ virtual int VDKEventUnitResponse(GtkWidget* , char* , GdkEvent* , void*) { return 0; } /*! Placeholder for subclasses, at this level does nothing. connects an object-event to a method \param obj connected object \param event event to be connected \param method class method that answers to signal \param after (default is false) if set to true connect signal in the "after" slot. */ int EventConnect(VDKObject* obj, char* event, bool (VDKObject::*method) (VDKObject* , GdkEvent*), bool after = false) { return -1; } /*! Placeholder for subclasses, at this level does nothing. connects an -event to a method \param event event to be connected \param method class method that answers to signal \param after (default is false) if set to true connect signal in the "after" slot. */ int EventConnect(char* , bool (VDKObject::*) (VDKObject* , GdkEvent*), bool after = false) { return -1; } /*! disconnect this from connection \param connection must be achieved with a previous EventConnect() call */ bool EventDisconnect(int connection) { return false; } virtual int VDKSignalResponseListSize() { return 0; } protected: // unique Gtk+ callback that redirects to // above VDKEventUnitResponse() /*! \internal */ static int VDKEventUnitPipe(GtkWidget* , GdkEvent*, void* ); #ifdef USE_SIGCPLUSPLUS public: /** The signal for raw GdkEvents* */ VDKRawEventSignal OnRawEvent; /** The signal responsible for button events */ VDKButtonSignal OnButtonEvent; /** The signal responsible for keystroke events */ VDKKeySignal OnKeyEvent; /** The signal responsible for changes in key focus */ VDKKeyFocusSignal OnKeyFocusEvent; /** The signal responsible for changes in pointer focus */ VDKPointerFocusSignal OnPointerFocusEvent; /** The signal responsible for pointer (mouse) events */ VDKPointerSignal OnPointerEvent; /** The signal responsible for map events */ VDKMapSignal OnMapEvent; /** The signal responsible for geometry events */ VDKGeometrySignal OnGeometryEvent; /** The signal responsible for paint events */ VDKPaintSignal OnPaintEvent; #endif // USE_SIGCPLUSPLUS }; #endif vdk-2.4.0/vdk/vdkprops.h0000644000000000000000000000752707404132716010554 // -*- c++ -*- /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKPROPS_H #define VDKPROPS_H #include #include #include #ifdef USE_SIGCPLUSPLUS # include #endif // USE_SIGCPLUSPLUS #define __rwproperty(ownerClass,propertyType) \ VDKReadWriteValueProp #define __rproperty(ownerClass,propertyType) \ VDKReadOnlyValueProp #ifdef NULL #undef NULL #define NULL 0x0000 #endif #define PFREAD_NULL (PFRead) 0x0000 #define PFWRITE_NULL (PFWrite) 0x0000 //================================================== /* read/write values property */ template class VDKReadWriteValueProp #ifdef USE_SIGCPLUSPLUS : public SigC::Object #endif { // checked out because confuse some compiler //friend class T; protected: typedef S (T::* PFRead)(void); typedef void (T::*PFWrite)(S); VDKString name; T* object; S (T::* get)(void); void (T::*set)(S); S value; VDKReadWriteValueProp(VDKReadWriteValueProp& p) { } void operator=(VDKReadWriteValueProp& p) { } public: VDKReadWriteValueProp(): name(""), object(NULL), get(NULL /*PFREAD_NULL*/), set(NULL /*PFWRITE_NULL*/) { } VDKReadWriteValueProp( const char* name, T* object, S defValue, void (T::*write)(S) = NULL,//PFWRITE_NULL, S (T::*read)(void) = NULL //PFREAD_NULL ): name(name),object(object), get(read),set(write), value(defValue) { } virtual ~VDKReadWriteValueProp() {} // raw setting (functor) // caution using it in read only props breaks // data hiding and can lead in ugly errors. // user: use it at your own risk. virtual void operator()(S val) { value = val; #ifdef USE_SIGCPLUSPLUS OnValueChanged.emit(object, value); #endif } // setting prop value operator virtual void operator = (S val) { if(set && object) ((*object).*set)(val); value = val; #ifdef USE_SIGCPLUSPLUS OnValueChanged.emit(object, value); #endif } // getting prop value operator virtual operator S()const { if(get && object) // return (*((const_cast*>(this))->object).*get)(); return ((*object).*get)(); else return value; } char* Name() { return name; } S Value()const { return value; } #ifdef USE_SIGCPLUSPLUS DualSignal1 OnValueChanged; #endif }; /* read only values property */ template class VDKReadOnlyValueProp: public VDKReadWriteValueProp { void operator = (S) { } public: VDKReadOnlyValueProp():VDKReadWriteValueProp() { } VDKReadOnlyValueProp( const char* name, T* object, S defValue, S (T::*read)(void) = NULL, //PFREAD_NULL, void (T::*write)(S) = NULL //PFWRITE_NULL ): VDKReadWriteValueProp( name, object, defValue, write, read) { } virtual ~VDKReadOnlyValueProp() {} }; #endif vdk-2.4.0/vdk/vdkstring.h0000644000000000000000000002137407206652551010717 /* * =========================== * VDK Visual Development Kit * Version 1.2.3 * October 1998, August 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKSTRING_H #define VDKSTRING_H #define MAXPRINTFLEN 65535 // max size for Sprintf and Concatf buffer #define INT_DATE 0 // for FormatDate #define ENG_DATE 1 #define EUR_DATE 2 struct STRING { char* s; unsigned int ref ; }; /*! \class VDKString \brief Implements famous cont referenced string objects */ class VDKString { protected: STRING* p; public: /*! Constructor, makes an empty string \code VDKString s; \endcode */ VDKString(); /*! Constructor \param s a null terminated C string \code VDKString s = "uncle bill"; \endcode */ VDKString (const char*s); /*! Constructor \param c a single character \code VDKString s(c); \endcode */ VDKString (const char& c); /*! Copy-initializer \param s a VDKString reference \code VDKString s = "uncle bill"; VDKString s1 = s; \endcode */ VDKString(const VDKString& s); /*! Assignement operator \param s a VDKString reference \code VDKString s = "uncle bill"; VDKString s1 = s; VDKString s2 = "uncle sam"; s = s2; \endcode */ VDKString& operator= (const VDKString& s); /*! Assignement operator \param s a null terminated C string \code VDKString s = "uncle bill"; s = "uncle sam"; \endcode */ VDKString& operator= (const char* s); /*! Destructor */ ~VDKString(); /*! VDKString to char* casting ** warning ** can violate data hiding OO concept */ operator char*() { return p->s; } /*! Equality operator */ int operator == (const VDKString& s) const ; /*! less than operator */ int operator <( const VDKString& s) const ; /*! greater than operator */ int operator>(const VDKString& s) const ; /*! less-equal operator */ int operator <=(const VDKString& s) const ; /*! greater-equal operator */ int operator >=(const VDKString& s) const ; /*! disequality operator */ int operator !=(const VDKString& s) const ; /*! cat to this \param s a null terminated string \code VDKString s = "uncle bill"; s += " is a smart boy"; \endcode */ VDKString& operator +=(const char* s); /*! cat to this \param s a VDKString \code VDKString s = "uncle bill"; VDKString s1 = " is a smart boy"; s += s1; \endcode */ VDKString& operator +=(const VDKString& s); /*! Returns a VDKString concatenated\param s a null terminated string \code VDKString s = "uncle bill"; VDKString s1 = s + " is a smart boy"; \endcode */ VDKString operator + (const char* s) const; friend VDKString operator + (const char* s, const VDKString& vdks); /*! Returns a VDKString concatenated \param s a VDKString */ VDKString operator +(const VDKString& s) const; /*! Returns true if this is an empty string */ bool isNull() const; /*! as strlen() */ int size() const; /*! index operator for const instances returns NULL if ix >= size */ char operator[](unsigned int ix) const; /*! string pointer access for const instances */ const char* c_str() const; /*! Removes a part of the string, beginning at 'begin' on 'len' length. Modifies and returns the resulting VDKString. \param begin char number where begins the selection (0 based) \param len selection length */ VDKString& DelSelection(unsigned int begin, unsigned int len); /*! Removes all trailing spaces. Modifies and returns the resulting VDKString. */ VDKString& RTrim(); /*! Removes all leading spaces. Modifies and returns the resulting VDKString. */ VDKString& LTrim(); /*! Removes all leading and trailing spaces. Modifies and returns the resulting VDKString. */ VDKString& Trim(); /*! Returns the number of the specified char 'car' contained in the string. \param car char to be counted \code VDKString s = "uncle bill"; int NumCar = s.CharCount('l'); // NumCar value is 3 \endcode */ unsigned int CharCount(const char car) const; /*! Returns the upper case VDKString after having modify it. \warning Does not modify unknown characters. \warning Upper case characters are assumed without accents. */ VDKString& UpperCase(); /*! Returns the lower case VDKString after having modify it. \warning Upper case characters are assumed without accents. */ VDKString& LowerCase(); /*! Returns true if this is an empty string meaning NULL buffer or strlen() == 0. */ bool isEmpty() const; /*! Strcat() to the existing string (printf style). Modifies and returns the resulting VDKString. \warning Final string is 65534 chars max. \warning Returns the previous string in case of memory overflow or buffer overflow. \param format a NULL terminated string \param ... a list of parameters \code VDKString s = "uncle bill"; s.Concatf("%s", " is a smart boy"); // s value is "uncle bill is a smart boy" \endcode */ VDKString& Concatf(const char* format, ...); /*! Assignment to string (printf style). Modifies and returns the resulting VDKString. \warning Final string is 65534 chars max. \warning Returns the previous string in case of memory overflow or buffer overflow. \param format a NULL terminated string \param ... a list of parameters \code VDKString s; s.Sprintf("%s is %d years old", "uncle bill", 40); // s value is "uncle bill is 40 years old" \endcode */ VDKString& Sprintf(const char* format, ...); /*! Extract the specified part of a formatted string. Modifies and returns the resulting VDKString. \warning Returns an isNull() string if the specified part not found. \param i the desired part position (starting at 1) \param sep the parts separator, '|' by default \code VDKString s = "one|two|three|four"; VDKString p = s; p.GetPart(2); // p value is "two" \endcode */ VDKString& GetPart(unsigned int i, const char sep = '|'); /*! Returns the first occurrence position of the specified char 'car' (0 based) or -1 if 'car ' not found. \param car char to be searched for */ int GetFCharPos(const char car) const; /*! Returns the last occurrence position of the specified char 'car' (0 based) or -1 if 'car ' not found. \param car char to be searched for */ int GetLCharPos(const char car) const; /*! Returns the converted string to double. See atof() for details. */ double StrtoDouble() const; /*! Returns the converted string to int. See atoi() for details. */ int StrtoInt() const; /*! Extract a part of the string beginning at 'start' upon 'len' length. Modifies and returns the resulting VDKString. \param start first char position (0 based) \param len maximum length of the resulting string */ VDKString& SubStr(unsigned int start, unsigned int len); /*! Cut the string at 'len' length. Modifies and returns the resulting VDKString. \param len length of the resulting string */ VDKString& Cut(unsigned int len); /*! Pad left of string with a specified char 'car' upon 'len' length. Modifies and returns the resulting VDKString. \param len length of the resulting string \param car char to be padded */ VDKString& LPad(unsigned int len, const char car); /*! Pad right of string with a specified char 'car' upon 'len' length. Modifies and returns the resulting VDKString. \param len length of the resulting string \param car char to be padded */ VDKString& RPad(unsigned int len, const char car); /*! Double all 'car' chars in the string (for SQL purpose). Modifies and returns the resulting VDKString. \param car char to be doubled, '\'' (cote) by default \code VDKString s = "Don't do that"; VDKString p = s; p.DoublaChar(); // p value is "Don''t do that" \endcode */ VDKString& DoubleChar(const char car = '\''); /*! Returns a VDKString containing a formatted date according to parameters settings. Modifies and returns the resulting VDKString. \warning Only complete dates are supported. That's to say days and months on two digits and years on 4 digits. For ex. : 02/03/2000. \param sep desired separator. If 0, no separator left \param orig date style staying in VDKString buffer \param ret date style to return \code VDKString s = "12/25/2000"; VDKString p = s; p.FormatDate(0, ENG_DATE, INT_DATE); // p value is "20001225" VDKString s = "12/25/2000"; VDKString p = s; p.FormatDate('-', ENG_DATE, EUR_DATE); // p value is "25-12-2000" \endcode */ VDKString& FormatDate(const char sep, int orig, int ret); }; #endif vdk-2.4.0/vdk/vdktextview.h0000644000000000000000000002577107251350375011274 /* * =========================== * VDK Visual Development Kit * Version 2.0.0 * December 2000 * =========================== * * Copyright (C) 1998,199,2000,2001 Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _vdktextview_h #define _vdktextview_h #include #include #include #define INSERT_MARK "insert" class VDKTextView; /*! \class VDKTextBuffer \brief Provides a gtk+ gtktextbuffer wrapper. \par Programming notes: VDKTextBuffer can be shared by several VDKTextView. These objects aren't handled by garbage collection (aren't VDKObjects), however are reference conted so do not need to be explicitely deleted if assigned to a VDKTextView using either the appropriate VDKTextView contructor or VDKText::Buffer() assignement method. If constructed and never assigned to a VDKTextView they need to be explicitely deleted or they will leak. */ #ifndef USE_SIGCPLUSPLUS class VDKTextBuffer : public VDKNotCopyAble #else class VDKTextBuffer : public SigC::Object, public VDKNotCopyAble #endif { friend class VDKTextView; private: unsigned int ref; void Ref(); void Unref(); protected: GtkTextBuffer* buffer; public: /*! Sets/gets text insertion position expressed in chars from text beginning. (counting from 0, gets -1 on failure) */ VDKReadWriteValueProp Pointer; /*! Sets/gets text insertion position expressed in column offset */ VDKReadWriteValueProp Column; /*! Sets/gets text insertion position expressed in lines */ VDKReadWriteValueProp Line; /* Gets buffer length in chars */ VDKReadOnlyValueProp Length; /*! Sets/gets modified flag */ VDKReadWriteValueProp Changed; /*! Default constructor */ VDKTextBuffer(); /*! Default constructor \param filename builds a text buffer loading file */ VDKTextBuffer(char* filename); /*! Destructor */ virtual ~VDKTextBuffer(); /*! Load text buffer with a file \param filename to load */ bool LoadFromFile(const char* filename); /*! Save buffer to file */ bool SaveToFile(const char* filename); /*! Returns underlying GtkTextBuffer */ GtkTextBuffer* Buffer() { return buffer; } /*! Clears text buffer deleting all text. */ void Clear(); /*! Inserts text at cursor position. \param txt null terminating string to be inserted \param nchars how many chars have to be inserted (-1 means all) */ void TextInsert(const char* txt, int nchar = -1); /*! Returns a text segment \param start starting position \param end ending position, if -1 all text buffer from start to end will be returned. \par Tip Invisible chars won't be included. Returned address should be g_free()'d by user. */ gchar* GetChars(int start, int end = -1); /*! Forward delete chars from insertion point */ void ForwardDelete(int nchars); /*! Backward delete chars from insertion point */ void BackwardDelete(int nchars); /*! Undoes last operation */ void Undo() { } /*! Gets line number at a buffer position \param offset buffer offset position (counting from 0) on error returns -1 */ int GetLineAtOffset(int offset); /* properties setting/getting functions */ void SetPointer(int p); int GetPointer(); void SetLine(int r); int GetLine(); void SetColumn(int r); int GetColumn(); unsigned int GetLength() { return gtk_text_buffer_get_char_count(buffer); } bool GetChanged() { return gtk_text_buffer_get_modified(buffer); } void SetChanged(bool f) { gtk_text_buffer_set_modified(buffer,f); } }; /*! \class VDKTextView \brief Provides a gtk+ gtktextview wrapper. This widget works under a buffer-view model, text buffer take care of changes and text view of displaying. Any change to text buffer will reflect automagically into text view. This widget substitutes old VDKText used on vdkbuilder version <= 1.2.5 and now deprecated even if will remain in use on earlier versions of VDK 2.0 series. */ /* TextView border interested windows used by VDKTextView::TextBorder() */ #define TVB_ALL 0x0000 #define TVB_LEFT 0x0001 #define TVB_TOP 0x0002 #define TVB_RIGHT 0x0004 #define TVB_BOTTOM 0x0008 #define TVB_TYPEMASK 0x000F class VDKTextView : public VDKObjectContainer { protected: VDKTextBuffer* buffer; GtkWidget* view; void ConnectSignals(); static void HandleRealize(GtkWidget*, gpointer); int left_border; public: /*! Constructor \param owner \param buffer NULL widget will make his own buffer, otherwise will share \param left_border if greater than 0 a left window will be made with size \par tip left_border should be greater than zero if user wants activate ShowLineNumbers property. */ VDKTextView(VDKForm* owner, VDKTextBuffer* buffer = NULL, int left_border = 0); /*! Destructor */ virtual ~VDKTextView(); virtual void SetForeground(VDKRgb rgb, GtkStateType state = GTK_STATE_NORMAL); virtual void SetBackground(VDKRgb color, GtkStateType state = GTK_STATE_NORMAL); virtual void SetFont(VDKFont* font); /*! Sets/Gets text buffer. Several text views can share same text buffer: \code VDKTextBuffer* textbuff = new VDKTextBuffer(); VDKTextView view = new VDKTextView(this,textbuff); VDKTextView view1 = new VDKTextView(this); view1->Buffer(textbuff); \endcode */ VDKTextBuffer* Buffer(VDKTextBuffer* buff = NULL); /*! Sets borders around text window. \param size border size in pixels \param which side border should be set - TVB_LEFT - TVB_TOP - TVB_RIGHT - TVB_BOTTOM that can be ored togheter. - TVB_ALL (default) use this to set all sides border size. */ void TextBorder(int size, int which = TVB_ALL); /*! Scrolls to a pointer pos or (default) to current pointer position, leaving pixels free */ void ScrollToPos (int pointer = -1, int margin = 0); /*! Scrolls to a line,column leaving pixels free */ void ScrollToLine(int line, int col, int margin = 0); /*! Sets/gets text insertion position expressed in chars from text beginning. (counting from 0, gets -1 on failure) */ VDKReadWriteValueProp Pointer; /*! Sets/gets text insertion position expressed in column offset */ VDKReadWriteValueProp Column; /*! Sets/gets text insertion position expressed in lines */ VDKReadWriteValueProp Line; /* Gets buffer length in chars */ VDKReadOnlyValueProp Length; /* Sets/gets text view editable */ VDKReadWriteValueProp Editable; /* Sets/gets max undo (dummy for now) */ VDKReadWriteValueProp MaxUndo; /* Sets/gets text line auto select (dummy for now) */ VDKReadWriteValueProp LineAutoSelect; /* Sets/gets text show line numbers (dummy for now) */ VDKReadWriteValueProp ShowLineNumbers; /*! Gets first visible line (lines are counted from 0) */ VDKReadOnlyValueProp FirstVisibleLine; /*! Gets last visible line (lines are counted from 0) */ VDKReadOnlyValueProp LastVisibleLine; /*! Sets/gets modified flag */ VDKReadWriteValueProp Changed; /*! Load text buffer with a file \param filename */ bool LoadFromFile(char* filename) { return buffer->LoadFromFile(filename); } /*! Clears text buffer deleting all text. */ void Clear() { buffer->Clear(); } /*! Returns a text segment \param start starting position \param end ending position, if -1 all text buffer from start to end will be returned. \par Tip Invisible chars won't be included. Returned address should be g_free()'d by user. */ gchar* GetChars(int start = 0, int end = -1) { return buffer->GetChars(start,end); } /*! Save buffer to file */ bool SaveToFile(char* filename) { return buffer->SaveToFile(filename); } /*! maintained for compatibility with old text widgets, but is dummy */ void Thaw() {} /*! maintained for compatibility with old text widgets, but is dummy */ void Freeze() { } /*! Undoes last operation */ void Undo() { buffer->Undo(); } /*! Inserts a new line at insertion point */ void Eol() { TextInsert("\n"); } /*! Inserts text at cursor position. \param txt null terminating string to be inserted \param nchars how many chars have to be inserted (-1 means all) */ void TextInsert(const char* txt, int nchar = -1) { buffer->TextInsert(txt,nchar); } /*! Forward delete chars from insertion point */ void ForwardDelete(int nchars) { buffer->ForwardDelete(nchars); } /*! Backward delete chars from insertion point */ void BackwardDelete(int nchars) { buffer->BackwardDelete(nchars); } /*! Answer if a line is visible or not line are counted from 0 \param line */ bool IsLineVisible(int line) { return (line >= FirstVisibleLine) && (line <= LastVisibleLine); } /*! Gets line number at a buffer position \param offset buffer offset position (counting from 0) on error returns -1 */ int GetLineAtOffset(int offset) { return buffer->GetLineAtOffset(offset); } /* properties setting/getting functions */ void SetPointer(int p) { buffer->SetPointer(p); } int GetPointer() { return buffer->GetPointer(); } void SetLine(int r) { buffer->SetLine(r); } int GetLine() { return buffer->GetLine(); } void SetColumn(int r) { buffer->SetColumn(r); } int GetColumn() { return buffer->GetColumn(); } unsigned int GetLength() { return buffer->GetLength(); } bool GetEditable() { return gtk_text_view_get_editable (GTK_TEXT_VIEW(view));} void SetEditable(bool f) { gtk_text_view_set_editable (GTK_TEXT_VIEW(view),f);} void SetShowLineNumbers(bool f); int GetFirstVisibleLine(); int GetLastVisibleLine(); bool GetChanged() { return buffer->GetChanged(); } void SetChanged(bool f) { buffer->SetChanged(f); } }; #endif vdk-2.4.0/vdk/vdktreeview.h0000644000000000000000000004742307624010120011226 /* * =========================== * VDK Visual Development Kit * Version 2.0 * November 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef TREEVIEW_H #define TREEVIEW_H #include #include #include #include #include class VDKTreeView; /*! \class VDKTreeViewModelTuple This class represent a tuple, a string array with an element considered as a primary key. */ typedef VDKArray StringRow; typedef bool (*VDKStringCompareFunction)(VDKString&, VDKString&); class VDKTreeViewModelTuple: public StringRow { /* int key_index; bool (*equal)(VDKString&, VDKString&); bool (*less)(VDKString&, VDKString&); */ public: /*! Property: KeyIndex */ VDKReadWriteValueProp KeyIndex; /*! Property: Less */ VDKReadWriteValueProp Less; /*! Property: Equal */ VDKReadWriteValueProp Equal; /*! Constructor. \param n, array dimension \param key, ordinal position of the key field ( 0 <= key < n) \param less, an user function to substitute < operator if needed \param equal, an user function to substitute == operator if needed Compare function should be declared as: bool compare(VDKString&, VDKString&); */ VDKTreeViewModelTuple(int n = 0, int key = 0, VDKStringCompareFunction less = NULL, VDKStringCompareFunction equal= NULL): StringRow(n), KeyIndex("KeyIndex",this,key), Less("Less",this,less), Equal("Equal",this,equal) { } virtual ~VDKTreeViewModelTuple() {} /* VDKTreeViewModelTuple(const VDKTreeViewModelTuple& tuple) { *this = tuple; } VDKTreeViewModelTuple& operator=(const VDKTreeViewModelTuple& tuple) { resize(tuple.size()); for(int t = 0; t < size(); t++) (*this)[t] = tuple[t]; int key_index = tuple.KeyIndex; VDKStringCompareFunction less = tuple.Less; VDKStringCompareFunction equal = tuple.Equal; KeyIndex = key_index; Less = less; Equal = equal; } */ int operator <(VDKTreeViewModelTuple& t) { int key_index = KeyIndex; VDKStringCompareFunction less = Less; if(less) return less((*this)[key_index],t[key_index]); else return (*this)[key_index] < t[key_index]; } int operator==(VDKTreeViewModelTuple& t) { int key_index = KeyIndex; VDKStringCompareFunction equal = Equal; if(equal) return equal((*this)[key_index],t[key_index]); else return (*this)[key_index] == t[key_index]; } }; typedef VDKValueList VDKTreeViewModelTupleList; typedef VDKValueListIterator VDKTreeViewModelTupleListIterator; typedef VDKArray VDKTreeViewModelTupleArray; /*! \class VDKTreeViewModel \brief Provides a wrapper for GtkTreeModel basically it stores data to be viewed with a VDKTreeView */ class VDKTreeViewModel: public VDKNotCopyAble { protected: GtkTreeStore *model; // GtkTreeIter iter; public: /*! Return underlying GtkTreeStore object */ GtkTreeStore* GtkModel() { return model; } /*! constructor \param types a GType array \param ncol the number of columns into the model */ VDKTreeViewModel(GType* types, int ncol); /*! destructor */ ~VDKTreeViewModel(); /*! Appends a new blank tree row \param iter a not initialized iter address that will be filled with newly constructed tree row \param parent if not NULL the row will appended as a child otherwise it will be appended as a sibling. TIP: - appending all rows as sibling will degenerate the tree into a list \code GtkTreeIter iter; model->AppendBlank(); model->SetData(&iter,...); \endcode */ void AppendBlank(GtkTreeIter* iter,GtkTreeIter* parent = NULL); /*! Prepends a new blank tree row \param iter a not initialized iter address that will be filled with newly constructed tree row \param parent if not NULL the row will prepended as a child otherwise it will be prepended as a sibling. TIP: - prepending all rows as sibling will degenerate the tree into a list \code GtkTreeIter iter; model->PrependBlank(); model->SetData(&iter,...); \endcode */ void PrependBlank(GtkTreeIter* iter,GtkTreeIter* parent = NULL); /*! Insert a tuple into model, tuple will be inserted in order. \param iter a not initialized iter address that will be filled with newly constructed tree row \param tuple to be inserted \param parent if is NULL tuple will be inserted in order into top level nodes list otherwise will be inserted in order into parent children list \param recurse if true scans children/sibling list recursively to search insertion position */ void InsertTuple(GtkTreeIter* iter,VDKTreeViewModelTuple &tuple,GtkTreeIter* parent = NULL, bool recurse = false); /*! Clears the tree store */ void Clear(); /*! Removes the row at iter \param i the iter to be removed */ void Remove(GtkTreeIter* i); /*! Sets data into a row \param node the iterator to be set \param a list of pairs the list must be -1 terminated. \code GtkTreeIter iter; model->AppendBlank(); model->SetData(&iter, 0, "This is row 1", 1, FALSE, 2, NULL, -1); \endcode */ void SetData(GtkTreeIter* node,...); /*! Sets data into a cell \param node the iterator to be set \param column cell column \param value a string representation of GType value that will be converted into a GType accordlying with the model \code GtkTreeIter *iter = model->PrependBlank(); model->SetCell(iter,0, "test"); model->SetCell(iter,1, "true"); \endcode Supported GType's: - G_TYPE_CHAR - G_TYPE_STRING - G_TYPE_BOOLEAN - G_TYPE_INT - G_TYPE_UINT - G_TYPE_LONG - G_TYPE_ULONG - G_TYPE_FLOAT - G_TYPE_DOUBLE */ void SetCell(GtkTreeIter* node, int column, const char* value); /*! Get data from a cell, data type will be converted into their string representation accordlying with GType. \param node iterator to be retrieved \param column cell column Supported GType's: - G_TYPE_CHAR - G_TYPE_STRING - G_TYPE_BOOLEAN - G_TYPE_INT - G_TYPE_UINT - G_TYPE_LONG - G_TYPE_ULONG - G_TYPE_FLOAT - G_TYPE_DOUBLE Tip: Returned buffer address should be freed by user if not NULL. \code //signal response method bool TvForm::OnTreeViewSelectRow(VDKObject* sender) { // gets selections treeview->GetSelections(); // disregard multiple selections if(treeview->Selections().size() == 1) { VDKTreeViewModel* model = treeview->Model; // gets iter position from selections list GtkTreeIter iter = treeview->Selections()[0]; char* firstname = model->GetCell(&iter,0); // extract from iter position at column 0 char* lastname = model->GetCell(&iter,1); if(firstname && lastname) // GetCell() returns NULL on failure { printf("\n[%s %s]",firstname,lastname); fflush(stdout); delete[] firstname; delete[] lastname; } } treeview->Selections().flush(); return true; } \endcode */ char *GetCell(GtkTreeIter* node, int column); /*! Gets and fill a tuple with row data converted into their string representation \param node iterator to be retrieved \param tuple a tuple reference (tuple can be empty since it will be resized and filled by the method */ void GetTuple(GtkTreeIter* node,VDKTreeViewModelTuple& tuple); /*! Move iterator to root node \param iter a not initialized iter address that will be filled with root node pointer \code GtkTreeIter iter; if(model->Root(&iter)) { char* cell = model->GetCell(&iter,0); if(cell) { // .. delete[] cell; } } */ bool Root(GtkTreeIter* iter); /*! Move iterator forward at present level \param iter a not initialized iter address that will be filled with next node pointer */ bool Next(GtkTreeIter* iter); /*! Returns true if iter has a child \param iter */ bool HasChild(GtkTreeIter* iter) { return gtk_tree_model_iter_has_child (GTK_TREE_MODEL(model), iter); } /*! Return the child of a parent node \param iter a not initialized iter address that will be filled with child node pointer \param parent a valid iter address of the parent node Returns true if has a child, left undefined otherwise */ bool Child(GtkTreeIter* iter,GtkTreeIter* parent); /*! Executes a linear search (deep first on childs), returns true if found \param iter a GtkTreeIter address to be filled with iter data if found \param column to be scanned to execute search \param value a string representation of a GType value that will be converted into a GType accordlying with the model Supported GType's: - G_TYPE_CHAR - G_TYPE_STRING - G_TYPE_BOOLEAN - G_TYPE_INT - G_TYPE_UINT - G_TYPE_LONG - G_TYPE_ULONG - G_TYPE_FLOAT - G_TYPE_DOUBLE Returns true if found */ bool Find(GtkTreeIter* iter,int column, char* value); }; /*! Provides an iterator on VDKTreeViewModel */ class VDKTreeViewModelIterator { VDKTreeViewModel* model; GtkTreeIter iter, *internal_iter; public: VDKTreeViewModelIterator(): model(NULL),internal_iter(NULL) {} /*! Constructor \param model \param parent if NULL makes an iterator on top level nodes, otherwise makes an iterator on parent childs */ VDKTreeViewModelIterator(VDKTreeViewModel* model,GtkTreeIter* parent = NULL); /*! return node presently visited */ GtkTreeIter* current() { return internal_iter; } /*! Returns true if presently visited node is valid */ operator int() { return internal_iter != NULL; } /*! Returns true if presently visited node has a child. TIP: Since iterator incremental operator skips on next sibling node, you can use this to visit all tree nodes on depth-first strategy using recursion. See example below taken from /testvdk/treeviewcompo.cc: \code void TreeViewComponent::recurse(GtkTreeIter* iter) { VDKTreeViewModel* model = tree->Model; VDKTreeViewModelIterator ti(model,iter); for(;ti;ti++) { PrintRow(ti.current()); // uses presently pointed node if(ti.HasChild()) recurse (ti.current()); } } bool TreeViewComponent::OnTrasverseClicked (VDKObject* sender) { recurse(NULL); return true; } \endcode */ bool HasChild(); /*! Incremental operator (postfix), visit next sibling node */ void operator++(); /*! Incremental operator (infix), visit next sibling node */ void operator++(int); }; /*! \class VDKTreeViewColumn \brief Provides a wrapper for GtkTreeColumn */ class VDKTreeViewColumn: public VDKNotCopyAble { protected: static void edited_callback (GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer data); static void toggled_callback (GtkCellRendererToggle *cell, gchar *path_string, gpointer data); private: GtkCellRenderer *cell; GtkTreeViewColumn *column; VDKTreeView* owner; gulong handler_seq_no; int id; public: /*! NormalBackground */ VDKReadWriteValueProp NormalBackground; /*! Foreground */ VDKReadWriteValueProp Foreground; /*! Font */ VDKReadWriteValueProp Font; /*! Title */ VDKReadWriteValueProp Title; /*! Width Setting this property to a value greater than 0 sets column to a fixed size, setting to 0 makes it auto resizeable */ VDKReadWriteValueProp Width; /*! Sortable */ VDKReadWriteValueProp Sortable; /*! Constructor \param owner treeview owner \param column model column number from which data should be gathered \param title column title \param editable if true column cells can be edited provided that related editcol cell has a true value (has meaning only if column type is G_TYPE_STRING) \param editcol model column number that must contain boolean value that flags editable (has meaning only if editable is true) \section these types of columns are supported: - G_TYPE_STRING - G_TYPE_BOOLEAN - GDK_TYPE_PIXBUF \section - A column cell of G_TYPE_BOOLEAN can answer to "toggled" signal using LS extended signal system (see treeviewcompo.cc on ./testvdk). \code //.. tree->OnCellToggled.connect(slot(*this,&TreeViewComponent::OnCellToggled)); //.. void TreeViewComponent::OnCellToggled(VDKObject* sender, GtkTreeIter* iter, int col, bool toggled) { VDKTreeView* tree = dynamic_cast(sender); if(!sender) return; else { VDKTreeViewModel* model = tree->Model; toggled = !toggled; model->SetCell(iter, col, toggled ? "true" : "false"); printf("\ntoggled column:%d\n\tvalue:%s", col, toggled ? "true" : "false"); fflush(stdout); } } \endcode - If a column cell of G_TYPE_STRING is editable it can answer to "edited" signal using LS extended signal system (see treeviewcompo.cc on ./testvdk): \code // ... tree->OnCellEdited.connect(slot(*this,&TreeViewComponent::OnCellEdited)); //.. void TreeViewComponent::OnCellEdited(VDKObject* sender, GtkTreeIter* iter, int col, char* new_text) { VDKTreeView* tree = dynamic_cast(sender); if(!sender) return; else { VDKTreeViewModel* model = tree->Model; char* old_text = model->GetCell(iter,col); printf("\nedited column:%d\n\told text:%s\n\tnew text:%s", col, old_text,new_text); fflush(stdout); model->SetCell(iter, col, new_text); } } \endcode */ VDKTreeViewColumn(VDKTreeView *owner, int column, char* title = NULL, bool editable = false, int editcol = -1); /*! Destructor */ ~VDKTreeViewColumn(); /*! Return underlying GtkColumn */ GtkTreeViewColumn *GtkColumn() { return column; } /*! Returns underlying GtkRenderer */ GtkCellRenderer* Renderer() { return cell; } /*! Returns column owner */ VDKTreeView* Owner() { return owner; } /*! Enable/Disable title, if enabled title can be selected with a click */ void ActiveTitle(bool flag = true); protected: void SetNormalBackground(VDKRgb rgb); void SetForeground(VDKRgb rgb); void SetFont(VDKFont* font); void SetTitle(const char* title); const char* GetTitle(); void SetWidth(int w); int GetWidth(); void SetSortable(bool flag); bool GetSortable(); }; typedef VDKList VDKTreeViewColumnList; typedef VDKListIterator VDKTreeViewColumnListIterator; /*! \class VDKTreeViewIter \brief Provides a wrapper for GtkTreeIter */ class VDKTreeViewIter: public GtkTreeIter { GtkTreeModel *model; public: /*! Constructor \param model data model (defaults to NULL) */ VDKTreeViewIter(GtkTreeModel *model= NULL): model(model) {} /*! \internal */ GtkTreeModel* Model(GtkTreeModel* m = NULL) { if(m) model = m; return model; } // meaningless /*! \internal */ bool operator==(VDKTreeViewIter& i) { return false; } /*! \internal */ bool operator<(VDKTreeViewIter& i) { return false; } /*! \param child_iter Returns true if iterator has a child, child_iter initialized to child, undefined otherwise. */ bool Child(VDKTreeViewIter* child_iter); /*! \param parent_iter Returns true if iterator has a parent, parent_iter initialized to parent, undefined otherwise. */ bool Parent(VDKTreeViewIter* parent_iter); }; typedef VDKArray VDKTreeViewIterArray; typedef VDKValueList VDKTreeViewIterList; typedef VDKValueListIterator VDKTreeViewIterListIterator; /*! \class VDKTreeView \brief Provides a wrapper for GtkTreeView widget */ class VDKTreeView: public VDKObject { private: GtkTreeSelection *selection; VDKTreeViewColumnList *columns; VDKTreeViewIterList selections; protected: public: /*! Gets/Sets tree data model */ VDKReadWriteValueProp Model; /*! Gets selected column */ VDKReadOnlyValueProp SelectedColumn; /*! Constructor \param owner \param model data model (can be NULL) \param selection_mode Modes can be: GTK_SELECTION_SINGLE GTK_SELECTION_MULTIPLE GTK_SELECTION_BROWSE (tree does not react to selections) */ VDKTreeView(VDKForm* owner , VDKTreeViewModel* model = NULL, GtkSelectionMode mode = GTK_SELECTION_SINGLE); /*! Destructor */ ~VDKTreeView(); /*! \internal */ void SetModel(VDKTreeViewModel* model); /*! Return a list of columns */ VDKTreeViewColumnList * Columns() { return columns; } /*! Fills a list with selected iterators */ void GetSelections(); /*! Return selections list, that is a list og GtkTreeIter - Is safer call GetSelections() before use it. - We suggest also to Selections().flush() after use */ VDKTreeViewIterList &Selections() { return selections; } /*! Selects a node \param iter to be selected */ void SelectNode(GtkTreeIter* iter); /*! Unselects a node \param iter to be unselected */ void UnselectNode(GtkTreeIter* iter); /*! Expands the node \param iter to be expanded, if NULL all node will be expanded \param expand_all if true expand all childs recursively (meaningfull only if iter != NULL ) */ void Expand(GtkTreeIter* iter = NULL, bool expand_all = false); /*! Remove all selected nodes and flushes selections list. */ void RemoveSelected(void); #ifdef USE_SIGCPLUSPLUS /*! Extended LS signal system: Received when a string type cell is being edited Response methods have these signatures: void SomeClass::OnCellEdited(VDKObject* sender, GtkTreeIter* iter, int column, char* new_text) void SomeClass::OnCellEdited(GtkTreeIter* iter, int column, char* new_text) */ VDKSignal3< void, GtkTreeIter*, int , char* > OnCellEdited; /*! Extended LS signal system: Received when a boolean type cell is being toggled Response methods have these signatures: void SomeClass::OnCellToggled(VDKObject* sender, GtkTreeIter* iter, int column, bool toggled) void SomeClass::OnCellToggled(GtkTreeIter* iter, int column, bool toggled) */ VDKSignal3< void, GtkTreeIter*, int, bool> OnCellToggled; #endif }; #endif vdk-2.4.0/vdk/vdkthread.h0000644000000000000000000000557307345320706010661 /* * =========================== * VDK Visual Development Kit * Version 0.6 * Jan 1999 * =========================== * * Copyright (C) 1999, Salmaso Raffaele * Developed by Salmaso Raffaele * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef VDKTHREAD_H #define VDKTHREAD_H #include enum VDKMutexEnum { VDKMUTEX_OK = 0, VDKMUTEX_ERROR }; /*! VDHThread states */ enum VDKThreadEnum { VDKTHREAD_IDLE = 1, VDKTHREAD_RUNNING, VDKTHREAD_STOPPED, VDKTHREAD_EXITED, VDKTHREAD_CANNOT_CREATE, VDKTHREAD_IS_YET_RUNNING }; class VDKMutex { private: pthread_mutex_t mutex; public: VDKMutex (); ~VDKMutex (); VDKMutexEnum Wait (long time = 0); VDKMutexEnum Release (); VDKMutexEnum Lock (); }; /*! \class VDKThread \brief This class provides a simple thread implementation Actually is supported only POSIX THREAD. It is possible to use a VDKThread in two way: \par via subclassing: if you derive a new class from VDKThread, you have to override the virtual method "virtual void Execute ();" to do what you want \code class NewClass : public VDKThread { protected: void Execute () { // my code } public: NewClass (); ~NewsClass (); } //... NewClass thread; thread.Start(); \endcode \par passing a pointer to function when calling "Start ( (void *) func);" \code void * func () {} ... VDKThread thread; thread.Start ((void *) func); \endcode */ class VDKThread { protected: pthread_t id; /*! Exit from the thread */ void Exit (void * status = 0); static void * EntryPoint (void * arg); virtual void Execute (); public: VDKThread (); virtual ~VDKThread (); /*! Start the thread. */ VDKThreadEnum Start (void * = NULL); /*! Stops executing thread (command from other threads). */ VDKThreadEnum Stop (); /*! Wait until the thread is terminated (it is used from other threads). */ void * Wait (); /*! Store thread status. */ VDKThreadEnum state; /*! Return the thread ID. */ unsigned int GetID () {return (unsigned long) id;}; }; #endif vdk-2.4.0/vdk/vdktypes.h0000755000000000000000000001312210022076466010543 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKTYPES_H #define VDKTYPES_H #include #include #include #ifdef NULL #undef NULL #define NULL 0x0000 #endif enum VDKCursorType { curDefault = -1, curLeftPtr = GDK_LEFT_PTR, curWatch = GDK_WATCH, curCrossHair = GDK_CROSSHAIR, curHandPtr = GDK_HAND2, curPencil = GDK_PENCIL }; enum VDKSignal { no_signal = -1, clicked_signal, pressed_signal, released_signal, enter_signal, leave_signal, activate_signal, select_row_signal, unselect_row_signal, click_column_signal, changed_signal, focus_out_signal, focus_in_signal, timer_tick_signal, realize_signal, switch_page_signal, toggled_signal, event_browser_signal, value_changed_signal, child_attached_signal, child_detached_signal, selection_changed_signal, // used in VDKCombo text_changed_signal, // used in VDKtext select_node_signal, unselect_node_signal, databox_zoomed_signal, // used in VDKDataBox databox_marked_signal, databox_selection_started_signal, databox_selection_changed_signal, databox_selection_stopped_signal, databox_selection_canceled_signal, #if HAVE_GNOME // gnome widget signals date_changed_signal = 1024, // VDKGnomeDateEdit time_changed_signal, #endif row_activated_signal = 1512, user_signal = 4096 }; enum VDKEvent { no_event = GDK_NOTHING, delete_event = GDK_DELETE, destroy_event = GDK_DESTROY, expose_event = GDK_EXPOSE, motion_notify_event = GDK_MOTION_NOTIFY, button_press_event = GDK_BUTTON_PRESS, double_click_event = GDK_2BUTTON_PRESS, triple_click_event = GDK_3BUTTON_PRESS, button_release_event = GDK_BUTTON_RELEASE, key_press_event = GDK_KEY_PRESS, key_release_event = GDK_KEY_RELEASE, enter_notify_event = GDK_ENTER_NOTIFY, leave_notify_event = GDK_LEAVE_NOTIFY, focus_change_event = GDK_FOCUS_CHANGE, configure_event = GDK_CONFIGURE, map_event = GDK_MAP, unmap_event = GDK_UNMAP, property_notify_event = GDK_PROPERTY_NOTIFY, selection_clear_event = GDK_SELECTION_CLEAR, selection_request_event = GDK_SELECTION_REQUEST, selection_notify_event = GDK_SELECTION_NOTIFY, proximity_in_event = GDK_PROXIMITY_IN, proximity_ou_event = GDK_PROXIMITY_OUT, client_event = GDK_CLIENT_EVENT, visibility_notify_event = GDK_VISIBILITY_NOTIFY, no_expose_event = GDK_NO_EXPOSE, drag_start_event = GDK_DRAG_ENTER, drag_stop_event = GDK_DRAG_LEAVE, dragging_event = GDK_DRAG_MOTION }; enum { v_box, h_box, table_box }; enum { l_justify, c_justify, r_justify , pos_justify = 100}; enum { h_separator, v_separator }; enum { shadow_none, shadow_in, shadow_out, shadow_etched_in, shadow_etched_out }; enum { Class_level = 8192, Parent_level }; enum VDKUpdateType { update_continuos = GTK_UPDATE_CONTINUOUS, update_discontinuos = GTK_UPDATE_DISCONTINUOUS, update_delayed = GTK_UPDATE_DELAYED }; /* custom button toggled or not */ #define VDK_CBUTTON_UNTOGGLED 0x0010 #define VDK_CBUTTON_TOGGLED 0x0020 #define VDK_CBUTTON_TOGGLEMASK 0x00F0 /* custom button type */ #define VDK_CBUTTON_NORMAL 0x0000 #define VDK_CBUTTON_COMBO 0x0004 #define VDK_CBUTTON_TYPEMASK 0x000F /* MessageBox icon types */ #ifndef VDK_ICONSTOP #define VDK_ICONSTOP 0x0010 #define VDK_ICONWARNING VDK_ICONSTOP #define VDK_ICONQUESTION 0x0020 #define VDK_ICONINFORMATION 0x0040 #define VDK_ICONERROR 0x0080 #define VDK_ICONMASK 0x00F0 #endif /* MessageBox type */ #define VDK_OK 0x0000 #define VDK_YESNO 0x0004 #define VDK_OKCANCEL 0x0008 #define VDK_TYPEMASK 0x000F /* MessageBox answers */ #define VDK_IDYES 0x0001 #define VDK_IDNO 0x0002 #define VDK_IDOK 0x0003 #define VDK_IDCANCEL 0x0004 /* (not yet implemented) */ /* some useful colors */ #define clWhite VDKRgb(255,255,255) #define clBlack VDKRgb(0,0,0) #define clYellow VDKRgb(255,255,0) #define clRed VDKRgb(255,0,0) #define clGreen VDKRgb(0,255,0) #define clBlue VDKRgb(0,0,255) #define clNavyBlue VDKRgb(0,0,130) #define clMaroon VDKRgb(146,89,28) #define clSiena VDKRgb(178,32,32) #define clIvory VDKRgb(255,255,223) #define clAirBlue VDKRgb(89,186,231) #define clLightBlue clAirBlue #define clDodgerBlue VDKRgb(101,191,212) /* some useful fonts */ #define fnFixed14 "fixed Medium 14" #define fnCourier12 "courier Medium 12" #define fnCourier14 "courier Medium 12" #define fnFixed12 "fixed Medium 12" #define fnLucida12 "lucida Medium 12" #define fnLucidaBold12 "lucida Bold 12" #define fnTimesBold12 "times Bold 12" #define fnTimesBold14 "times Bold 14" #define fnTimes24 "times Medium 24" #define fnTimesBold24 "times Bold 24" #endif vdk-2.4.0/vdk/vdkutils.h0000644000000000000000000001246707206652556010561 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef VDKUTILS_H #define VDKUTILS_H #include /* VDKRgb */ /*! \class VDKRgb \brief Provides a simple RGB color structure */ class VDKRgb { public: int red,green,blue; /*! Constructor \param r red component (0-256) \param g green component \param b blue component */ VDKRgb(int r = 0, int g = 0, int b = 0): red(r),green(g),blue(b) { } /*! Destructor */ ~VDKRgb() { } /*! Constructor \param name names are those provided in rgb X database (normally on /usr/lib/X11/rgb.txt ) */ VDKRgb(char* name) { red = green = blue = -1; GdkColor color; if(gdk_color_parse(name, &color)) { red = color.red >> 8; green = color.green >> 8; blue = color.blue >> 8; } } /*! Returns true if a valid color was loaded */ bool IsValid() const { return red != -1 && green != -1 && blue != -1 ; } /*! Equality operator */ bool operator==(VDKRgb& c) const { return ( (red == c.red) && (green == c.green) && (blue == c.blue) ); } }; /* ------------ point class ------------ */ /*! \class VDKPoint \brief Provides a simple point object */ class VDKPoint { public: /*! x,y coordinates */ int x,y; public: // Constructors /*! Constructor, make a point with 0,0 coordinates */ VDKPoint(): x(0),y(0) { } /*! Constructor \param _x x coordinate \param _y y coordinate */ VDKPoint(int _x, int _y) { x = _x; y = _y; } /*! Destructor */ virtual ~VDKPoint() { } /*! Equality operator */ int operator ==(VDKPoint& p) const{ return (x == p.x ) && (y == p.y); } /*! Disequality operator */ int operator !=(VDKPoint& p) const{ return ! (*this == p) ; } /*! Returns an offset point \param dx x offset \param dy y offset */ VDKPoint OffsetBy(int dx, int dy) const { return VDKPoint(x+dx, y+dy); } /*! Return simmetric point in plane */ VDKPoint operator -() const{ return VDKPoint(-x, -y); } /*! Modify this with an offset \param dx x offset \param dy y offset */ VDKPoint& Offset(int dx, int dy); int X() const { return x; } int Y() const { return y; } }; /* ---------- rect class ---------- */ /*! \class VDKRect \brief Provides a simple rectangle object */ class VDKRect { public: /*! Corners coordinates */ int left,top,right,bottom; /*! width and height */ int w,h; public: /*! Constructor makes a null rect */ VDKRect() { left = top = right = bottom = w = h = 0; } /*! Constructor \param x left-upper corner x \param left-upper corner y \param _w width \param _h height */ VDKRect(int x, int y, int _w, int _h):w(_w),h(_h) { left = x; top = y; right = x+_w; bottom = y+_h; } /*! Copy initializer */ VDKRect(VDKRect& r):w(r.w),h(r.h) { left = r.left; right = r.right; top = r.top; bottom = r.bottom; } /*! Destructor */ ~VDKRect() { } /*! Returns rect origin */ VDKPoint Origin() const { return VDKPoint(left,top); } /*! Returns rect width */ int W() const { return w; } /*! Returns rect height */ int H() const { return h; } /*! Returns 1 if this contains a point \param point a point reference */ int Contains(const VDKPoint& point) const { return point.X() >= left && point.X() < right && point.Y() >= top && point.Y() < bottom; } /*! Returns 1 if this intersect a rect \param rect a rect reference */ int Contains( const VDKRect& r) const { return r.left >= left && r.right <= right && r.top >= top && r.bottom <= bottom; } }; /*! \class VDKNotCopyAble \brief Hierarchy root class All vdk gui and gui related objects (with few exceptions) belong to this. This object can't be copied or assigned, any copy/assign operation is flagged as an error since copy-initializer and assignement operator are private methods. Most of them are constructed on the heap with new operator and a great part can be handled with garbage collection. */ class VDKNotCopyAble { private: VDKNotCopyAble(VDKNotCopyAble const&); VDKNotCopyAble& operator=(VDKNotCopyAble const&); protected: VDKNotCopyAble(){} ~VDKNotCopyAble(){} }; #endif vdk-2.4.0/vdk/widcontain.h0000644000000000000000000000647007454775074011056 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * Revision 0.4.1 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef WIDCONTAIN_H #define WIDCONTAIN_H #include /*! \class VDKObjectContainer * \brief Containers base class * * This class provides a container widget, common class for * specialized containers such as VDKBox, VDKTable etc. * User should not construct explicitely this kind of object. * */ class VDKObjectContainer: public VDKObject { public: VDKObjectContainer(VDKForm* owner); virtual ~VDKObjectContainer() {} /*! Sets container border width \param w returns border width if is < 0 */ int BorderWidth(int w = -1) { if(w>=0) gtk_container_set_border_width (GTK_CONTAINER (widget),w); return GTK_CONTAINER (widget)->border_width; } /*! Add an object. */ virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 0); /*! Remove an object from container, object will be destroyed \param obj object to be removed */ void RemoveObject(VDKObject* obj) { obj->Destroy(); } /*! This function will remove an object from a container without destroying it. \param obj object to be removed Tip: should be used to reparent an widget, or it will leak. Example: \code // remove from source container // referencing it otherwise will be destroyed by gtk+ source->RemoveObjectFromContainer(widget); // add to target container target->Add(widget); // set target as parent to redirect signal flow widget->Parent(target); // unref widget again (or it will leak) gtk_widget_unref(widget->Widget()); \endcode */ virtual void RemoveObjectFromContainer(VDKObject* obj); /*! Remove all objects from container destroying them */ void RemoveObjects(); /*! Find an object with Tag==tag, NULL if fails \param tag value to be searched */ VDKObject* FindTag(int tag); /*! Apply user defined functions to each contained object */ void ForEachDo(void (*action)(VDKObject*)); /* ! Select those contained objects that satisfy to user defined condition. \param list an ItemList filled with all object addresses that satisfy condition- \condition an user defined function invoked with each object as param, function must return either true (satisfy) or false value. */ void Select(ItemList* list, bool (*condition)(VDKObject*)); }; #endif vdk-2.4.0/vdk/eventbox.h0000644000000000000000000000315407206652557010540 /* * =========================== * VDK Visual Development Kit * Version 0.7 * March 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _EVENT_BOX_H #define _EVENT_BOX_H #include /*! \class VDKEventBox * * VDKEventBox acts like a VDKBox except that reacts to all * events. * Tips: event handling must be performed using dynamics tables */ class VDKEventBox: public VDKObjectContainer { protected: int mode; GtkWidget* box; public: VDKEventBox(VDKForm* owner = (VDKForm*) NULL, int mode = v_box); virtual ~VDKEventBox() {} virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 0); /*! Returns a VDKPoint containing VDKEventBox coordinates relative to parent form */ VDKPoint FormPosition(); }; #endif vdk-2.4.0/vdk/sigc_addon.h0000644000000000000000000001352607210724250010765 /* -*- c++ -*- */ /* * =========================== * VDK Visual Development Kit * Version 1.0.3 * November 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #ifndef _sigc_addon_h_ #define _sigc_addon_h_ #ifdef USE_SIGCPLUSPLUS #include #ifdef SIGC_CXX_NAMESPACES // currently code depends on this! using namespace std; using namespace SigC; #endif /*! \class VDKSignal0 \brief makes a signal of type: Signal2 This template basically makes a signal of type: Signal2 what also accepts slots of type: Slot1 for VDKSignal1. Attention: To emit a signal like this you have to call 'emit(VDKObject* ob, P1)' , that means 'emit(P1)' is not available. This must be as we must handle all subscribed signal_receivers equal. This nameing convention also applies on the other classes, so VDKSignal0 wraps Signal0 and Signal1. For the moment you can not connect two VDKSignal#'s dircetly, as VDKSignal#.slot() is not availbale. But in real life (code) you should not do it either. Coupling a SigC::Signal# on a VDKSignal# works, what is what you (probably) want instead. */ template class DualSignal0 : public SigC::Signal1, public SigC::Signal0 { private: /* Ret emit(){}; // Don't use!!! */ /* Ret operator()(){} // also */ public: typedef SigC::Signal0 short_signal_t; typedef SigC::Signal1 long_signal_t; Connection connect(const Slot0 &sl) {return short_signal_t::connect(sl);} Connection connect(const Slot1 &sl) {return long_signal_t::connect(sl);} Ret emit(T obj) {short_signal_t::emit(); return long_signal_t::emit(obj);} Ret operator()(T obj) {short_signal_t::emit(); return long_signal_t::emit(obj);} bool empty() const {return (short_signal_t::empty() && long_signal_t::empty());} }; template class DualSignal1 : public SigC::Signal2, public SigC::Signal1 { private: Ret emit(P1){}; // Don't use!!! Ret operator()(P1){} // also public: typedef SigC::Signal1 short_signal_t; typedef SigC::Signal2 long_signal_t; Connection connect(const Slot1 &sl) {return short_signal_t::connect(sl);} Connection connect(const Slot2 &sl) {return long_signal_t::connect(sl);} Ret emit(T obj, P1 p1) {short_signal_t::emit(p1); return long_signal_t::emit(obj,p1);} Ret operator()(T obj, P1 p1) {short_signal_t::emit(p1); return long_signal_t::emit(obj,p1);} bool empty() const {return (short_signal_t::empty() && long_signal_t::empty());} }; template class DualSignal2 : public SigC::Signal3, public SigC::Signal2 { private: Ret emit(P1,P2){}; // Don't use!!! Ret operator()(P1,P2){} // also public: typedef SigC::Signal2 short_signal_t; typedef SigC::Signal3 long_signal_t; Connection connect(const Slot2 &sl) {return short_signal_t::connect(sl);} Connection connect(const Slot3 &sl) {return long_signal_t::connect(sl);} Ret emit(T obj, P1 p1, P2 p2) {short_signal_t::emit(p1,p2); return long_signal_t::emit(obj,p1,p2);} Ret operator()(T obj, P1 p1, P2 p2) {short_signal_t::emit(p1,p2); return long_signal_t::emit(obj,p1,p2);} bool empty() const {return (short_signal_t::empty() && long_signal_t::empty());} }; template class DualSignal3 : public SigC::Signal4, public SigC::Signal3 { private: Ret emit(P1,P2,P3){}; // Don't use!!! Ret operator()(P1,P2,P3){} // also public: typedef SigC::Signal3 short_signal_t; typedef SigC::Signal4 long_signal_t; Connection connect(const Slot3 &sl) {return short_signal_t::connect(sl);} Connection connect(const Slot4 &sl) {return long_signal_t::connect(sl);} Ret emit(T obj, P1 p1, P2 p2,P3 p3) {short_signal_t::emit(p1,p2,p3); return long_signal_t::emit(obj,p1,p2,p3);} Ret operator()(T obj, P1 p1, P2 p2, P3 p3) {short_signal_t::emit(p1,p2,p3); return long_signal_t::emit(obj,p1,p2,p3);} bool empty() const {return (short_signal_t::empty() && long_signal_t::empty());} }; template class VDKSignal0 : public DualSignal0{}; template class VDKSignal1 : public DualSignal1{}; template class VDKSignal2 : public DualSignal2{}; template class VDKSignal3 : public DualSignal3{}; #endif /* USE_SIGCPLUSPLUS */ #endif /* !_sigc_addon_h_ */ vdk-2.4.0/vdk/sigc_events.h0000644000000000000000000001453507206652564011222 /* -*- c++ -*- */ #ifndef _sigc_events_h_ #define _sigc_events_h_ #include #include class VDKObject; /** Baseclass for all VDKEvents, not instantied itself. */ class VDKAnyEvent { protected: VDKObject* _obj; GdkEventType _type; VDKAnyEvent(const GdkEvent* ,VDKObject*); public: virtual ~VDKAnyEvent(){} VDKObject* Sender() const; GdkEventType GDKType() const{return _type;} }; /** Baseclass for FocusEvents. This class only specifies the * interface, so you can easily switch between different * focus-strategies. * @see VDKMouseFocusEvent * @see VDKKeyFocusEvent */ class VDKFocusEvent { protected: VDKFocusEvent(bool focus) : Focus(focus){} public: /** Tells you if the object hast lost or got the focus */ const bool Focus; bool hasFocus()const{return Focus;} }; /** This class represents the data associated with a keypress or keyrelease * event. */ class VDKKeyEvent : public VDKAnyEvent { private: unsigned int _state; guint _keyval; gchar* _string; public: VDKKeyEvent(const GdkEventKey* , VDKObject*); VDKKeyEvent(VDKKeyEvent const&); ~VDKKeyEvent(); VDKKeyEvent& operator=(VDKKeyEvent const&); /** Returns the corresponding id for this key as defined in * gdkkeysyms.h. Usefull for keys which don't have a string * representation. For example, when key 'a' is pressed you get * the string "a" and the id Gdk_a, but when you press on backspace * you get the string "" (as there is no such representation) and * id Gdk_BackSpace. * Note that modifiers are handled by Modifier * @see Modifier() */ unsigned int Key() const; /** Tells you what modifier was pressed when this event was generated. * The modifiers are defined in enum GdkModifierType in gdktypes.h. * You will get the or-ed vaule of all pressed modifiers. */ unsigned int Modifier() const; /** Gives you the string-representation of pressed key if possible. * @see Key() */ VDKString String() const; /** Basically the same as @see Modifier() */ const char* CString() const; }; /** This provides you the baseinformation about the mousepointer. * These event can be directly instantiated with different GdkEvents, * which will not allways provide all information this events provides. */ class VDKMouseEvent : public VDKAnyEvent { protected: VDKPoint _pos; //! conversion from gdouble to int -> loose data unsigned int _state; guint _button; GdkWindow* _gwin; // to bring the (non) gdk-hierachy in this hierachy ... VDKMouseEvent(const GdkEventCrossing *, VDKObject*); public: VDKMouseEvent(const GdkEventButton *, VDKObject*); VDKMouseEvent(const GdkEventMotion *, VDKObject*); /*! The position of the pointer when event occured. */ VDKPoint const& Position() const; /*! The absolute position of the pointer when event occured. */ VDKPoint AbsPosition() const; /*! The pressed button (int gtk enumeration) */ unsigned int Button() const; /*! Reports the modifiers active at the moment the event occured */ unsigned int Modifier() const; }; /** This event tells you if an VDKObject has lost or got the * mousefocus. In GDK-Terms this would be a GdkEventCrossing. * @see VDKMouseEvent * @see VDKFocusEvent */ class VDKMouseFocusEvent : public VDKMouseEvent, public VDKFocusEvent { public: VDKMouseFocusEvent(const GdkEventCrossing * eve, VDKObject* obj) : VDKMouseEvent(eve,obj) , VDKFocusEvent(eve->focus) {} }; /** This event tells you if an VDKObject has lost or got the * keyboradfocus. In GDK-Terms this would be a GdkEventFocus. * @see VDKFocusEvent */ class VDKKeyFocusEvent : public VDKAnyEvent, public VDKFocusEvent { public: VDKKeyFocusEvent(const GdkEventFocus* eve, VDKObject* obj) : VDKAnyEvent((const GdkEvent*) eve,obj) , VDKFocusEvent((eve->in==TRUE) ? true : false){} }; /** This event telles you which area of an object has to be redrawn. Normaly it will be emited when a region of an object has to be redrawn (in this case GdkEventExpose is the source of information) or when the entire Object has to be redrawn (so an underlying GDK_UNMAP was responsible for this). This event is also emited when you resize an object. */ class VDKPaintEvent : public VDKAnyEvent { VDKRect _area; public: VDKPaintEvent(const GdkEventExpose* eve, VDKObject* sender) : VDKAnyEvent((const GdkEvent*) eve,sender) , _area(eve->area.x, eve->area.y, eve->area.width, eve->area.height){} /** Returns area to be repainted */ const VDKRect& Area() const{return _area;} }; /** Indicates a change of the widgets geometry. So typical situations this event comes into play are a resize-operation or a translation on the desktop. */ class VDKGeometryEvent : public VDKAnyEvent { VDKRect _area; public: VDKGeometryEvent(const GdkEventConfigure* eve, VDKObject* sender) : VDKAnyEvent((const GdkEvent*) eve,sender) , _area(eve->x, eve->y,eve->width, eve->height){} const VDKRect& Area() const{return _area;} }; /** To differ between different states of visibility of an object. */ typedef enum { FULLY_VISIBLE, PARTIAL_VISIBLE, NOT_VISIBLE } VDKMapState; /** This event is emitted whenever the widget toggels it's state from being hidden or unhidden or partial hidden. This information is stored with the help of VDKVisibilityState. */ class VDKMapEvent : public VDKAnyEvent { VDKMapState _state; public: VDKMapEvent(const GdkEventVisibility* eve, VDKObject* sender); VDKMapState State() const{return _state;} }; /** For textselections as usual. */ // class VDKSelectionEvent : public VDKAnyEvent // { // GdkAtom _id_sel; // GdkAtom _id_prop; // VDKString* _str_sel; // perform lookup only when needed // VDKString* _str_prop; // public: // VDKSelectionEvent(const GdkEventSelection* sel, VDKObject* sender) // : VDKAnyEvent(eve,sender), _id_sel(eve->selection) // , _id_prop(eve->property), _str_sel(NULL), _str_prop(NULL) {} // ~VDKSelectionEvent(); // VDKString Selection() const; // const char* CSelection() const; // VDKString Property() const; // const char* CProperty() const; // }; // class VDKDnDEvent : public VDKAnyEvent // { // }; #endif /* !_sigc_events_h_ */ vdk-2.4.0/vdk/sigc_eventsignals.h0000644000000000000000000002563607337124607012421 /* -*- c++ -*- */ #ifndef _sigc_eventsignals_h_ #define _sigc_eventsignals_h_ #ifdef USE_SIGCPLUSPLUS #include #include using namespace SigC; /*! \class VDKRawEventSignal \brief raw event ala gdk This signal we deliver every GdkEvent the object receives directly to you. Normaly you should use the specialised eventsignals delivering you a more comfortable VDKEvent (what uses much less resources and is typesafe). */ class VDKRawEventSignal : public VDKSignal1, private VDKNotCopyAble { public: VDKRawEventSignal(VDKObject*); ~VDKRawEventSignal(); Connection connect(const Slot1&); Connection connect(const Slot2&); void disconnect(Connection&); private: VDKObject* _obj; guint _handler_id; static gint event_handler(GtkObject* wid, GdkEvent* eve, gpointer obj); }; /* here generic eventsignals begin */ /* not used in user-land */ typedef enum{ BUTTON_PRESS, BUTTON_RELEASE, FOCUS_KEY_IN, FOCUS_KEY_OUT, FOCUS_POINTER_IN, FOCUS_POINTER_OUT, GEOMETRY, KEY_PRESS, KEY_RELEASE, MAPEVENT, PAINT, POINTER_MOVE, POINTER_PRESSED } W2_TraitEnum; /** Specify on what of the following event-subtypes you are interested: * FULLY_VISIBILE: The object got completely unmaped * PRATIAL_VISIBLE: The object got partialy maped * NOT_VISBLE: The object got completely maped */ // typedef enum{ // ME_FULLY_VISIBLE, // ME_PARTIAL_VISIBLE, // ME_NOT_VISIBLE // } VDKMapEventFilter; typedef VDKMapState VDKMapEventFilter; /*! * \enum VDKButtonEventFilter * Specify on what of the following event-subtypes you are interested: * \arg BE_RELEASE Mousebutton was released * \arg BE_PRESS Mousebutton was pressed * \arg BE_CLICK2 Double click * \arg BE_CLICK3 Triple click * \sa VDKButtonEvent */ typedef enum{ BE_RELEASE, BE_PRESS, BE_CLICK2, BE_CLICK3 } VDKButtonEventFilter; /*! * \enum VDKKeyEventFilter * Specify on what of the following event-subtypes you are interested: * \arg KE_RELEASE: key was released * \arg KE_PRESS: key was pressed */ typedef enum{ KE_RELEASE, KE_PRESS } VDKKeyEventFilter; /** Specify on what of the following event-subtypes you are interested: * FOCUS_IN: Object got this kind of focus * FOCUS_OUT: Object lost this kind of focus * @see VDKKeyFocus * @see VDKMouseFocus */ typedef enum{ FE_IN, FE_OUT } VDKFocusEventFilter; /** Specify on what of the following event-subtypes you are interested: * ALL: Every pointer move, regardless of any modifier's state * PRESSED: Register pointer moves only while any modifier was pressed * @see VDKPointerSignal */ typedef enum{ PE_ALL, PE_PRESSED } VDKPointerEventFilter; /* ******************************************************************* * ******* Different Trait classes for template instantiation ******* * ******************************************************************/ template class W2_Trait { public: typedef GdkEvent ge_type; // Subclass of GdkEvent to dispatch typedef int T_vcmp; // Filter-parameter-type typedef GdkEventType T_gcmp; // Event-filter-type (must be // convertible to int!) static const char* signame; // Name to connect static T_gcmp Field(GdkEvent* eve) {return eve->type;} }; template class W2_Trait { public: typedef GdkEvent ge_type; typedef int T_vcmp; typedef GdkEventType T_gcmp; static const int s_count; static const char* signame; static T_gcmp Field(GdkEvent* eve); static const T_vcmp EN1; static const T_gcmp GN1; }; template class W2_Trait { public: typedef GdkEvent ge_type; typedef int T_vcmp; typedef GdkEventType T_gcmp; static const int s_count; static const char* signame; static T_gcmp Field(GdkEvent* eve); static const T_vcmp EN1; static const T_gcmp GN1; static const T_vcmp EN2; static const T_gcmp GN2; }; template class W2_Trait { public: typedef GdkEvent ge_type; // Subclass of GdkEvent to dispatch typedef int T_vcmp; // Filter-parameter-type typedef GdkEventType T_gcmp; // Event-filter-type (must be // convertible to int!) static const int s_count; // Anzahl der Signal-Objekte static const char* signame; // Name to connect static T_gcmp Field(GdkEvent* eve) {return eve->type;} static const T_vcmp EN1; static const T_gcmp GN1; static const T_vcmp EN2; static const T_gcmp GN2; static const T_vcmp EN3; static const T_gcmp GN3; }; #include /* ******************************************************************* * * DirectEventSignal * * *Simple Eventsignal, has one connection and no filtering parameter* * ******************************************************************/ // Second parameter to reduce number of traits template class DirectEventSignal : public VDKSignal1 { int _handler_id; static void event_handler(GtkObject*, GdkEvent*, gpointer obj); VDKObject* _sender; typedef W2_Trait T_trait; public: DirectEventSignal(VDKObject* sender) : _handler_id(0),_sender(sender) {} ~DirectEventSignal(); Connection connect(const Slot2&); Connection connect(const Slot1&); void disconnect(Connection& con); }; /* ******************************************************************* * * SignalWrapperStage2Base template * * * Provides basefunctionality for SignalWrapperStage2-class * * ******************************************************************/ template class SignalWrapperStage2Base { typedef W2_Trait Trait; typedef W2_Trait::T_vcmp T_vcmp; typedef W2_Trait::T_gcmp T_gcmp; int _handler_id; // holds gdksigc-connection id VDKObject* _sender; VDKSignal1 sig_vec[s_count]; static void event_handler(GtkObject*, GdkEvent*, gpointer obj); public: SignalWrapperStage2Base(VDKObject* obj) : _handler_id(0), _sender(obj) {} ~SignalWrapperStage2Base(); // berprft alle internen Verbindungen und hebt ggf. die // gtksigc-Verbindung auf. void cleanup(); void disconnect(Connection&); Connection connect(const Slot2&, T_vcmp spec); Connection connect(const Slot1&, T_vcmp spec); bool empty()const; bool responsible(T_vcmp spec) const; }; template class SignalWrapperStage2 { typedef W2_Trait Trait; typedef Trait::T_vcmp T_vcmp; typedef Trait::T_gcmp T_gcmp; public: SignalWrapperStage2(VDKObject* obj); }; /* Acts as factroy at the same time */ template class SignalWrapperStage2 : public SignalWrapperStage2Base > { typedef W2_Trait Trait; typedef W2_Trait::T_vcmp T_vcmp; typedef W2_Trait::T_gcmp T_gcmp; friend class SignalWrapperStage2Base >; static int vdk2vec(T_vcmp); static int eve2vec(GdkEvent* eve); public: /* ??? */ SignalWrapperStage2(VDKObject* obj) : SignalWrapperStage2Base >(obj) {} }; template class SignalWrapperStage2 : public SignalWrapperStage2Base > { typedef W2_Trait myTrait; typedef myTrait::T_vcmp T_vcmp; typedef myTrait::T_gcmp T_gcmp; friend class SignalWrapperStage2Base >; static int vdk2vec(T_vcmp); static int eve2vec(GdkEvent* eve); public: /* ??? */ SignalWrapperStage2(VDKObject* obj) : SignalWrapperStage2Base >(obj) {} }; template class SignalWrapperStage2 : public SignalWrapperStage2Base > { typedef W2_Trait myTrait; typedef myTrait::T_vcmp T_vcmp; typedef myTrait::T_gcmp T_gcmp; friend class SignalWrapperStage2Base >; static int vdk2vec(T_vcmp); static int eve2vec(GdkEvent* eve); public: /* ??? */ SignalWrapperStage2(VDKObject* obj) : SignalWrapperStage2Base >(obj) {} }; /* ************************************************************************** * *** SignalWrapperStage1M2 *** * *************************************************************************/ template class SignalWrapperStage1M2 { private: typedef W2_Trait Trait1; typedef W2_Trait Trait2; typedef Trait1::T_vcmp T_vcmp; SignalWrapperStage2 swrap1; SignalWrapperStage2 swrap2; public: SignalWrapperStage1M2(VDKObject* obj) : swrap1(obj), swrap2(obj){} bool empty() const; Connection connect(const Slot2& sl, T_vcmp spec); Connection connect(const Slot1& sl, T_vcmp spec); void disconnect(Connection& con); }; /* ************************************************************************ * *** Definition of different signals *** * ***********************************************************************/ typedef SignalWrapperStage1M2 VDKButtonSignal; typedef SignalWrapperStage1M2 VDKKeyFocusSignal; typedef SignalWrapperStage1M2 VDKPointerFocusSignal; typedef SignalWrapperStage1M2 VDKKeySignal; typedef SignalWrapperStage1M2 VDKPointerSignal; typedef SignalWrapperStage2 VDKMapSignal; typedef DirectEventSignal VDKGeometrySignal; typedef DirectEventSignal VDKPaintSignal; #endif /* USE_SIGCPLUSPLUS */ #endif /* !_sigc_eventsignals_h_ */ vdk-2.4.0/vdk/sigc_eventtraits.h0000644000000000000000000001050707206652572012260 /* -*- c++ -*- */ #ifndef _sigc_eventtraits_h_ #define _sigc_eventtraits_h_ /**** This file has to be excluded from doxygen ****/ /* The static memebers are defined in this file,In order to not confuse the linker, t */ #define MAKE_EVENTTRAIT_1_OPEN(ID,GETYPE,VCMP,GCMP) \ template<>\ class W2_Trait\ {\ public:\ typedef GETYPE ge_type;\ typedef VCMP T_vcmp;\ typedef GCMP T_gcmp;\ static const T_vcmp EN1;\ static const T_gcmp GN1;\ static const char* const signame;\ static T_gcmp Field(GdkEvent* eve);\ }; #define MAKE_EVENTTRAIT_2_OPEN(ID,GETYPE,VCMP,GCMP) \ template<>\ class W2_Trait\ {\ public:\ typedef GETYPE ge_type;\ typedef VCMP T_vcmp;\ typedef GCMP T_gcmp;\ static const T_vcmp EN1;\ static const T_gcmp GN1;\ static const T_vcmp EN2;\ static const T_gcmp GN2;\ static const char* const signame;\ static T_gcmp Field(GdkEvent* eve);\ }; #define MAKE_EVENTTRAIT_3_OPEN(ID,GETYPE,VCMP,GCMP) \ template<>\ class W2_Trait\ {\ public:\ typedef GETYPE ge_type;\ typedef VCMP T_vcmp;\ typedef GCMP T_gcmp;\ static const T_vcmp EN1;\ static const T_gcmp GN1;\ static const T_vcmp EN2;\ static const T_gcmp GN2;\ static const T_vcmp EN3;\ static const T_gcmp GN3;\ static const char* const signame;\ static T_gcmp Field(GdkEvent* eve);\ }; #define MAKE_EVENTTRAIT_CLOSE_DEFAULT(ID) \ inline \ W2_Trait::T_gcmp W2_Trait::Field(GdkEvent* eve){return eve->type;} /* ok, here we go .. */ // BUTTON_PRESS MAKE_EVENTTRAIT_3_OPEN(BUTTON_PRESS,GdkEventButton,VDKButtonEventFilter,GdkEventType) MAKE_EVENTTRAIT_CLOSE_DEFAULT(BUTTON_PRESS) // BUTTON_RELEASE MAKE_EVENTTRAIT_1_OPEN(BUTTON_RELEASE,GdkEventButton,VDKButtonEventFilter,\ GdkEventType) MAKE_EVENTTRAIT_CLOSE_DEFAULT(BUTTON_RELEASE) // FOCUS_KEY_IN MAKE_EVENTTRAIT_1_OPEN(FOCUS_KEY_IN, GdkEventFocus, VDKFocusEventFilter,\ int) inline int W2_Trait::Field(GdkEvent* eve) {return reinterpret_cast(eve)->in;} // FOCUS_KEY_OUT MAKE_EVENTTRAIT_1_OPEN(FOCUS_KEY_OUT, GdkEventFocus, VDKFocusEventFilter,\ int) inline int W2_Trait::Field(GdkEvent* eve) {return reinterpret_cast(eve)->in;} // FOCUS_POINTER_IN MAKE_EVENTTRAIT_1_OPEN(FOCUS_POINTER_IN,GdkEventCrossing,VDKFocusEventFilter,\ GdkEventType) MAKE_EVENTTRAIT_CLOSE_DEFAULT(FOCUS_POINTER_IN) // FOCUS_POINTER_OUT MAKE_EVENTTRAIT_1_OPEN(FOCUS_POINTER_OUT,GdkEventCrossing,VDKFocusEventFilter,\ GdkEventType) MAKE_EVENTTRAIT_CLOSE_DEFAULT(FOCUS_POINTER_OUT) // GEOMETRY (for direct signal) MAKE_EVENTTRAIT_1_OPEN(GEOMETRY,GdkEventConfigure,int,int) // PAINT (also direct signal) MAKE_EVENTTRAIT_1_OPEN(PAINT,GdkEventExpose,int,int) // KEY_PRESS MAKE_EVENTTRAIT_1_OPEN(KEY_PRESS,GdkEventKey,VDKKeyEventFilter,\ GdkEventType) MAKE_EVENTTRAIT_CLOSE_DEFAULT(KEY_PRESS) // KEY_RELEASE MAKE_EVENTTRAIT_1_OPEN(KEY_RELEASE,GdkEventKey,VDKKeyEventFilter,\ GdkEventType) MAKE_EVENTTRAIT_CLOSE_DEFAULT(KEY_RELEASE) // POINTER_PRESSED MAKE_EVENTTRAIT_1_OPEN(POINTER_PRESSED,GdkEventMotion,VDKPointerEventFilter,\ bool) inline bool W2_Trait::Field(GdkEvent* eve) {return (reinterpret_cast(eve)->state != 0);} // POINTER_MOVE MAKE_EVENTTRAIT_1_OPEN(POINTER_MOVE,GdkEventMotion,VDKPointerEventFilter,\ bool) inline bool W2_Trait::Field(GdkEvent* eve) {return true;} // MAP /* MAKE_EVENTTRAIT_3_OPEN(MAPEVENT, GdkEventVisibility, "visibility_notify_event",\ FULLY_VISIBLE,GDK_VISIBILITY_UNOBSCURED,\ NOT_VISIBLE,GDK_VISIBILITY_FULLY_OBSCURED,\ PARTIAL_VISIBLE, GDK_VISIBILITY_PARTIAL) static int Field(GdkEvent* eve) {return reinterpret_cast(eve)->state;} }; */ class W2_Trait { public: typedef GdkEventVisibility ge_type; typedef VDKMapEventFilter T_vcmp; typedef int T_gcmp; static const char* const signame; static const T_vcmp EN1; static const int GN1; static const T_vcmp EN2; static const int GN2; static const T_vcmp EN3; static const int GN3; static int Field(GdkEvent* eve); }; #endif /* !_sigc_eventtraits_h_ */ vdk-2.4.0/vdk/vdkgnomeapp.h0000644000000000000000000000375407206652573011225 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef GNOME_APPLICATION_H #define GNOME_APPLICATION_H #if HAVE_GNOME #include #include /*! \class VDKGnomeApplication \brief Provides a gnome-aware application. This class encapsulate most of behaviours of a gnome-aware application. Initialize gnome libs as well. \par TIP If your application uses one of the gnome widget you must use this class. Plain VDKApplication using a gnome widget doesn't work. */ class VDKGnomeApplication: public VDKApplication { protected: char* _app_id,*_title; public: /*! Contsructor \param id application id \param title application title \param argc arguments counter \param argv arguments array */ VDKGnomeApplication(char* app_id, char* title, int* argc, char** argv); /*! Destructor */ ~VDKGnomeApplication(); /*! Returns application id */ char* AppId() { return _app_id; } /*! Returns application title */ char* AppTitle() { return _title; } }; #endif #endif vdk-2.4.0/vdk/vdkgnomeform.h0000644000000000000000000000363107206652573011402 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef GNOME_FORMS_H #define GNOME_FORMS_H #if HAVE_GNOME #include #include #include /*! \class VDKGnomeForm \brief Provides an application main form for gnome apps. This class encapsulate most of behaviour of a gnome-aware application main form. Use this class as your application main form. */ class VDKGnomeForm: public VDKForm { public: /*! Constructor \param app owner gnome application \param title main form title \param mode either v_box or h_box */ VDKGnomeForm(VDKGnomeApplication* app, char* title = (char*) NULL, int mode = v_box); virtual void Add(VDKObject* obj, int justify = l_justify, int expand = TRUE, int fill = TRUE , int padding = 1); virtual ~VDKGnomeForm(); /*! for vdkbuilder only. \internal */ VDKGnomeForm(VDKForm* owner, char* app_id, char* title = NULL, int mode = v_box); }; #endif #endif vdk-2.4.0/vdk/vdkgnomeappbar.h0000644000000000000000000000624607206652575011713 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef GNOME_APPBAR_H #define GNOME_APPBAR_H #if HAVE_GNOME #include #include class VDKForm; /*! \class VDKGnomeAppBar \brief provides an application status bar This class wraps gnome_application_bar widget. It works like VDKStatusbar but having an optional inner progress bar. Furthermore status bar can be interactive (planned in gnome future). */ class VDKGnomeAppBar: public VDKObject { VDKObject* progress; public: /*! Set status bar */ VDKReadWriteValueProp Status; /*! Set status bar default */ VDKReadWriteValueProp Default; /*! Set progress bar value */ VDKReadWriteValueProp Progress; /*! Constructor \param woner \param has_progress \param has_status should be always true \param interact (unused, reserved for future use) */ VDKGnomeAppBar(VDKForm* owner, bool has_progress = true, bool has_status = true, GnomePreferencesType interact = GNOME_PREFERENCES_USER); /*! Destructor */ virtual ~VDKGnomeAppBar(); /*! Pushes a on status bar \param status status message */ void Push(char* status) { gnome_appbar_push(GNOME_APPBAR(widget),status); } /*! Pops status bar */ void Pop() { gnome_appbar_pop(GNOME_APPBAR(widget)); } /*! Clear status bar */ void Clear() { gnome_appbar_clear_stack(GNOME_APPBAR(widget)); } /*! Refreshes statsu bar */ void Refresh() { gnome_appbar_refresh(GNOME_APPBAR(widget)); } void SetStatus(char* status) { gnome_appbar_set_status(GNOME_APPBAR(widget),status); } void SetDefault(char* default_status) { gnome_appbar_set_default(GNOME_APPBAR(widget),default_status); } void SetProgress(float value) { if(progress) gtk_progress_set_percentage( GTK_PROGRESS(progress->Widget()),value); } float GetProgress() { if(progress) return gtk_progress_get_current_percentage( GTK_PROGRESS(progress->Widget())); else return 0.0; } }; #endif #endif vdk-2.4.0/vdk/vdkgnomededit.h0000644000000000000000000000704107206652576011532 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef GNOME_DATE_EDIT_H #define GNOME_DATE_EDIT_H #if HAVE_GNOME #include #include #include class VDKForm; /*! \class VDKGnomeDateEdit \brief Provides a gnome date edit VDKGnomeDateEdit acts like a normal entry widget, but can show a "time" field as well. A button is added to the widget that can be used to pop up a calendar widget. Actually support english date format only (mmddyyyy), there are plans to support also european format in the next future. */ class VDKGnomeDateEdit: public VDKObject { protected: VDKObjectSignal s_activated; void ConnectSignals(); static int FocusInEvent(GtkWidget *, GdkEventFocus *, gpointer wid); static int FocusOutEvent(GtkWidget *, GdkEventFocus *, gpointer wid); static void HandleDateChange(GtkWidget *wid, gpointer gp); static void HandleTimeChange(GtkWidget *wid, gpointer gp); // either mmddyyyy or ddmmyyyy // reserved for future use, // doesn't work now, waiting for i18n // of gnome date edit widget. int mode; public: /*! Sets/gets absolute time in time_t format */ VDKReadWriteValueProp AbsoluteTime; /*! Sets/gets date as calendardate object. */ VDKReadWriteValueProp Date; /*! Constructor \param owner \param the_time initializing date value \param show_time \param mode either mmddyyyy or ddmmyyyy (only the former supported) */ VDKGnomeDateEdit(VDKForm* owner, time_t the_time = (time_t) NULL, bool show_time = false, bool format24 = true, int mode = mmddyyyy); /*! Constructor \param owner \param the_date initializing date string, should be in "mm/dd/yyyy" format. \param show_time \param mode either mmddyyyy or ddmmyyyy (actually unused and forced to be mmddyyyy) */ VDKGnomeDateEdit(VDKForm* owner, char* the_date = NULL, bool show_time = false, bool format24 = true, int mode = mmddyyyy); /*! Destructor */ virtual ~VDKGnomeDateEdit(); /*! Sets absolute time \param t time_t value */ void SetAbsoluteTime(time_t t) { gnome_date_edit_set_time (GNOME_DATE_EDIT(Widget()), t); } /*! Gets absolute time */ time_t GetAbsoluteTime() { return gnome_date_edit_get_date (GNOME_DATE_EDIT(Widget())); } /*! Set date \param d calendardate reference. */ void SetDate(calendardate d); /*! Gets date */ calendardate GetDate(); }; #endif #endif vdk-2.4.0/vdk/vdkgnomeentry.h0000644000000000000000000000407307206652576011604 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef VDK_GNOME_ENTRY_H #define VDK_GNOME_ENTRY_H #if HAVE_GNOME #include #include class VDKForm; /*! \class VDKGnomeEntry \brief Provides a gnome entry VDKGnomeEntry acts like a VDKCombo with an "history" list filled with user entries. */ class VDKGnomeEntry: public VDKCombo { protected: public: /*! Sets history id, setting history to NULL clears any previous history data */ VDKReadWriteValueProp History; /*! Sets max number of history items. (defaults to 10) */ VDKReadWriteValueProp MaxSaved; /*! Constructor \param owner \param def default value \param history setting history to NULL clear any previous data */ VDKGnomeEntry(VDKForm* owner, char* def = (char*) NULL, char* history = (char*) NULL ); /*! Destructor */ virtual ~VDKGnomeEntry(); void SetHistory(char* history) { gnome_entry_set_history_id(GNOME_ENTRY(widget),history); } void SetMaxSaved(unsigned int max) { gnome_entry_set_max_saved(GNOME_ENTRY(widget),max); } }; #endif #endif vdk-2.4.0/vdk/vdkfileicondlg.h0000644000000000000000000000350607206652600011660 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef FILEICONDIALOG_H #define FILEICONDIALOG_H #include #include #include /*! \class VDKFileIconDialog \brief Provides a file dialog with file icons \par Usage: \code VDKString selection; VDKFileIconDialog* dlg = new VDKFileIconDialog( this, &selection, "title" ); dlg->ShowModal(); printf("\nfile selection:%s", !selection.isNull() ? (char*) selection : "nihil"); fflush(stdout); \endcode */ class VDKFileIconDialog: public VDKForm { static void ok_or_cancel_clicked(GtkWidget *widget, gpointer data); protected: VDKString *selection; public: VDKFileIconDialog(VDKForm* owner, VDKString* selection, char* title = ""); virtual ~VDKFileIconDialog(); virtual bool CanClose(); virtual void Setup(void); }; #endif vdk-2.4.0/vdk/vdkdockable.h0000644000000000000000000000420607455275034011153 /* * =========================== * VDK Visual Development Kit * Version 2.0.2 * April 2002 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _vdkdockable_h #define _vdkdockable_h #include #include #define docked_signal 2048 #define undocked_signal 2049 class VDKDockerBoxForm; /*! \class VDKDockerBox \brief Provides a box that can be detached from his container and attached (docked) into a separate form. */ class VDKDockerBox : public VDKBox { void Dock (); void Undock (); int justify, fill, expand, padding; friend class VDKObjectContainer; friend class VDKDockerBoxForm; void SetDocked (bool flag); bool GetDocked (); protected: VDKDockerBoxForm* dock_form; public: /*! docks undocks the box */ VDKReadWriteValueProp Docked; /*! constructor \param owner the owner form \param mode either vertical or horizontal box */ VDKDockerBox (VDKForm* owner, int mode = v_box); /*! destructor */ virtual ~VDKDockerBox (); VDKDockerBoxForm* DockForm() { return dock_form; } }; class VDKDockerBoxForm: public VDKForm { friend class VDKDockerBox; VDKObjectContainer* box_from; VDKDockerBox* docker; VDKDockerBoxForm (VDKForm* owner, char* title = NULL); ~VDKDockerBoxForm (); void Setup (); bool CanClose (); }; #endif vdk-2.4.0/vdk/Makefile.am0000644000000000000000000001004410047643756010563 lib_LTLIBRARIES = libvdk.la vdkincludedir = $(includedir)/vdk2/vdk # gtkcombobutton.h # FileTreeDialog.h # dirtree.h # gtkdatabox.h # gtkeditor.h # gtksheet.h # gtkitementry.h\ # gtkdirtree.h # gtkfilelist.h # gtkiconfilesel.h # gtkiconlist.h # coolbar.h # coolbutton.h # vdkdatabox.h # panedform.h # scrolledForm.h # vdkgrid.h # vdkcolorbrowser.h # label_togglebutton.h # pix_togglebutton.h # togglebutton.h # regex.h # gtkextext.h # messagebox.h # text.h # vdkregex.h # vdktextview.h # vdkpacker.h vdkinclude_HEADERS = \ regex.h\ gtksourcebuffer.h\ gtktextsearch.h \ gtksourcetag.h\ gtksourceview.h\ gtkundomanager.h \ gtksourceview-marshal.h\ gtktextregion.h\ vdkeditor.h\ \ gtkdatabox.h\ gtkdataboxmarshal.h\ \ FileDialog.h\ FileSaveAsDialog.h\ abstract_button.h\ application.h\ boxes.h\ button.h\ canvas.h\ chart.h\ checkbutton.h\ colors.h\ combo.h\ container.h\ dlist.h\ entry.h\ evbrowser.h\ evhandle.h\ evlisthandle.h\ evobjhandle.h\ filedlg.h\ fixed.h\ forms.h\ frame.h\ handlebox.h\ image.h\ label.h\ menu.h\ messagebox.h\ notebook.h\ numentry.h\ paned.h\ panelbar.h\ pixmaps.h\ progressbar.h\ radiobtngroup.h\ rawpixbuf.h\ rawobj.h\ rawpixmap.h\ scrolled.h\ separator.h\ siglisthandle.h\ slider.h\ spins.h\ statusbar.h\ tables.h\ timer.h\ toolbar.h\ tooltips.h\ value_sem_list.h\ vdk.h\ vdkarray.h\ vdkbtrees.h\ vdkcalendar.h\ vdkclist.h\ vdkcomboentry.h\ vdkcsortlist.h\ vdkctree.h\ vdkcursor.h\ vdkcustom.h\ vdkcustombutton.h\ vdkdatabox.h\ vdkdate.h\ vdkdrawarea.h\ vdkdnd.h\ vdkfont.h\ vdkfeatures.h\ vdkfilechooser.h\ vdkheap.h\ vdkhlbutton.h\ vdkhlbuttonbar.h\ vdkinchannel.h\ vdkobj.h\ vdkprops.h\ vdkstring.h\ vdktextview.h\ vdktreeview.h\ vdkthread.h\ vdktypes.h\ vdkutils.h\ widcontain.h\ eventbox.h\ sigc_addon.h\ sigc_events.h\ sigc_eventsignals.h\ sigc_eventtraits.h\ vdkgnomeapp.h\ vdkgnomeform.h\ vdkgnomeappbar.h\ vdkgnomededit.h\ vdkgnomeentry.h\ vdkfileicondlg.h\ vdkdockable.h # coolbar.cc # coolbutton.cc # FileTreeDialog.cc # dirtree.c # gtkdatabox.c # vdkdatabox.cc # gtksheet.c # gtkitementry.c # gtkdirtree.c # gtkfileicons.c # gtkfilelist.c # gtkiconfilesel.c # gtkiconlist.c # vdkgrid.cc # vdkfileicondlg.cc # panedform.cc # scrolledForm.cc # evbrowser.cc # vdkcolorbrowser.cc # label_togglebutton.cc # pix_togglebutton.cc # togglebutton.cc # regex.c # gtkextext.c # messagebox.cc # text.cc # vdkregex.cc # vdkpacker.cc libvdk_la_SOURCES = \ regex.c\ gtksourcebuffer.c\ gtktextsearch.c \ gtksourcetag.c\ gtksourceview.c\ gtkundomanager.c \ gtksourceview-marshal.c\ gtktextregion.c\ vdkeditor.cc\ \ gtkdatabox.c\ gtkdataboxmarshal.c\ \ abstract_button.cc\ application.cc\ boxes.cc\ button.cc\ canvas.cc\ checkbutton.cc\ colors.cc\ entry.cc\ filedlg.cc\ fixed.cc\ forms.cc\ frame.cc\ handlebox.cc\ image.cc\ label.cc\ menu.cc\ msgdialog.cc \ notebook.cc\ numentry.cc\ paned.cc\ pixdata.cc\ pixmaps.cc\ progressbar.cc\ radiobtngroup.cc\ rawobj.cc\ rawpixbuf.cc\ rawpixmap.cc\ scrolled.cc\ separator.cc\ slider.cc\ spins.cc\ statusbar.cc\ tables.cc\ timer.cc\ toolbar.cc\ tooltips.cc\ vdkcalendar.cc\ vdkcomboentry.cc\ vdkclist.cc\ vdkcsortlist.cc\ vdkctree.cc\ vdkcustom.cc\ vdkcustombutton.cc\ vdkdate.cc\ vdkdatabox.cc\ vdkdrawarea.cc\ vdkdnd.cc\ vdkfilechooser.cc\ vdkinchannel.cc\ vdkfont.cc\ vdkhlbutton.cc\ vdkhlbuttonbar.cc\ vdkobj.cc\ vdkstring.cc\ vdktextview.cc\ vdktreeview.cc\ vdkthread.cc\ widcontain.cc\ eventbox.cc\ vdkdockable.cc\ \ FileDialog.cc\ FileSaveAsDialog.cc\ chart.cc\ combo.cc\ folder_collapsed.xpm\ folder_expanded.xpm\ panelbar.cc\ \ vdkgnomeapp.cc\ vdkgnomeform.cc\ vdkgnomeappbar.cc\ vdkgnomededit.cc\ vdkgnomeentry.cc libvdk_la_LDFLAGS = \ -version-info $(LT_VDK_CURRENT):$(LT_VDK_REVISION):$(LT_VDK_AGE) # -release $(GTK_RELEASE) INCLUDES = -I$(top_srcdir)/include @INCLUDES@ CXXFLAGS = @CXXFLAGS@ LDFLAGS = $(GTK_CFLAGS) #$(SIGC_CFLAGS) LIBS = $(GTK_LIBS) $(SIGC_LIBS) EXTRA_DIST = \ rgb.cc\ sigc_events.cc\ sigc_eventsignals.cc\ sigc_eventtraits.cc vdk-2.4.0/vdk/vdkfeatures.h.in0000644000000000000000000000316707206652165011635 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 * * vdkfeatures.h added by Salmaso Raffaele 1999-01-20 */ #ifndef _vdkfeatures_h #define _vdkfeatures_h #define VDK_VERSION_MAJOR @VDK_VERSION_MAJOR@ #define VDK_VERSION_MINOR @VDK_VERSION_MINOR@ #define VDK_VERSION_MICRO @VDK_VERSION_MICRO@ #define VDKCOMPO_VERSION_MAJOR @VDKCOMPO_VERSION_MAJOR@ #define VDKCOMPO_VERSION_MINOR @VDKCOMPO_VERSION_MINOR@ #define VDKCOMPO_VERSION_MICRO @VDKCOMPO_VERSION_MICRO@ #define VDK_MAJOR_VERSION @VDK_VERSION_MAJOR@ #define VDK_MINOR_VERSION @VDK_VERSION_MINOR@ #define VDK_MICRO_VERSION @VDK_VERSION_MICRO@ #define VDK_REVISION @VDK_VERSION_MICRO@ #define VDK_VERSION @VDK_VERSION@ #define VDKCOMPO_VERSION @VDKCOMPO_VERSION@ #endif vdk-2.4.0/vdk/regex.c0000644000000000000000000047370207472530646010024 /* Extended regular expression matching and search library, version 0.12. (Implements POSIX draft P10003.2/D11.2, except for internationalization features.) Copyright (C) 1993 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* AIX requires this to be the first thing in the file. */ #if defined (_AIX) && !defined (REGEX_MALLOC) #pragma alloca #endif #define _GNU_SOURCE /* We need this for `regex.h', and perhaps for the Emacs include files. */ #include #ifdef HAVE_CONFIG_H #include "config.h" #endif /* The `emacs' switch turns on certain matching commands that make sense only in Emacs. */ #ifdef emacs #include "lisp.h" #include "buffer.h" #include "syntax.h" /* Emacs uses `NULL' as a predicate. */ #undef NULL #else /* not emacs */ /* We used to test for `BSTRING' here, but only GCC and Emacs define `BSTRING', as far as I know, and neither of them use this code. */ #if HAVE_STRING_H || STDC_HEADERS #include #ifndef bcmp #define bcmp(s1, s2, n) memcmp ((s1), (s2), (n)) #endif #ifndef bcopy #define bcopy(s, d, n) memcpy ((d), (s), (n)) #endif #ifndef bzero #define bzero(s, n) memset ((s), 0, (n)) #endif #else #include #endif #ifdef STDC_HEADERS #include #else char *malloc (); char *realloc (); #endif /* Define the syntax stuff for \<, \>, etc. */ /* This must be nonzero for the wordchar and notwordchar pattern commands in re_match_2. */ #ifndef Sword #define Sword 1 #endif #ifdef SYNTAX_TABLE extern char *re_syntax_table; #else /* not SYNTAX_TABLE */ /* How many characters in the character set. */ #define CHAR_SET_SIZE 256 static char re_syntax_table[CHAR_SET_SIZE]; static void init_syntax_once () { register int c; static int done = 0; if (done) return; bzero (re_syntax_table, sizeof re_syntax_table); for (c = 'a'; c <= 'z'; c++) re_syntax_table[c] = Sword; for (c = 'A'; c <= 'Z'; c++) re_syntax_table[c] = Sword; for (c = '0'; c <= '9'; c++) re_syntax_table[c] = Sword; re_syntax_table['_'] = Sword; done = 1; } #endif /* not SYNTAX_TABLE */ #define SYNTAX(c) re_syntax_table[c] #endif /* not emacs */ /* Get the interface, including the syntax bits. */ #include "regex.h" /* isalpha etc. are used for the character classes. */ #include #ifndef isascii #define isascii(c) 1 #endif #ifdef isblank #define ISBLANK(c) (isascii (c) && isblank (c)) #else #define ISBLANK(c) ((c) == ' ' || (c) == '\t') #endif #ifdef isgraph #define ISGRAPH(c) (isascii (c) && isgraph (c)) #else #define ISGRAPH(c) (isascii (c) && isprint (c) && !isspace (c)) #endif #define ISPRINT(c) (isascii (c) && isprint (c)) #define ISDIGIT(c) (isascii (c) && isdigit (c)) #define ISALNUM(c) (isascii (c) && isalnum (c)) #define ISALPHA(c) (isascii (c) && isalpha (c)) #define ISCNTRL(c) (isascii (c) && iscntrl (c)) #define ISLOWER(c) (isascii (c) && islower (c)) #define ISPUNCT(c) (isascii (c) && ispunct (c)) #define ISSPACE(c) (isascii (c) && isspace (c)) #define ISUPPER(c) (isascii (c) && isupper (c)) #define ISXDIGIT(c) (isascii (c) && isxdigit (c)) #ifndef NULL #define NULL 0 #endif /* We remove any previous definition of `SIGN_EXTEND_CHAR', since ours (we hope) works properly with all combinations of machines, compilers, `char' and `unsigned char' argument types. (Per Bothner suggested the basic approach.) */ #undef SIGN_EXTEND_CHAR #if __STDC__ #define SIGN_EXTEND_CHAR(c) ((signed char) (c)) #else /* not __STDC__ */ /* As in Harbison and Steele. */ #define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128) #endif /* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we use `alloca' instead of `malloc'. This is because using malloc in re_search* or re_match* could cause memory leaks when C-g is used in Emacs; also, malloc is slower and causes storage fragmentation. On the other hand, malloc is more portable, and easier to debug. Because we sometimes use alloca, some routines have to be macros, not functions -- `alloca'-allocated space disappears at the end of the function it is called in. */ #ifdef REGEX_MALLOC #define REGEX_ALLOCATE malloc #define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize) #else /* not REGEX_MALLOC */ /* Emacs already defines alloca, sometimes. */ #ifndef alloca /* Make alloca work the best possible way. */ #ifdef __GNUC__ #define alloca __builtin_alloca #else /* not __GNUC__ */ #if HAVE_ALLOCA_H #include #else /* not __GNUC__ or HAVE_ALLOCA_H */ #ifndef _AIX /* Already did AIX, up at the top. */ char *alloca (); #endif /* not _AIX */ #endif /* not HAVE_ALLOCA_H */ #endif /* not __GNUC__ */ #endif /* not alloca */ #define REGEX_ALLOCATE alloca /* Assumes a `char *destination' variable. */ #define REGEX_REALLOCATE(source, osize, nsize) \ (destination = (char *) alloca (nsize), \ bcopy (source, destination, osize), \ destination) #endif /* not REGEX_MALLOC */ /* True if `size1' is non-NULL and PTR is pointing anywhere inside `string1' or just past its end. This works if PTR is NULL, which is a good thing. */ #define FIRST_STRING_P(ptr) \ (size1 && string1 <= (ptr) && (ptr) <= string1 + size1) /* (Re)Allocate N items of type T using malloc, or fail. */ #define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t))) #define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t))) #define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t))) #define BYTEWIDTH 8 /* In bits. */ #define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) typedef char boolean; #define false 0 #define true 1 /* These are the command codes that appear in compiled regular expressions. Some opcodes are followed by argument bytes. A command code can specify any interpretation whatsoever for its arguments. Zero bytes may appear in the compiled regular expression. The value of `exactn' is needed in search.c (search_buffer) in Emacs. So regex.h defines a symbol `RE_EXACTN_VALUE' to be 1; the value of `exactn' we use here must also be 1. */ typedef enum { no_op = 0, /* Followed by one byte giving n, then by n literal bytes. */ exactn = 1, /* Matches any (more or less) character. */ anychar, /* Matches any one char belonging to specified set. First following byte is number of bitmap bytes. Then come bytes for a bitmap saying which chars are in. Bits in each byte are ordered low-bit-first. A character is in the set if its bit is 1. A character too large to have a bit in the map is automatically not in the set. */ charset, /* Same parameters as charset, but match any character that is not one of those specified. */ charset_not, /* Start remembering the text that is matched, for storing in a register. Followed by one byte with the register number, in the range 0 to one less than the pattern buffer's re_nsub field. Then followed by one byte with the number of groups inner to this one. (This last has to be part of the start_memory only because we need it in the on_failure_jump of re_match_2.) */ start_memory, /* Stop remembering the text that is matched and store it in a memory register. Followed by one byte with the register number, in the range 0 to one less than `re_nsub' in the pattern buffer, and one byte with the number of inner groups, just like `start_memory'. (We need the number of inner groups here because we don't have any easy way of finding the corresponding start_memory when we're at a stop_memory.) */ stop_memory, /* Match a duplicate of something remembered. Followed by one byte containing the register number. */ duplicate, /* Fail unless at beginning of line. */ begline, /* Fail unless at end of line. */ endline, /* Succeeds if at beginning of buffer (if emacs) or at beginning of string to be matched (if not). */ begbuf, /* Analogously, for end of buffer/string. */ endbuf, /* Followed by two byte relative address to which to jump. */ jump, /* Same as jump, but marks the end of an alternative. */ jump_past_alt, /* Followed by two-byte relative address of place to resume at in case of failure. */ on_failure_jump, /* Like on_failure_jump, but pushes a placeholder instead of the current string position when executed. */ on_failure_keep_string_jump, /* Throw away latest failure point and then jump to following two-byte relative address. */ pop_failure_jump, /* Change to pop_failure_jump if know won't have to backtrack to match; otherwise change to jump. This is used to jump back to the beginning of a repeat. If what follows this jump clearly won't match what the repeat does, such that we can be sure that there is no use backtracking out of repetitions already matched, then we change it to a pop_failure_jump. Followed by two-byte address. */ maybe_pop_jump, /* Jump to following two-byte address, and push a dummy failure point. This failure point will be thrown away if an attempt is made to use it for a failure. A `+' construct makes this before the first repeat. Also used as an intermediary kind of jump when compiling an alternative. */ dummy_failure_jump, /* Push a dummy failure point and continue. Used at the end of alternatives. */ push_dummy_failure, /* Followed by two-byte relative address and two-byte number n. After matching N times, jump to the address upon failure. */ succeed_n, /* Followed by two-byte relative address, and two-byte number n. Jump to the address N times, then fail. */ jump_n, /* Set the following two-byte relative address to the subsequent two-byte number. The address *includes* the two bytes of number. */ set_number_at, wordchar, /* Matches any word-constituent character. */ notwordchar, /* Matches any char that is not a word-constituent. */ wordbeg, /* Succeeds if at word beginning. */ wordend, /* Succeeds if at word end. */ wordbound, /* Succeeds if at a word boundary. */ notwordbound /* Succeeds if not at a word boundary. */ #ifdef emacs ,before_dot, /* Succeeds if before point. */ at_dot, /* Succeeds if at point. */ after_dot, /* Succeeds if after point. */ /* Matches any character whose syntax is specified. Followed by a byte which contains a syntax code, e.g., Sword. */ syntaxspec, /* Matches any character whose syntax is not that specified. */ notsyntaxspec #endif /* emacs */ } re_opcode_t; /* Common operations on the compiled pattern. */ /* Store NUMBER in two contiguous bytes starting at DESTINATION. */ #define STORE_NUMBER(destination, number) \ do { \ (destination)[0] = (number) & 0377; \ (destination)[1] = (number) >> 8; \ } while (0) /* Same as STORE_NUMBER, except increment DESTINATION to the byte after where the number is stored. Therefore, DESTINATION must be an lvalue. */ #define STORE_NUMBER_AND_INCR(destination, number) \ do { \ STORE_NUMBER (destination, number); \ (destination) += 2; \ } while (0) /* Put into DESTINATION a number stored in two contiguous bytes starting at SOURCE. */ #define EXTRACT_NUMBER(destination, source) \ do { \ (destination) = *(source) & 0377; \ (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \ } while (0) #ifdef DEBUG static void extract_number (dest, source) int *dest; unsigned char *source; { int temp = SIGN_EXTEND_CHAR (*(source + 1)); *dest = *source & 0377; *dest += temp << 8; } #ifndef EXTRACT_MACROS /* To debug the macros. */ #undef EXTRACT_NUMBER #define EXTRACT_NUMBER(dest, src) extract_number (&dest, src) #endif /* not EXTRACT_MACROS */ #endif /* DEBUG */ /* Same as EXTRACT_NUMBER, except increment SOURCE to after the number. SOURCE must be an lvalue. */ #define EXTRACT_NUMBER_AND_INCR(destination, source) \ do { \ EXTRACT_NUMBER (destination, source); \ (source) += 2; \ } while (0) #ifdef DEBUG static void extract_number_and_incr (destination, source) int *destination; unsigned char **source; { extract_number (destination, *source); *source += 2; } #ifndef EXTRACT_MACROS #undef EXTRACT_NUMBER_AND_INCR #define EXTRACT_NUMBER_AND_INCR(dest, src) \ extract_number_and_incr (&dest, &src) #endif /* not EXTRACT_MACROS */ #endif /* DEBUG */ /* If DEBUG is defined, Regex prints many voluminous messages about what it is doing (if the variable `debug' is nonzero). If linked with the main program in `iregex.c', you can enter patterns and strings interactively. And if linked with the main program in `main.c' and the other test files, you can run the already-written tests. */ #ifdef DEBUG /* We use standard I/O for debugging. */ #include /* It is useful to test things that ``must'' be true when debugging. */ #include static int debug = 0; #define DEBUG_STATEMENT(e) e #define DEBUG_PRINT1(x) if (debug) printf (x) #define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2) #define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3) #define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4) #define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \ if (debug) print_partial_compiled_pattern (s, e) #define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \ if (debug) print_double_string (w, s1, sz1, s2, sz2) extern void printchar (); /* Print the fastmap in human-readable form. */ void print_fastmap (fastmap) char *fastmap; { unsigned was_a_range = 0; unsigned i = 0; while (i < (1 << BYTEWIDTH)) { if (fastmap[i++]) { was_a_range = 0; printchar (i - 1); while (i < (1 << BYTEWIDTH) && fastmap[i]) { was_a_range = 1; i++; } if (was_a_range) { printf ("-"); printchar (i - 1); } } } putchar ('\n'); } /* Print a compiled pattern string in human-readable form, starting at the START pointer into it and ending just before the pointer END. */ void print_partial_compiled_pattern (start, end) unsigned char *start; unsigned char *end; { int mcnt, mcnt2; unsigned char *p = start; unsigned char *pend = end; if (start == NULL) { printf ("(null)\n"); return; } /* Loop over pattern commands. */ while (p < pend) { switch ((re_opcode_t) *p++) { case no_op: printf ("/no_op"); break; case exactn: mcnt = *p++; printf ("/exactn/%d", mcnt); do { putchar ('/'); printchar (*p++); } while (--mcnt); break; case start_memory: mcnt = *p++; printf ("/start_memory/%d/%d", mcnt, *p++); break; case stop_memory: mcnt = *p++; printf ("/stop_memory/%d/%d", mcnt, *p++); break; case duplicate: printf ("/duplicate/%d", *p++); break; case anychar: printf ("/anychar"); break; case charset: case charset_not: { register int c; printf ("/charset%s", (re_opcode_t) *(p - 1) == charset_not ? "_not" : ""); assert (p + *p < pend); for (c = 0; c < *p; c++) { unsigned bit; unsigned char map_byte = p[1 + c]; putchar ('/'); for (bit = 0; bit < BYTEWIDTH; bit++) if (map_byte & (1 << bit)) printchar (c * BYTEWIDTH + bit); } p += 1 + *p; break; } case begline: printf ("/begline"); break; case endline: printf ("/endline"); break; case on_failure_jump: extract_number_and_incr (&mcnt, &p); printf ("/on_failure_jump/0/%d", mcnt); break; case on_failure_keep_string_jump: extract_number_and_incr (&mcnt, &p); printf ("/on_failure_keep_string_jump/0/%d", mcnt); break; case dummy_failure_jump: extract_number_and_incr (&mcnt, &p); printf ("/dummy_failure_jump/0/%d", mcnt); break; case push_dummy_failure: printf ("/push_dummy_failure"); break; case maybe_pop_jump: extract_number_and_incr (&mcnt, &p); printf ("/maybe_pop_jump/0/%d", mcnt); break; case pop_failure_jump: extract_number_and_incr (&mcnt, &p); printf ("/pop_failure_jump/0/%d", mcnt); break; case jump_past_alt: extract_number_and_incr (&mcnt, &p); printf ("/jump_past_alt/0/%d", mcnt); break; case jump: extract_number_and_incr (&mcnt, &p); printf ("/jump/0/%d", mcnt); break; case succeed_n: extract_number_and_incr (&mcnt, &p); extract_number_and_incr (&mcnt2, &p); printf ("/succeed_n/0/%d/0/%d", mcnt, mcnt2); break; case jump_n: extract_number_and_incr (&mcnt, &p); extract_number_and_incr (&mcnt2, &p); printf ("/jump_n/0/%d/0/%d", mcnt, mcnt2); break; case set_number_at: extract_number_and_incr (&mcnt, &p); extract_number_and_incr (&mcnt2, &p); printf ("/set_number_at/0/%d/0/%d", mcnt, mcnt2); break; case wordbound: printf ("/wordbound"); break; case notwordbound: printf ("/notwordbound"); break; case wordbeg: printf ("/wordbeg"); break; case wordend: printf ("/wordend"); #ifdef emacs case before_dot: printf ("/before_dot"); break; case at_dot: printf ("/at_dot"); break; case after_dot: printf ("/after_dot"); break; case syntaxspec: printf ("/syntaxspec"); mcnt = *p++; printf ("/%d", mcnt); break; case notsyntaxspec: printf ("/notsyntaxspec"); mcnt = *p++; printf ("/%d", mcnt); break; #endif /* emacs */ case wordchar: printf ("/wordchar"); break; case notwordchar: printf ("/notwordchar"); break; case begbuf: printf ("/begbuf"); break; case endbuf: printf ("/endbuf"); break; default: printf ("?%d", *(p-1)); } } printf ("/\n"); } void print_compiled_pattern (bufp) struct re_pattern_buffer *bufp; { unsigned char *buffer = bufp->buffer; print_partial_compiled_pattern (buffer, buffer + bufp->used); printf ("%d bytes used/%d bytes allocated.\n", bufp->used, bufp->allocated); if (bufp->fastmap_accurate && bufp->fastmap) { printf ("fastmap: "); print_fastmap (bufp->fastmap); } printf ("re_nsub: %d\t", bufp->re_nsub); printf ("regs_alloc: %d\t", bufp->regs_allocated); printf ("can_be_null: %d\t", bufp->can_be_null); printf ("newline_anchor: %d\n", bufp->newline_anchor); printf ("no_sub: %d\t", bufp->no_sub); printf ("not_bol: %d\t", bufp->not_bol); printf ("not_eol: %d\t", bufp->not_eol); printf ("syntax: %d\n", bufp->syntax); /* Perhaps we should print the translate table? */ } void print_double_string (where, string1, size1, string2, size2) const char *where; const char *string1; const char *string2; int size1; int size2; { unsigned this_char; if (where == NULL) printf ("(null)"); else { if (FIRST_STRING_P (where)) { for (this_char = where - string1; this_char < size1; this_char++) printchar (string1[this_char]); where = string2; } for (this_char = where - string2; this_char < size2; this_char++) printchar (string2[this_char]); } } #else /* not DEBUG */ #undef assert #define assert(e) #define DEBUG_STATEMENT(e) #define DEBUG_PRINT1(x) #define DEBUG_PRINT2(x1, x2) #define DEBUG_PRINT3(x1, x2, x3) #define DEBUG_PRINT4(x1, x2, x3, x4) #define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) #define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) #endif /* not DEBUG */ /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ reg_syntax_t re_syntax_options = RE_SYNTAX_EMACS; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (syntax) reg_syntax_t syntax; { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. */ static const char *re_error_msg[] = { NULL, /* REG_NOERROR */ "No match", /* REG_NOMATCH */ "Invalid regular expression", /* REG_BADPAT */ "Invalid collation character", /* REG_ECOLLATE */ "Invalid character class name", /* REG_ECTYPE */ "Trailing backslash", /* REG_EESCAPE */ "Invalid back reference", /* REG_ESUBREG */ "Unmatched [ or [^", /* REG_EBRACK */ "Unmatched ( or \\(", /* REG_EPAREN */ "Unmatched \\{", /* REG_EBRACE */ "Invalid content of \\{\\}", /* REG_BADBR */ "Invalid range end", /* REG_ERANGE */ "Memory exhausted", /* REG_ESPACE */ "Invalid preceding regular expression", /* REG_BADRPT */ "Premature end of regular expression", /* REG_EEND */ "Regular expression too big", /* REG_ESIZE */ "Unmatched ) or \\)", /* REG_ERPAREN */ }; /* Subroutine declarations and macros for regex_compile. */ static void store_op1 (), store_op2 (); static void insert_op1 (), insert_op2 (); static boolean at_begline_loc_p (), at_endline_loc_p (); static boolean group_in_compile_stack (); static reg_errcode_t compile_range (); /* Fetch the next character in the uncompiled pattern---translating it if necessary. Also cast from a signed character in the constant string passed to us by the user to an unsigned char that we can use as an array index (in, e.g., `translate'). */ #define PATFETCH(c) \ do {if (p == pend) return REG_EEND; \ c = (unsigned char) *p++; \ if (translate) c = translate[c]; \ } while (0) /* Fetch the next character in the uncompiled pattern, with no translation. */ #define PATFETCH_RAW(c) \ do {if (p == pend) return REG_EEND; \ c = (unsigned char) *p++; \ } while (0) /* Go backwards one character in the pattern. */ #define PATUNFETCH p-- /* If `translate' is non-null, return translate[D], else just D. We cast the subscript to translate because some data is declared as `char *', to avoid warnings when a string constant is passed. But when we use a character as a subscript we must make it unsigned. */ #define TRANSLATE(d) (translate ? translate[(unsigned char) (d)] : (d)) /* Macros for outputting the compiled pattern into `buffer'. */ /* If the buffer isn't allocated when it comes in, use this. */ #define INIT_BUF_SIZE 32 /* Make sure we have at least N more bytes of space in buffer. */ #define GET_BUFFER_SPACE(n) \ while (b - bufp->buffer + (n) > bufp->allocated) \ EXTEND_BUFFER () /* Make sure we have one more byte of buffer space and then add C to it. */ #define BUF_PUSH(c) \ do { \ GET_BUFFER_SPACE (1); \ *b++ = (unsigned char) (c); \ } while (0) /* Ensure we have two more bytes of buffer space and then append C1 and C2. */ #define BUF_PUSH_2(c1, c2) \ do { \ GET_BUFFER_SPACE (2); \ *b++ = (unsigned char) (c1); \ *b++ = (unsigned char) (c2); \ } while (0) /* As with BUF_PUSH_2, except for three bytes. */ #define BUF_PUSH_3(c1, c2, c3) \ do { \ GET_BUFFER_SPACE (3); \ *b++ = (unsigned char) (c1); \ *b++ = (unsigned char) (c2); \ *b++ = (unsigned char) (c3); \ } while (0) /* Store a jump with opcode OP at LOC to location TO. We store a relative address offset by the three bytes the jump itself occupies. */ #define STORE_JUMP(op, loc, to) \ store_op1 (op, loc, (to) - (loc) - 3) /* Likewise, for a two-argument jump. */ #define STORE_JUMP2(op, loc, to, arg) \ store_op2 (op, loc, (to) - (loc) - 3, arg) /* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */ #define INSERT_JUMP(op, loc, to) \ insert_op1 (op, loc, (to) - (loc) - 3, b) /* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */ #define INSERT_JUMP2(op, loc, to, arg) \ insert_op2 (op, loc, (to) - (loc) - 3, arg, b) /* This is not an arbitrary limit: the arguments which represent offsets into the pattern are two bytes long. So if 2^16 bytes turns out to be too small, many things would have to change. */ #define MAX_BUF_SIZE (1L << 16) /* Extend the buffer by twice its current size via realloc and reset the pointers that pointed into the old block to point to the correct places in the new one. If extending the buffer results in it being larger than MAX_BUF_SIZE, then flag memory exhausted. */ #define EXTEND_BUFFER() \ do { \ unsigned char *old_buffer = bufp->buffer; \ if (bufp->allocated == MAX_BUF_SIZE) \ return REG_ESIZE; \ bufp->allocated <<= 1; \ if (bufp->allocated > MAX_BUF_SIZE) \ bufp->allocated = MAX_BUF_SIZE; \ bufp->buffer = (unsigned char *) realloc (bufp->buffer, bufp->allocated);\ if (bufp->buffer == NULL) \ return REG_ESPACE; \ /* If the buffer moved, move all the pointers into it. */ \ if (old_buffer != bufp->buffer) \ { \ b = (b - old_buffer) + bufp->buffer; \ begalt = (begalt - old_buffer) + bufp->buffer; \ if (fixup_alt_jump) \ fixup_alt_jump = (fixup_alt_jump - old_buffer) + bufp->buffer;\ if (laststart) \ laststart = (laststart - old_buffer) + bufp->buffer; \ if (pending_exact) \ pending_exact = (pending_exact - old_buffer) + bufp->buffer; \ } \ } while (0) /* Since we have one byte reserved for the register number argument to {start,stop}_memory, the maximum number of groups we can report things about is what fits in that byte. */ #define MAX_REGNUM 255 /* But patterns can have more than `MAX_REGNUM' registers. We just ignore the excess. */ typedef unsigned regnum_t; /* Macros for the compile stack. */ /* Since offsets can go either forwards or backwards, this type needs to be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */ typedef int pattern_offset_t; typedef struct { pattern_offset_t begalt_offset; pattern_offset_t fixup_alt_jump; pattern_offset_t inner_group_offset; pattern_offset_t laststart_offset; regnum_t regnum; } compile_stack_elt_t; typedef struct { compile_stack_elt_t *stack; unsigned size; unsigned avail; /* Offset of next open position. */ } compile_stack_type; #define INIT_COMPILE_STACK_SIZE 32 #define COMPILE_STACK_EMPTY (compile_stack.avail == 0) #define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size) /* The next available element. */ #define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail]) /* Set the bit for character C in a list. */ #define SET_LIST_BIT(c) \ (b[((unsigned char) (c)) / BYTEWIDTH] \ |= 1 << (((unsigned char) c) % BYTEWIDTH)) /* Get the next unsigned number in the uncompiled pattern. */ #define GET_UNSIGNED_NUMBER(num) \ { if (p != pend) \ { \ PATFETCH (c); \ while (ISDIGIT (c)) \ { \ if (num < 0) \ num = 0; \ num = num * 10 + c - '0'; \ if (p == pend) \ break; \ PATFETCH (c); \ } \ } \ } #define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */ #define IS_CHAR_CLASS(string) \ (STREQ (string, "alpha") || STREQ (string, "upper") \ || STREQ (string, "lower") || STREQ (string, "digit") \ || STREQ (string, "alnum") || STREQ (string, "xdigit") \ || STREQ (string, "space") || STREQ (string, "print") \ || STREQ (string, "punct") || STREQ (string, "graph") \ || STREQ (string, "cntrl") || STREQ (string, "blank")) /* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX. Returns one of error codes defined in `regex.h', or zero for success. Assumes the `allocated' (and perhaps `buffer') and `translate' fields are set in BUFP on entry. If it succeeds, results are put in BUFP (if it returns an error, the contents of BUFP are undefined): `buffer' is the compiled pattern; `syntax' is set to SYNTAX; `used' is set to the length of the compiled pattern; `fastmap_accurate' is zero; `re_nsub' is the number of subexpressions in PATTERN; `not_bol' and `not_eol' are zero; The `fastmap' and `newline_anchor' fields are neither examined nor set. */ static reg_errcode_t regex_compile (pattern, size, syntax, bufp) const char *pattern; int size; reg_syntax_t syntax; struct re_pattern_buffer *bufp; { /* We fetch characters from PATTERN here. Even though PATTERN is `char *' (i.e., signed), we declare these variables as unsigned, so they can be reliably used as array indices. */ register unsigned char c, c1; /* A random tempory spot in PATTERN. */ const char *p1; /* Points to the end of the buffer, where we should append. */ register unsigned char *b; /* Keeps track of unclosed groups. */ compile_stack_type compile_stack; /* Points to the current (ending) position in the pattern. */ const char *p = pattern; const char *pend = pattern + size; /* How to translate the characters in the pattern. */ char *translate = bufp->translate; /* Address of the count-byte of the most recently inserted `exactn' command. This makes it possible to tell if a new exact-match character can be added to that command or if the character requires a new `exactn' command. */ unsigned char *pending_exact = 0; /* Address of start of the most recently finished expression. This tells, e.g., postfix * where to find the start of its operand. Reset at the beginning of groups and alternatives. */ unsigned char *laststart = 0; /* Address of beginning of regexp, or inside of last group. */ unsigned char *begalt; /* Place in the uncompiled pattern (i.e., the {) to which to go back if the interval is invalid. */ const char *beg_interval; /* Address of the place where a forward jump should go to the end of the containing expression. Each alternative of an `or' -- except the last -- ends with a forward jump of this sort. */ unsigned char *fixup_alt_jump = 0; /* Counts open-groups as they are encountered. Remembered for the matching close-group on the compile stack, so the same register number is put in the stop_memory as the start_memory. */ regnum_t regnum = 0; #ifdef DEBUG DEBUG_PRINT1 ("\nCompiling pattern: "); if (debug) { unsigned debug_count; for (debug_count = 0; debug_count < size; debug_count++) printchar (pattern[debug_count]); putchar ('\n'); } #endif /* DEBUG */ /* Initialize the compile stack. */ compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t); if (compile_stack.stack == NULL) return REG_ESPACE; compile_stack.size = INIT_COMPILE_STACK_SIZE; compile_stack.avail = 0; /* Initialize the pattern buffer. */ bufp->syntax = syntax; bufp->fastmap_accurate = 0; bufp->not_bol = bufp->not_eol = 0; /* Set `used' to zero, so that if we return an error, the pattern printer (for debugging) will think there's no pattern. We reset it at the end. */ bufp->used = 0; /* Always count groups, whether or not bufp->no_sub is set. */ bufp->re_nsub = 0; #if !defined (emacs) && !defined (SYNTAX_TABLE) /* Initialize the syntax table. */ init_syntax_once (); #endif if (bufp->allocated == 0) { if (bufp->buffer) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. */ RETALLOC (bufp->buffer, INIT_BUF_SIZE, unsigned char); } else { /* Caller did not allocate a buffer. Do it for them. */ bufp->buffer = TALLOC (INIT_BUF_SIZE, unsigned char); } if (!bufp->buffer) return REG_ESPACE; bufp->allocated = INIT_BUF_SIZE; } begalt = b = bufp->buffer; /* Loop through the uncompiled pattern until we're at the end. */ while (p != pend) { PATFETCH (c); switch (c) { case '^': { if ( /* If at start of pattern, it's an operator. */ p == pattern + 1 /* If context independent, it's an operator. */ || syntax & RE_CONTEXT_INDEP_ANCHORS /* Otherwise, depends on what's come before. */ || at_begline_loc_p (pattern, p, syntax)) BUF_PUSH (begline); else goto normal_char; } break; case '$': { if ( /* If at end of pattern, it's an operator. */ p == pend /* If context independent, it's an operator. */ || syntax & RE_CONTEXT_INDEP_ANCHORS /* Otherwise, depends on what's next. */ || at_endline_loc_p (p, pend, syntax)) BUF_PUSH (endline); else goto normal_char; } break; case '+': case '?': if ((syntax & RE_BK_PLUS_QM) || (syntax & RE_LIMITED_OPS)) goto normal_char; handle_plus: case '*': /* If there is no previous pattern... */ if (!laststart) { if (syntax & RE_CONTEXT_INVALID_OPS) return REG_BADRPT; else if (!(syntax & RE_CONTEXT_INDEP_OPS)) goto normal_char; } { /* Are we optimizing this jump? */ boolean keep_string_p = false; /* 1 means zero (many) matches is allowed. */ char zero_times_ok = 0, many_times_ok = 0; /* If there is a sequence of repetition chars, collapse it down to just one (the right one). We can't combine interval operators with these because of, e.g., `a{2}*', which should only match an even number of `a's. */ for (;;) { zero_times_ok |= c != '+'; many_times_ok |= c != '?'; if (p == pend) break; PATFETCH (c); if (c == '*' || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?'))) ; else if (syntax & RE_BK_PLUS_QM && c == '\\') { if (p == pend) return REG_EESCAPE; PATFETCH (c1); if (!(c1 == '+' || c1 == '?')) { PATUNFETCH; PATUNFETCH; break; } c = c1; } else { PATUNFETCH; break; } /* If we get here, we found another repeat character. */ } /* Star, etc. applied to an empty pattern is equivalent to an empty pattern. */ if (!laststart) break; /* Now we know whether or not zero matches is allowed and also whether or not two or more matches is allowed. */ if (many_times_ok) { /* More than one repetition is allowed, so put in at the end a backward relative jump from `b' to before the next jump we're going to put in below (which jumps from laststart to after this jump). But if we are at the `*' in the exact sequence `.*\n', insert an unconditional jump backwards to the ., instead of the beginning of the loop. This way we only push a failure point once, instead of every time through the loop. */ assert (p - 1 > pattern); /* Allocate the space for the jump. */ GET_BUFFER_SPACE (3); /* We know we are not at the first character of the pattern, because laststart was nonzero. And we've already incremented `p', by the way, to be the character after the `*'. Do we have to do something analogous here for null bytes, because of RE_DOT_NOT_NULL? */ if (TRANSLATE (*(p - 2)) == TRANSLATE ('.') && zero_times_ok && p < pend && TRANSLATE (*p) == TRANSLATE ('\n') && !(syntax & RE_DOT_NEWLINE)) { /* We have .*\n. */ STORE_JUMP (jump, b, laststart); keep_string_p = true; } else /* Anything else. */ STORE_JUMP (maybe_pop_jump, b, laststart - 3); /* We've added more stuff to the buffer. */ b += 3; } /* On failure, jump from laststart to b + 3, which will be the end of the buffer after this jump is inserted. */ GET_BUFFER_SPACE (3); INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump : on_failure_jump, laststart, b + 3); pending_exact = 0; b += 3; if (!zero_times_ok) { /* At least one repetition is required, so insert a `dummy_failure_jump' before the initial `on_failure_jump' instruction of the loop. This effects a skip over that instruction the first time we hit that loop. */ GET_BUFFER_SPACE (3); INSERT_JUMP (dummy_failure_jump, laststart, laststart + 6); b += 3; } } break; case '.': laststart = b; BUF_PUSH (anychar); break; case '[': { boolean had_char_class = false; if (p == pend) return REG_EBRACK; /* Ensure that we have enough space to push a charset: the opcode, the length count, and the bitset; 34 bytes in all. */ GET_BUFFER_SPACE (34); laststart = b; /* We test `*p == '^' twice, instead of using an if statement, so we only need one BUF_PUSH. */ BUF_PUSH (*p == '^' ? charset_not : charset); if (*p == '^') p++; /* Remember the first position in the bracket expression. */ p1 = p; /* Push the number of bytes in the bitmap. */ BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH); /* Clear the whole map. */ bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH); /* charset_not matches newline according to a syntax bit. */ if ((re_opcode_t) b[-2] == charset_not && (syntax & RE_HAT_LISTS_NOT_NEWLINE)) SET_LIST_BIT ('\n'); /* Read in characters and ranges, setting map bits. */ for (;;) { if (p == pend) return REG_EBRACK; PATFETCH (c); /* \ might escape characters inside [...] and [^...]. */ if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\') { if (p == pend) return REG_EESCAPE; PATFETCH (c1); SET_LIST_BIT (c1); continue; } /* Could be the end of the bracket expression. If it's not (i.e., when the bracket expression is `[]' so far), the ']' character bit gets set way below. */ if (c == ']' && p != p1 + 1) break; /* Look ahead to see if it's a range when the last thing was a character class. */ if (had_char_class && c == '-' && *p != ']') return REG_ERANGE; /* Look ahead to see if it's a range when the last thing was a character: if this is a hyphen not at the beginning or the end of a list, then it's the range operator. */ if (c == '-' && !(p - 2 >= pattern && p[-2] == '[') && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^') && *p != ']') { reg_errcode_t ret = compile_range (&p, pend, translate, syntax, b); if (ret != REG_NOERROR) return ret; } else if (p[0] == '-' && p[1] != ']') { /* This handles ranges made up of characters only. */ reg_errcode_t ret; /* Move past the `-'. */ PATFETCH (c1); ret = compile_range (&p, pend, translate, syntax, b); if (ret != REG_NOERROR) return ret; } /* See if we're at the beginning of a possible character class. */ else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':') { /* Leave room for the null. */ char str[CHAR_CLASS_MAX_LENGTH + 1]; PATFETCH (c); c1 = 0; /* If pattern is `[[:'. */ if (p == pend) return REG_EBRACK; for (;;) { PATFETCH (c); if (c == ':' || c == ']' || p == pend || c1 == CHAR_CLASS_MAX_LENGTH) break; str[c1++] = c; } str[c1] = '\0'; /* If isn't a word bracketed by `[:' and:`]': undo the ending character, the letters, and leave the leading `:' and `[' (but set bits for them). */ if (c == ':' && *p == ']') { int ch; boolean is_alnum = STREQ (str, "alnum"); boolean is_alpha = STREQ (str, "alpha"); boolean is_blank = STREQ (str, "blank"); boolean is_cntrl = STREQ (str, "cntrl"); boolean is_digit = STREQ (str, "digit"); boolean is_graph = STREQ (str, "graph"); boolean is_lower = STREQ (str, "lower"); boolean is_print = STREQ (str, "print"); boolean is_punct = STREQ (str, "punct"); boolean is_space = STREQ (str, "space"); boolean is_upper = STREQ (str, "upper"); boolean is_xdigit = STREQ (str, "xdigit"); if (!IS_CHAR_CLASS (str)) return REG_ECTYPE; /* Throw away the ] at the end of the character class. */ PATFETCH (c); if (p == pend) return REG_EBRACK; for (ch = 0; ch < 1 << BYTEWIDTH; ch++) { if ( (is_alnum && ISALNUM (ch)) || (is_alpha && ISALPHA (ch)) || (is_blank && ISBLANK (ch)) || (is_cntrl && ISCNTRL (ch)) || (is_digit && ISDIGIT (ch)) || (is_graph && ISGRAPH (ch)) || (is_lower && ISLOWER (ch)) || (is_print && ISPRINT (ch)) || (is_punct && ISPUNCT (ch)) || (is_space && ISSPACE (ch)) || (is_upper && ISUPPER (ch)) || (is_xdigit && ISXDIGIT (ch))) SET_LIST_BIT (ch); } had_char_class = true; } else { c1++; while (c1--) PATUNFETCH; SET_LIST_BIT ('['); SET_LIST_BIT (':'); had_char_class = false; } } else { had_char_class = false; SET_LIST_BIT (c); } } /* Discard any (non)matching list bytes that are all 0 at the end of the map. Decrease the map-length byte too. */ while ((int) b[-1] > 0 && b[b[-1] - 1] == 0) b[-1]--; b += b[-1]; } break; case '(': if (syntax & RE_NO_BK_PARENS) goto handle_open; else goto normal_char; case ')': if (syntax & RE_NO_BK_PARENS) goto handle_close; else goto normal_char; case '\n': if (syntax & RE_NEWLINE_ALT) goto handle_alt; else goto normal_char; case '|': if (syntax & RE_NO_BK_VBAR) goto handle_alt; else goto normal_char; case '{': if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES) goto handle_interval; else goto normal_char; case '\\': if (p == pend) return REG_EESCAPE; /* Do not translate the character after the \, so that we can distinguish, e.g., \B from \b, even if we normally would translate, e.g., B to b. */ PATFETCH_RAW (c); switch (c) { case '(': if (syntax & RE_NO_BK_PARENS) goto normal_backslash; handle_open: bufp->re_nsub++; regnum++; if (COMPILE_STACK_FULL) { RETALLOC (compile_stack.stack, compile_stack.size << 1, compile_stack_elt_t); if (compile_stack.stack == NULL) return REG_ESPACE; compile_stack.size <<= 1; } /* These are the values to restore when we hit end of this group. They are all relative offsets, so that if the whole pattern moves because of realloc, they will still be valid. */ COMPILE_STACK_TOP.begalt_offset = begalt - bufp->buffer; COMPILE_STACK_TOP.fixup_alt_jump = fixup_alt_jump ? fixup_alt_jump - bufp->buffer + 1 : 0; COMPILE_STACK_TOP.laststart_offset = b - bufp->buffer; COMPILE_STACK_TOP.regnum = regnum; /* We will eventually replace the 0 with the number of groups inner to this one. But do not push a start_memory for groups beyond the last one we can represent in the compiled pattern. */ if (regnum <= MAX_REGNUM) { COMPILE_STACK_TOP.inner_group_offset = b - bufp->buffer + 2; BUF_PUSH_3 (start_memory, regnum, 0); } compile_stack.avail++; fixup_alt_jump = 0; laststart = 0; begalt = b; /* If we've reached MAX_REGNUM groups, then this open won't actually generate any code, so we'll have to clear pending_exact explicitly. */ pending_exact = 0; break; case ')': if (syntax & RE_NO_BK_PARENS) goto normal_backslash; if (COMPILE_STACK_EMPTY) if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_backslash; else return REG_ERPAREN; handle_close: if (fixup_alt_jump) { /* Push a dummy failure point at the end of the alternative for a possible future `pop_failure_jump' to pop. See comments at `push_dummy_failure' in `re_match_2'. */ BUF_PUSH (push_dummy_failure); /* We allocated space for this jump when we assigned to `fixup_alt_jump', in the `handle_alt' case below. */ STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1); } /* See similar code for backslashed left paren above. */ if (COMPILE_STACK_EMPTY) if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD) goto normal_char; else return REG_ERPAREN; /* Since we just checked for an empty stack above, this ``can't happen''. */ assert (compile_stack.avail != 0); { /* We don't just want to restore into `regnum', because later groups should continue to be numbered higher, as in `(ab)c(de)' -- the second group is #2. */ regnum_t this_group_regnum; compile_stack.avail--; begalt = bufp->buffer + COMPILE_STACK_TOP.begalt_offset; fixup_alt_jump = COMPILE_STACK_TOP.fixup_alt_jump ? bufp->buffer + COMPILE_STACK_TOP.fixup_alt_jump - 1 : 0; laststart = bufp->buffer + COMPILE_STACK_TOP.laststart_offset; this_group_regnum = COMPILE_STACK_TOP.regnum; /* If we've reached MAX_REGNUM groups, then this open won't actually generate any code, so we'll have to clear pending_exact explicitly. */ pending_exact = 0; /* We're at the end of the group, so now we know how many groups were inside this one. */ if (this_group_regnum <= MAX_REGNUM) { unsigned char *inner_group_loc = bufp->buffer + COMPILE_STACK_TOP.inner_group_offset; *inner_group_loc = regnum - this_group_regnum; BUF_PUSH_3 (stop_memory, this_group_regnum, regnum - this_group_regnum); } } break; case '|': /* `\|'. */ if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR) goto normal_backslash; handle_alt: if (syntax & RE_LIMITED_OPS) goto normal_char; /* Insert before the previous alternative a jump which jumps to this alternative if the former fails. */ GET_BUFFER_SPACE (3); INSERT_JUMP (on_failure_jump, begalt, b + 6); pending_exact = 0; b += 3; /* The alternative before this one has a jump after it which gets executed if it gets matched. Adjust that jump so it will jump to this alternative's analogous jump (put in below, which in turn will jump to the next (if any) alternative's such jump, etc.). The last such jump jumps to the correct final destination. A picture: _____ _____ | | | | | v | v a | b | c If we are at `b', then fixup_alt_jump right now points to a three-byte space after `a'. We'll put in the jump, set fixup_alt_jump to right after `b', and leave behind three bytes which we'll fill in when we get to after `c'. */ if (fixup_alt_jump) STORE_JUMP (jump_past_alt, fixup_alt_jump, b); /* Mark and leave space for a jump after this alternative, to be filled in later either by next alternative or when know we're at the end of a series of alternatives. */ fixup_alt_jump = b; GET_BUFFER_SPACE (3); b += 3; laststart = 0; begalt = b; break; case '{': /* If \{ is a literal. */ if (!(syntax & RE_INTERVALS) /* If we're at `\{' and it's not the open-interval operator. */ || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) || (p - 2 == pattern && p == pend)) goto normal_backslash; handle_interval: { /* If got here, then the syntax allows intervals. */ /* At least (most) this many matches must be made. */ int lower_bound = -1, upper_bound = -1; beg_interval = p - 1; if (p == pend) { if (syntax & RE_NO_BK_BRACES) goto unfetch_interval; else return REG_EBRACE; } GET_UNSIGNED_NUMBER (lower_bound); if (c == ',') { GET_UNSIGNED_NUMBER (upper_bound); if (upper_bound < 0) upper_bound = RE_DUP_MAX; } else /* Interval such as `{1}' => match exactly once. */ upper_bound = lower_bound; if (lower_bound < 0 || upper_bound > RE_DUP_MAX || lower_bound > upper_bound) { if (syntax & RE_NO_BK_BRACES) goto unfetch_interval; else return REG_BADBR; } if (!(syntax & RE_NO_BK_BRACES)) { if (c != '\\') return REG_EBRACE; PATFETCH (c); } if (c != '}') { if (syntax & RE_NO_BK_BRACES) goto unfetch_interval; else return REG_BADBR; } /* We just parsed a valid interval. */ /* If it's invalid to have no preceding re. */ if (!laststart) { if (syntax & RE_CONTEXT_INVALID_OPS) return REG_BADRPT; else if (syntax & RE_CONTEXT_INDEP_OPS) laststart = b; else goto unfetch_interval; } /* If the upper bound is zero, don't want to succeed at all; jump from `laststart' to `b + 3', which will be the end of the buffer after we insert the jump. */ if (upper_bound == 0) { GET_BUFFER_SPACE (3); INSERT_JUMP (jump, laststart, b + 3); b += 3; } /* Otherwise, we have a nontrivial interval. When we're all done, the pattern will look like: set_number_at set_number_at succeed_n jump_n (The upper bound and `jump_n' are omitted if `upper_bound' is 1, though.) */ else { /* If the upper bound is > 1, we need to insert more at the end of the loop. */ unsigned nbytes = 10 + (upper_bound > 1) * 10; GET_BUFFER_SPACE (nbytes); /* Initialize lower bound of the `succeed_n', even though it will be set during matching by its attendant `set_number_at' (inserted next), because `re_compile_fastmap' needs to know. Jump to the `jump_n' we might insert below. */ INSERT_JUMP2 (succeed_n, laststart, b + 5 + (upper_bound > 1) * 5, lower_bound); b += 5; /* Code to initialize the lower bound. Insert before the `succeed_n'. The `5' is the last two bytes of this `set_number_at', plus 3 bytes of the following `succeed_n'. */ insert_op2 (set_number_at, laststart, 5, lower_bound, b); b += 5; if (upper_bound > 1) { /* More than one repetition is allowed, so append a backward jump to the `succeed_n' that starts this interval. When we've reached this during matching, we'll have matched the interval once, so jump back only `upper_bound - 1' times. */ STORE_JUMP2 (jump_n, b, laststart + 5, upper_bound - 1); b += 5; /* The location we want to set is the second parameter of the `jump_n'; that is `b-2' as an absolute address. `laststart' will be the `set_number_at' we're about to insert; `laststart+3' the number to set, the source for the relative address. But we are inserting into the middle of the pattern -- so everything is getting moved up by 5. Conclusion: (b - 2) - (laststart + 3) + 5, i.e., b - laststart. We insert this at the beginning of the loop so that if we fail during matching, we'll reinitialize the bounds. */ insert_op2 (set_number_at, laststart, b - laststart, upper_bound - 1, b); b += 5; } } pending_exact = 0; beg_interval = NULL; } break; unfetch_interval: /* If an invalid interval, match the characters as literals. */ assert (beg_interval); p = beg_interval; beg_interval = NULL; /* normal_char and normal_backslash need `c'. */ PATFETCH (c); if (!(syntax & RE_NO_BK_BRACES)) { if (p > pattern && p[-1] == '\\') goto normal_backslash; } goto normal_char; #ifdef emacs /* There is no way to specify the before_dot and after_dot operators. rms says this is ok. --karl */ case '=': BUF_PUSH (at_dot); break; case 's': laststart = b; PATFETCH (c); BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]); break; case 'S': laststart = b; PATFETCH (c); BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]); break; #endif /* emacs */ case 'w': laststart = b; BUF_PUSH (wordchar); break; case 'W': laststart = b; BUF_PUSH (notwordchar); break; case '<': BUF_PUSH (wordbeg); break; case '>': BUF_PUSH (wordend); break; case 'b': BUF_PUSH (wordbound); break; case 'B': BUF_PUSH (notwordbound); break; case '`': BUF_PUSH (begbuf); break; case '\'': BUF_PUSH (endbuf); break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (syntax & RE_NO_BK_REFS) goto normal_char; c1 = c - '0'; if (c1 > regnum) return REG_ESUBREG; /* Can't back reference to a subexpression if inside of it. */ if (group_in_compile_stack (compile_stack, c1)) goto normal_char; laststart = b; BUF_PUSH_2 (duplicate, c1); break; case '+': case '?': if (syntax & RE_BK_PLUS_QM) goto handle_plus; else goto normal_backslash; default: normal_backslash: /* You might think it would be useful for \ to mean not to translate; but if we don't translate it it will never match anything. */ c = TRANSLATE (c); goto normal_char; } break; default: /* Expects the character in `c'. */ normal_char: /* If no exactn currently being built. */ if (!pending_exact /* If last exactn not at current position. */ || pending_exact + *pending_exact + 1 != b /* We have only one byte following the exactn for the count. */ || *pending_exact == (1 << BYTEWIDTH) - 1 /* If followed by a repetition operator. */ || *p == '*' || *p == '^' || ((syntax & RE_BK_PLUS_QM) ? *p == '\\' && (p[1] == '+' || p[1] == '?') : (*p == '+' || *p == '?')) || ((syntax & RE_INTERVALS) && ((syntax & RE_NO_BK_BRACES) ? *p == '{' : (p[0] == '\\' && p[1] == '{')))) { /* Start building a new exactn. */ laststart = b; BUF_PUSH_2 (exactn, 0); pending_exact = b - 1; } BUF_PUSH (c); (*pending_exact)++; break; } /* switch (c) */ } /* while p != pend */ /* Through the pattern now. */ if (fixup_alt_jump) STORE_JUMP (jump_past_alt, fixup_alt_jump, b); if (!COMPILE_STACK_EMPTY) return REG_EPAREN; free (compile_stack.stack); /* We have succeeded; set the length of the buffer. */ bufp->used = b - bufp->buffer; #ifdef DEBUG if (debug) { DEBUG_PRINT1 ("\nCompiled pattern: "); print_compiled_pattern (bufp); } #endif /* DEBUG */ return REG_NOERROR; } /* regex_compile */ /* Subroutines for `regex_compile'. */ /* Store OP at LOC followed by two-byte integer parameter ARG. */ static void store_op1 (op, loc, arg) re_opcode_t op; unsigned char *loc; int arg; { *loc = (unsigned char) op; STORE_NUMBER (loc + 1, arg); } /* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */ static void store_op2 (op, loc, arg1, arg2) re_opcode_t op; unsigned char *loc; int arg1, arg2; { *loc = (unsigned char) op; STORE_NUMBER (loc + 1, arg1); STORE_NUMBER (loc + 3, arg2); } /* Copy the bytes from LOC to END to open up three bytes of space at LOC for OP followed by two-byte integer parameter ARG. */ static void insert_op1 (op, loc, arg, end) re_opcode_t op; unsigned char *loc; int arg; unsigned char *end; { register unsigned char *pfrom = end; register unsigned char *pto = end + 3; while (pfrom != loc) *--pto = *--pfrom; store_op1 (op, loc, arg); } /* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */ static void insert_op2 (op, loc, arg1, arg2, end) re_opcode_t op; unsigned char *loc; int arg1, arg2; unsigned char *end; { register unsigned char *pfrom = end; register unsigned char *pto = end + 5; while (pfrom != loc) *--pto = *--pfrom; store_op2 (op, loc, arg1, arg2); } /* P points to just after a ^ in PATTERN. Return true if that ^ comes after an alternative or a begin-subexpression. We assume there is at least one character before the ^. */ static boolean at_begline_loc_p (pattern, p, syntax) const char *pattern, *p; reg_syntax_t syntax; { const char *prev = p - 2; boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\'; return /* After a subexpression? */ (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash)) /* After an alternative? */ || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash)); } /* The dual of at_begline_loc_p. This one is for $. We assume there is at least one character after the $, i.e., `P < PEND'. */ static boolean at_endline_loc_p (p, pend, syntax) const char *p, *pend; int syntax; { const char *next = p; boolean next_backslash = *next == '\\'; const char *next_next = p + 1 < pend ? p + 1 : NULL; return /* Before a subexpression? */ (syntax & RE_NO_BK_PARENS ? *next == ')' : next_backslash && next_next && *next_next == ')') /* Before an alternative? */ || (syntax & RE_NO_BK_VBAR ? *next == '|' : next_backslash && next_next && *next_next == '|'); } /* Returns true if REGNUM is in one of COMPILE_STACK's elements and false if it's not. */ static boolean group_in_compile_stack (compile_stack, regnum) compile_stack_type compile_stack; regnum_t regnum; { int this_element; for (this_element = compile_stack.avail - 1; this_element >= 0; this_element--) if (compile_stack.stack[this_element].regnum == regnum) return true; return false; } /* Read the ending character of a range (in a bracket expression) from the uncompiled pattern *P_PTR (which ends at PEND). We assume the starting character is in `P[-2]'. (`P[-1]' is the character `-'.) Then we set the translation of all bits between the starting and ending characters (inclusive) in the compiled pattern B. Return an error code. We use these short variable names so we can use the same macros as `regex_compile' itself. */ static reg_errcode_t compile_range (p_ptr, pend, translate, syntax, b) const char **p_ptr, *pend; char *translate; reg_syntax_t syntax; unsigned char *b; { unsigned this_char; const char *p = *p_ptr; int range_start, range_end; if (p == pend) return REG_ERANGE; /* Even though the pattern is a signed `char *', we need to fetch with unsigned char *'s; if the high bit of the pattern character is set, the range endpoints will be negative if we fetch using a signed char *. We also want to fetch the endpoints without translating them; the appropriate translation is done in the bit-setting loop below. */ range_start = ((unsigned char *) p)[-2]; range_end = ((unsigned char *) p)[0]; /* Have to increment the pointer into the pattern string, so the caller isn't still at the ending character. */ (*p_ptr)++; /* If the start is after the end, the range is empty. */ if (range_start > range_end) return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR; /* Here we see why `this_char' has to be larger than an `unsigned char' -- the range is inclusive, so if `range_end' == 0xff (assuming 8-bit characters), we would otherwise go into an infinite loop, since all characters <= 0xff. */ for (this_char = range_start; this_char <= range_end; this_char++) { SET_LIST_BIT (TRANSLATE (this_char)); } return REG_NOERROR; } /* Failure stack declarations and macros; both re_compile_fastmap and re_match_2 use a failure stack. These have to be macros because of REGEX_ALLOCATE. */ /* Number of failure points for which to initially allocate space when matching. If this number is exceeded, we allocate more space, so it is not a hard limit. */ #ifndef INIT_FAILURE_ALLOC #define INIT_FAILURE_ALLOC 5 #endif /* Roughly the maximum number of failure points on the stack. Would be exactly that if always used MAX_FAILURE_SPACE each time we failed. This is a variable only so users of regex can assign to it; we never change it ourselves. */ int re_max_failures = 2000; typedef const unsigned char *fail_stack_elt_t; typedef struct { fail_stack_elt_t *stack; unsigned size; unsigned avail; /* Offset of next open position. */ } fail_stack_type; #define FAIL_STACK_EMPTY() (fail_stack.avail == 0) #define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0) #define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size) #define FAIL_STACK_TOP() (fail_stack.stack[fail_stack.avail]) /* Initialize `fail_stack'. Do `return -2' if the alloc fails. */ #define INIT_FAIL_STACK() \ do { \ fail_stack.stack = (fail_stack_elt_t *) \ REGEX_ALLOCATE (INIT_FAILURE_ALLOC * sizeof (fail_stack_elt_t)); \ \ if (fail_stack.stack == NULL) \ return -2; \ \ fail_stack.size = INIT_FAILURE_ALLOC; \ fail_stack.avail = 0; \ } while (0) /* Double the size of FAIL_STACK, up to approximately `re_max_failures' items. Return 1 if succeeds, and 0 if either ran out of memory allocating space for it or it was already too large. REGEX_REALLOCATE requires `destination' be declared. */ #define DOUBLE_FAIL_STACK(fail_stack) \ ((fail_stack).size > re_max_failures * MAX_FAILURE_ITEMS \ ? 0 \ : ((fail_stack).stack = (fail_stack_elt_t *) \ REGEX_REALLOCATE ((fail_stack).stack, \ (fail_stack).size * sizeof (fail_stack_elt_t), \ ((fail_stack).size << 1) * sizeof (fail_stack_elt_t)), \ \ (fail_stack).stack == NULL \ ? 0 \ : ((fail_stack).size <<= 1, \ 1))) /* Push PATTERN_OP on FAIL_STACK. Return 1 if was able to do so and 0 if ran out of memory allocating space to do so. */ #define PUSH_PATTERN_OP(pattern_op, fail_stack) \ ((FAIL_STACK_FULL () \ && !DOUBLE_FAIL_STACK (fail_stack)) \ ? 0 \ : ((fail_stack).stack[(fail_stack).avail++] = pattern_op, \ 1)) /* This pushes an item onto the failure stack. Must be a four-byte value. Assumes the variable `fail_stack'. Probably should only be called from within `PUSH_FAILURE_POINT'. */ #define PUSH_FAILURE_ITEM(item) \ fail_stack.stack[fail_stack.avail++] = (fail_stack_elt_t) item /* The complement operation. Assumes `fail_stack' is nonempty. */ #define POP_FAILURE_ITEM() fail_stack.stack[--fail_stack.avail] /* Used to omit pushing failure point id's when we're not debugging. */ #ifdef DEBUG #define DEBUG_PUSH PUSH_FAILURE_ITEM #define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_ITEM () #else #define DEBUG_PUSH(item) #define DEBUG_POP(item_addr) #endif /* Push the information about the state we will need if we ever fail back to it. Requires variables fail_stack, regstart, regend, reg_info, and num_regs be declared. DOUBLE_FAIL_STACK requires `destination' be declared. Does `return FAILURE_CODE' if runs out of memory. */ #define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \ do { \ char *destination; \ /* Must be int, so when we don't save any registers, the arithmetic \ of 0 + -1 isn't done as unsigned. */ \ int this_reg; \ \ DEBUG_STATEMENT (failure_id++); \ DEBUG_STATEMENT (nfailure_points_pushed++); \ DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \ DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\ DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\ \ DEBUG_PRINT2 (" slots needed: %d\n", NUM_FAILURE_ITEMS); \ DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \ \ /* Ensure we have enough space allocated for what we will push. */ \ while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \ { \ if (!DOUBLE_FAIL_STACK (fail_stack)) \ return failure_code; \ \ DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \ (fail_stack).size); \ DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\ } \ \ /* Push the info, starting with the registers. */ \ DEBUG_PRINT1 ("\n"); \ \ for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \ this_reg++) \ { \ DEBUG_PRINT2 (" Pushing reg: %d\n", this_reg); \ DEBUG_STATEMENT (num_regs_pushed++); \ \ DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \ PUSH_FAILURE_ITEM (regstart[this_reg]); \ \ DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \ PUSH_FAILURE_ITEM (regend[this_reg]); \ \ DEBUG_PRINT2 (" info: 0x%x\n ", reg_info[this_reg]); \ DEBUG_PRINT2 (" match_null=%d", \ REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \ DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \ DEBUG_PRINT2 (" matched_something=%d", \ MATCHED_SOMETHING (reg_info[this_reg])); \ DEBUG_PRINT2 (" ever_matched=%d", \ EVER_MATCHED_SOMETHING (reg_info[this_reg])); \ DEBUG_PRINT1 ("\n"); \ PUSH_FAILURE_ITEM (reg_info[this_reg].word); \ } \ \ DEBUG_PRINT2 (" Pushing low active reg: %d\n", lowest_active_reg);\ PUSH_FAILURE_ITEM (lowest_active_reg); \ \ DEBUG_PRINT2 (" Pushing high active reg: %d\n", highest_active_reg);\ PUSH_FAILURE_ITEM (highest_active_reg); \ \ DEBUG_PRINT2 (" Pushing pattern 0x%x: ", pattern_place); \ DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \ PUSH_FAILURE_ITEM (pattern_place); \ \ DEBUG_PRINT2 (" Pushing string 0x%x: `", string_place); \ DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \ size2); \ DEBUG_PRINT1 ("'\n"); \ PUSH_FAILURE_ITEM (string_place); \ \ DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \ DEBUG_PUSH (failure_id); \ } while (0) /* This is the number of items that are pushed and popped on the stack for each register. */ #define NUM_REG_ITEMS 3 /* Individual items aside from the registers. */ #ifdef DEBUG #define NUM_NONREG_ITEMS 5 /* Includes failure point id. */ #else #define NUM_NONREG_ITEMS 4 #endif /* We push at most this many items on the stack. */ #define MAX_FAILURE_ITEMS ((num_regs - 1) * NUM_REG_ITEMS + NUM_NONREG_ITEMS) /* We actually push this many items. */ #define NUM_FAILURE_ITEMS \ ((highest_active_reg - lowest_active_reg + 1) * NUM_REG_ITEMS \ + NUM_NONREG_ITEMS) /* How many items can still be added to the stack without overflowing it. */ #define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail) /* Pops what PUSH_FAIL_STACK pushes. We restore into the parameters, all of which should be lvalues: STR -- the saved data position. PAT -- the saved pattern position. LOW_REG, HIGH_REG -- the highest and lowest active registers. REGSTART, REGEND -- arrays of string positions. REG_INFO -- array of information about each subexpression. Also assumes the variables `fail_stack' and (if debugging), `bufp', `pend', `string1', `size1', `string2', and `size2'. */ #define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\ { \ DEBUG_STATEMENT (fail_stack_elt_t failure_id;) \ int this_reg; \ const unsigned char *string_temp; \ \ assert (!FAIL_STACK_EMPTY ()); \ \ /* Remove failure points and point to how many regs pushed. */ \ DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \ DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \ DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \ \ assert (fail_stack.avail >= NUM_NONREG_ITEMS); \ \ DEBUG_POP (&failure_id); \ DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \ \ /* If the saved string location is NULL, it came from an \ on_failure_keep_string_jump opcode, and we want to throw away the \ saved NULL, thus retaining our current position in the string. */ \ string_temp = POP_FAILURE_ITEM (); \ if (string_temp != NULL) \ str = (const char *) string_temp; \ \ DEBUG_PRINT2 (" Popping string 0x%x: `", str); \ DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \ DEBUG_PRINT1 ("'\n"); \ \ pat = (unsigned char *) POP_FAILURE_ITEM (); \ DEBUG_PRINT2 (" Popping pattern 0x%x: ", pat); \ DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \ \ /* Restore register info. */ \ high_reg = (unsigned) POP_FAILURE_ITEM (); \ DEBUG_PRINT2 (" Popping high active reg: %d\n", high_reg); \ \ low_reg = (unsigned) POP_FAILURE_ITEM (); \ DEBUG_PRINT2 (" Popping low active reg: %d\n", low_reg); \ \ for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \ { \ DEBUG_PRINT2 (" Popping reg: %d\n", this_reg); \ \ reg_info[this_reg].word = POP_FAILURE_ITEM (); \ DEBUG_PRINT2 (" info: 0x%x\n", reg_info[this_reg]); \ \ regend[this_reg] = (const char *) POP_FAILURE_ITEM (); \ DEBUG_PRINT2 (" end: 0x%x\n", regend[this_reg]); \ \ regstart[this_reg] = (const char *) POP_FAILURE_ITEM (); \ DEBUG_PRINT2 (" start: 0x%x\n", regstart[this_reg]); \ } \ \ DEBUG_STATEMENT (nfailure_points_popped++); \ } /* POP_FAILURE_POINT */ /* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible characters can start a string that matches the pattern. This fastmap is used by re_search to skip quickly over impossible starting points. The caller must supply the address of a (1 << BYTEWIDTH)-byte data area as BUFP->fastmap. We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in the pattern buffer. Returns 0 if we succeed, -2 if an internal error. */ int re_compile_fastmap (bufp) struct re_pattern_buffer *bufp; { int j, k; fail_stack_type fail_stack; #ifndef REGEX_MALLOC char *destination; #endif /* We don't push any register information onto the failure stack. */ unsigned num_regs = 0; register char *fastmap = bufp->fastmap; unsigned char *pattern = bufp->buffer; unsigned long size = bufp->used; const unsigned char *p = pattern; register unsigned char *pend = pattern + size; /* Assume that each path through the pattern can be null until proven otherwise. We set this false at the bottom of switch statement, to which we get only if a particular path doesn't match the empty string. */ boolean path_can_be_null = true; /* We aren't doing a `succeed_n' to begin with. */ boolean succeed_n_p = false; assert (fastmap != NULL && p != NULL); INIT_FAIL_STACK (); bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */ bufp->fastmap_accurate = 1; /* It will be when we're done. */ bufp->can_be_null = 0; while (p != pend || !FAIL_STACK_EMPTY ()) { if (p == pend) { bufp->can_be_null |= path_can_be_null; /* Reset for next path. */ path_can_be_null = true; p = fail_stack.stack[--fail_stack.avail]; } /* We should never be about to go beyond the end of the pattern. */ assert (p < pend); #ifdef SWITCH_ENUM_BUG switch ((int) ((re_opcode_t) *p++)) #else switch ((re_opcode_t) *p++) #endif { /* I guess the idea here is to simply not bother with a fastmap if a backreference is used, since it's too hard to figure out the fastmap for the corresponding group. Setting `can_be_null' stops `re_search_2' from using the fastmap, so that is all we do. */ case duplicate: bufp->can_be_null = 1; return 0; /* Following are the cases which match a character. These end with `break'. */ case exactn: fastmap[p[1]] = 1; break; case charset: for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) fastmap[j] = 1; break; case charset_not: /* Chars beyond end of map must be allowed. */ for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++) fastmap[j] = 1; for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--) if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))) fastmap[j] = 1; break; case wordchar: for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) == Sword) fastmap[j] = 1; break; case notwordchar: for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) != Sword) fastmap[j] = 1; break; case anychar: /* `.' matches anything ... */ for (j = 0; j < (1 << BYTEWIDTH); j++) fastmap[j] = 1; /* ... except perhaps newline. */ if (!(bufp->syntax & RE_DOT_NEWLINE)) fastmap['\n'] = 0; /* Return if we have already set `can_be_null'; if we have, then the fastmap is irrelevant. Something's wrong here. */ else if (bufp->can_be_null) return 0; /* Otherwise, have to check alternative paths. */ break; #ifdef emacs case syntaxspec: k = *p++; for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) == (enum syntaxcode) k) fastmap[j] = 1; break; case notsyntaxspec: k = *p++; for (j = 0; j < (1 << BYTEWIDTH); j++) if (SYNTAX (j) != (enum syntaxcode) k) fastmap[j] = 1; break; /* All cases after this match the empty string. These end with `continue'. */ case before_dot: case at_dot: case after_dot: continue; #endif /* not emacs */ case no_op: case begline: case endline: case begbuf: case endbuf: case wordbound: case notwordbound: case wordbeg: case wordend: case push_dummy_failure: continue; case jump_n: case pop_failure_jump: case maybe_pop_jump: case jump: case jump_past_alt: case dummy_failure_jump: EXTRACT_NUMBER_AND_INCR (j, p); p += j; if (j > 0) continue; /* Jump backward implies we just went through the body of a loop and matched nothing. Opcode jumped to should be `on_failure_jump' or `succeed_n'. Just treat it like an ordinary jump. For a * loop, it has pushed its failure point already; if so, discard that as redundant. */ if ((re_opcode_t) *p != on_failure_jump && (re_opcode_t) *p != succeed_n) continue; p++; EXTRACT_NUMBER_AND_INCR (j, p); p += j; /* If what's on the stack is where we are now, pop it. */ if (!FAIL_STACK_EMPTY () && fail_stack.stack[fail_stack.avail - 1] == p) fail_stack.avail--; continue; case on_failure_jump: case on_failure_keep_string_jump: handle_on_failure_jump: EXTRACT_NUMBER_AND_INCR (j, p); /* For some patterns, e.g., `(a?)?', `p+j' here points to the end of the pattern. We don't want to push such a point, since when we restore it above, entering the switch will increment `p' past the end of the pattern. We don't need to push such a point since we obviously won't find any more fastmap entries beyond `pend'. Such a pattern can match the null string, though. */ if (p + j < pend) { if (!PUSH_PATTERN_OP (p + j, fail_stack)) return -2; } else bufp->can_be_null = 1; if (succeed_n_p) { EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */ succeed_n_p = false; } continue; case succeed_n: /* Get to the number of times to succeed. */ p += 2; /* Increment p past the n for when k != 0. */ EXTRACT_NUMBER_AND_INCR (k, p); if (k == 0) { p -= 4; succeed_n_p = true; /* Spaghetti code alert. */ goto handle_on_failure_jump; } continue; case set_number_at: p += 4; continue; case start_memory: case stop_memory: p += 2; continue; default: abort (); /* We have listed all the cases. */ } /* switch *p++ */ /* Getting here means we have found the possible starting characters for one path of the pattern -- and that the empty string does not match. We need not follow this path further. Instead, look at the next alternative (remembered on the stack), or quit if no more. The test at the top of the loop does these things. */ path_can_be_null = false; p = pend; } /* while p */ /* Set `can_be_null' for the last path (also the first path, if the pattern is empty). */ bufp->can_be_null |= path_can_be_null; return 0; } /* re_compile_fastmap */ /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (bufp, regs, num_regs, starts, ends) struct re_pattern_buffer *bufp; struct re_registers *regs; unsigned num_regs; regoff_t *starts, *ends; { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = (regoff_t) 0; } } /* Searching routines. */ /* Like re_search_2, below, but only one string is specified, and doesn't let you say where to stop matching. */ int re_search (bufp, string, size, startpos, range, regs) struct re_pattern_buffer *bufp; const char *string; int size, startpos, range; struct re_registers *regs; { return re_search_2 (bufp, NULL, 0, string, size, startpos, range, regs, size); } /* Using the compiled pattern in BUFP->buffer, first tries to match the virtual concatenation of STRING1 and STRING2, starting first at index STARTPOS, then at STARTPOS + 1, and so on. STRING1 and STRING2 have length SIZE1 and SIZE2, respectively. RANGE is how far to scan while trying to match. RANGE = 0 means try only at STARTPOS; in general, the last start tried is STARTPOS + RANGE. In REGS, return the indices of the virtual concatenation of STRING1 and STRING2 that matched the entire BUFP->buffer and its contained subexpressions. Do not consider matching one past the index STOP in the virtual concatenation of STRING1 and STRING2. We return either the position in the strings at which the match was found, -1 if no match, or -2 if error (such as failure stack overflow). */ int re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; int size1, size2; int startpos; int range; struct re_registers *regs; int stop; { int val; register char *fastmap = bufp->fastmap; register char *translate = bufp->translate; int total_size = size1 + size2; int endpos = startpos + range; /* Check for out-of-range STARTPOS. */ if (startpos < 0 || startpos > total_size) return -1; /* Fix up RANGE if it might eventually take us outside the virtual concatenation of STRING1 and STRING2. */ if (endpos < -1) range = -1 - startpos; else if (endpos > total_size) range = total_size - startpos; /* If the search isn't to be a backwards one, don't waste time in a search for a pattern that must be anchored. */ if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == begbuf && range > 0) { if (startpos > 0) return -1; else range = 1; } /* Update the fastmap now if not correct already. */ if (fastmap && !bufp->fastmap_accurate) if (re_compile_fastmap (bufp) == -2) return -2; /* Loop through the string, looking for a place to start matching. */ for (;;) { /* If a fastmap is supplied, skip quickly over characters that cannot be the start of a match. If the pattern can match the null string, however, we don't need to skip characters; we want the first null string. */ if (fastmap && startpos < total_size && !bufp->can_be_null) { if (range > 0) /* Searching forwards. */ { register const char *d; register int lim = 0; int irange = range; if (startpos < size1 && startpos + range >= size1) lim = range - (size1 - startpos); d = (startpos >= size1 ? string2 - size1 : string1) + startpos; /* Written out as an if-else to avoid testing `translate' inside the loop. */ if (translate) while (range > lim && !fastmap[(unsigned char) translate[(unsigned char) *d++]]) range--; else while (range > lim && !fastmap[(unsigned char) *d++]) range--; startpos += irange - range; } else /* Searching backwards. */ { register char c = (size1 == 0 || startpos >= size1 ? string2[startpos - size1] : string1[startpos]); if (!fastmap[(unsigned char) TRANSLATE (c)]) goto advance; } } /* If can't match the null string, and that's all we have left, fail. */ if (range >= 0 && startpos == total_size && fastmap && !bufp->can_be_null) return -1; val = re_match_2 (bufp, string1, size1, string2, size2, startpos, regs, stop); if (val >= 0) return startpos; if (val == -2) return -2; advance: if (!range) break; else if (range > 0) { range--; startpos++; } else { range++; startpos--; } } return -1; } /* re_search_2 */ /* Declarations and macros for re_match_2. */ static int bcmp_translate (); static boolean alt_match_null_string_p (), common_op_match_null_string_p (), group_match_null_string_p (); /* Structure for per-register (a.k.a. per-group) information. This must not be longer than one word, because we push this value onto the failure stack. Other register information, such as the starting and ending positions (which are addresses), and the list of inner groups (which is a bits list) are maintained in separate variables. We are making a (strictly speaking) nonportable assumption here: that the compiler will pack our bit fields into something that fits into the type of `word', i.e., is something that fits into one item on the failure stack. */ typedef union { fail_stack_elt_t word; struct { /* This field is one if this group can match the empty string, zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */ #define MATCH_NULL_UNSET_VALUE 3 unsigned match_null_string_p : 2; unsigned is_active : 1; unsigned matched_something : 1; unsigned ever_matched_something : 1; } bits; } register_info_type; #define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p) #define IS_ACTIVE(R) ((R).bits.is_active) #define MATCHED_SOMETHING(R) ((R).bits.matched_something) #define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something) /* Call this when have matched a real character; it sets `matched' flags for the subexpressions which we are currently inside. Also records that those subexprs have matched. */ #define SET_REGS_MATCHED() \ do \ { \ unsigned r; \ for (r = lowest_active_reg; r <= highest_active_reg; r++) \ { \ MATCHED_SOMETHING (reg_info[r]) \ = EVER_MATCHED_SOMETHING (reg_info[r]) \ = 1; \ } \ } \ while (0) /* This converts PTR, a pointer into one of the search strings `string1' and `string2' into an offset from the beginning of that string. */ #define POINTER_TO_OFFSET(ptr) \ (FIRST_STRING_P (ptr) ? (ptr) - string1 : (ptr) - string2 + size1) /* Registers are set to a sentinel when they haven't yet matched. */ #define REG_UNSET_VALUE ((char *) -1) #define REG_UNSET(e) ((e) == REG_UNSET_VALUE) /* Macros for dealing with the split strings in re_match_2. */ #define MATCHING_IN_FIRST_STRING (dend == end_match_1) /* Call before fetching a character with *d. This switches over to string2 if necessary. */ #define PREFETCH() \ while (d == dend) \ { \ /* End of string2 => fail. */ \ if (dend == end_match_2) \ goto fail; \ /* End of string1 => advance to string2. */ \ d = string2; \ dend = end_match_2; \ } /* Test if at very beginning or at very end of the virtual concatenation of `string1' and `string2'. If only one string, it's `string2'. */ #define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2) #define AT_STRINGS_END(d) ((d) == end2) /* Test if D points to a character which is word-constituent. We have two special cases to check for: if past the end of string1, look at the first character in string2; and if before the beginning of string2, look at the last character in string1. */ #define WORDCHAR_P(d) \ (SYNTAX ((d) == end1 ? *string2 \ : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \ == Sword) /* Test if the character before D and the one at D differ with respect to being word-constituent. */ #define AT_WORD_BOUNDARY(d) \ (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \ || WORDCHAR_P (d - 1) != WORDCHAR_P (d)) /* Free everything we malloc. */ #ifdef REGEX_MALLOC #define FREE_VAR(var) if (var) free (var); var = NULL #define FREE_VARIABLES() \ do { \ FREE_VAR (fail_stack.stack); \ FREE_VAR (regstart); \ FREE_VAR (regend); \ FREE_VAR (old_regstart); \ FREE_VAR (old_regend); \ FREE_VAR (best_regstart); \ FREE_VAR (best_regend); \ FREE_VAR (reg_info); \ FREE_VAR (reg_dummy); \ FREE_VAR (reg_info_dummy); \ } while (0) #else /* not REGEX_MALLOC */ /* Some MIPS systems (at least) want this to free alloca'd storage. */ #define FREE_VARIABLES() alloca (0) #endif /* not REGEX_MALLOC */ /* These values must meet several constraints. They must not be valid register values; since we have a limit of 255 registers (because we use only one byte in the pattern for the register number), we can use numbers larger than 255. They must differ by 1, because of NUM_FAILURE_ITEMS above. And the value for the lowest register must be larger than the value for the highest register, so we do not try to actually save any registers when none are active. */ #define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH) #define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1) /* Matching routines. */ #ifndef emacs /* Emacs never uses this. */ /* re_match is like re_match_2 except it takes only a single string. */ int re_match (bufp, string, size, pos, regs) struct re_pattern_buffer *bufp; const char *string; int size, pos; struct re_registers *regs; { return re_match_2 (bufp, NULL, 0, string, size, pos, regs, size); } #endif /* not emacs */ /* re_match_2 matches the compiled pattern in BUFP against the the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1 and SIZE2, respectively). We start matching at POS, and stop matching at STOP. If REGS is non-null and the `no_sub' field of BUFP is nonzero, we store offsets for the substring each group matched in REGS. See the documentation for exactly how many groups we fill. We return -1 if no match, -2 if an internal error (such as the failure stack overflowing). Otherwise, we return the length of the matched substring. */ int re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; int size1, size2; int pos; struct re_registers *regs; int stop; { /* General temporaries. */ int mcnt; unsigned char *p1; /* Just past the end of the corresponding string. */ const char *end1, *end2; /* Pointers into string1 and string2, just past the last characters in each to consider matching. */ const char *end_match_1, *end_match_2; /* Where we are in the data, and the end of the current string. */ const char *d, *dend; /* Where we are in the pattern, and the end of the pattern. */ unsigned char *p = bufp->buffer; register unsigned char *pend = p + bufp->used; /* We use this to map every character in the string. */ char *translate = bufp->translate; /* Failure point stack. Each place that can handle a failure further down the line pushes a failure point on this stack. It consists of restart, regend, and reg_info for all registers corresponding to the subexpressions we're currently inside, plus the number of such registers, and, finally, two char *'s. The first char * is where to resume scanning the pattern; the second one is where to resume scanning the strings. If the latter is zero, the failure point is a ``dummy''; if a failure happens and the failure point is a dummy, it gets discarded and the next next one is tried. */ fail_stack_type fail_stack; #ifdef DEBUG static unsigned failure_id = 0; unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0; #endif /* We fill all the registers internally, independent of what we return, for use in backreferences. The number here includes an element for register zero. */ unsigned num_regs = bufp->re_nsub + 1; /* The currently active registers. */ unsigned lowest_active_reg = NO_LOWEST_ACTIVE_REG; unsigned highest_active_reg = NO_HIGHEST_ACTIVE_REG; /* Information on the contents of registers. These are pointers into the input strings; they record just what was matched (on this attempt) by a subexpression part of the pattern, that is, the regnum-th regstart pointer points to where in the pattern we began matching and the regnum-th regend points to right after where we stopped matching the regnum-th subexpression. (The zeroth register keeps track of what the whole pattern matches.) */ const char **regstart, **regend; /* If a group that's operated upon by a repetition operator fails to match anything, then the register for its start will need to be restored because it will have been set to wherever in the string we are when we last see its open-group operator. Similarly for a register's end. */ const char **old_regstart, **old_regend; /* The is_active field of reg_info helps us keep track of which (possibly nested) subexpressions we are currently in. The matched_something field of reg_info[reg_num] helps us tell whether or not we have matched any of the pattern so far this time through the reg_num-th subexpression. These two fields get reset each time through any loop their register is in. */ register_info_type *reg_info; /* The following record the register info as found in the above variables when we find a match better than any we've seen before. This happens as we backtrack through the failure points, which in turn happens only if we have not yet matched the entire string. */ unsigned best_regs_set = false; const char **best_regstart, **best_regend; /* Logically, this is `best_regend[0]'. But we don't want to have to allocate space for that if we're not allocating space for anything else (see below). Also, we never need info about register 0 for any of the other register vectors, and it seems rather a kludge to treat `best_regend' differently than the rest. So we keep track of the end of the best match so far in a separate variable. We initialize this to NULL so that when we backtrack the first time and need to test it, it's not garbage. */ const char *match_end = NULL; /* Used when we pop values we don't care about. */ const char **reg_dummy; register_info_type *reg_info_dummy; #ifdef DEBUG /* Counts the total number of registers pushed. */ unsigned num_regs_pushed = 0; #endif DEBUG_PRINT1 ("\n\nEntering re_match_2.\n"); INIT_FAIL_STACK (); /* Do not bother to initialize all the register variables if there are no groups in the pattern, as it takes a fair amount of time. If there are groups, we include space for register 0 (the whole pattern), even though we never use it, since it simplifies the array indexing. We should fix this. */ if (bufp->re_nsub) { regstart = REGEX_TALLOC (num_regs, const char *); regend = REGEX_TALLOC (num_regs, const char *); old_regstart = REGEX_TALLOC (num_regs, const char *); old_regend = REGEX_TALLOC (num_regs, const char *); best_regstart = REGEX_TALLOC (num_regs, const char *); best_regend = REGEX_TALLOC (num_regs, const char *); reg_info = REGEX_TALLOC (num_regs, register_info_type); reg_dummy = REGEX_TALLOC (num_regs, const char *); reg_info_dummy = REGEX_TALLOC (num_regs, register_info_type); if (!(regstart && regend && old_regstart && old_regend && reg_info && best_regstart && best_regend && reg_dummy && reg_info_dummy)) { FREE_VARIABLES (); return -2; } } #ifdef REGEX_MALLOC else { /* We must initialize all our variables to NULL, so that `FREE_VARIABLES' doesn't try to free them. */ regstart = regend = old_regstart = old_regend = best_regstart = best_regend = reg_dummy = NULL; reg_info = reg_info_dummy = (register_info_type *) NULL; } #endif /* REGEX_MALLOC */ /* The starting position is bogus. */ if (pos < 0 || pos > size1 + size2) { FREE_VARIABLES (); return -1; } /* Initialize subexpression text positions to -1 to mark ones that no start_memory/stop_memory has been seen for. Also initialize the register information struct. */ for (mcnt = 1; mcnt < num_regs; mcnt++) { regstart[mcnt] = regend[mcnt] = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE; REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE; IS_ACTIVE (reg_info[mcnt]) = 0; MATCHED_SOMETHING (reg_info[mcnt]) = 0; EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0; } /* We move `string1' into `string2' if the latter's empty -- but not if `string1' is null. */ if (size2 == 0 && string1 != NULL) { string2 = string1; size2 = size1; string1 = 0; size1 = 0; } end1 = string1 + size1; end2 = string2 + size2; /* Compute where to stop matching, within the two strings. */ if (stop <= size1) { end_match_1 = string1 + stop; end_match_2 = string2; } else { end_match_1 = end1; end_match_2 = string2 + stop - size1; } /* `p' scans through the pattern as `d' scans through the data. `dend' is the end of the input string that `d' points within. `d' is advanced into the following input string whenever necessary, but this happens before fetching; therefore, at the beginning of the loop, `d' can be pointing at the end of a string, but it cannot equal `string2'. */ if (size1 > 0 && pos <= size1) { d = string1 + pos; dend = end_match_1; } else { d = string2 + pos - size1; dend = end_match_2; } DEBUG_PRINT1 ("The compiled pattern is: "); DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend); DEBUG_PRINT1 ("The string to match is: `"); DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2); DEBUG_PRINT1 ("'\n"); /* This loops over pattern commands. It exits by returning from the function if the match is complete, or it drops through if the match fails at this starting point in the input data. */ for (;;) { DEBUG_PRINT2 ("\n0x%x: ", p); if (p == pend) { /* End of pattern means we might have succeeded. */ DEBUG_PRINT1 ("end of pattern ... "); /* If we haven't matched the entire string, and we want the longest match, try backtracking. */ if (d != end_match_2) { DEBUG_PRINT1 ("backtracking.\n"); if (!FAIL_STACK_EMPTY ()) { /* More failure points to try. */ boolean same_str_p = (FIRST_STRING_P (match_end) == MATCHING_IN_FIRST_STRING); /* If exceeds best match so far, save it. */ if (!best_regs_set || (same_str_p && d > match_end) || (!same_str_p && !MATCHING_IN_FIRST_STRING)) { best_regs_set = true; match_end = d; DEBUG_PRINT1 ("\nSAVING match as best so far.\n"); for (mcnt = 1; mcnt < num_regs; mcnt++) { best_regstart[mcnt] = regstart[mcnt]; best_regend[mcnt] = regend[mcnt]; } } goto fail; } /* If no failure points, don't restore garbage. */ else if (best_regs_set) { restore_best_regs: /* Restore best match. It may happen that `dend == end_match_1' while the restored d is in string2. For example, the pattern `x.*y.*z' against the strings `x-' and `y-z-', if the two strings are not consecutive in memory. */ DEBUG_PRINT1 ("Restoring best registers.\n"); d = match_end; dend = ((d >= string1 && d <= end1) ? end_match_1 : end_match_2); for (mcnt = 1; mcnt < num_regs; mcnt++) { regstart[mcnt] = best_regstart[mcnt]; regend[mcnt] = best_regend[mcnt]; } } } /* d != end_match_2 */ DEBUG_PRINT1 ("Accepting match.\n"); /* If caller wants register contents data back, do it. */ if (regs && !bufp->no_sub) { /* Have the register data arrays been allocated? */ if (bufp->regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. We need one extra element beyond `num_regs' for the `-1' marker GNU code uses. */ regs->num_regs = MAX (RE_NREGS, num_regs + 1); regs->start = TALLOC (regs->num_regs, regoff_t); regs->end = TALLOC (regs->num_regs, regoff_t); if (regs->start == NULL || regs->end == NULL) return -2; bufp->regs_allocated = REGS_REALLOCATE; } else if (bufp->regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (regs->num_regs < num_regs + 1) { regs->num_regs = num_regs + 1; RETALLOC (regs->start, regs->num_regs, regoff_t); RETALLOC (regs->end, regs->num_regs, regoff_t); if (regs->start == NULL || regs->end == NULL) return -2; } } else assert (bufp->regs_allocated == REGS_FIXED); /* Convert the pointer data in `regstart' and `regend' to indices. Register zero has to be set differently, since we haven't kept track of any info for it. */ if (regs->num_regs > 0) { regs->start[0] = pos; regs->end[0] = (MATCHING_IN_FIRST_STRING ? d - string1 : d - string2 + size1); } /* Go through the first `min (num_regs, regs->num_regs)' registers, since that is all we initialized. */ for (mcnt = 1; mcnt < MIN (num_regs, regs->num_regs); mcnt++) { if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt])) regs->start[mcnt] = regs->end[mcnt] = -1; else { regs->start[mcnt] = POINTER_TO_OFFSET (regstart[mcnt]); regs->end[mcnt] = POINTER_TO_OFFSET (regend[mcnt]); } } /* If the regs structure we return has more elements than were in the pattern, set the extra elements to -1. If we (re)allocated the registers, this is the case, because we always allocate enough to have at least one -1 at the end. */ for (mcnt = num_regs; mcnt < regs->num_regs; mcnt++) regs->start[mcnt] = regs->end[mcnt] = -1; } /* regs && !bufp->no_sub */ FREE_VARIABLES (); DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n", nfailure_points_pushed, nfailure_points_popped, nfailure_points_pushed - nfailure_points_popped); DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed); mcnt = d - pos - (MATCHING_IN_FIRST_STRING ? string1 : string2 - size1); DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt); return mcnt; } /* Otherwise match next pattern command. */ #ifdef SWITCH_ENUM_BUG switch ((int) ((re_opcode_t) *p++)) #else switch ((re_opcode_t) *p++) #endif { /* Ignore these. Used to ignore the n of succeed_n's which currently have n == 0. */ case no_op: DEBUG_PRINT1 ("EXECUTING no_op.\n"); break; /* Match the next n pattern characters exactly. The following byte in the pattern defines n, and the n bytes after that are the characters to match. */ case exactn: mcnt = *p++; DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt); /* This is written out as an if-else so we don't waste time testing `translate' inside the loop. */ if (translate) { do { PREFETCH (); if (translate[(unsigned char) *d++] != (char) *p++) goto fail; } while (--mcnt); } else { do { PREFETCH (); if (*d++ != (char) *p++) goto fail; } while (--mcnt); } SET_REGS_MATCHED (); break; /* Match any character except possibly a newline or a null. */ case anychar: DEBUG_PRINT1 ("EXECUTING anychar.\n"); PREFETCH (); if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n') || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000')) goto fail; SET_REGS_MATCHED (); DEBUG_PRINT2 (" Matched `%d'.\n", *d); d++; break; case charset: case charset_not: { register unsigned char c; boolean not = (re_opcode_t) *(p - 1) == charset_not; DEBUG_PRINT2 ("EXECUTING charset%s.\n", not ? "_not" : ""); PREFETCH (); c = TRANSLATE (*d); /* The character to match. */ /* Cast to `unsigned' instead of `unsigned char' in case the bit list is a full 32 bytes long. */ if (c < (unsigned) (*p * BYTEWIDTH) && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) not = !not; p += 1 + *p; if (!not) goto fail; SET_REGS_MATCHED (); d++; break; } /* The beginning of a group is represented by start_memory. The arguments are the register number in the next byte, and the number of groups inner to this one in the next. The text matched within the group is recorded (in the internal registers data structure) under the register number. */ case start_memory: DEBUG_PRINT3 ("EXECUTING start_memory %d (%d):\n", *p, p[1]); /* Find out if this group can match the empty string. */ p1 = p; /* To send to group_match_null_string_p. */ if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE) REG_MATCH_NULL_STRING_P (reg_info[*p]) = group_match_null_string_p (&p1, pend, reg_info); /* Save the position in the string where we were the last time we were at this open-group operator in case the group is operated upon by a repetition operator, e.g., with `(a*)*b' against `ab'; then we want to ignore where we are now in the string in case this attempt to match fails. */ old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) ? REG_UNSET (regstart[*p]) ? d : regstart[*p] : regstart[*p]; DEBUG_PRINT2 (" old_regstart: %d\n", POINTER_TO_OFFSET (old_regstart[*p])); regstart[*p] = d; DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p])); IS_ACTIVE (reg_info[*p]) = 1; MATCHED_SOMETHING (reg_info[*p]) = 0; /* This is the new highest active register. */ highest_active_reg = *p; /* If nothing was active before, this is the new lowest active register. */ if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) lowest_active_reg = *p; /* Move past the register number and inner group count. */ p += 2; break; /* The stop_memory opcode represents the end of a group. Its arguments are the same as start_memory's: the register number, and the number of inner groups. */ case stop_memory: DEBUG_PRINT3 ("EXECUTING stop_memory %d (%d):\n", *p, p[1]); /* We need to save the string position the last time we were at this close-group operator in case the group is operated upon by a repetition operator, e.g., with `((a*)*(b*)*)*' against `aba'; then we want to ignore where we are now in the string in case this attempt to match fails. */ old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p]) ? REG_UNSET (regend[*p]) ? d : regend[*p] : regend[*p]; DEBUG_PRINT2 (" old_regend: %d\n", POINTER_TO_OFFSET (old_regend[*p])); regend[*p] = d; DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p])); /* This register isn't active anymore. */ IS_ACTIVE (reg_info[*p]) = 0; /* If this was the only register active, nothing is active anymore. */ if (lowest_active_reg == highest_active_reg) { lowest_active_reg = NO_LOWEST_ACTIVE_REG; highest_active_reg = NO_HIGHEST_ACTIVE_REG; } else { /* We must scan for the new highest active register, since it isn't necessarily one less than now: consider (a(b)c(d(e)f)g). When group 3 ends, after the f), the new highest active register is 1. */ unsigned char r = *p - 1; while (r > 0 && !IS_ACTIVE (reg_info[r])) r--; /* If we end up at register zero, that means that we saved the registers as the result of an `on_failure_jump', not a `start_memory', and we jumped to past the innermost `stop_memory'. For example, in ((.)*) we save registers 1 and 2 as a result of the *, but when we pop back to the second ), we are at the stop_memory 1. Thus, nothing is active. */ if (r == 0) { lowest_active_reg = NO_LOWEST_ACTIVE_REG; highest_active_reg = NO_HIGHEST_ACTIVE_REG; } else highest_active_reg = r; } /* If just failed to match something this time around with a group that's operated on by a repetition operator, try to force exit from the ``loop'', and restore the register information for this group that we had before trying this last match. */ if ((!MATCHED_SOMETHING (reg_info[*p]) || (re_opcode_t) p[-3] == start_memory) && (p + 2) < pend) { boolean is_a_jump_n = false; p1 = p + 2; mcnt = 0; switch ((re_opcode_t) *p1++) { case jump_n: is_a_jump_n = true; case pop_failure_jump: case maybe_pop_jump: case jump: case dummy_failure_jump: EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (is_a_jump_n) p1 += 2; break; default: /* do nothing */ ; } p1 += mcnt; /* If the next operation is a jump backwards in the pattern to an on_failure_jump right before the start_memory corresponding to this stop_memory, exit from the loop by forcing a failure after pushing on the stack the on_failure_jump's jump in the pattern, and d. */ if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump && (re_opcode_t) p1[3] == start_memory && p1[4] == *p) { /* If this group ever matched anything, then restore what its registers were before trying this last failed match, e.g., with `(a*)*b' against `ab' for regstart[1], and, e.g., with `((a*)*(b*)*)*' against `aba' for regend[3]. Also restore the registers for inner groups for, e.g., `((a*)(b*))*' against `aba' (register 3 would otherwise get trashed). */ if (EVER_MATCHED_SOMETHING (reg_info[*p])) { unsigned r; EVER_MATCHED_SOMETHING (reg_info[*p]) = 0; /* Restore this and inner groups' (if any) registers. */ for (r = *p; r < *p + *(p + 1); r++) { regstart[r] = old_regstart[r]; /* xx why this test? */ if ((int) old_regend[r] >= (int) regstart[r]) regend[r] = old_regend[r]; } } p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); PUSH_FAILURE_POINT (p1 + mcnt, d, -2); goto fail; } } /* Move past the register number and the inner group count. */ p += 2; break; /* \ has been turned into a `duplicate' command which is followed by the numeric value of as the register number. */ case duplicate: { register const char *d2, *dend2; int regno = *p++; /* Get which register to match against. */ DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno); /* Can't back reference a group which we've never matched. */ if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno])) goto fail; /* Where in input to try to start matching. */ d2 = regstart[regno]; /* Where to stop matching; if both the place to start and the place to stop matching are in the same string, then set to the place to stop, otherwise, for now have to use the end of the first string. */ dend2 = ((FIRST_STRING_P (regstart[regno]) == FIRST_STRING_P (regend[regno])) ? regend[regno] : end_match_1); for (;;) { /* If necessary, advance to next segment in register contents. */ while (d2 == dend2) { if (dend2 == end_match_2) break; if (dend2 == regend[regno]) break; /* End of string1 => advance to string2. */ d2 = string2; dend2 = regend[regno]; } /* At end of register contents => success */ if (d2 == dend2) break; /* If necessary, advance to next segment in data. */ PREFETCH (); /* How many characters left in this segment to match. */ mcnt = dend - d; /* Want how many consecutive characters we can match in one shot, so, if necessary, adjust the count. */ if (mcnt > dend2 - d2) mcnt = dend2 - d2; /* Compare that many; failure if mismatch, else move past them. */ if (translate ? bcmp_translate (d, d2, mcnt, translate) : bcmp (d, d2, mcnt)) goto fail; d += mcnt, d2 += mcnt; } } break; /* begline matches the empty string at the beginning of the string (unless `not_bol' is set in `bufp'), and, if `newline_anchor' is set, after newlines. */ case begline: DEBUG_PRINT1 ("EXECUTING begline.\n"); if (AT_STRINGS_BEG (d)) { if (!bufp->not_bol) break; } else if (d[-1] == '\n' && bufp->newline_anchor) { break; } /* In all other cases, we fail. */ goto fail; /* endline is the dual of begline. */ case endline: DEBUG_PRINT1 ("EXECUTING endline.\n"); if (AT_STRINGS_END (d)) { if (!bufp->not_eol) break; } /* We have to ``prefetch'' the next character. */ else if ((d == end1 ? *string2 : *d) == '\n' && bufp->newline_anchor) { break; } goto fail; /* Match at the very beginning of the data. */ case begbuf: DEBUG_PRINT1 ("EXECUTING begbuf.\n"); if (AT_STRINGS_BEG (d)) break; goto fail; /* Match at the very end of the data. */ case endbuf: DEBUG_PRINT1 ("EXECUTING endbuf.\n"); if (AT_STRINGS_END (d)) break; goto fail; /* on_failure_keep_string_jump is used to optimize `.*\n'. It pushes NULL as the value for the string on the stack. Then `pop_failure_point' will keep the current value for the string, instead of restoring it. To see why, consider matching `foo\nbar' against `.*\n'. The .* matches the foo; then the . fails against the \n. But the next thing we want to do is match the \n against the \n; if we restored the string value, we would be back at the foo. Because this is used only in specific cases, we don't need to check all the things that `on_failure_jump' does, to make sure the right things get saved on the stack. Hence we don't share its code. The only reason to push anything on the stack at all is that otherwise we would have to change `anychar's code to do something besides goto fail in this case; that seems worse than this. */ case on_failure_keep_string_jump: DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump"); EXTRACT_NUMBER_AND_INCR (mcnt, p); DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt); PUSH_FAILURE_POINT (p + mcnt, NULL, -2); break; /* Uses of on_failure_jump: Each alternative starts with an on_failure_jump that points to the beginning of the next alternative. Each alternative except the last ends with a jump that in effect jumps past the rest of the alternatives. (They really jump to the ending jump of the following alternative, because tensioning these jumps is a hassle.) Repeats start with an on_failure_jump that points past both the repetition text and either the following jump or pop_failure_jump back to this on_failure_jump. */ case on_failure_jump: on_failure: DEBUG_PRINT1 ("EXECUTING on_failure_jump"); EXTRACT_NUMBER_AND_INCR (mcnt, p); DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt); /* If this on_failure_jump comes right before a group (i.e., the original * applied to a group), save the information for that group and all inner ones, so that if we fail back to this point, the group's information will be correct. For example, in \(a*\)*\1, we need the preceding group, and in \(\(a*\)b*\)\2, we need the inner group. */ /* We can't use `p' to check ahead because we push a failure point to `p + mcnt' after we do this. */ p1 = p; /* We need to skip no_op's before we look for the start_memory in case this on_failure_jump is happening as the result of a completed succeed_n, as in \(a\)\{1,3\}b\1 against aba. */ while (p1 < pend && (re_opcode_t) *p1 == no_op) p1++; if (p1 < pend && (re_opcode_t) *p1 == start_memory) { /* We have a new highest active register now. This will get reset at the start_memory we are about to get to, but we will have saved all the registers relevant to this repetition op, as described above. */ highest_active_reg = *(p1 + 1) + *(p1 + 2); if (lowest_active_reg == NO_LOWEST_ACTIVE_REG) lowest_active_reg = *(p1 + 1); } DEBUG_PRINT1 (":\n"); PUSH_FAILURE_POINT (p + mcnt, d, -2); break; /* A smart repeat ends with `maybe_pop_jump'. We change it to either `pop_failure_jump' or `jump'. */ case maybe_pop_jump: EXTRACT_NUMBER_AND_INCR (mcnt, p); DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt); { register unsigned char *p2 = p; /* Compare the beginning of the repeat with what in the pattern follows its end. If we can establish that there is nothing that they would both match, i.e., that we would have to backtrack because of (as in, e.g., `a*a') then we can change to pop_failure_jump, because we'll never have to backtrack. This is not true in the case of alternatives: in `(a|ab)*' we do need to backtrack to the `ab' alternative (e.g., if the string was `ab'). But instead of trying to detect that here, the alternative has put on a dummy failure point which is what we will end up popping. */ /* Skip over open/close-group commands. */ while (p2 + 2 < pend && ((re_opcode_t) *p2 == stop_memory || (re_opcode_t) *p2 == start_memory)) p2 += 3; /* Skip over args, too. */ /* If we're at the end of the pattern, we can change. */ if (p2 == pend) { /* Consider what happens when matching ":\(.*\)" against ":/". I don't really understand this code yet. */ p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" End of pattern: change to `pop_failure_jump'.\n"); } else if ((re_opcode_t) *p2 == exactn || (bufp->newline_anchor && (re_opcode_t) *p2 == endline)) { register unsigned char c = *p2 == (unsigned char) endline ? '\n' : p2[2]; p1 = p + mcnt; /* p1[0] ... p1[2] are the `on_failure_jump' corresponding to the `maybe_finalize_jump' of this case. Examine what follows. */ if ((re_opcode_t) p1[3] == exactn && p1[5] != c) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n", c, p1[5]); } else if ((re_opcode_t) p1[3] == charset || (re_opcode_t) p1[3] == charset_not) { int not = (re_opcode_t) p1[3] == charset_not; if (c < (unsigned char) (p1[4] * BYTEWIDTH) && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH))) not = !not; /* `not' is equal to 1 if c would match, which means that we can't change to pop_failure_jump. */ if (!not) { p[-3] = (unsigned char) pop_failure_jump; DEBUG_PRINT1 (" No match => pop_failure_jump.\n"); } } } } p -= 2; /* Point at relative address again. */ if ((re_opcode_t) p[-1] != pop_failure_jump) { p[-1] = (unsigned char) jump; DEBUG_PRINT1 (" Match => jump.\n"); goto unconditional_jump; } /* Note fall through. */ /* The end of a simple repeat has a pop_failure_jump back to its matching on_failure_jump, where the latter will push a failure point. The pop_failure_jump takes off failure points put on by this pop_failure_jump's matching on_failure_jump; we got through the pattern to here from the matching on_failure_jump, so didn't fail. */ case pop_failure_jump: { /* We need to pass separate storage for the lowest and highest registers, even though we don't care about the actual values. Otherwise, we will restore only one register from the stack, since lowest will == highest in `pop_failure_point'. */ unsigned dummy_low_reg, dummy_high_reg; unsigned char *pdummy; const char *sdummy; DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n"); POP_FAILURE_POINT (sdummy, pdummy, dummy_low_reg, dummy_high_reg, reg_dummy, reg_dummy, reg_info_dummy); } /* Note fall through. */ /* Unconditionally jump (without popping any failure points). */ case jump: unconditional_jump: EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */ DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt); p += mcnt; /* Do the jump. */ DEBUG_PRINT2 ("(to 0x%x).\n", p); break; /* We need this opcode so we can detect where alternatives end in `group_match_null_string_p' et al. */ case jump_past_alt: DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n"); goto unconditional_jump; /* Normally, the on_failure_jump pushes a failure point, which then gets popped at pop_failure_jump. We will end up at pop_failure_jump, also, and with a pattern of, say, `a+', we are skipping over the on_failure_jump, so we have to push something meaningless for pop_failure_jump to pop. */ case dummy_failure_jump: DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n"); /* It doesn't matter what we push for the string here. What the code at `fail' tests is the value for the pattern. */ PUSH_FAILURE_POINT (0, 0, -2); goto unconditional_jump; /* At the end of an alternative, we need to push a dummy failure point in case we are followed by a `pop_failure_jump', because we don't want the failure point for the alternative to be popped. For example, matching `(a|ab)*' against `aab' requires that we match the `ab' alternative. */ case push_dummy_failure: DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n"); /* See comments just above at `dummy_failure_jump' about the two zeroes. */ PUSH_FAILURE_POINT (0, 0, -2); break; /* Have to succeed matching what follows at least n times. After that, handle like `on_failure_jump'. */ case succeed_n: EXTRACT_NUMBER (mcnt, p + 2); DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt); assert (mcnt >= 0); /* Originally, this is how many times we HAVE to succeed. */ if (mcnt > 0) { mcnt--; p += 2; STORE_NUMBER_AND_INCR (p, mcnt); DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p, mcnt); } else if (mcnt == 0) { DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n", p+2); p[2] = (unsigned char) no_op; p[3] = (unsigned char) no_op; goto on_failure; } break; case jump_n: EXTRACT_NUMBER (mcnt, p + 2); DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt); /* Originally, this is how many times we CAN jump. */ if (mcnt) { mcnt--; STORE_NUMBER (p + 2, mcnt); goto unconditional_jump; } /* If don't have to jump any more, skip over the rest of command. */ else p += 4; break; case set_number_at: { DEBUG_PRINT1 ("EXECUTING set_number_at.\n"); EXTRACT_NUMBER_AND_INCR (mcnt, p); p1 = p + mcnt; EXTRACT_NUMBER_AND_INCR (mcnt, p); DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt); STORE_NUMBER (p1, mcnt); break; } case wordbound: DEBUG_PRINT1 ("EXECUTING wordbound.\n"); if (AT_WORD_BOUNDARY (d)) break; goto fail; case notwordbound: DEBUG_PRINT1 ("EXECUTING notwordbound.\n"); if (AT_WORD_BOUNDARY (d)) goto fail; break; case wordbeg: DEBUG_PRINT1 ("EXECUTING wordbeg.\n"); if (WORDCHAR_P (d) && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1))) break; goto fail; case wordend: DEBUG_PRINT1 ("EXECUTING wordend.\n"); if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1) && (!WORDCHAR_P (d) || AT_STRINGS_END (d))) break; goto fail; #ifdef emacs #ifdef emacs19 case before_dot: DEBUG_PRINT1 ("EXECUTING before_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) >= point) goto fail; break; case at_dot: DEBUG_PRINT1 ("EXECUTING at_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) != point) goto fail; break; case after_dot: DEBUG_PRINT1 ("EXECUTING after_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) <= point) goto fail; break; #else /* not emacs19 */ case at_dot: DEBUG_PRINT1 ("EXECUTING at_dot.\n"); if (PTR_CHAR_POS ((unsigned char *) d) + 1 != point) goto fail; break; #endif /* not emacs19 */ case syntaxspec: DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt); mcnt = *p++; goto matchsyntax; case wordchar: DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n"); mcnt = (int) Sword; matchsyntax: PREFETCH (); if (SYNTAX (*d++) != (enum syntaxcode) mcnt) goto fail; SET_REGS_MATCHED (); break; case notsyntaxspec: DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt); mcnt = *p++; goto matchnotsyntax; case notwordchar: DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n"); mcnt = (int) Sword; matchnotsyntax: PREFETCH (); if (SYNTAX (*d++) == (enum syntaxcode) mcnt) goto fail; SET_REGS_MATCHED (); break; #else /* not emacs */ case wordchar: DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n"); PREFETCH (); if (!WORDCHAR_P (d)) goto fail; SET_REGS_MATCHED (); d++; break; case notwordchar: DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n"); PREFETCH (); if (WORDCHAR_P (d)) goto fail; SET_REGS_MATCHED (); d++; break; #endif /* not emacs */ default: abort (); } continue; /* Successfully executed one pattern command; keep going. */ /* We goto here if a matching operation fails. */ fail: if (!FAIL_STACK_EMPTY ()) { /* A restart point is known. Restore to that state. */ DEBUG_PRINT1 ("\nFAIL:\n"); POP_FAILURE_POINT (d, p, lowest_active_reg, highest_active_reg, regstart, regend, reg_info); /* If this failure point is a dummy, try the next one. */ if (!p) goto fail; /* If we failed to the end of the pattern, don't examine *p. */ assert (p <= pend); if (p < pend) { boolean is_a_jump_n = false; /* If failed to a backwards jump that's part of a repetition loop, need to pop this failure point and use the next one. */ switch ((re_opcode_t) *p) { case jump_n: is_a_jump_n = true; case maybe_pop_jump: case pop_failure_jump: case jump: p1 = p + 1; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n) || (!is_a_jump_n && (re_opcode_t) *p1 == on_failure_jump)) goto fail; break; default: /* do nothing */ ; } } if (d >= string1 && d <= end1) dend = end_match_1; } else break; /* Matching at this starting point really fails. */ } /* for (;;) */ if (best_regs_set) goto restore_best_regs; FREE_VARIABLES (); return -1; /* Failure to match. */ } /* re_match_2 */ /* Subroutine definitions for re_match_2. */ /* We are passed P pointing to a register number after a start_memory. Return true if the pattern up to the corresponding stop_memory can match the empty string, and false otherwise. If we find the matching stop_memory, sets P to point to one past its number. Otherwise, sets P to an undefined byte less than or equal to END. We don't handle duplicates properly (yet). */ static boolean group_match_null_string_p (p, end, reg_info) unsigned char **p, *end; register_info_type *reg_info; { int mcnt; /* Point to after the args to the start_memory. */ unsigned char *p1 = *p + 2; while (p1 < end) { /* Skip over opcodes that can match nothing, and return true or false, as appropriate, when we get to one that can't, or to the matching stop_memory. */ switch ((re_opcode_t) *p1) { /* Could be either a loop or a series of alternatives. */ case on_failure_jump: p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); /* If the next operation is not a jump backwards in the pattern. */ if (mcnt >= 0) { /* Go through the on_failure_jumps of the alternatives, seeing if any of the alternatives cannot match nothing. The last alternative starts with only a jump, whereas the rest start with on_failure_jump and end with a jump, e.g., here is the pattern for `a|b|c': /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6 /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3 /exactn/1/c So, we have to first go through the first (n-1) alternatives and then deal with the last one separately. */ /* Deal with the first (n-1) alternatives, which start with an on_failure_jump (see above) that jumps to right past a jump_past_alt. */ while ((re_opcode_t) p1[mcnt-3] == jump_past_alt) { /* `mcnt' holds how many bytes long the alternative is, including the ending `jump_past_alt' and its number. */ if (!alt_match_null_string_p (p1, p1 + mcnt - 3, reg_info)) return false; /* Move to right after this alternative, including the jump_past_alt. */ p1 += mcnt; /* Break if it's the beginning of an n-th alternative that doesn't begin with an on_failure_jump. */ if ((re_opcode_t) *p1 != on_failure_jump) break; /* Still have to check that it's not an n-th alternative that starts with an on_failure_jump. */ p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); if ((re_opcode_t) p1[mcnt-3] != jump_past_alt) { /* Get to the beginning of the n-th alternative. */ p1 -= 3; break; } } /* Deal with the last alternative: go back and get number of the `jump_past_alt' just before it. `mcnt' contains the length of the alternative. */ EXTRACT_NUMBER (mcnt, p1 - 2); if (!alt_match_null_string_p (p1, p1 + mcnt, reg_info)) return false; p1 += mcnt; /* Get past the n-th alternative. */ } /* if mcnt > 0 */ break; case stop_memory: assert (p1[1] == **p); *p = p1 + 2; return true; default: if (!common_op_match_null_string_p (&p1, end, reg_info)) return false; } } /* while p1 < end */ return false; } /* group_match_null_string_p */ /* Similar to group_match_null_string_p, but doesn't deal with alternatives: It expects P to be the first byte of a single alternative and END one byte past the last. The alternative can contain groups. */ static boolean alt_match_null_string_p (p, end, reg_info) unsigned char *p, *end; register_info_type *reg_info; { int mcnt; unsigned char *p1 = p; while (p1 < end) { /* Skip over opcodes that can match nothing, and break when we get to one that can't. */ switch ((re_opcode_t) *p1) { /* It's a loop. */ case on_failure_jump: p1++; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; break; default: if (!common_op_match_null_string_p (&p1, end, reg_info)) return false; } } /* while p1 < end */ return true; } /* alt_match_null_string_p */ /* Deals with the ops common to group_match_null_string_p and alt_match_null_string_p. Sets P to one after the op and its arguments, if any. */ static boolean common_op_match_null_string_p (p, end, reg_info) unsigned char **p, *end; register_info_type *reg_info; { int mcnt; boolean ret; int reg_no; unsigned char *p1 = *p; switch ((re_opcode_t) *p1++) { case no_op: case begline: case endline: case begbuf: case endbuf: case wordbeg: case wordend: case wordbound: case notwordbound: #ifdef emacs case before_dot: case at_dot: case after_dot: #endif break; case start_memory: reg_no = *p1; assert (reg_no > 0 && reg_no <= MAX_REGNUM); ret = group_match_null_string_p (&p1, end, reg_info); /* Have to set this here in case we're checking a group which contains a group and a back reference to it. */ if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE) REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret; if (!ret) return false; break; /* If this is an optimized succeed_n for zero times, make the jump. */ case jump: EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (mcnt >= 0) p1 += mcnt; else return false; break; case succeed_n: /* Get to the number of times to succeed. */ p1 += 2; EXTRACT_NUMBER_AND_INCR (mcnt, p1); if (mcnt == 0) { p1 -= 4; EXTRACT_NUMBER_AND_INCR (mcnt, p1); p1 += mcnt; } else return false; break; case duplicate: if (!REG_MATCH_NULL_STRING_P (reg_info[*p1])) return false; break; case set_number_at: p1 += 4; default: /* All other opcodes mean we cannot match the empty string. */ return false; } *p = p1; return true; } /* common_op_match_null_string_p */ /* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN bytes; nonzero otherwise. */ static int bcmp_translate (s1, s2, len, translate) unsigned char *s1, *s2; register int len; char *translate; { register unsigned char *p1 = s1, *p2 = s2; while (len) { if (translate[*p1++] != translate[*p2++]) return 1; len--; } return 0; } /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length SIZE) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the `allocated' (and perhaps `buffer') and `translate' fields are set in BUFP on entry. We call regex_compile to do the actual compilation. */ const char * re_compile_pattern (pattern, length, bufp) const char *pattern; int length; struct re_pattern_buffer *bufp; { reg_errcode_t ret; /* GNU code is written to assume at least RE_NREGS registers will be set (and at least one extra will be -1). */ bufp->regs_allocated = REGS_UNALLOCATED; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub. */ bufp->no_sub = 0; /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = regex_compile (pattern, length, re_syntax_options, bufp); return re_error_msg[(int) ret]; } /* Entry points compatible with 4.2 BSD regex library. We don't define them if this is an Emacs or POSIX compilation. */ #if !defined (emacs) && !defined (_POSIX_SOURCE) /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * re_comp (s) const char *s; { reg_errcode_t ret; if (!s) { if (!re_comp_buf.buffer) return "No previous regular expression"; return 0; } if (!re_comp_buf.buffer) { re_comp_buf.buffer = (unsigned char *) malloc (200); if (re_comp_buf.buffer == NULL) return "Memory exhausted"; re_comp_buf.allocated = 200; re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH); if (re_comp_buf.fastmap == NULL) return "Memory exhausted"; } /* Since `re_exec' always passes NULL for the `regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf); /* Yes, we're discarding `const' here. */ return (char *) re_error_msg[(int) ret]; } int re_exec (s) const char *s; { const int len = strlen (s); return 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0); } #endif /* not emacs and not _POSIX_SOURCE */ /* POSIX.2 functions. Don't define these for Emacs. */ #ifndef emacs /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set `buffer' to the compiled pattern; `used' to the length of the compiled pattern; `syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; `newline_anchor' to REG_NEWLINE being set in CFLAGS; `fastmap' and `fastmap_accurate' to zero; `re_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (preg, pattern, cflags) regex_t *preg; const char *pattern; int cflags; { reg_errcode_t ret; unsigned syntax = (cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC; /* regex_compile will allocate the space for the compiled pattern. */ preg->buffer = 0; preg->allocated = 0; /* Don't bother to use a fastmap when searching. This simplifies the REG_NEWLINE case: if we used a fastmap, we'd have to put all the characters after newlines into the fastmap. This way, we just try every character. */ preg->fastmap = 0; if (cflags & REG_ICASE) { unsigned i; preg->translate = (char *) malloc (CHAR_SET_SIZE); if (preg->translate == NULL) return (int) REG_ESPACE; /* Map uppercase characters to corresponding lowercase ones. */ for (i = 0; i < CHAR_SET_SIZE; i++) preg->translate[i] = ISUPPER (i) ? tolower (i) : i; } else preg->translate = NULL; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); /* POSIX says a null character in the pattern terminates it, so we can use strlen here in compiling the pattern. */ ret = regex_compile (pattern, strlen (pattern), syntax, preg); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; return (int) ret; } /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies `execution flags' which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. We return 0 if we find a match and REG_NOMATCH if not. */ int regexec (preg, string, nmatch, pmatch, eflags) const regex_t *preg; const char *string; size_t nmatch; regmatch_t pmatch[]; int eflags; { int ret; struct re_registers regs; regex_t private_preg; int len = strlen (string); boolean want_reg_info = !preg->no_sub && nmatch > 0; private_preg = *preg; private_preg.not_bol = !!(eflags & REG_NOTBOL); private_preg.not_eol = !!(eflags & REG_NOTEOL); /* The user has told us exactly how many registers to return information about, via `nmatch'. We have to pass that on to the matching routines. */ private_preg.regs_allocated = REGS_FIXED; if (want_reg_info) { regs.num_regs = nmatch; regs.start = TALLOC (nmatch, regoff_t); regs.end = TALLOC (nmatch, regoff_t); if (regs.start == NULL || regs.end == NULL) return (int) REG_NOMATCH; } /* Perform the searching operation. */ ret = re_search (&private_preg, string, len, /* start: */ 0, /* range: */ len, want_reg_info ? ®s : (struct re_registers *) 0); /* Copy the register information to the POSIX structure. */ if (want_reg_info) { if (ret >= 0) { unsigned r; for (r = 0; r < nmatch; r++) { pmatch[r].rm_so = regs.start[r]; pmatch[r].rm_eo = regs.end[r]; } } /* If we needed the temporary register info, free the space now. */ free (regs.start); free (regs.end); } /* We want zero return to mean success, unlike `re_search'. */ return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH; } /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (errcode, preg, errbuf, errbuf_size) int errcode; const regex_t *preg; char *errbuf; size_t errbuf_size; { const char *msg; size_t msg_size; if (errcode < 0 || errcode >= (sizeof (re_error_msg) / sizeof (re_error_msg[0]))) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = re_error_msg[errcode]; /* POSIX doesn't require that we do anything in this case, but why not be nice. */ if (! msg) msg = "Success"; msg_size = strlen (msg) + 1; /* Includes the null. */ if (errbuf_size != 0) { if (msg_size > errbuf_size) { strncpy (errbuf, msg, errbuf_size - 1); errbuf[errbuf_size - 1] = 0; } else strcpy (errbuf, msg); } return msg_size; } /* Free dynamically allocated space used by PREG. */ void regfree (preg) regex_t *preg; { if (preg->buffer != NULL) free (preg->buffer); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; if (preg->fastmap != NULL) free (preg->fastmap); preg->fastmap = NULL; preg->fastmap_accurate = 0; if (preg->translate != NULL) free (preg->translate); preg->translate = NULL; } #endif /* not emacs */ /* Local variables: make-backup-files: t version-control: t trim-versions-without-asking: nil End: */ vdk-2.4.0/vdk/gtksourcebuffer.c0000644000000000000000000014505107613266402012074 /* gtksourcebuffer.c * * Copyright (C) 1999,2000,2001,2002 by: * Mikael Hermansson * Chris Phelps * Jeroen Zwartepoorte * * 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. */ #include #include #include #include #define _(str) str #define N_(str) str #include #undef ENABLE_DEBUG #ifdef ENABLE_DEBUG #define DEBUG(x) (x) #else #define DEBUG(x) #endif #define UNDO_TYPE_INSERT_TEXT 1 #define UNDO_TYPE_REMOVE_RANGE 2 #define SEARCH_CASE_INSENSITIVE 3 /* how many lines will the refresh idle handler process at a time */ #define DEFAULT_IDLE_REFRESH_LINES_PER_RUN 100 #define MINIMUM_IDLE_REFRESH_LINES_PER_RUN 20 /* in milliseconds */ #define IDLE_REFRESH_TIME_SLICE 100 typedef struct _SearchInfo { const gchar *searchfor; gchar *offset; gint matched : 1; GtkTextSearchFlags sflags; } SearchInfo; typedef struct _MarkerSubList { int line; GList *marker_list; } MarkerSubList; struct _GtkSourceBufferPrivate { gint highlight : 1; gint check_brackets : 1; GtkTextTag *bracket_match_tag; GtkTextMark *mark; GHashTable *line_markers; gint undo_max; GList *undo_redo; guint undo_level; guint undo_redo_processing : 1; GList *syntax_items; GList *pattern_items; GList *embedded_items; Regex reg_syntax_all; /* region covering the unhighlighted text */ GtkTextRegion *refresh_region; guint refresh_idle_handler; guint refresh_lines; GtkUndoManager *undo_manager; }; enum { CAN_UNDO, CAN_REDO, LAST_SIGNAL }; static GtkTextBufferClass *parent_class = NULL; static guint buffer_signals[LAST_SIGNAL] = { 0 }; static void gtk_source_buffer_class_init (GtkSourceBufferClass *klass); static void gtk_source_buffer_init (GtkSourceBuffer *klass); static void gtk_source_buffer_finalize (GObject *object); static void gtk_source_buffer_can_undo_handler (GtkUndoManager *um, gboolean can_undo, GtkSourceBuffer *buffer); static void gtk_source_buffer_can_redo_handler (GtkUndoManager *um, gboolean can_redo, GtkSourceBuffer *buffer); static void move_cursor (GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextMark *mark, gpointer data); static void gtk_source_buffer_real_insert_text (GtkTextBuffer *buffer, GtkTextIter *iter, const gchar *text, gint len); static void gtk_source_buffer_real_delete_range (GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextIter *end); static void check_embedded (GtkSourceBuffer *buffer, GtkTextIter *start, GtkTextIter *end); static void check_syntax (GtkSourceBuffer *buffer, GtkTextIter *start, GtkTextIter *end); static void check_pattern (GtkSourceBuffer *buffer, const gchar *text, gint length, GtkTextIter *iter); static gint get_syntax_end (const gchar *text, gint pos, Regex *reg, GtkSourceBufferMatch *match); static gint get_tag_start (GtkTextTag *tag, GtkTextIter *iter); static gint get_tag_end (GtkTextTag *tag, GtkTextIter *iter); static void hash_remove_func (gpointer key, gpointer value, gpointer user_data); static void get_tags_func (GtkTextTag *tag, gpointer data); static gboolean read_loop (GtkTextBuffer *buffer, const char *filename, GIOChannel *io, GError **error); /* ---------------------------------------------------------------------- Private functions ---------------------------------------------------------------------- */ static void gtk_source_buffer_class_init (GtkSourceBufferClass *klass) { GObjectClass *object_class; object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = gtk_source_buffer_finalize; klass->can_undo = NULL; klass->can_redo = NULL; /* Do not set these signals handlers directly on the parent_class since * that will cause problems (a loop). */ GTK_TEXT_BUFFER_CLASS (klass)->insert_text = gtk_source_buffer_real_insert_text; GTK_TEXT_BUFFER_CLASS (klass)->delete_range = gtk_source_buffer_real_delete_range; buffer_signals[CAN_UNDO] = g_signal_new ("can_undo", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GtkSourceBufferClass, can_undo), NULL, NULL, gtksourceview_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); buffer_signals[CAN_REDO] = g_signal_new ("can_redo", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GtkSourceBufferClass, can_redo), NULL, NULL, gtksourceview_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); } static void gtk_source_buffer_init (GtkSourceBuffer *buffer) { GtkSourceBufferPrivate *priv; priv = g_new0 (GtkSourceBufferPrivate, 1); buffer->priv = priv; priv->undo_manager = gtk_undo_manager_new (buffer); priv->check_brackets = FALSE; priv->mark = NULL; priv->undo_redo = NULL; priv->undo_level = 0; priv->undo_max = 5; priv->undo_redo_processing = FALSE; priv->line_markers = g_hash_table_new (NULL, NULL); /* highlight data */ priv->highlight = TRUE; priv->refresh_idle_handler = 0; priv->refresh_region = gtk_text_region_new (GTK_TEXT_BUFFER (buffer)); priv->refresh_lines = DEFAULT_IDLE_REFRESH_LINES_PER_RUN; g_signal_connect_closure (G_OBJECT (buffer), "mark_set", g_cclosure_new (G_CALLBACK (move_cursor), NULL, NULL), TRUE); g_signal_connect (G_OBJECT (priv->undo_manager), "can_undo", G_CALLBACK (gtk_source_buffer_can_undo_handler), buffer); g_signal_connect (G_OBJECT (priv->undo_manager), "can_redo", G_CALLBACK (gtk_source_buffer_can_redo_handler), buffer); } static void gtk_source_buffer_finalize (GObject *object) { GtkSourceBuffer *buffer; g_return_if_fail (object != NULL); g_return_if_fail (GTK_IS_SOURCE_BUFFER (object)); buffer = GTK_SOURCE_BUFFER (object); if (buffer->priv) { if (buffer->priv->line_markers) { g_hash_table_foreach_remove (buffer->priv->line_markers, (GHRFunc) hash_remove_func, NULL); g_hash_table_destroy (buffer->priv->line_markers); } gtk_text_region_destroy (buffer->priv->refresh_region); g_free (buffer->priv); buffer->priv = NULL; } } static void hash_remove_func (gpointer key, gpointer value, gpointer user_data) { GList *iter = value; if (iter) { for (; iter; iter = iter->next) { if (iter->data) g_free (iter->data); } g_list_free (iter); } } static void gtk_source_buffer_can_undo_handler (GtkUndoManager *um, gboolean can_undo, GtkSourceBuffer *buffer) { g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); g_signal_emit (G_OBJECT (buffer), buffer_signals [CAN_UNDO], 0, can_undo); } static void gtk_source_buffer_can_redo_handler (GtkUndoManager *um, gboolean can_redo, GtkSourceBuffer *buffer) { g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); g_signal_emit (G_OBJECT (buffer), buffer_signals [CAN_REDO], 0, can_redo); } static gint get_tag_start (GtkTextTag *tag, GtkTextIter *iter) { gint oldoff; if (gtk_text_iter_begins_tag (iter, tag)) return 0; oldoff = gtk_text_iter_get_offset (iter); gtk_text_iter_backward_to_tag_toggle (iter, tag); return oldoff - gtk_text_iter_get_offset (iter); } static gint get_tag_end (GtkTextTag *tag, GtkTextIter *iter) { gint oldoff; if (gtk_text_iter_ends_tag (iter, tag)) return 0; oldoff = gtk_text_iter_get_offset (iter); gtk_text_iter_forward_to_tag_toggle (iter, tag); return gtk_text_iter_get_offset (iter) - oldoff; } static void get_tags_func (GtkTextTag *tag, gpointer data) { GList **list = (GList **) data; if (GTK_IS_SYNTAX_TAG (tag) || GTK_IS_PATTERN_TAG (tag) || GTK_IS_EMBEDDED_TAG (tag)) *list = g_list_append (*list, (gpointer) tag); } static void move_cursor (GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextMark *mark, gpointer data) { GtkSourceBuffer *sbuf = GTK_SOURCE_BUFFER (buffer); GtkSourceBufferPrivate *priv = sbuf->priv; GtkTextIter iter1; GtkTextIter iter2; if (mark != gtk_text_buffer_get_insert (buffer)) return; if (priv->mark) { gtk_text_buffer_get_iter_at_mark (buffer, &iter1, priv->mark); iter2 = iter1; gtk_text_iter_forward_char (&iter2); gtk_text_buffer_remove_tag (buffer, priv->bracket_match_tag, &iter1, &iter2); } if (gtk_source_buffer_iter_has_syntax_tag (iter) || !priv->check_brackets) return; if (gtk_source_buffer_find_bracket_match (iter)) { if (!priv->mark) priv->mark = gtk_text_buffer_create_mark (buffer, NULL, iter, FALSE); else gtk_text_buffer_move_mark (buffer, priv->mark, iter); iter2 = *iter; gtk_text_iter_forward_char (&iter2); gtk_text_buffer_apply_tag (buffer, priv->bracket_match_tag, iter, &iter2); } } static gboolean idle_refresh_handler (GtkSourceBuffer *sbuf) { GtkTextIter start, end; GtkSourceBufferPrivate *priv; GtkTextBuffer *buffer; gboolean retval; g_return_val_if_fail (sbuf != NULL, FALSE); priv = sbuf->priv; buffer = GTK_TEXT_BUFFER (sbuf); retval = TRUE; /* make sure the region contains valid data */ gtk_text_region_clear_zero_length_subregions (priv->refresh_region); if (!priv->highlight || gtk_text_region_subregions (priv->refresh_region) == 0) { /* nothing to do */ retval = FALSE; } else { GTimer *timer; gulong slice; /* get us some work to do */ gtk_text_region_nth_subregion (priv->refresh_region, 0, &start, &end); if (gtk_text_iter_get_line (&end) - gtk_text_iter_get_line (&start) > priv->refresh_lines) { /* region too big, reduce it */ end = start; gtk_text_iter_forward_lines (&end, priv->refresh_lines); } /* profile syntax highlighting */ timer = g_timer_new (); g_timer_start (timer); check_embedded (sbuf, &start, &end); g_timer_stop (timer); g_timer_elapsed (timer, &slice); g_timer_destroy (timer); /* assume elapsed time is linear with number of lines and make our best guess for next run */ priv->refresh_lines = (IDLE_REFRESH_TIME_SLICE * 1000 * priv->refresh_lines) / slice; priv->refresh_lines = MAX (priv->refresh_lines, MINIMUM_IDLE_REFRESH_LINES_PER_RUN); /* region done */ gtk_text_region_substract (priv->refresh_region, &start, &end); } if (!retval || gtk_text_region_subregions (priv->refresh_region) == 0) { /* nothing else to do */ retval = FALSE; /* handler will be removed */ priv->refresh_idle_handler = 0; } return retval; } static void refresh_range (GtkSourceBuffer *sbuf, GtkTextIter *start, GtkTextIter *end) { g_return_if_fail (sbuf && GTK_IS_SOURCE_BUFFER (sbuf)); /* add the region to the refresh region */ gtk_text_region_add (sbuf->priv->refresh_region, start, end); if (sbuf->priv->highlight && !sbuf->priv->refresh_idle_handler) { /* now add the idle handler if one was not running */ sbuf->priv->refresh_idle_handler = g_idle_add_full ( G_PRIORITY_DEFAULT_IDLE, (GSourceFunc) idle_refresh_handler, sbuf, NULL); } } static void gtk_source_buffer_real_insert_text (GtkTextBuffer *buffer, GtkTextIter *iter, const gchar *text, gint len) { GtkSyntaxTag *tag; GtkTextIter start, end; GtkSourceBuffer *sbuf; GtkSourceBufferPrivate *priv; gint soff, eoff; g_return_if_fail (buffer != NULL); g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); sbuf = GTK_SOURCE_BUFFER (buffer); priv = sbuf->priv; start = end = *iter; if (!priv->highlight) { parent_class->insert_text (buffer, iter, text, len); end = start = *iter; gtk_text_iter_backward_chars (&start, len); /* FIXME */ /*gtk_source_buffer_undo_insert (sbuf, UNDO_TYPE_REMOVE_RANGE, &start, &end);*/ return; } gtk_text_iter_forward_chars (&end, len); /* we have connected AFTER insert thats why iterator points to end */ /* we need to update startiter to point to txt startpos instead :-) */ if (priv->syntax_items) { tag = gtk_source_buffer_iter_has_syntax_tag (&start); if (!tag) { /* no syntax found we refresh from */ /*start of first instered line to end of last inserted line */ gtk_text_iter_set_line_offset (&start, 0); gtk_text_iter_forward_line (&end); } else { gint scount; gint ecount; scount = get_tag_start (GTK_TEXT_TAG (tag), &start); ecount = get_tag_end (GTK_TEXT_TAG (tag), &end); } } else gtk_text_buffer_get_bounds (buffer, &start, &end); gtk_text_buffer_remove_all_tags (buffer, &start, &end); soff = gtk_text_iter_get_offset (&start); eoff = gtk_text_iter_get_offset (&end) + len; parent_class->insert_text (buffer, iter, text, len); /* FIXME */ /*gtk_source_buffer_undo_insert (sbuf, UNDO_TYPE_REMOVE_RANGE, &start, &end);*/ gtk_text_buffer_get_iter_at_offset (buffer, &start, soff); gtk_text_buffer_get_iter_at_offset (buffer, &end, eoff); refresh_range (sbuf, &start, &end); } static void gtk_source_buffer_real_delete_range (GtkTextBuffer *buffer, GtkTextIter *iter, GtkTextIter *iter2) { GtkTextIter start; GtkTextIter end; GtkSyntaxTag *tag; GtkSourceBuffer *sbuf; GtkSourceBufferPrivate *priv; gint refresh_start, refresh_length; sbuf = GTK_SOURCE_BUFFER (buffer); priv = sbuf->priv; start = *iter; end = *iter2; /* FIXME */ /*gtk_source_buffer_undo_insert (sbuf, UNDO_TYPE_INSERT_TEXT, iter, iter2);*/ if (!priv->highlight) { parent_class->delete_range (buffer, iter, iter2); return; } /* we need to work on this */ /* first check if iter holds a tag */ /* if true then iterate backward until tag change */ /* then iterate iter2 forward until tag change */ /* remove tags and update from new start and end iters */ /* if no tags, we iterate from line begin to iter2 line end */ /* also check if syntax tag if true then ignore and let widget take care of it */ if (priv->syntax_items) { tag = gtk_source_buffer_iter_has_syntax_tag (&start); if (!tag) { /* no syntax found, so we refresh from */ /* start of first instered line to end of last inserted line */ gtk_text_iter_set_line_offset (&start, 0); end = start; gtk_text_iter_forward_line (&end); if (gtk_text_iter_get_offset (&end) < gtk_text_iter_get_offset (iter2)) end = *iter2; } else { gint scount; gint ecount; scount = get_tag_start (GTK_TEXT_TAG (tag), &start); ecount = get_tag_end (GTK_TEXT_TAG (tag), &end); if (scount > tag->reg_start.len && ecount > tag->reg_end.len) { parent_class->delete_range (buffer, iter, iter2); return; } } } refresh_start = gtk_text_iter_get_offset (&start); refresh_length = gtk_text_iter_get_offset (&end) - refresh_start; gtk_text_buffer_remove_all_tags (buffer, &start, &end); parent_class->delete_range (buffer, iter, iter2); if (!refresh_length) return; gtk_text_buffer_get_iter_at_offset (buffer, &start, refresh_start); end = start; gtk_text_iter_forward_chars (&end, refresh_length); refresh_range (sbuf, &start, &end); } /* we need to optimize this crap, as it is pretty slow if the start and end interval is to big (which it usually is) The most important thing is to use the included regular expression library because it's massively faster than what is coming with distributions right now, especially RedHat. Probably 4 to 8 times faster even though they are theoretically the same version (12) */ static void check_embedded (GtkSourceBuffer *sbuf, GtkTextIter *iter1, GtkTextIter *iter2) { GtkTextBuffer *buf; GList *list; gchar *text; GtkTextIter start_iter; GtkTextIter cur_iter; GtkTextIter end_iter; GtkEmbeddedTag *tag; gint length = 0; gint len = 0; gint nlen = 0; gint i = 0; gint j = 0; DEBUG (g_message ("check_embedded (%d, %d)", gtk_text_iter_get_offset (iter1), gtk_text_iter_get_offset (iter2))); buf = GTK_TEXT_BUFFER (sbuf); list = gtk_source_buffer_get_embedded_entries (sbuf); if (!list) { check_syntax (sbuf, iter1, iter2); return; } text = gtk_text_buffer_get_slice (buf, iter1, iter2, TRUE); length = strlen (text); start_iter = *iter1; cur_iter = start_iter; for (i = 0; i < length; i++) { for (list = gtk_source_buffer_get_embedded_entries (sbuf); list; list = list->next) { tag = GTK_EMBEDDED_TAG (list->data); if ((len = gtk_source_buffer_regex_match (text, i, length, &tag->reg_outside)) > 0) { /* we have found the outside regex inside the current buffer now we have to go about detecting if there is anything *inside* of out new range that should be highlighted */ for (j = i; j < (i + len); j++) { if ((nlen = gtk_source_buffer_regex_match (text, j, j + len, &tag->reg_inside)) > 0) { end_iter = cur_iter; gtk_text_iter_forward_chars (&end_iter, nlen); g_print ("Embedded item found at position %d with length %d.\n", j, nlen); gtk_text_buffer_apply_tag (buf, GTK_TEXT_TAG (tag), &cur_iter, &end_iter); /* we're about to j++ so make sure we compensate now */ j += (nlen - 1); /* dont compensate here tho */ gtk_text_iter_forward_chars (&cur_iter, nlen); } else { gtk_text_iter_forward_char (&cur_iter); } } } } gtk_text_iter_forward_char (&start_iter); } g_free (text); check_syntax (sbuf, iter1, iter2); } static void check_syntax (GtkSourceBuffer *sbuf, GtkTextIter *iter1, GtkTextIter *iter2) { GtkTextBuffer *buf; GList *list; gchar *txt; GtkTextIter curiter; GtkTextIter curiter2; GtkTextIter iterrealend; GtkSyntaxTag *tag; gint s = 0; gint pos = 0; gint oldpos = 0; gint z = 0; gint len = 0; gint offset = 0; gboolean found = FALSE; GtkSourceBufferMatch m; GtkSourceBufferPrivate *priv; buf = GTK_TEXT_BUFFER (sbuf); priv = sbuf->priv; gtk_text_buffer_get_end_iter (buf, &iterrealend); txt = gtk_text_buffer_get_slice (buf, iter1, &iterrealend, TRUE); list = gtk_source_buffer_get_syntax_entries (sbuf); if (!list) { /* FIXME: Here we may need to do some modifications to properly check the pattern entries when no syntax entries exist. However, at this point it is my contention that it cannot be dont properly check_pattern(sbuf, txt, len - pos, &curiter); */ return; } curiter = *iter1; curiter2 = curiter; offset = gtk_text_iter_get_offset (iter1); len = gtk_text_iter_get_offset (iter2) - offset; while (pos < len) { /* check for any of the syntax highlights */ s = gtk_source_buffer_regex_search (txt, pos, &priv->reg_syntax_all, TRUE, &m); if (s < 0 || s > len) break; /* not found */ /* if there is text segments before syntax, check pattern too... */ if (pos < s) check_pattern (sbuf, g_utf8_offset_to_pointer (txt, pos), s - pos, &curiter); pos = m.endpos; gtk_text_iter_forward_chars (&curiter, m.endpos - oldpos); oldpos = pos; for (list = gtk_source_buffer_get_syntax_entries (sbuf); list; list = list->next) { tag = GTK_SYNTAX_TAG (list->data); if (gtk_source_buffer_regex_match (txt, s, len, &tag->reg_start) > 0) { /* && *(g_utf8_offset_to_pointer (txt, s - 1)) != '\\') { */ if ((z = get_syntax_end (txt, pos, &tag->reg_end, &m)) >= 0) pos = m.endpos; else if (z == 0) continue; else pos = gtk_text_buffer_get_char_count (buf) - offset; /* g_print("applied syntax tag [%s] at startpos %d endpos %d\n",sentry->key,s,i); */ gtk_text_iter_set_offset (&curiter, s + offset); curiter2 = curiter; gtk_text_iter_forward_chars (&curiter2, pos - s); /* make sure ALL tags between syntax start/end are removed */ /* we only remove if syntax start/end is more than endpos */ if (s > len + offset || pos > len + offset) { g_print ("remove all tags between %d and %d\n", s, pos); gtk_text_buffer_remove_all_tags (buf, &curiter, &curiter2); } gtk_text_buffer_apply_tag (buf, GTK_TEXT_TAG (tag), &curiter, &curiter2); curiter = curiter2; found = TRUE; break; } else if (txt[s - 1] == '\\') { found = TRUE; } } if (!found) { pos++; gtk_text_iter_forward_chars (&curiter, 1); } } if (pos < len) check_pattern (sbuf, g_utf8_offset_to_pointer (txt, pos), len - pos, &curiter); if (txt) g_free (txt); } static void check_pattern (GtkSourceBuffer *sbuf, const gchar *text, gint length, GtkTextIter *iter) { GtkTextBuffer *buf; GList *patterns = NULL, *l; GtkTextIter start_iter; GtkTextIter end_iter; GtkPatternTag *tag = NULL; gint i; GtkSourceBufferMatch m; buf = GTK_TEXT_BUFFER (sbuf); patterns = gtk_source_buffer_get_pattern_entries (sbuf); if (!patterns) return; for (l = patterns; l; l = l->next) { tag = GTK_PATTERN_TAG (l->data); start_iter = *iter; i = 0; while (i < length && i >= 0) { i = gtk_source_buffer_regex_search (text, i, &tag->reg_pattern, TRUE, &m); if (i >= 0) { if (m.endpos == i) { g_warning ("Zero length regex match. " "Probably a buggy syntax specification."); i++; continue; } gtk_text_iter_set_offset (&start_iter, gtk_text_iter_get_offset (iter) + i); end_iter = start_iter; gtk_text_iter_forward_chars (&end_iter, m.endpos - i); gtk_text_buffer_apply_tag (buf, GTK_TEXT_TAG (tag), &start_iter, &end_iter); i = m.endpos; } } } } static gint get_syntax_end (const gchar *text, gint pos, Regex *regex, GtkSourceBufferMatch *match) { int ret = pos; do { ret = gtk_source_buffer_regex_search (text, match->endpos, regex, TRUE, match); if (ret < 0) return (-1); } while (match->endpos && text[match->endpos - 2] == '\\'); return ret; } static gboolean read_loop (GtkTextBuffer *buffer, const char *filename, GIOChannel *io, GError **error) { GIOStatus status; GtkWidget *widget; GtkTextIter end; gchar *str = NULL; gint size = 0; *error = NULL; gtk_text_buffer_get_end_iter (GTK_TEXT_BUFFER (buffer), &end); if ((status=g_io_channel_read_line (io, &str, &size, NULL, error)) == G_IO_STATUS_NORMAL && size) { #ifdef DEBUG_SOURCEVIEW puts(str); #endif gtk_text_buffer_insert (GTK_TEXT_BUFFER (buffer), &end, str, size); g_free(str); return TRUE; } else if(!*error && (status=g_io_channel_read_to_end (io, &str, &size, error)) == G_IO_STATUS_NORMAL && size) { #ifdef DEBUG_SOURCEVIEW puts(str); #endif gtk_text_buffer_insert (GTK_TEXT_BUFFER (buffer), &end, str, size); g_free(str); return TRUE; } if (status == G_IO_STATUS_EOF && !*error) return FALSE; if (!*error) return FALSE; widget = gtk_message_dialog_new (NULL, (GtkDialogFlags) 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s\nFile %s", (*error)->message, filename); gtk_dialog_run (GTK_DIALOG (widget)); gtk_widget_destroy (widget); /* because of error in input we clear already loaded text */ gtk_text_buffer_set_text(buffer, "", 0); return FALSE; } static void add_marker (gpointer data, gpointer user_data) { char *name = data; MarkerSubList *sublist = user_data; GtkSourceBufferMarker *marker; marker = g_new0 (GtkSourceBufferMarker, 1); marker->line = sublist->line; marker->name = g_strdup (name); sublist->marker_list = g_list_append (sublist->marker_list, marker); } static void add_markers (gpointer key, gpointer value, gpointer user_data) { GList **list = user_data; GList *markers = value; MarkerSubList *sublist; sublist = g_new0 (MarkerSubList, 1); sublist->line = GPOINTER_TO_INT (key); sublist->marker_list = *list; g_list_foreach (markers, add_marker, sublist); g_free (sublist); } /* ---------------------------------------------------------------------- * Public interface * ---------------------------------------------------------------------- */ GType gtk_source_buffer_get_type (void) { static GType our_type = 0; if (!our_type) { static const GTypeInfo our_info = { sizeof (GtkSourceBufferClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) gtk_source_buffer_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkSourceBuffer), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_source_buffer_init }; our_type = g_type_register_static (GTK_TYPE_TEXT_BUFFER, "GtkSourceBuffer", &our_info, 0); } return our_type; } GtkSourceBuffer * gtk_source_buffer_new (GtkTextTagTable *table) { GtkSourceBuffer *buffer; GtkSourceBufferPrivate *priv; buffer = GTK_SOURCE_BUFFER (g_object_new (GTK_TYPE_SOURCE_BUFFER, NULL)); priv = buffer->priv; if (table) { GTK_TEXT_BUFFER (buffer)->tag_table = table; g_object_ref (G_OBJECT (GTK_TEXT_BUFFER (buffer)->tag_table)); } else GTK_TEXT_BUFFER (buffer)->tag_table = gtk_text_tag_table_new (); priv->bracket_match_tag = gtk_text_tag_new ("bracket-match"); g_object_set (G_OBJECT (priv->bracket_match_tag), "foreground_gdk", "blue", NULL); g_object_set (G_OBJECT (priv->bracket_match_tag), "background_gdk", "gray", NULL); gtk_text_tag_table_add (GTK_TEXT_BUFFER (buffer)->tag_table, priv->bracket_match_tag); return buffer; } void gtk_source_buffer_attach_to_view (GtkSourceBuffer *buffer, GtkTextView *view) { GtkWidget *widget = GTK_WIDGET (view); GtkSourceBufferPrivate *priv = buffer->priv; if (priv->bracket_match_tag) gtk_text_tag_table_remove (GTK_TEXT_BUFFER (buffer)->tag_table, priv->bracket_match_tag); priv->bracket_match_tag = gtk_text_tag_new ("bracket-match"); g_object_set (G_OBJECT (priv->bracket_match_tag), "foreground_gdk", &widget->style->fg[GTK_STATE_SELECTED], NULL); g_object_set (G_OBJECT (priv->bracket_match_tag), "background_gdk", &widget->style->bg[GTK_STATE_SELECTED], NULL); gtk_text_tag_table_add (GTK_TEXT_BUFFER (buffer)->tag_table, priv->bracket_match_tag); } void gtk_source_buffer_highlight_region (GtkSourceBuffer *sbuf, GtkTextIter *start, GtkTextIter *end) { GtkTextRegion *region; g_return_if_fail (sbuf != NULL && start != NULL && end != NULL); if (!sbuf->priv->highlight) return; /* get the subregions not yet highlighted */ region = gtk_text_region_intersect (sbuf->priv->refresh_region, start, end); if (region) { GtkTextIter iter1, iter2; gint i; /* highlight all subregions from the intersection. hopefully this will only be one subregion */ for (i = 0; i < gtk_text_region_subregions (region); i++) { gtk_text_region_nth_subregion (region, i, &iter1, &iter2); DEBUG (g_message ("Actually hightlighting from %d to %d", gtk_text_iter_get_offset (&iter1), gtk_text_iter_get_offset (&iter2))); check_embedded (sbuf, &iter1, &iter2); } gtk_text_region_destroy (region); /* remove the just highlighted region */ gtk_text_region_substract (sbuf->priv->refresh_region, start, end); } } gint gtk_source_buffer_regex_search (const gchar *text, gint pos, Regex *regex, gboolean forward, GtkSourceBufferMatch *match) { gint len; g_return_val_if_fail (regex != NULL, -1); g_return_val_if_fail (match != NULL, -1); /* Work around a re_search bug where it returns the number of bytes * instead of the number of characters (unicode characters can be * more than 1 byte) it matched. See redhat bugzilla #73644. */ len = strlen (text); pos = g_utf8_offset_to_pointer (text, pos) - text; match->startpos = re_search (®ex->buf, text, len, pos, (forward ? len - pos : -pos), ®ex->reg); if (match->startpos > -1) { match->startpos = g_utf8_pointer_to_offset (text, text + match->startpos); match->endpos = g_utf8_pointer_to_offset (text, text + regex->reg.end[0]); } return match->startpos; } /* regex_match -- tries to match regex at the 'pos' position in the text. It * returns the number of chars matched, or -1 if no match. * Warning: The number matched can be 0, if the regex matches the empty string. * The reason for workin on GtkSCText is the same as in regex_search. */ gint gtk_source_buffer_regex_match (const gchar *text, gint pos, gint end, Regex *regex) { g_return_val_if_fail (regex != NULL, -1); pos = g_utf8_offset_to_pointer (text, pos) - text; return re_match (®ex->buf, text, strlen (text), pos, ®ex->reg); } GList * gtk_source_buffer_get_regex_tags (GtkSourceBuffer *buffer) { GList *list = NULL; GtkTextTagTable *table; g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), NULL); table = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER (buffer)); gtk_text_tag_table_foreach (table, get_tags_func, &list); list = g_list_first (list); return list; } void gtk_source_buffer_purge_regex_tags (GtkSourceBuffer *buffer) { GtkSourceBufferPrivate *priv; GtkTextTagTable *table; GList *list; GList *cur; GtkTextIter iter1; GtkTextIter iter2; gchar *name; g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); priv = buffer->priv; gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &iter1, &iter2); gtk_text_buffer_remove_all_tags (GTK_TEXT_BUFFER (buffer), &iter1, &iter2); table = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER (buffer)); list = gtk_source_buffer_get_regex_tags (buffer); for (cur = list; cur; cur = cur->next) { g_object_get (G_OBJECT (cur->data), "name", &name, NULL); g_free (name); gtk_text_tag_table_remove (table, GTK_TEXT_TAG (cur->data)); } g_list_free (list); if (priv->syntax_items) { g_list_free (priv->syntax_items); priv->syntax_items = NULL; } if (priv->pattern_items) { g_list_free (priv->pattern_items); priv->pattern_items = NULL; } if (priv->embedded_items) { g_list_free (priv->embedded_items); priv->embedded_items = NULL; } } void gtk_source_buffer_install_regex_tags (GtkSourceBuffer *buffer, GList *entries) { GtkSourceBufferPrivate *priv = buffer->priv; GtkTextTag *tag; GList *cur; gchar *name; for (cur = entries; cur; cur = cur->next) { g_object_get (G_OBJECT (cur->data), "name", &name, NULL); if (name) { tag = gtk_text_tag_table_lookup (GTK_TEXT_BUFFER (buffer)->tag_table, name); if (tag) gtk_text_tag_table_remove (GTK_TEXT_BUFFER (buffer)->tag_table, tag); } if (GTK_IS_SYNTAX_TAG (cur->data)) { priv->syntax_items = g_list_append (priv->syntax_items, cur->data); gtk_text_tag_table_add (GTK_TEXT_BUFFER (buffer)->tag_table, GTK_TEXT_TAG (cur->data)); } else if (GTK_IS_PATTERN_TAG (cur->data)) { priv->pattern_items = g_list_append (priv->pattern_items, cur->data); gtk_text_tag_table_add (GTK_TEXT_BUFFER (buffer)->tag_table, GTK_TEXT_TAG (cur->data)); /* lower priority for pattern tags */ gtk_text_tag_set_priority (GTK_TEXT_TAG (cur->data), 0); } else if (GTK_IS_EMBEDDED_TAG (cur->data)) { priv->embedded_items = g_list_append (priv->embedded_items, cur->data); gtk_text_tag_table_add (GTK_TEXT_BUFFER (buffer)->tag_table, GTK_TEXT_TAG (cur->data)); } if (name) g_free (name); } if (priv->syntax_items) gtk_source_buffer_sync_syntax_regex (buffer); } void gtk_source_buffer_sync_syntax_regex (GtkSourceBuffer *buffer) { GString *str; GList *cur; GtkSyntaxTag *tag; str = g_string_new (""); cur = buffer->priv->syntax_items; while (cur) { if (!GTK_IS_SYNTAX_TAG (cur->data)) { g_warning ("Serious error: there is a member in the" " syntax_items list that is not a syntax tag\n"); return; } tag = GTK_SYNTAX_TAG (cur->data); g_string_append (str, tag->start); cur = cur->next; if (cur) g_string_append (str, "\\|"); } gtk_source_compile_regex (str->str, &buffer->priv->reg_syntax_all); g_string_free (str, TRUE); } GtkSyntaxTag * gtk_source_buffer_iter_has_syntax_tag (GtkTextIter *iter) { GSList *list = gtk_text_iter_get_tags (iter); while (list) { if (GTK_IS_SYNTAX_TAG (list->data)) return GTK_SYNTAX_TAG (list->data); list = g_slist_next (list); } return NULL; } GList * gtk_source_buffer_get_syntax_entries (GtkSourceBuffer *buffer) { g_return_val_if_fail (buffer != NULL, NULL); return buffer->priv->syntax_items; } GList * gtk_source_buffer_get_pattern_entries (GtkSourceBuffer *buffer) { g_return_val_if_fail (buffer != NULL, NULL); return buffer->priv->pattern_items; } GList * gtk_source_buffer_get_embedded_entries (GtkSourceBuffer *buffer) { g_return_val_if_fail (buffer != NULL, NULL); return buffer->priv->embedded_items; } gchar * gtk_source_buffer_convert_to_html (GtkSourceBuffer *buffer, const gchar *title) { gchar txt[3]; GtkTextIter iter; gboolean font = FALSE; gboolean bold = FALSE; gboolean italic = FALSE; gboolean underline = FALSE; GString *str = NULL; GSList *list = NULL; GtkTextTag *tag = NULL; GdkColor *col = NULL; GValue *value; gunichar c = 0; txt[1] = 0; g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), NULL); gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER (buffer), &iter, 0); str = g_string_new ("\n"); g_string_append (str, "\n"); g_string_sprintfa (str, "%s\n", title ? title : "GtkSourceView converter"); g_string_append (str, "\n"); g_string_append (str, "\n"); g_string_append (str, "
");


	while (!gtk_text_iter_is_end (&iter)) {
		c = gtk_text_iter_get_char (&iter);
		if (!tag) {
			list = gtk_text_iter_get_toggled_tags (&iter, TRUE);
			if (list && g_slist_last (list)->data) {
				tag = GTK_TEXT_TAG (g_slist_last (list)->data);
				g_slist_free (list);
			}
			if (tag && !gtk_text_iter_ends_tag (&iter, tag)) {
				GValue val1 = { 0, };
				GValue val2 = { 0, };
				GValue val3 = { 0, };

				value = &val1;
				g_value_init (value, GDK_TYPE_COLOR);
				g_object_get_property (G_OBJECT (tag), "foreground_gdk", value);
				col = g_value_get_boxed (value);
				if (col) {
					g_string_sprintfa (str, "",
							   col->red / 256, col->green / 256,
							   col->blue / 256);
					font = TRUE;
				}
				value = &val2;
				g_value_init (value, G_TYPE_INT);
				g_object_get_property (G_OBJECT (tag), "weight", value);
				if (g_value_get_int (value) == PANGO_WEIGHT_BOLD) {
					g_string_append (str, "");
					bold = TRUE;
				}

				value = &val3;
				g_value_init (value, PANGO_TYPE_STYLE);
				g_object_get_property (G_OBJECT (tag), "style", value);
				if (g_value_get_enum (value) == PANGO_STYLE_ITALIC) {
					g_string_append (str, "");
					italic = TRUE;
				}

			}
		}

		if (c == '<')
			g_string_append (str, "<");
		else if (c == '>')
			g_string_append (str, ">");
		else {
			txt[0] = c;
			g_string_append (str, txt);
		}

		gtk_text_iter_forward_char (&iter);
		if (tag && gtk_text_iter_ends_tag (&iter, tag)) {
			if (bold)
				g_string_append (str, "");
			if (italic)
				g_string_append (str, "");
			if (underline)
				g_string_append (str, "");
			if (font)
				g_string_append (str, "");
			tag = NULL;
			bold = italic = underline = font = FALSE;
		}
	}
	g_string_append (str, "
"); g_string_append (str, ""); g_string_append (str, ""); return g_string_free (str, FALSE); } gboolean gtk_source_buffer_find_bracket_match (GtkTextIter *orig) { GtkTextIter iter = *orig; gunichar base_char = 0; gunichar search_char = 0; gunichar cur_char = 0; gint addition = -1; gint counter = 0; gboolean found = FALSE; gtk_text_iter_backward_char (&iter); cur_char = gtk_text_iter_get_char (&iter); base_char = cur_char; switch ((int) base_char) { case '{': addition = 1; search_char = '}'; break; case '(': addition = 1; search_char = ')'; break; case '[': addition = 1; search_char = ']'; break; case '<': addition = 1; search_char = '>'; break; case '}': addition = -1; search_char = '{'; break; case ')': addition = -1; search_char = '('; break; case ']': addition = -1; search_char = '['; break; case '>': addition = -1; search_char = '<'; break; default: addition = 0; break; } if (!addition) return (FALSE); do { gtk_text_iter_forward_chars (&iter, addition); cur_char = gtk_text_iter_get_char (&iter); if (cur_char == search_char && !counter) { found = TRUE; break; } if (cur_char == base_char) counter++; else if (cur_char == search_char) counter--; } while (!gtk_text_iter_is_end (&iter) && !gtk_text_iter_is_start (&iter)); if (found) *orig = iter; return found; } gboolean gtk_source_buffer_can_undo (const GtkSourceBuffer *buffer) { g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); g_return_val_if_fail (buffer->priv != NULL, FALSE); return gtk_undo_manager_can_undo (buffer->priv->undo_manager); } gboolean gtk_source_buffer_can_redo (const GtkSourceBuffer *buffer) { g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); g_return_val_if_fail (buffer->priv != NULL, FALSE); return gtk_undo_manager_can_redo (buffer->priv->undo_manager); } void gtk_source_buffer_undo (GtkSourceBuffer *buffer) { g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); g_return_if_fail (buffer->priv != NULL); g_return_if_fail (gtk_undo_manager_can_undo (buffer->priv->undo_manager)); gtk_undo_manager_undo (buffer->priv->undo_manager); } void gtk_source_buffer_redo (GtkSourceBuffer *buffer) { g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); g_return_if_fail (buffer->priv != NULL); g_return_if_fail (gtk_undo_manager_can_redo (buffer->priv->undo_manager)); gtk_undo_manager_redo (buffer->priv->undo_manager); } int gtk_source_buffer_get_undo_levels (GtkSourceBuffer *buffer) { g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), 0); g_return_val_if_fail (buffer->priv != NULL, 0); return gtk_undo_manager_get_undo_levels (buffer->priv->undo_manager); } void gtk_source_buffer_set_undo_levels (GtkSourceBuffer *buffer, int undo_levels) { g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); g_return_if_fail (buffer->priv != NULL); gtk_undo_manager_set_undo_levels (buffer->priv->undo_manager, undo_levels); } void gtk_source_buffer_begin_not_undoable_action (GtkSourceBuffer *buffer) { g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); g_return_if_fail (buffer->priv != NULL); gtk_undo_manager_begin_not_undoable_action (buffer->priv->undo_manager); } void gtk_source_buffer_end_not_undoable_action (GtkSourceBuffer *buffer) { g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); g_return_if_fail (buffer->priv != NULL); gtk_undo_manager_end_not_undoable_action (buffer->priv->undo_manager); } /* Add a marker to a line. * If the list doesnt already exist, it will call set_marker. If the list does * exist, the new marker will be appended. If the marker already exists, it will * be removed from its current order and then prepended. */ void gtk_source_buffer_line_add_marker (GtkSourceBuffer *buffer, gint line, const gchar *marker) { GtkSourceBufferPrivate *priv; GList *list = NULL; GList *iter; gint line_count; g_return_if_fail (buffer != NULL); g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); priv = buffer->priv; line_count = gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER (buffer)); g_return_if_fail (line_count > line); list = (GList *) g_hash_table_lookup (priv->line_markers, GINT_TO_POINTER (line)); if (list && marker) { for (iter = list; iter; iter = iter->next) { if (iter->data && !strcmp (marker, (gchar *) iter->data)) { list = g_list_remove (list, iter->data); g_free (iter->data); break; } } g_hash_table_remove (priv->line_markers, GINT_TO_POINTER (line)); list = g_list_append (list, g_strdup (marker)); g_hash_table_insert (priv->line_markers, GINT_TO_POINTER (line), list); } else if (marker) gtk_source_buffer_line_set_marker (buffer, line, marker); } void gtk_source_buffer_line_set_marker (GtkSourceBuffer *buffer, gint line, const gchar *marker) { GList *new_list = NULL; gint line_count; g_return_if_fail (buffer != NULL); g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); line_count = gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER (buffer)); g_return_if_fail (line_count > line); gtk_source_buffer_line_remove_markers (buffer, line); if (marker) { new_list = g_list_append (new_list, g_strdup (marker)); g_hash_table_insert (buffer->priv->line_markers, GINT_TO_POINTER (line), new_list); } } gboolean gtk_source_buffer_line_remove_marker (GtkSourceBuffer *buffer, gint line, const gchar *marker) { gboolean removed = FALSE; GList *list; GList *iter; gint line_count; g_return_val_if_fail (buffer != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); line_count = gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER (buffer)); if (line > line_count) return FALSE; list = (GList *) g_hash_table_lookup (buffer->priv->line_markers, GINT_TO_POINTER (line)); for (iter = list; iter; iter = iter->next) { if (iter->data && !strcmp (marker, (gchar *) iter->data)) { list = g_list_remove (list, iter->data); g_hash_table_insert (buffer->priv->line_markers, GINT_TO_POINTER (line), list); removed = TRUE; break; } } return removed; } const GList * gtk_source_buffer_line_get_markers (GtkSourceBuffer *buffer, gint line) { g_return_val_if_fail (buffer != NULL, NULL); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), NULL); return (const GList *) g_hash_table_lookup (buffer->priv->line_markers, GINT_TO_POINTER (line)); } gint gtk_source_buffer_line_has_markers (GtkSourceBuffer *buffer, gint line) { gpointer data; gint count = 0; g_return_val_if_fail (buffer != NULL, 0); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), 0); data = g_hash_table_lookup (buffer->priv->line_markers, GINT_TO_POINTER (line)); if (data) count = g_list_length ((GList *) data); return count; } gint gtk_source_buffer_line_remove_markers (GtkSourceBuffer *buffer, gint line) { GList *list = NULL; GList *iter = NULL; gint remove_count = 0; gint line_count = 0; g_return_val_if_fail (buffer != NULL, 0); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), 0); line_count = gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER (buffer)); if (line > line_count) return 0; list = (GList *) g_hash_table_lookup (buffer->priv->line_markers, GINT_TO_POINTER (line)); if (list) { for (iter = list; iter; iter = iter->next) { if (iter->data) g_free (iter->data); remove_count++; } g_hash_table_remove (buffer->priv->line_markers, GINT_TO_POINTER (line)); g_list_free (list); } return remove_count; } GList * gtk_source_buffer_get_all_markers (GtkSourceBuffer *buffer) { GList *list = NULL; g_hash_table_foreach (buffer->priv->line_markers, add_markers, &list); return list; } gint gtk_source_buffer_remove_all_markers (GtkSourceBuffer *buffer, gint line_start, gint line_end) { gint remove_count = 0; gint line_count; gint counter; g_return_val_if_fail (buffer != NULL, 0); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), 0); line_count = gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER (buffer)); line_start = line_start < 0 ? 0 : line_start; line_end = line_end > line_count ? line_count : line_end; for (counter = line_start; counter <= line_end; counter++) remove_count += gtk_source_buffer_line_remove_markers (buffer, counter); return remove_count; } void gtk_source_buffer_set_check_brackets (GtkSourceBuffer *buffer, gboolean check_brackets) { g_return_if_fail (buffer != NULL); g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); buffer->priv->check_brackets = check_brackets; } gboolean gtk_source_buffer_get_highlight (GtkSourceBuffer *buffer) { g_return_val_if_fail (buffer != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); return buffer->priv->highlight; } void gtk_source_buffer_set_highlight (GtkSourceBuffer *buffer, gboolean highlight) { GtkTextIter iter1; GtkTextIter iter2; g_return_if_fail (buffer != NULL); g_return_if_fail (GTK_IS_SOURCE_BUFFER (buffer)); buffer->priv->highlight = highlight; gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &iter1, &iter2); if (highlight) refresh_range (buffer, &iter1, &iter2); else { if (buffer->priv->refresh_idle_handler) { g_source_remove (buffer->priv->refresh_idle_handler); buffer->priv->refresh_idle_handler = 0; } gtk_text_buffer_remove_all_tags (GTK_TEXT_BUFFER (buffer), &iter1, &iter2); } } gboolean gtk_source_buffer_load (GtkSourceBuffer *buffer, const gchar *filename, GError **error) { g_return_val_if_fail (buffer != NULL, FALSE); g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); return gtk_source_buffer_load_with_character_encoding (buffer, filename, NULL, error); } gboolean gtk_source_buffer_save (GtkSourceBuffer *buffer, const gchar *filename, GError **error) { g_return_val_if_fail (buffer != NULL, FALSE); g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); return gtk_source_buffer_save_with_character_encoding (buffer, filename, "UTF-8", error); } gboolean gtk_source_buffer_load_with_character_encoding (GtkSourceBuffer *buffer, const gchar *filename, const gchar *encoding, GError **error) { GIOChannel *io; GtkWidget *widget; gboolean highlight = FALSE; *error = NULL; g_return_val_if_fail (buffer != NULL, FALSE); g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); highlight = gtk_source_buffer_get_highlight (buffer); io = g_io_channel_new_file (filename, "r", error); if (!io) { widget = gtk_message_dialog_new (NULL, (GtkDialogFlags) 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s\nFile %s", (*error)->message, filename); gtk_dialog_run (GTK_DIALOG (widget)); gtk_widget_destroy (widget); return FALSE; } if (g_io_channel_set_encoding (io, encoding, error) != G_IO_STATUS_NORMAL) { widget = gtk_message_dialog_new (NULL, (GtkDialogFlags) 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to set encoding:\n%s\n%s"), filename, (*error)->message); gtk_dialog_run (GTK_DIALOG (widget)); gtk_widget_destroy (widget); g_io_channel_unref (io); return FALSE; } if (highlight) gtk_source_buffer_set_highlight (buffer, FALSE); gtk_source_buffer_begin_not_undoable_action (buffer); while (!*error && read_loop (GTK_TEXT_BUFFER(buffer), filename, io, error) ); gtk_source_buffer_end_not_undoable_action (buffer); g_io_channel_unref (io); if (*error) return FALSE; gtk_text_buffer_set_modified (GTK_TEXT_BUFFER (buffer), FALSE); if (highlight) gtk_source_buffer_set_highlight (buffer, TRUE); return TRUE; } gboolean gtk_source_buffer_save_with_character_encoding (GtkSourceBuffer *buffer, const gchar *filename, const gchar *encoding, GError **error) { GIOChannel *io; GtkTextIter iter, iterend; gchar *buf; gboolean more = FALSE; gsize length=0; *error=NULL; g_return_val_if_fail (buffer != NULL, FALSE); g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_BUFFER (buffer), FALSE); if (encoding && !*encoding) encoding = NULL; io=g_io_channel_new_file(filename, "w+", error); if (!io) { GtkWidget *w = gtk_message_dialog_new (NULL, (GtkDialogFlags) 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to create file:\n%s\n%s"), filename, (*error)->message); gtk_dialog_run (GTK_DIALOG(w)); gtk_widget_destroy (w); return FALSE; } if (encoding && g_io_channel_set_encoding (io, encoding , error) != G_IO_STATUS_NORMAL) { GtkWidget *w = gtk_message_dialog_new (NULL, (GtkDialogFlags) 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to set encoding:\n%s\n%s"), filename, (*error)->message); gtk_dialog_run (GTK_DIALOG(w)); gtk_widget_destroy (w); g_io_channel_unref (io); return FALSE; } gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER (buffer), &iter); iterend=iter; do { more = gtk_text_iter_forward_line(&iterend); buf = gtk_text_iter_get_text(&iter, &iterend); if (g_io_channel_write_chars(io, buf, -1, &length, error) != G_IO_STATUS_NORMAL) { GtkWidget *w = gtk_message_dialog_new (NULL, (GtkDialogFlags) 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to write characters to file:\n%s\n%s"), filename, (*error)->message); gtk_dialog_run (GTK_DIALOG (w)); gtk_widget_destroy (w); g_io_channel_unref (io); return FALSE; } g_free (buf); iter = iterend; } while (more); if (g_io_channel_flush(io, error) != G_IO_STATUS_NORMAL) { GtkWidget *w = gtk_message_dialog_new (NULL, (GtkDialogFlags) 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to write end line to file:\n%s\n%s"), filename, (*error)->message); gtk_dialog_run (GTK_DIALOG (w)); gtk_widget_destroy (w); g_io_channel_unref (io); return FALSE; } g_io_channel_unref (io); gtk_text_buffer_set_modified (GTK_TEXT_BUFFER (buffer), FALSE); return TRUE; } vdk-2.4.0/vdk/gtktextsearch.c0000644000000000000000000001634307613266401011554 /* * * * Copyright (C) 2002 Mikael Hermansson * * 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. */ #include #include static GObjectClass *parent_class = NULL; void gtk_text_search_class_init (GtkTextSearchClass *klass); void gtk_text_search_init (GtkTextSearch *object); void gtk_text_search_finalize (GObject *object); void gtk_text_search_init(GtkTextSearch *text_search) { text_search->search_for = g_strdup(""); text_search->sflags = 0; text_search->mark_current = NULL; text_search->mark_stop = NULL; text_search->buffer = NULL; } void gtk_text_search_class_init(GtkTextSearchClass *klass) { GObjectClass *object_class; object_class = (GObjectClass*) klass; parent_class = g_type_class_peek_parent (klass); object_class->finalize = gtk_text_search_finalize; } void gtk_text_search_finalize (GObject *object) { GtkTextSearch *text_search = GTK_TEXT_SEARCH (object); g_free (text_search->search_for); g_object_unref (G_OBJECT(text_search->mark_current)); g_object_unref (G_OBJECT(text_search->mark_stop)); g_object_unref (G_OBJECT(text_search->buffer)); (* G_OBJECT_CLASS (parent_class)->finalize) (G_OBJECT(text_search)); } GtkTextSearch * gtk_text_search_new (GtkTextBuffer *buffer, const GtkTextIter *start, const char *searchfor, GtkETextSearchFlags sflags, const GtkTextIter *limit) { GtkTextSearch *text_search; text_search = GTK_TEXT_SEARCH(g_object_new (GTK_TYPE_TEXT_SEARCH, NULL)); gtk_text_search_set(text_search, buffer, start, searchfor, sflags, limit); return text_search; } void gtk_text_search_set (GtkTextSearch *text_search, GtkTextBuffer *buffer, const GtkTextIter *startp, const char *searchfor, GtkETextSearchFlags sflags, const GtkTextIter *limit) { GtkTextIter end, start; text_search = GTK_TEXT_SEARCH(g_object_new (GTK_TYPE_TEXT_SEARCH, NULL)); if (text_search->buffer != buffer) { g_object_ref (G_OBJECT(text_search->buffer)); } if (startp) start = *startp; else gtk_text_buffer_get_start_iter(text_search->buffer, &start); if (limit) end = *limit; else gtk_text_buffer_get_end_iter(text_search->buffer, &end); if (sflags) text_search->sflags = sflags; if(searchfor) { g_free(text_search->search_for); text_search->search_for = g_strdup (searchfor); } if (text_search->mark_current) g_object_unref(G_OBJECT(text_search->mark_current)); if (text_search->mark_stop) g_object_unref(G_OBJECT(text_search->mark_stop)); text_search->mark_current = gtk_text_buffer_create_mark(text_search->buffer, "search_mark_current", &start, FALSE); text_search->mark_stop = gtk_text_buffer_create_mark(text_search->buffer, "search_mark_stop", &end, FALSE); } void gtk_text_search_set_interval (GtkTextSearch *text_search, GtkTextBuffer *buffer, const GtkTextIter *start, const GtkTextIter *end) { gtk_text_search_set (text_search, buffer, start, NULL, 0, end); } static gboolean gtk_source_buffer_compare_unichar (gunichar ch, gpointer data) { GtkTextSearch *si; gunichar chsearch; si = GTK_TEXT_SEARCH(data); /* there are no more characters match this means we succed scaning :-) */ if (!*si->offset) { si->is_matched = TRUE; return TRUE; } chsearch = g_utf8_get_char(si->offset); if ( ch == 0xFFFC && si->sflags & GTK_ETEXT_SEARCH_TEXT_ONLY) /* we don't care about pixbufs */ return FALSE; if (si->sflags & GTK_ETEXT_SEARCH_CASE_INSENSITIVE) { chsearch = g_unichar_tolower(chsearch); ch = g_unichar_tolower(ch); } if (ch == chsearch) si->offset = g_utf8_next_char(si->offset); else if (si->offset != si->search_for) /* the scan has already matched first character */ return TRUE; /* return TRUE stop scan because we failed on this character */ return FALSE; } gboolean gtk_text_search_forward (GtkTextSearch *search, GtkTextIter *match_start, GtkTextIter *match_end) { GtkTextIter iter1, iter2; /* g_return_val_if_fail(search =! NULL, FALSE);*/ /* g_return_val_if_fail(GTK_IS_TEXT_SEARCH(search), FALSE);*/ /* always initialize */ search->is_matched = FALSE; search->offset = search->search_for; gtk_text_buffer_get_iter_at_mark (search->buffer, &iter1, search->mark_current); gtk_text_buffer_get_iter_at_mark (search->buffer, &iter2, search->mark_stop); gtk_source_buffer_compare_unichar (gtk_text_iter_get_char(&iter1), search); gtk_text_iter_forward_find_char (&iter1, gtk_source_buffer_compare_unichar, search , &iter2); gtk_text_buffer_move_mark (search->buffer, search->mark_current, &iter1); if ( search->is_matched) { *match_start = iter1; *match_end = iter1; gtk_text_iter_backward_chars(match_start, g_utf8_strlen(search->search_for, -1)); return TRUE; } return FALSE; } gint gtk_text_search_forward_foreach (GtkTextSearch *search, GtkTextSearchForeachFunc sfunc, gpointer data) { GtkTextIter iter1, iter2, start_match, end_match; gint count = 0; gtk_text_buffer_get_iter_at_mark (search->buffer, &iter1, search->mark_current); gtk_text_buffer_get_iter_at_mark (search->buffer, &iter2, search->mark_stop); while (gtk_text_iter_compare (&iter1, &iter2) < 0) { if (gtk_text_search_forward (search, &start_match, &end_match)) { count++; if (sfunc (&start_match, &end_match, data)) return count; } gtk_text_buffer_get_iter_at_mark (search->buffer, &iter1, search->mark_current); gtk_text_buffer_get_iter_at_mark (search->buffer, &iter2, search->mark_stop); } return count; } GType gtk_text_search_get_type () { static GType our_type = 0; if (our_type == 0) { static const GTypeInfo our_info = { sizeof (GtkTextSearchClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_text_search_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkTextSearch), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_text_search_init }; our_type = g_type_register_static (G_TYPE_OBJECT, "GtkTextSearch", &our_info, 0); } return our_type; } vdk-2.4.0/vdk/gtksourcetag.c0000644000000000000000000001663107613266401011376 /* gtksourcetag.c * * Copyright (C) 2001 * Mikael Hermansson * Chris Phelps * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License* along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include static GObjectClass *parent_syntax_class = NULL; static GObjectClass *parent_pattern_class = NULL; static GObjectClass *parent_embedded_class = NULL; static void gtk_syntax_tag_init (GtkSyntaxTag *text_tag); static void gtk_syntax_tag_class_init (GtkSyntaxTagClass *text_tag); static void gtk_syntax_tag_finalize (GObject *object); static void gtk_pattern_tag_init (GtkPatternTag *text_tag); static void gtk_pattern_tag_class_init (GtkPatternTagClass *text_tag); static void gtk_pattern_tag_finalize (GObject *object); static void gtk_embedded_tag_init (GtkEmbeddedTag *text_tag); static void gtk_embedded_tag_class_init (GtkEmbeddedTagClass *text_tag); static void gtk_embedded_tag_finalize (GObject *object); GType gtk_syntax_tag_get_type (void) { static GType our_type = 0; if (our_type == 0) { static const GTypeInfo our_info = { sizeof (GtkSyntaxTagClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_syntax_tag_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkSyntaxTag), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_syntax_tag_init }; our_type = g_type_register_static (GTK_TYPE_TEXT_TAG, "GtkSyntaxTag", &our_info, 0); } return our_type; } static void gtk_syntax_tag_class_init (GtkSyntaxTagClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_syntax_class = g_type_class_peek_parent (klass); object_class->finalize = gtk_syntax_tag_finalize; } static void gtk_syntax_tag_init (GtkSyntaxTag *text_tag) { GTK_TEXT_TAG (text_tag)->table = NULL; } GtkTextTag * gtk_syntax_tag_new (const gchar *name, const gchar *patternstart, const gchar *patternend) { GtkSyntaxTag *tag; tag = GTK_SYNTAX_TAG (g_object_new (gtk_syntax_tag_get_type (), "name", name, NULL)); tag->start = g_strdup (patternstart); if (!gtk_source_compile_regex (patternstart, &tag->reg_start)) g_print ("Regex syntax start pattern failed [%s]\n", patternstart); if (!gtk_source_compile_regex (patternend, &tag->reg_end)) g_print ("Regex syntax end pattern failed [%s]\n", patternend); return GTK_TEXT_TAG (tag); } static void gtk_syntax_tag_finalize (GObject *object) { GtkSyntaxTag *tag; tag = GTK_SYNTAX_TAG (object); if (tag->start) g_free (tag->start); g_free (tag->reg_start.buf.fastmap); tag->reg_start.buf.fastmap = NULL; regfree (&tag->reg_start.buf); g_free (tag->reg_end.buf.fastmap); tag->reg_end.buf.fastmap = NULL; regfree (&tag->reg_end.buf); (*G_OBJECT_CLASS (parent_syntax_class)->finalize) (object); } /* Pattern Tag */ GType gtk_pattern_tag_get_type (void) { static GType our_type = 0; if (our_type == 0) { static const GTypeInfo our_info = { sizeof (GtkPatternTagClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_pattern_tag_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkPatternTag), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_pattern_tag_init }; our_type = g_type_register_static (GTK_TYPE_TEXT_TAG, "GtkPatternTag", &our_info, 0); } return (our_type); } static void gtk_pattern_tag_init (GtkPatternTag *text_tag) { } static void gtk_pattern_tag_class_init (GtkPatternTagClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_pattern_class = g_type_class_peek_parent (klass); object_class->finalize = gtk_pattern_tag_finalize; } GtkTextTag * gtk_pattern_tag_new (const gchar *name, const gchar *pattern) { GtkPatternTag *tag; tag = GTK_PATTERN_TAG (g_object_new (gtk_pattern_tag_get_type (), "name", name, NULL)); if (!gtk_source_compile_regex (pattern, &tag->reg_pattern)) g_print ("Regex pattern failed [%s]\n", pattern); return GTK_TEXT_TAG (tag); } void gtk_pattern_tag_finalize (GObject *object) { GtkPatternTag *tag; tag = GTK_PATTERN_TAG (object); g_free (tag->reg_pattern.buf.fastmap); tag->reg_pattern.buf.fastmap = NULL; regfree (&tag->reg_pattern.buf); (*G_OBJECT_CLASS (parent_pattern_class)->finalize) (object); } /* Embedded Tags */ GType gtk_embedded_tag_get_type (void) { static GType our_type = 0; if (our_type == 0) { static const GTypeInfo our_info = { sizeof (GtkEmbeddedTagClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_embedded_tag_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkEmbeddedTag), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_embedded_tag_init }; our_type = g_type_register_static (GTK_TYPE_TEXT_TAG, "GtkEmbeddedTag", &our_info, 0); } return our_type; } static void gtk_embedded_tag_class_init (GtkEmbeddedTagClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_embedded_class = g_type_class_peek_parent (klass); object_class->finalize = gtk_embedded_tag_finalize; } static void gtk_embedded_tag_init (GtkEmbeddedTag *text_tag) { } GtkTextTag * gtk_embedded_tag_new (const gchar *name, const gchar *outside, const gchar *inside) { GtkEmbeddedTag *tag; tag = GTK_EMBEDDED_TAG (g_object_new (GTK_TYPE_EMBEDDED_TAG, "name", name, NULL)); if (!gtk_source_compile_regex (outside, &tag->reg_outside)) g_print ("Regex embedded outside pattern failed [%s]\n", outside); if (!gtk_source_compile_regex (inside, &tag->reg_inside)) g_print ("Regex embedded inside pattern failed [%s]\n", inside); return GTK_TEXT_TAG (tag); } static void gtk_embedded_tag_finalize (GObject *object) { GtkEmbeddedTag *tag; tag = GTK_EMBEDDED_TAG (object); g_free (tag->reg_outside.buf.fastmap); tag->reg_outside.buf.fastmap = NULL; regfree (&tag->reg_outside.buf); g_free (tag->reg_inside.buf.fastmap); tag->reg_inside.buf.fastmap = NULL; regfree (&tag->reg_inside.buf); (*G_OBJECT_CLASS (parent_embedded_class)->finalize) (object); } /* Generic Functions */ gboolean gtk_source_compile_regex (const gchar *pattern, Regex *regex) { if (!pattern) return (FALSE); memset (®ex->buf, 0, sizeof (regex->buf)); regex->len = strlen (pattern); regex->buf.translate = NULL; regex->buf.fastmap = g_malloc (256); regex->buf.allocated = 0; regex->buf.buffer = NULL; regex->buf.can_be_null = 0; /* so we wont allow that in patterns! */ regex->buf.no_sub = 0; if (re_compile_pattern (pattern, strlen (pattern), ®ex->buf) == 0) { /* success...now try to compile a fastmap */ if (re_compile_fastmap (®ex->buf) != 0) { g_warning ("IMPORTANT REGEX FAILED TO CREASTE FASTMAP\n"); /* error...no fastmap */ g_free (regex->buf.fastmap); regex->buf.fastmap = NULL; } return (TRUE); } else { g_warning ("IMPORTANT REGEX FAILED TO COMPILE\n"); return (FALSE); } } vdk-2.4.0/vdk/gtksourceview.c0000644000000000000000000005251507613266400011575 /* gtksourceview.c * * Copyright (C) 2001 * Mikael Hermansson * Chris Phelps * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License* along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #define GUTTER_PIXMAP 16 #define TAB_STOP 4 #define MIN_NUMBER_WINDOW_WIDTH 20 enum { UNDO, REDO, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; static GObjectClass *parent_class = NULL; /* Prototypes. */ static void gtk_source_view_class_init (GtkSourceViewClass *klass); static void gtk_source_view_init (GtkSourceView *view); static void gtk_source_view_finalize (GObject *object); static void gtk_source_view_pixbuf_foreach_unref (gpointer key, gpointer value, gpointer user_data); static void gtk_source_view_undo (GtkSourceView *view); static void gtk_source_view_redo (GtkSourceView *view); static void gtk_source_view_populate_popup (GtkTextView *view, GtkMenu *menu); static void menuitem_activate_cb (GtkWidget *menuitem, GtkTextView *text_view); static void gtk_source_view_draw_line_markers (GtkSourceView *view, gint line, gint x, gint y); static GdkPixbuf *gtk_source_view_get_line_marker (GtkSourceView *view, GList *list); static void gtk_source_view_get_lines (GtkTextView *text_view, gint first_y, gint last_y, GArray *buffer_coords, GArray *numbers, gint *countp); static gint gtk_source_view_expose (GtkWidget *widget, GdkEventExpose *event); static gint gtk_source_view_calculate_tab_stop_width (GtkWidget *widget, gint tab_stop); /* Private functions. */ static void gtk_source_view_class_init (GtkSourceViewClass *klass) { GObjectClass *object_class; GtkTextViewClass *textview_class; GtkBindingSet *binding_set; GtkWidgetClass *widget_class; object_class = (GObjectClass *) klass; textview_class = GTK_TEXT_VIEW_CLASS (klass); parent_class = g_type_class_peek_parent (klass); widget_class = GTK_WIDGET_CLASS (klass); object_class->finalize = gtk_source_view_finalize; widget_class->expose_event = gtk_source_view_expose; textview_class->populate_popup = gtk_source_view_populate_popup; klass->undo = gtk_source_view_undo; klass->redo = gtk_source_view_redo; signals[UNDO] = gtk_signal_new ("undo", GTK_RUN_LAST | GTK_RUN_ACTION, GTK_CLASS_TYPE (object_class), GTK_SIGNAL_OFFSET (GtkSourceViewClass, undo), gtk_marshal_VOID__VOID, GTK_TYPE_NONE, 0); signals[REDO] = gtk_signal_new ("redo", GTK_RUN_LAST | GTK_RUN_ACTION, GTK_CLASS_TYPE (object_class), GTK_SIGNAL_OFFSET (GtkSourceViewClass, redo), gtk_marshal_VOID__VOID, GTK_TYPE_NONE, 0); binding_set = gtk_binding_set_by_class (klass); gtk_binding_entry_add_signal (binding_set, GDK_z, GDK_CONTROL_MASK, "undo", 0); gtk_binding_entry_add_signal (binding_set, GDK_r, GDK_CONTROL_MASK, "redo", 0); /* added by mario motta */ gtk_binding_entry_add_signal (binding_set, GDK_Insert, GDK_CONTROL_MASK, "copy_clipboard", 0); gtk_binding_entry_add_signal (binding_set, GDK_Insert, GDK_SHIFT_MASK, "paste_clipboard", 0); gtk_binding_entry_add_signal (binding_set, GDK_Cancel, GDK_SHIFT_MASK, "cut_clipboard", 0); } static void gtk_source_view_init (GtkSourceView *view) { view->pixmap_cache = g_hash_table_new (g_str_hash, g_str_equal); gtk_source_view_set_show_line_numbers (view, TRUE); gtk_source_view_set_show_line_pixmaps (view, TRUE); } static void gtk_source_view_finalize (GObject *object) { GtkSourceView *view; g_return_if_fail (object != NULL); g_return_if_fail (GTK_IS_SOURCE_VIEW (object)); view = GTK_SOURCE_VIEW (object); if (view->pixmap_cache) { g_hash_table_foreach_remove (view->pixmap_cache, (GHRFunc) gtk_source_view_pixbuf_foreach_unref, NULL); g_hash_table_destroy (view->pixmap_cache); } } static void gtk_source_view_pixbuf_foreach_unref (gpointer key, gpointer value, gpointer user_data) { g_object_unref (G_OBJECT (value)); } static void gtk_source_view_undo (GtkSourceView *view) { g_return_if_fail (view != NULL); g_return_if_fail (GTK_IS_SOURCE_VIEW (view)); gtk_source_buffer_undo (GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)))); } static void gtk_source_view_redo (GtkSourceView *view) { g_return_if_fail (view != NULL); g_return_if_fail (GTK_IS_SOURCE_VIEW (view)); gtk_source_buffer_redo (GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)))); } static void gtk_source_view_populate_popup (GtkTextView *text_view, GtkMenu *menu) { GtkTextBuffer *buffer; GtkWidget *menuitem; buffer = gtk_text_view_get_buffer (text_view); if (!buffer && !GTK_IS_SOURCE_BUFFER (buffer)) return; /* what is this for? */ menuitem = gtk_menu_item_new (); gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 3); gtk_widget_show (menuitem); /* create undo menuitem. */ menuitem = gtk_menu_item_new_with_label ("Undo"); g_object_set_data (G_OBJECT (menuitem), "gtk-signal", "undo"); g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (menuitem_activate_cb), text_view); gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 4); gtk_widget_set_sensitive (menuitem, gtk_source_buffer_can_undo (GTK_SOURCE_BUFFER (buffer))); gtk_widget_show (menuitem); /* create redo menuitem. */ menuitem = gtk_menu_item_new_with_label ("Redo"); g_object_set_data (G_OBJECT (menuitem), "gtk-signal", "redo"); g_signal_connect (G_OBJECT (menuitem), "activate", G_CALLBACK (menuitem_activate_cb), text_view); gtk_menu_shell_insert (GTK_MENU_SHELL (menu), menuitem, 5); gtk_widget_set_sensitive (menuitem, gtk_source_buffer_can_redo (GTK_SOURCE_BUFFER (buffer))); gtk_widget_show (menuitem); } static void menuitem_activate_cb (GtkWidget *menuitem, GtkTextView *text_view) { const gchar *signal; signal = g_object_get_data (G_OBJECT (menuitem), "gtk-signal"); g_signal_emit_by_name (G_OBJECT (text_view), signal); } static GdkPixbuf * gtk_source_view_get_line_marker (GtkSourceView *view, GList *list) { GdkPixbuf *pixbuf; GdkPixbuf *composite; GList *iter; pixbuf = gtk_source_view_get_pixbuf (view, (const gchar *) list->data); if (!pixbuf) { g_warning ("Unknown marker '%s' used.", (char*)list->data); return NULL; } if (!list->next) g_object_ref (pixbuf); else { pixbuf = gdk_pixbuf_copy (pixbuf); for (iter = list->next; iter; iter = iter->next) { composite = gtk_source_view_get_pixbuf (view, (const gchar *) iter->data); if (composite) { gint width; gint height; gint comp_width; gint comp_height; width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); comp_width = gdk_pixbuf_get_width (composite); comp_height = gdk_pixbuf_get_height (composite); gdk_pixbuf_composite ((const GdkPixbuf *) composite, pixbuf, 0, 0, width, height, 0, 0, width / comp_width, height / comp_height, GDK_INTERP_BILINEAR, 225); } else g_warning ("Unknown marker '%s' used", (char*)iter->data); } } return pixbuf; } static void gtk_source_view_draw_line_markers (GtkSourceView *view, gint line, gint x, gint y) { GList *list; GdkPixbuf *pixbuf; GdkWindow *win = gtk_text_view_get_window (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_LEFT); list = (GList *) gtk_source_buffer_line_get_markers (GTK_SOURCE_BUFFER (GTK_TEXT_VIEW (view)->buffer), line); if (list) { if ((pixbuf = gtk_source_view_get_line_marker (view, list))) { gdk_pixbuf_render_to_drawable_alpha (pixbuf, GDK_DRAWABLE (win), 0, 0, x, y, gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf), GDK_PIXBUF_ALPHA_BILEVEL, 127, GDK_RGB_DITHER_NORMAL, 0, 0); g_object_unref (pixbuf); } } } static void gtk_source_view_get_lines (GtkTextView *text_view, gint first_y, gint last_y, GArray *buffer_coords, GArray *numbers, gint *countp) { GtkTextIter iter; gint count; gint size; gint last_line_num; g_array_set_size (buffer_coords, 0); g_array_set_size (numbers, 0); /* get iter at first y */ gtk_text_view_get_line_at_y (text_view, &iter, first_y, NULL); /* For each iter, get its location and add it to the arrays. * Stop when we pass last_y. */ count = 0; size = 0; while (!gtk_text_iter_is_end (&iter)) { gint y, height; gtk_text_view_get_line_yrange (text_view, &iter, &y, &height); g_array_append_val (buffer_coords, y); last_line_num = gtk_text_iter_get_line (&iter); g_array_append_val (numbers, last_line_num); ++count; if ((y + height) > last_y) break; gtk_text_iter_forward_line (&iter); } if (gtk_text_iter_is_end (&iter)) { gint y, height; gint line_num; gtk_text_view_get_line_yrange (text_view, &iter, &y, &height); line_num = gtk_text_iter_get_line (&iter); if (line_num != last_line_num) { g_array_append_val (buffer_coords, y); g_array_append_val (numbers, line_num); ++count; } } *countp = count; } static void gtk_source_view_paint_margin (GtkSourceView *view, GdkEventExpose *event) { GtkTextView *text_view; GdkWindow *win; PangoLayout *layout; GArray *numbers; GArray *pixels; gchar *str; gint y1; gint y2; gint count; gint margin_width; gint text_width; gint i; text_view = GTK_TEXT_VIEW (view); win = gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_LEFT); y1 = event->area.y; y2 = y1 + event->area.height; /* get the extents of the line printing */ gtk_text_view_window_to_buffer_coords (text_view, GTK_TEXT_WINDOW_LEFT, 0, y1, NULL, &y1); gtk_text_view_window_to_buffer_coords (text_view, GTK_TEXT_WINDOW_LEFT, 0, y2, NULL, &y2); numbers = g_array_new (FALSE, FALSE, sizeof (gint)); pixels = g_array_new (FALSE, FALSE, sizeof (gint)); /* get the line numbers and y coordinates. */ gtk_source_view_get_lines (text_view, y1, y2, pixels, numbers, &count); layout = gtk_widget_create_pango_layout (GTK_WIDGET (view), ""); /* set size. */ str = g_strdup_printf ("%d", MAX (999, gtk_text_buffer_get_line_count (text_view->buffer))); pango_layout_set_text (layout, str, -1); g_free (str); pango_layout_get_pixel_size (layout, &text_width, NULL); pango_layout_set_width (layout, text_width); pango_layout_set_alignment (layout, PANGO_ALIGN_RIGHT); /* determine the width of the left margin. */ if (view->show_line_numbers && view->show_line_pixmaps) margin_width = text_width + 4 + GUTTER_PIXMAP; else if (view->show_line_numbers) margin_width = text_width + 4; else if (view->show_line_pixmaps) margin_width = GUTTER_PIXMAP; else margin_width = 0; gtk_text_view_set_border_window_size (GTK_TEXT_VIEW (text_view), GTK_TEXT_WINDOW_LEFT, margin_width); if (margin_width == 0) return; i = 0; while (i < count) { gint pos; gtk_text_view_buffer_to_window_coords (text_view, GTK_TEXT_WINDOW_LEFT, 0, g_array_index (pixels, gint, i), NULL, &pos); if (view->show_line_numbers ) { str = g_strdup_printf ("%d", g_array_index (numbers, gint, i) + 1); pango_layout_set_text (layout, str, -1); gtk_paint_layout (GTK_WIDGET (view)->style, win, GTK_WIDGET_STATE (view), FALSE, NULL, GTK_WIDGET (view), NULL, text_width + 2, pos, layout); g_free (str); } if (view->show_line_pixmaps) { gint x; if (view->show_line_numbers) x = text_width + 4; else x = 0; gtk_source_view_draw_line_markers (view, g_array_index (numbers, gint, i) + 1, x, pos); } ++i; } g_array_free (pixels, TRUE); g_array_free (numbers, TRUE); g_object_unref (G_OBJECT (layout)); } static gint gtk_source_view_expose (GtkWidget *widget, GdkEventExpose *event) { GtkSourceView *view; GtkTextView *text_view; gboolean event_handled; view = GTK_SOURCE_VIEW (widget); text_view = GTK_TEXT_VIEW (widget); event_handled = FALSE; /* check if the expose event is for the text window first, and * highlight the exposed region */ if (event->window == gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT)) { GtkTextIter iter1, iter2; gint y; /* make sure the exposed area is highlighted */ gtk_text_view_window_to_buffer_coords (text_view, GTK_TEXT_WINDOW_TEXT, 0, event->area.y, NULL, &y); gtk_text_view_get_line_at_y (text_view, &iter1, y, NULL); gtk_text_iter_backward_line (&iter1); gtk_text_view_window_to_buffer_coords (text_view, GTK_TEXT_WINDOW_TEXT, 0, event->area.y + event->area.height, NULL, &y); gtk_text_view_get_line_at_y (text_view, &iter2, y, NULL); gtk_text_iter_forward_line (&iter2); gtk_source_buffer_highlight_region (GTK_SOURCE_BUFFER (text_view->buffer), &iter1, &iter2); } /* now check for the left window, which contains the margin */ if (event->window == gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_LEFT)) { gtk_source_view_paint_margin (view, event); event_handled = TRUE; } else { if (GTK_WIDGET_CLASS (parent_class)->expose_event) event_handled = (* GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event); } return event_handled; } /* *This is a pretty important function...we call it when the tab_stop is changed, *And when the font is changed. *NOTE: You must change this with the default font for now... *It may be a good idea to set the tab_width for each GtkTextTag as well *based on the font that we set at creation time *something like style_cache_set_tabs_from_font or the like. *Now, this *may* not be necessary because most tabs wont be inside of another highlight, *except for things like multi-line comments (which will usually have an italic font which *may or may not be a different size than the standard one), or if some random language *definition decides that it would be spiffy to have a bg color for "start of line" whitespace *"^\(\t\| \)+" would probably do the trick for that. */ static gint gtk_source_view_calculate_tab_stop_width (GtkWidget *widget, gint tab_stop) { PangoLayout *layout; gchar *tab_string; int counter = 0; int tab_width = 0; if (tab_stop == 0) return 0; tab_string = g_malloc (tab_stop + 1); while (counter < tab_stop) { tab_string[counter] = ' '; counter++; } tab_string[tab_stop] = '\0'; layout = gtk_widget_create_pango_layout (widget, tab_string); g_free (tab_string); if (layout) { pango_layout_get_pixel_size (layout, &tab_width, NULL); g_object_unref (G_OBJECT (layout)); } else tab_width = tab_stop * 8; return tab_width; } /* ---------------------------------------------------------------------- * Public interface * ---------------------------------------------------------------------- */ GtkWidget * gtk_source_view_new () { GtkWidget *widget; GtkSourceBuffer *buffer; buffer = gtk_source_buffer_new (NULL); widget = gtk_source_view_new_with_buffer (buffer); return widget; } GtkWidget * gtk_source_view_new_with_buffer (GtkSourceBuffer *buffer) { GtkWidget *view; view = g_object_new (GTK_TYPE_SOURCE_VIEW, NULL); gtk_text_view_set_buffer (GTK_TEXT_VIEW (view), GTK_TEXT_BUFFER (buffer)); return view; } GType gtk_source_view_get_type (void) { static GType our_type = 0; if (our_type == 0) { static const GTypeInfo our_info = { sizeof (GtkSourceViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_source_view_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkSourceView), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_source_view_init }; our_type = g_type_register_static (GTK_TYPE_TEXT_VIEW, "GtkSourceView", &our_info, 0); } return our_type; } gboolean gtk_source_view_get_show_line_numbers (GtkSourceView *view) { g_return_val_if_fail (view != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_VIEW (view), FALSE); return view->show_line_numbers; } void gtk_source_view_set_show_line_numbers (GtkSourceView *view, gboolean visible) { g_return_if_fail (view != NULL); g_return_if_fail (GTK_IS_SOURCE_VIEW (view)); if (visible) { if (!view->show_line_numbers) { /* Set left margin to minimum width if no margin is visible yet. Otherwise, just queue a redraw, so the expose handler will automatically adjust the margin. */ if (!view->show_line_pixmaps) gtk_text_view_set_border_window_size (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_LEFT, MIN_NUMBER_WINDOW_WIDTH); else gtk_widget_queue_draw (GTK_WIDGET (view)); view->show_line_numbers = visible; } } else { if (view->show_line_numbers) { view->show_line_numbers = visible; /* force expose event, which will adjust margin. */ gtk_widget_queue_draw (GTK_WIDGET (view)); } } } gboolean gtk_source_view_get_show_line_pixmaps (GtkSourceView *view) { g_return_val_if_fail (view != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_VIEW (view), FALSE); return view->show_line_pixmaps; } void gtk_source_view_set_show_line_pixmaps (GtkSourceView *view, gboolean visible) { g_return_if_fail (view != NULL); g_return_if_fail (GTK_IS_SOURCE_VIEW (view)); if (visible) { if (!view->show_line_pixmaps) { /* Set left margin to minimum width if no margin is visible yet. Otherwise, just queue a redraw, so the expose handler will automatically adjust the margin. */ if (!view->show_line_numbers) gtk_text_view_set_border_window_size (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_LEFT, MIN_NUMBER_WINDOW_WIDTH); else gtk_widget_queue_draw (GTK_WIDGET (view)); view->show_line_pixmaps = visible; } } else { if (view->show_line_pixmaps) { view->show_line_pixmaps = visible; /* force expose event, which will adjust margin. */ gtk_widget_queue_draw (GTK_WIDGET (view)); } } } gint gtk_source_view_get_tab_stop (GtkSourceView *view) { g_return_val_if_fail (view != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_VIEW (view), FALSE); return view->tab_stop; } void gtk_source_view_set_tab_stop (GtkSourceView *view, gint tab_stop) { PangoTabArray *tabs; g_return_if_fail (view != NULL); g_return_if_fail (GTK_IS_SOURCE_VIEW (view)); view->tab_stop = tab_stop; tabs = pango_tab_array_new (1, TRUE); pango_tab_array_set_tab (tabs, 0, PANGO_TAB_LEFT, gtk_source_view_calculate_tab_stop_width (GTK_WIDGET (view), tab_stop)); gtk_text_view_set_tabs (GTK_TEXT_VIEW (view), tabs); pango_tab_array_free (tabs); } gint gtk_source_view_get_tab_stop_width (GtkSourceView *view) { PangoTabArray *tabs; PangoTabAlign alignment; gint tabstop; g_return_val_if_fail (view != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_VIEW (view), FALSE); tabs = gtk_text_view_get_tabs (GTK_TEXT_VIEW (view)); pango_tab_array_get_tab (tabs, 0, &alignment, &tabstop); return tabstop; } gboolean gtk_source_view_add_pixbuf (GtkSourceView *view, const gchar *key, GdkPixbuf *pixbuf, gboolean overwrite) { gpointer data = NULL; gboolean replaced = FALSE; g_return_val_if_fail (view != NULL, FALSE); g_return_val_if_fail (GTK_IS_SOURCE_VIEW (view), FALSE); data = g_hash_table_lookup (view->pixmap_cache, key); if (data && !overwrite) return (FALSE); if (data) { g_hash_table_remove (view->pixmap_cache, key); g_object_unref (G_OBJECT (data)); replaced = TRUE; } if (pixbuf && GDK_IS_PIXBUF (pixbuf)) { gint width; gint height; width = gdk_pixbuf_get_width (pixbuf); height = gdk_pixbuf_get_height (pixbuf); if (width > GUTTER_PIXMAP || height > GUTTER_PIXMAP) { if (width > GUTTER_PIXMAP) width = GUTTER_PIXMAP; if (height > GUTTER_PIXMAP) height = GUTTER_PIXMAP; pixbuf = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR); } g_object_ref (G_OBJECT (pixbuf)); g_hash_table_insert (view->pixmap_cache, (gchar *) key, (gpointer) pixbuf); } return replaced; } GdkPixbuf * gtk_source_view_get_pixbuf (GtkSourceView *view, const gchar *key) { return g_hash_table_lookup (view->pixmap_cache, key); } vdk-2.4.0/vdk/gtkundomanager.c0000644000000000000000000005305607613266400011703 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * gtkundomanager.c * This file is part of gtksourceview, copied from gtk. * * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi * * 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. */ /* * Modified by the gtk Team, 1998-2001. See the AUTHORS file for a * list of people on the gtk Team. * See the ChangeLog files for a list of changes. */ #include #include #include #include typedef struct _GtkUndoAction GtkUndoAction; typedef struct _GtkUndoInsertAction GtkUndoInsertAction; typedef struct _GtkUndoDeleteAction GtkUndoDeleteAction; typedef enum { GTK_UNDO_ACTION_INSERT, GTK_UNDO_ACTION_DELETE, } GtkUndoActionType; /* * We use offsets instead of GtkTextIters because the last ones * require to much memory in this context without giving us any advantage. */ struct _GtkUndoInsertAction { gint pos; gchar *text; gint length; gint chars; }; struct _GtkUndoDeleteAction { gint start; gint end; gchar *text; }; struct _GtkUndoAction { GtkUndoActionType action_type; union { GtkUndoInsertAction insert; GtkUndoDeleteAction delete; } action; gboolean mergeable; gint order_in_group; }; struct _GtkUndoManagerPrivate { GtkTextBuffer *buffer; GList* actions; gint next_redo; gint actions_in_current_group; gboolean can_undo; gboolean can_redo; gint running_not_undoable_actions; gint undo_levels; }; enum { CAN_UNDO, CAN_REDO, LAST_SIGNAL }; static void gtk_undo_manager_class_init (GtkUndoManagerClass *klass); static void gtk_undo_manager_init (GtkUndoManager *um); static void gtk_undo_manager_finalize (GObject *object); static void gtk_undo_manager_insert_text_handler (GtkTextBuffer *buffer, GtkTextIter *pos, const gchar *text, gint length, GtkUndoManager *um); static void gtk_undo_manager_delete_range_handler (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end, GtkUndoManager *um); static void gtk_undo_manager_begin_user_action_handler (GtkTextBuffer *buffer, GtkUndoManager *um); static void gtk_undo_manager_end_user_action_handler (GtkTextBuffer *buffer, GtkUndoManager *um); static void gtk_undo_manager_free_action_list (GtkUndoManager *um); static void gtk_undo_manager_add_action (GtkUndoManager *um, GtkUndoAction undo_action); static void gtk_undo_manager_free_first_n_actions (GtkUndoManager *um, gint n); static void gtk_undo_manager_check_list_size (GtkUndoManager *um); static gboolean gtk_undo_manager_merge_action (GtkUndoManager *um, GtkUndoAction *undo_action); static gint gtk_undo_manager_get_number_of_groups (GtkUndoManager *um); static GObjectClass *parent_class = NULL; static guint undo_manager_signals [LAST_SIGNAL] = { 0 }; GType gtk_undo_manager_get_type (void) { static GType undo_manager_type = 0; if (undo_manager_type == 0) { static const GTypeInfo our_info = { sizeof (GtkSourceBufferClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) gtk_undo_manager_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkSourceBuffer), 0, /* n_preallocs */ (GInstanceInitFunc) gtk_undo_manager_init }; undo_manager_type = g_type_register_static (G_TYPE_OBJECT, "GtkUndoManager", &our_info, 0); } return undo_manager_type; } static void gtk_undo_manager_class_init (GtkUndoManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); object_class->finalize = gtk_undo_manager_finalize; klass->can_undo = NULL; klass->can_redo = NULL; undo_manager_signals[CAN_UNDO] = g_signal_new ("can_undo", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GtkUndoManagerClass, can_undo), NULL, NULL, gtk_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); undo_manager_signals[CAN_REDO] = g_signal_new ("can_redo", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GtkUndoManagerClass, can_redo), NULL, NULL, gtk_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); } static void gtk_undo_manager_init (GtkUndoManager *um) { um->priv = g_new0 (GtkUndoManagerPrivate, 1); um->priv->actions = NULL; um->priv->next_redo = 0; um->priv->can_undo = FALSE; um->priv->can_redo = FALSE; um->priv->running_not_undoable_actions = 0; } static void gtk_undo_manager_finalize (GObject *object) { GtkUndoManager *um; g_return_if_fail (object != NULL); g_return_if_fail (GTK_IS_UNDO_MANAGER (object)); um = GTK_UNDO_MANAGER (object); g_return_if_fail (um->priv != NULL); if (um->priv->actions != NULL) gtk_undo_manager_free_action_list (um); g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->buffer), G_CALLBACK (gtk_undo_manager_delete_range_handler), um); g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->buffer), G_CALLBACK (gtk_undo_manager_insert_text_handler), um); g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->buffer), G_CALLBACK (gtk_undo_manager_begin_user_action_handler), um); g_signal_handlers_disconnect_by_func (G_OBJECT (um->priv->buffer), G_CALLBACK (gtk_undo_manager_end_user_action_handler), um); g_free (um->priv); G_OBJECT_CLASS (parent_class)->finalize (object); } GtkUndoManager* gtk_undo_manager_new (GtkSourceBuffer *buffer) { GtkUndoManager *um; um = GTK_UNDO_MANAGER (g_object_new (GTK_TYPE_UNDO_MANAGER, NULL)); g_return_val_if_fail (um->priv != NULL, NULL); um->priv->buffer = GTK_TEXT_BUFFER (buffer); g_signal_connect (G_OBJECT (buffer), "insert_text", G_CALLBACK (gtk_undo_manager_insert_text_handler), um); g_signal_connect (G_OBJECT (buffer), "delete_range", G_CALLBACK (gtk_undo_manager_delete_range_handler), um); g_signal_connect (G_OBJECT (buffer), "begin_user_action", G_CALLBACK (gtk_undo_manager_begin_user_action_handler), um); g_signal_connect (G_OBJECT (buffer), "end_user_action", G_CALLBACK (gtk_undo_manager_end_user_action_handler), um); return um; } void gtk_undo_manager_begin_not_undoable_action (GtkUndoManager *um) { g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); ++um->priv->running_not_undoable_actions; } void gtk_undo_manager_end_not_undoable_action (GtkUndoManager *um) { g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); if (um->priv->running_not_undoable_actions <= 0) um->priv->running_not_undoable_actions = 0; else --um->priv->running_not_undoable_actions; } gboolean gtk_undo_manager_can_undo (const GtkUndoManager *um) { g_return_val_if_fail (GTK_IS_UNDO_MANAGER (um), FALSE); g_return_val_if_fail (um->priv != NULL, FALSE); return um->priv->can_undo; } gboolean gtk_undo_manager_can_redo (const GtkUndoManager *um) { g_return_val_if_fail (GTK_IS_UNDO_MANAGER (um), FALSE); g_return_val_if_fail (um->priv != NULL, FALSE); return um->priv->can_redo; } void gtk_undo_manager_undo (GtkUndoManager *um) { GtkUndoAction *undo_action; GtkTextIter start; GtkTextIter end; g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); g_return_if_fail (um->priv->can_undo); gtk_undo_manager_begin_not_undoable_action (um); do { ++um->priv->next_redo; undo_action = g_list_nth_data (um->priv->actions, um->priv->next_redo); g_return_if_fail (undo_action != NULL); switch (undo_action->action_type) { case GTK_UNDO_ACTION_DELETE: gtk_text_buffer_get_iter_at_offset ( um->priv->buffer, &start, undo_action->action.delete.start); gtk_text_buffer_insert ( um->priv->buffer, &start, undo_action->action.delete.text, strlen (undo_action->action.delete.text)); break; case GTK_UNDO_ACTION_INSERT: gtk_text_buffer_get_iter_at_offset ( um->priv->buffer, &start, undo_action->action.insert.pos); gtk_text_buffer_get_iter_at_offset ( um->priv->buffer, &end, undo_action->action.insert.pos + undo_action->action.insert.chars); gtk_text_buffer_delete ( um->priv->buffer, &start, &end); break; default: g_warning ("This should not happen."); return; } } while (undo_action->order_in_group > 1); gtk_undo_manager_end_not_undoable_action (um); if (!um->priv->can_redo) { um->priv->can_redo = TRUE; g_signal_emit (G_OBJECT (um), undo_manager_signals [CAN_REDO], 0, TRUE); } if (um->priv->next_redo >= (gint)(g_list_length (um->priv->actions) - 1)) { um->priv->can_undo = FALSE; g_signal_emit (G_OBJECT (um), undo_manager_signals [CAN_UNDO], 0, FALSE); } } void gtk_undo_manager_redo (GtkUndoManager *um) { GtkUndoAction *undo_action; GtkTextIter start; GtkTextIter end; g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); g_return_if_fail (um->priv->can_redo); undo_action = g_list_nth_data (um->priv->actions, um->priv->next_redo); g_return_if_fail (undo_action != NULL); gtk_undo_manager_begin_not_undoable_action (um); do { switch (undo_action->action_type) { case GTK_UNDO_ACTION_DELETE: gtk_text_buffer_get_iter_at_offset ( um->priv->buffer, &start, undo_action->action.delete.start); gtk_text_buffer_get_iter_at_offset ( um->priv->buffer, &end, undo_action->action.delete.end); gtk_text_buffer_delete ( um->priv->buffer, &start, &end); break; case GTK_UNDO_ACTION_INSERT: gtk_text_buffer_get_iter_at_offset ( um->priv->buffer, &start, undo_action->action.insert.pos); gtk_text_buffer_insert ( um->priv->buffer, &start, undo_action->action.insert.text, undo_action->action.insert.length); break; default: g_warning ("This should not happen."); return; } --um->priv->next_redo; if (um->priv->next_redo < 0) undo_action = NULL; else undo_action = g_list_nth_data (um->priv->actions, um->priv->next_redo); } while ((undo_action != NULL) && (undo_action->order_in_group > 1)); gtk_undo_manager_end_not_undoable_action (um); if (um->priv->next_redo < 0) { um->priv->can_redo = FALSE; g_signal_emit (G_OBJECT (um), undo_manager_signals [CAN_REDO], 0, FALSE); } if (!um->priv->can_undo) { um->priv->can_undo = TRUE; g_signal_emit (G_OBJECT (um), undo_manager_signals [CAN_UNDO], 0, TRUE); } } int gtk_undo_manager_get_undo_levels (GtkUndoManager *um) { g_return_val_if_fail (um != NULL, 0); g_return_val_if_fail (GTK_IS_UNDO_MANAGER (um), 0); return um->priv->undo_levels; } void gtk_undo_manager_set_undo_levels (GtkUndoManager *um, int undo_levels) { g_return_if_fail (um != NULL); g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); um->priv->undo_levels = undo_levels; gtk_undo_manager_check_list_size (um); } static void gtk_undo_manager_free_action_list (GtkUndoManager *um) { gint n, len; g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); if (um->priv->actions == NULL) return; len = g_list_length (um->priv->actions); for (n = 0; n < len; n++) { GtkUndoAction *undo_action = (GtkUndoAction *)(g_list_nth_data (um->priv->actions, n)); if (undo_action->action_type == GTK_UNDO_ACTION_INSERT) g_free (undo_action->action.insert.text); else if (undo_action->action_type == GTK_UNDO_ACTION_DELETE) g_free (undo_action->action.delete.text); else g_return_if_fail (FALSE); g_free (undo_action); } g_list_free (um->priv->actions); um->priv->actions = NULL; } static void gtk_undo_manager_insert_text_handler (GtkTextBuffer *buffer, GtkTextIter *pos, const gchar *text, gint length, GtkUndoManager *um) { GtkUndoAction undo_action; if (um->priv->running_not_undoable_actions > 0) return; g_return_if_fail (strlen (text) == (guint)length); undo_action.action_type = GTK_UNDO_ACTION_INSERT; undo_action.action.insert.pos = gtk_text_iter_get_offset (pos); undo_action.action.insert.text = (gchar *) text; undo_action.action.insert.length = length; undo_action.action.insert.chars = g_utf8_strlen (text, length); if ((undo_action.action.insert.chars > 1) || (g_utf8_get_char (text) == '\n')) undo_action.mergeable = FALSE; else undo_action.mergeable = TRUE; gtk_undo_manager_add_action (um, undo_action); } static void gtk_undo_manager_delete_range_handler (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end, GtkUndoManager *um) { GtkUndoAction undo_action; if (um->priv->running_not_undoable_actions > 0) return; undo_action.action_type = GTK_UNDO_ACTION_DELETE; gtk_text_iter_order (start, end); undo_action.action.delete.start = gtk_text_iter_get_offset (start); undo_action.action.delete.end = gtk_text_iter_get_offset (end); undo_action.action.delete.text = gtk_text_buffer_get_slice (buffer, start, end, TRUE); if (((undo_action.action.delete.end - undo_action.action.delete.start) > 1) || (g_utf8_get_char (undo_action.action.delete.text ) == '\n')) undo_action.mergeable = FALSE; else undo_action.mergeable = TRUE; gtk_undo_manager_add_action (um, undo_action); g_free (undo_action.action.delete.text); } static void gtk_undo_manager_begin_user_action_handler (GtkTextBuffer *buffer, GtkUndoManager *um) { g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); if (um->priv->running_not_undoable_actions > 0) return; um->priv->actions_in_current_group = 0; } static void gtk_undo_manager_end_user_action_handler (GtkTextBuffer *buffer, GtkUndoManager *um) { if (um->priv->running_not_undoable_actions > 0) return; /* TODO: is it needed ? */ } /* FIXME: change prototype to use GtkUndoAction *undo_action : Paolo */ static void gtk_undo_manager_add_action (GtkUndoManager *um, GtkUndoAction undo_action) { GtkUndoAction* action; if (um->priv->next_redo >= 0) gtk_undo_manager_free_first_n_actions (um, um->priv->next_redo + 1); um->priv->next_redo = -1; if (!gtk_undo_manager_merge_action (um, &undo_action)) { action = g_new (GtkUndoAction, 1); *action = undo_action; if (action->action_type == GTK_UNDO_ACTION_INSERT) action->action.insert.text = g_strdup (undo_action.action.insert.text); else if (action->action_type == GTK_UNDO_ACTION_DELETE) action->action.delete.text = g_strdup (undo_action.action.delete.text); else { g_free (action); g_return_if_fail (FALSE); } ++um->priv->actions_in_current_group; action->order_in_group = um->priv->actions_in_current_group; um->priv->actions = g_list_prepend (um->priv->actions, action); } gtk_undo_manager_check_list_size (um); if (!um->priv->can_undo) { um->priv->can_undo = TRUE; g_signal_emit (G_OBJECT (um), undo_manager_signals [CAN_UNDO], 0, TRUE); } if (um->priv->can_redo) { um->priv->can_redo = FALSE; g_signal_emit (G_OBJECT (um), undo_manager_signals [CAN_REDO], 0, FALSE); } } static void gtk_undo_manager_free_first_n_actions (GtkUndoManager *um, gint n) { gint i; g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); if (um->priv->actions == NULL) return; for (i = 0; i < n; i++) { GtkUndoAction *undo_action = (GtkUndoAction *)(g_list_first (um->priv->actions)->data); if (undo_action->action_type == GTK_UNDO_ACTION_INSERT) g_free (undo_action->action.insert.text); else if (undo_action->action_type == GTK_UNDO_ACTION_DELETE) g_free (undo_action->action.delete.text); else g_return_if_fail (FALSE); g_free (undo_action); um->priv->actions = g_list_delete_link (um->priv->actions, um->priv->actions); if (um->priv->actions == NULL) return; } } static void gtk_undo_manager_check_list_size (GtkUndoManager *um) { g_return_if_fail (GTK_IS_UNDO_MANAGER (um)); g_return_if_fail (um->priv != NULL); if (um->priv->undo_levels < 1) return; if (gtk_undo_manager_get_number_of_groups (um) > um->priv->undo_levels) { GtkUndoAction *undo_action; GList* last; last = g_list_last (um->priv->actions); undo_action = (GtkUndoAction*) last->data; do { if (undo_action->action_type == GTK_UNDO_ACTION_INSERT) g_free (undo_action->action.insert.text); else if (undo_action->action_type == GTK_UNDO_ACTION_DELETE) g_free (undo_action->action.delete.text); else g_return_if_fail (FALSE); g_free (undo_action); um->priv->actions = g_list_delete_link (um->priv->actions, last); g_return_if_fail (um->priv->actions != NULL); last = g_list_last (um->priv->actions); undo_action = (GtkUndoAction*) last->data; } while ((undo_action->order_in_group > 1) || (gtk_undo_manager_get_number_of_groups (um) > um->priv->undo_levels)); } } /** * gtk_undo_manager_merge_action: * @um: a #GtkUndoManager * @undo_action: * * This function tries to merge the undo action at the top of * the stack with a new undo action. So when we undo for example * typing, we can undo the whole word and not each letter by itself * * Return Value: TRUE is merge was sucessful, FALSE otherwise **/ static gboolean gtk_undo_manager_merge_action (GtkUndoManager *um, GtkUndoAction *undo_action) { GtkUndoAction *last_action; g_return_val_if_fail (GTK_IS_UNDO_MANAGER (um), FALSE); g_return_val_if_fail (um->priv != NULL, FALSE); if (um->priv->actions == NULL) return FALSE; last_action = (GtkUndoAction*) g_list_nth_data (um->priv->actions, 0); if (!last_action->mergeable) return FALSE; if ((!undo_action->mergeable) || (undo_action->action_type != last_action->action_type)) { last_action->mergeable = FALSE; return FALSE; } if (undo_action->action_type == GTK_UNDO_ACTION_DELETE) { if ((last_action->action.delete.start != undo_action->action.delete.start) && (last_action->action.delete.start != undo_action->action.delete.end)) { last_action->mergeable = FALSE; return FALSE; } if (last_action->action.delete.start == undo_action->action.delete.start) { gchar *str; #define L (last_action->action.delete.end - last_action->action.delete.start - 1) #define g_utf8_get_char_at(p,i) g_utf8_get_char(g_utf8_offset_to_pointer((p),(i))) /* Deleted with the delete key */ if ((g_utf8_get_char (undo_action->action.delete.text) != ' ') && (g_utf8_get_char (undo_action->action.delete.text) != '\t') && ((g_utf8_get_char_at (last_action->action.delete.text, L) == ' ') || (g_utf8_get_char_at (last_action->action.delete.text, L) == '\t'))) { last_action->mergeable = FALSE; return FALSE; } str = g_strdup_printf ("%s%s", last_action->action.delete.text, undo_action->action.delete.text); g_free (last_action->action.delete.text); last_action->action.delete.end += (undo_action->action.delete.end - undo_action->action.delete.start); last_action->action.delete.text = str; } else { gchar *str; /* Deleted with the backspace key */ if ((g_utf8_get_char (undo_action->action.delete.text) != ' ') && (g_utf8_get_char (undo_action->action.delete.text) != '\t') && ((g_utf8_get_char (last_action->action.delete.text) == ' ') || (g_utf8_get_char (last_action->action.delete.text) == '\t'))) { last_action->mergeable = FALSE; return FALSE; } str = g_strdup_printf ("%s%s", undo_action->action.delete.text, last_action->action.delete.text); g_free (last_action->action.delete.text); last_action->action.delete.start = undo_action->action.delete.start; last_action->action.delete.text = str; } } else if (undo_action->action_type == GTK_UNDO_ACTION_INSERT) { gchar* str; #define I (last_action->action.insert.chars - 1) if ((undo_action->action.insert.pos != (last_action->action.insert.pos + last_action->action.insert.chars)) || ((g_utf8_get_char (undo_action->action.insert.text) != ' ') && (g_utf8_get_char (undo_action->action.insert.text) != '\t') && ((g_utf8_get_char_at (last_action->action.insert.text, I) == ' ') || (g_utf8_get_char_at (last_action->action.insert.text, I) == '\t'))) ) { last_action->mergeable = FALSE; return FALSE; } str = g_strdup_printf ("%s%s", last_action->action.insert.text, undo_action->action.insert.text); g_free (last_action->action.insert.text); last_action->action.insert.length += undo_action->action.insert.length; last_action->action.insert.text = str; last_action->action.insert.chars += undo_action->action.insert.chars; } else g_warning ("Unknown action inside undo merge encountered"); return TRUE; } static gint gtk_undo_manager_get_number_of_groups (GtkUndoManager *um) { GList *list = um->priv->actions; gint num = 0; while (list) { if (((GtkUndoAction* ) list->data)->order_in_group == 1) ++num; list = list->next; } return num; } vdk-2.4.0/vdk/gtksourceview-marshal.c0000644000000000000000000000513407613266377013232 #include #include #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #define g_marshal_value_peek_char(v) g_value_get_char (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) #define g_marshal_value_peek_long(v) g_value_get_long (v) #define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) #define g_marshal_value_peek_int64(v) g_value_get_int64 (v) #define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) #define g_marshal_value_peek_enum(v) g_value_get_enum (v) #define g_marshal_value_peek_flags(v) g_value_get_flags (v) #define g_marshal_value_peek_float(v) g_value_get_float (v) #define g_marshal_value_peek_double(v) g_value_get_double (v) #define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) #define g_marshal_value_peek_param(v) g_value_get_param (v) #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the * g_value_get_*() functions */ #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #define g_marshal_value_peek_char(v) (v)->data[0].v_int #define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint #define g_marshal_value_peek_int(v) (v)->data[0].v_int #define g_marshal_value_peek_uint(v) (v)->data[0].v_uint #define g_marshal_value_peek_long(v) (v)->data[0].v_long #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 #define g_marshal_value_peek_enum(v) (v)->data[0].v_int #define g_marshal_value_peek_flags(v) (v)->data[0].v_uint #define g_marshal_value_peek_float(v) (v)->data[0].v_float #define g_marshal_value_peek_double(v) (v)->data[0].v_double #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer #define g_marshal_value_peek_param(v) (v)->data[0].v_pointer #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ /* VOID:BOOLEAN (./gtksourceview-marshal.list:1) */ vdk-2.4.0/vdk/gtktextregion.c0000644000000000000000000003353507613266376011607 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * * gtktextregion.h - GtkTextMark based region utility functions * * This file is part of the GtkSourceView widget * * Copyright (C) 2002 Gustavo Girldez * * 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. */ #include #include typedef struct _Subregion { GtkTextMark *start; GtkTextMark *end; } Subregion; struct _GtkTextRegion { GtkTextBuffer *buffer; GList *subregions; }; /* ---------------------------------------------------------------------- Private interface ---------------------------------------------------------------------- */ /* Find and return a subregion node which contains the given text iter. If left_side is TRUE, return the subregion which contains the text iter or which is the leftmost; else return the rightmost subregion */ static GList * find_nearest_subregion (GtkTextRegion *region, const GtkTextIter *iter, GList *begin, gboolean leftmost, gboolean include_edges) { GList *l, *retval; g_return_val_if_fail (region != NULL && iter != NULL, NULL); if (!begin) begin = region->subregions; if (begin) retval = begin->prev; else retval = NULL; for (l = begin; l; l = l->next) { GtkTextIter sr_iter; Subregion *sr = l->data; gint cmp; if (!leftmost) { gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_iter, sr->end); cmp = gtk_text_iter_compare (iter, &sr_iter); if (cmp < 0 || (cmp == 0 && include_edges)) { retval = l; break; } } else { gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_iter, sr->start); cmp = gtk_text_iter_compare (iter, &sr_iter); if (cmp > 0 || (cmp == 0 && include_edges)) retval = l; else break; } } return retval; } /* ---------------------------------------------------------------------- Public interface ---------------------------------------------------------------------- */ GtkTextRegion * gtk_text_region_new (GtkTextBuffer *buffer) { GtkTextRegion *region; g_return_val_if_fail (buffer != NULL, NULL); region = g_new (GtkTextRegion, 1); region->buffer = buffer; region->subregions = NULL; return region; } void gtk_text_region_destroy (GtkTextRegion *region) { g_return_if_fail (region != NULL); while (region->subregions) { Subregion *sr = region->subregions->data; gtk_text_buffer_delete_mark (region->buffer, sr->start); gtk_text_buffer_delete_mark (region->buffer, sr->end); g_free (sr); region->subregions = g_list_delete_link (region->subregions, region->subregions); } region->buffer = NULL; g_free (region); } GtkTextBuffer * gtk_text_region_get_buffer (GtkTextRegion *region) { g_return_val_if_fail (region != NULL, NULL); return region->buffer; } void gtk_text_region_clear_zero_length_subregions (GtkTextRegion *region) { GtkTextIter start, end; GList *node; g_return_if_fail (region != NULL); for (node = region->subregions; node; ) { Subregion *sr = node->data; gtk_text_buffer_get_iter_at_mark (region->buffer, &start, sr->start); gtk_text_buffer_get_iter_at_mark (region->buffer, &end, sr->end); if (gtk_text_iter_equal (&start, &end)) { gtk_text_buffer_delete_mark (region->buffer, sr->start); gtk_text_buffer_delete_mark (region->buffer, sr->end); g_free (sr); if (node == region->subregions) region->subregions = node = g_list_delete_link (node, node); else node = g_list_delete_link (node, node); } else { node = node->next; } } } void gtk_text_region_add (GtkTextRegion *region, GtkTextIter *start, GtkTextIter *end) { GList *start_node, *end_node; g_return_if_fail (region != NULL && start != NULL && end != NULL); gtk_text_iter_order (start, end); /* don't add zero-length regions */ if (gtk_text_iter_equal (start, end)) return; /* find bounding subregions */ start_node = find_nearest_subregion (region, start, NULL, FALSE, TRUE); end_node = find_nearest_subregion (region, end, start_node, TRUE, TRUE); if (start_node == NULL || end_node == NULL || end_node == start_node->prev) { /* create the new subregion */ Subregion *sr = g_new0 (Subregion, 1); sr->start = gtk_text_buffer_create_mark (region->buffer, NULL, start, TRUE); sr->end = gtk_text_buffer_create_mark (region->buffer, NULL, end, FALSE); if (start_node == NULL) { /* append the new region */ region->subregions = g_list_append (region->subregions, sr); } else if (end_node == NULL) { /* prepend the new region */ region->subregions = g_list_prepend (region->subregions, sr); } else { /* we are in the middle of two subregions */ g_list_prepend (start_node, sr); } } else { GtkTextIter iter; Subregion *sr = start_node->data; if (start_node != end_node) { /* we need to merge some subregions */ GList *l = start_node->next; Subregion *q; gtk_text_buffer_delete_mark (region->buffer, sr->end); while (l != end_node) { q = l->data; gtk_text_buffer_delete_mark (region->buffer, q->start); gtk_text_buffer_delete_mark (region->buffer, q->end); g_free (q); l = g_list_delete_link (l, l); } q = l->data; gtk_text_buffer_delete_mark (region->buffer, q->start); sr->end = q->end; g_free (q); g_list_delete_link (l, l); } /* now move marks if that action expands the region */ gtk_text_buffer_get_iter_at_mark (region->buffer, &iter, sr->start); if (gtk_text_iter_compare (&iter, start) > 0) gtk_text_buffer_move_mark (region->buffer, sr->start, start); gtk_text_buffer_get_iter_at_mark (region->buffer, &iter, sr->end); if (gtk_text_iter_compare (&iter, end) < 0) gtk_text_buffer_move_mark (region->buffer, sr->end, end); } } void gtk_text_region_substract (GtkTextRegion *region, GtkTextIter *start, GtkTextIter *end) { GList *start_node, *end_node, *node; GtkTextIter sr_start_iter, sr_end_iter; gboolean done; gboolean start_is_outside, end_is_outside; Subregion *sr; g_return_if_fail (region != NULL && start != NULL && end != NULL); gtk_text_iter_order (start, end); /* find bounding subregions */ start_node = find_nearest_subregion (region, start, NULL, FALSE, FALSE); end_node = find_nearest_subregion (region, end, start_node, TRUE, FALSE); /* easy case first */ if (start_node == NULL || end_node == NULL || end_node == start_node->prev) return; /* deal with the start point */ start_is_outside = end_is_outside = FALSE; sr = start_node->data; gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start); gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end); if (gtk_text_iter_in_range (start, &sr_start_iter, &sr_end_iter) && !gtk_text_iter_equal (start, &sr_start_iter)) { /* the starting point is inside the first subregion */ if (gtk_text_iter_in_range (end, &sr_start_iter, &sr_end_iter) && !gtk_text_iter_equal (end, &sr_end_iter)) { /* the ending point is also inside the first subregion: we need to split */ Subregion *new_sr = g_new0 (Subregion, 1); new_sr->end = sr->end; new_sr->start = gtk_text_buffer_create_mark (region->buffer, NULL, end, TRUE); g_list_append (start_node, new_sr); sr->end = gtk_text_buffer_create_mark (region->buffer, NULL, start, FALSE); /* no further processing needed */ return; } else { /* the ending point is outside, so just move the end of the subregion to the starting point */ gtk_text_buffer_move_mark (region->buffer, sr->end, start); } } else { /* the starting point is outside (and so to the left) of the first subregion */ start_is_outside = TRUE; } /* deal with the end point */ if (start_node != end_node) { sr = end_node->data; gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start); gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end); } if (gtk_text_iter_in_range (end, &sr_start_iter, &sr_end_iter) && !gtk_text_iter_equal (end, &sr_end_iter)) { /* ending point is inside, move the start mark */ gtk_text_buffer_move_mark (region->buffer, sr->start, end); } else { end_is_outside = TRUE; } /* finally remove any intermediate subregions */ done = FALSE; node = start_node; while (!done) { if (node == end_node) /* we are done, exit in the next iteration */ done = TRUE; if ((node == start_node && !start_is_outside) || (node == end_node && !end_is_outside)) { /* skip starting or ending node */ node = node->next; } else { GList *l = node->next; sr = node->data; gtk_text_buffer_delete_mark (region->buffer, sr->start); gtk_text_buffer_delete_mark (region->buffer, sr->end); g_free (sr); region->subregions = g_list_delete_link (region->subregions, node); node = l; } } } gint gtk_text_region_subregions (GtkTextRegion *region) { g_return_val_if_fail (region != NULL, 0); return g_list_length (region->subregions); } gboolean gtk_text_region_nth_subregion (GtkTextRegion *region, guint subregion, GtkTextIter *start, GtkTextIter *end) { Subregion *sr; g_return_val_if_fail (region != NULL, FALSE); sr = g_list_nth_data (region->subregions, subregion); if (sr == NULL) return FALSE; if (start) gtk_text_buffer_get_iter_at_mark (region->buffer, start, sr->start); if (end) gtk_text_buffer_get_iter_at_mark (region->buffer, end, sr->end); return TRUE; } GtkTextRegion * gtk_text_region_intersect (GtkTextRegion *region, GtkTextIter *start, GtkTextIter *end) { GList *start_node, *end_node, *node; GtkTextIter sr_start_iter, sr_end_iter; Subregion *sr, *new_sr; gboolean done; GtkTextRegion *new_region; g_return_val_if_fail (region != NULL && start != NULL && end != NULL, NULL); gtk_text_iter_order (start, end); /* find bounding subregions */ start_node = find_nearest_subregion (region, start, NULL, FALSE, FALSE); end_node = find_nearest_subregion (region, end, start_node, TRUE, FALSE); /* easy case first */ if (start_node == NULL || end_node == NULL || end_node == start_node->prev) return NULL; new_region = gtk_text_region_new (region->buffer); done = FALSE; sr = start_node->data; gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start); gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end); /* starting node */ if (gtk_text_iter_in_range (start, &sr_start_iter, &sr_end_iter)) { new_sr = g_new0 (Subregion, 1); new_region->subregions = g_list_prepend (new_region->subregions, new_sr); new_sr->start = gtk_text_buffer_create_mark (new_region->buffer, NULL, start, TRUE); if (start_node == end_node) { /* things will finish shortly */ done = TRUE; if (gtk_text_iter_in_range (end, &sr_start_iter, &sr_end_iter)) new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL, end, FALSE); else new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL, &sr_end_iter, FALSE); } else { new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL, &sr_end_iter, FALSE); } node = start_node->next; } else { /* start should be the same as the subregion, so copy it in the loop */ node = start_node; } if (!done) { while (node != end_node) { /* copy intermediate subregions verbatim */ sr = node->data; gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start); gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end); new_sr = g_new0 (Subregion, 1); new_region->subregions = g_list_prepend (new_region->subregions, new_sr); new_sr->start = gtk_text_buffer_create_mark (new_region->buffer, NULL, &sr_start_iter, TRUE); new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL, &sr_end_iter, FALSE); /* next node */ node = node->next; } /* ending node */ sr = node->data; gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_start_iter, sr->start); gtk_text_buffer_get_iter_at_mark (region->buffer, &sr_end_iter, sr->end); new_sr = g_new0 (Subregion, 1); new_region->subregions = g_list_prepend (new_region->subregions, new_sr); new_sr->start = gtk_text_buffer_create_mark (new_region->buffer, NULL, &sr_start_iter, TRUE); if (gtk_text_iter_in_range (end, &sr_start_iter, &sr_end_iter)) new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL, end, FALSE); else new_sr->end = gtk_text_buffer_create_mark (new_region->buffer, NULL, &sr_end_iter, FALSE); } new_region->subregions = g_list_reverse (new_region->subregions); return new_region; } void gtk_text_region_debug_print (GtkTextRegion *region) { GList *l; g_return_if_fail (region != NULL); g_print ("Subregions: "); l = region->subregions; while (l) { Subregion *sr = l->data; GtkTextIter iter1, iter2; gtk_text_buffer_get_iter_at_mark (region->buffer, &iter1, sr->start); gtk_text_buffer_get_iter_at_mark (region->buffer, &iter2, sr->end); g_print ("%d-%d ", gtk_text_iter_get_offset (&iter1), gtk_text_iter_get_offset (&iter2)); l = l->next; } g_print ("\n"); } vdk-2.4.0/vdk/vdkeditor.cc0000644000000000000000000011325107613270146011027 /* * =========================== * VDK Visual Development Kit * Version 2.0.0 * February 2001 * =========================== * * Copyright (C) 1998,199,2000,2001 Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include static Tipwin* tip_window = NULL; static char buff[1024]; static char floating_token[256]; /* */ VDKEditor::VDKEditor(VDKForm* owner, GtkSourceBuffer* buff): VDKObject(owner), Syntax("Syntax",this,true,&VDKEditor::SetSyntax), Pointer("Pointer",this,0,&VDKEditor::SetPointer, &VDKEditor::GetPointer), Column("Column",this,0,&VDKEditor::SetColumn, &VDKEditor::GetColumn), Line("Line",this,0,&VDKEditor::SetLine, &VDKEditor::GetLine), Length("Length",this,0,&VDKEditor::GetLength), Editable("Editable",this,true,&VDKEditor::SetEditable, &VDKEditor::GetEditable), TabStop("TabStop",this,5,&VDKEditor::SetTabStop, &VDKEditor::GetTabStop), MaxUndo("MaxUndo",this,5), LineAutoSelect("LineAutoSelect",this,false), // dummy ShowLineNumbers("ShowLineNumbers",this,false,&VDKEditor::SetShowLineNumbers), FirstVisibleLine("FirstVisibleLine",this,0,&VDKEditor::GetFirstVisibleLine), LastVisibleLine("LastVisibleLine",this,0,&VDKEditor::GetLastVisibleLine), Changed("Changed",this,false)// ,&VDKEditor::SetChanged,&VDKEditor::GetChanged) { // GtkTextTagTable *table; // initializes buffer if(!buff) { //table = gtk_text_tag_table_new(); buffer = GTK_SOURCE_BUFFER(gtk_source_buffer_new(NULL)); // g_object_ref(table); // GTK_TEXT_BUFFER(buffer)->tag_table = table; } else buffer = buff; widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); view = gtk_source_view_new_with_buffer (GTK_SOURCE_BUFFER(buffer)); sigwid = view; gtk_container_add (GTK_CONTAINER (widget), view); gtk_widget_show(view); ConnectDefaultSignals(); LocalConnect(); } void VDKEditor::HandleRealize(GtkWidget* widget, gpointer gp) { VDKEditor* editor = reinterpret_cast(gp); if(editor) { editor->SignalEmit("realize"); g_signal_connect_closure(G_OBJECT(editor->buffer),"changed", g_cclosure_new( G_CALLBACK(VDKEditor::OnBufferChanged), editor,NULL), FALSE); } } /* */ VDKEditor::~VDKEditor() { } /* */ void VDKEditor::SetFont(VDKFont* font) { VDKObject::_setFont_(sigwid,font); } /* */ void VDKEditor::SetBackground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); /* GdkWindow* win = gtk_text_view_get_window (GTK_TEXT_VIEW(view),GTK_TEXT_WINDOW_TEXT); if(win) { gdk_window_set_background (win,color->Color()); } */ gtk_widget_modify_base (GTK_WIDGET(view),state, color->Color()); } /* */ void VDKEditor::SetForeground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_text (GTK_WIDGET(view), state, color->Color()); } /* */ bool VDKEditor::LoadFromFile(const char* filename) { GError *err = NULL; Clear(); if(gtk_source_buffer_load (GTK_SOURCE_BUFFER(buffer),filename,&err)) { Changed = false; return true; } else return false; } /* */ void SyntaxTableForEach(GtkTextTag *tag, gpointer data) { VDKList *list = reinterpret_cast* >(data); list->add(tag); } void VDKEditor::ClearSyntaxTable() { /* GtkTextTagTable* new_table; new_table = gtk_text_tag_table_new(); if(GTK_TEXT_BUFFER(buffer)->tag_table) g_object_unref(GTK_TEXT_BUFFER(buffer)->tag_table); GTK_TEXT_BUFFER(buffer)->tag_table = new_table; g_object_ref(GTK_TEXT_BUFFER(buffer)->tag_table); */ /* VDKList list; GtkTextTagTable* table = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER(buffer)); if(table) { gtk_text_tag_table_foreach (table,SyntaxTableForEach,&list); if(list.size()) { VDKListIterator li(list); for(;li;li++) gtk_text_tag_table_remove (table,li.current()); } } */ } /* */ void VDKEditor::InstallSyntaxTable (VDKColor *key_color, VDKFont *key_font, VDKColor *gtk_color, VDKFont *gtk_font, VDKColor *macro_color, VDKFont *macro_font, VDKColor *pp_color, VDKFont *pp_font, VDKColor *const_color, VDKFont *const_font, VDKColor *comment_color, VDKFont *comment_font) { GtkTextTag* tag; GtkTextTagTable* table = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER(buffer)); GList *list = NULL; // keywords tags if(key_color) { tag = gtk_text_tag_table_lookup (table,"keywords"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", key_color->Color(), key_font ? "font_desc" : NULL, key_font ? key_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_pattern_tag_new("keywords", "\\b\\(do\\|while\\|for\\|if\\|else\\|bool\\|template\\|continue" "\\|case\\|switch\\|break\\|new\\|delete\\|default\\|return" "\\|char\\|short\\|int\\|long\\|float\\|double\\|unsigned\\|true\\|false" "\\|this\\|void\\|struct\\|union\\|enum\\|const\\|static\\|typedef\\|virtual" "\\|class\\|public\\|protected\\|private\\|friend\\|dynamic_cast\\|reinterpret_cast" "\\|DEFINE_SIGNAL_MAP\\|ON_SIGNAL\\|END_SIGNAL_MAP\\|DECLARE_SIGNAL_MAP" "\\|DECLARE_SIGNAL_LIST\\|DEFINE_SIGNAL_LIST" "\\|DECLARE_EVENT_LIST\\|DEFINE_EVENT_LIST" "\\|SignalConnect\\|EventConnect\\)\\b"); g_object_set(G_OBJECT (tag), "foreground_gdk", key_color->Color(), key_font ? "font_desc" : NULL, key_font ? key_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } tag = gtk_text_tag_table_lookup (table,"C++-funcs"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", key_color->Color(), key_font ? "font_desc" : NULL, key_font ? key_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_pattern_tag_new("C++-funcs", "^\\(\\([a-zA-Z_][a-zA-Z0-9_]*\\)::\\([~a-zA-Z_][a-zA-Z0-9_]*\\)\\)[ \t]*("); g_object_set(G_OBJECT (tag), "foreground_gdk", key_color->Color(), key_font ? "font_desc" : NULL, key_font ? key_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } } // gtk functions and members tag if(gtk_color) { tag = gtk_text_tag_table_lookup (table,"gtk_functions"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", gtk_color->Color(), gtk_font ? "font_desc" : NULL, gtk_font ? gtk_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_pattern_tag_new("gtk_functions", "\\b\\(gtk\\|gdk\\|g\\|gnome\\)_[a-zA-Z0-9_]+"); g_object_set(G_OBJECT (tag), "foreground_gdk", gtk_color->Color(), gtk_font ? "font_desc" : NULL, gtk_font ? gtk_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } tag = gtk_text_tag_table_lookup (table,"gnu_typedef"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", gtk_color->Color(), gtk_font ? "font_desc" : NULL, gtk_font ? gtk_font->AsPangoFontDescription() : NULL, NULL); else { tag = gtk_pattern_tag_new("gnu_typedef","\\b\\(Gtk\\|Gdk\\|Gnome\\)[a-zA-Z0-9_]+"); g_object_set(G_OBJECT (tag), "foreground_gdk", gtk_color->Color(), gtk_font ? "font_desc" : NULL, gtk_font ? gtk_font->AsPangoFontDescription() : NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } tag = gtk_text_tag_table_lookup (table,"vdk_functions"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", gtk_color->Color(), gtk_font ? "font_desc" : NULL, gtk_font ? gtk_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_pattern_tag_new("vdk_functions", "\\b\\(VDK\\|vdk\\)[a-zA-Z0-9_]+"); g_object_set(G_OBJECT (tag), "foreground_gdk", gtk_color->Color(), gtk_font ? "font_desc" : NULL, gtk_font ? gtk_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } } // macro tags if(macro_color) { tag = gtk_text_tag_table_lookup (table,"macro"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", macro_color->Color(), macro_font ? "font_desc" : NULL, macro_font ? macro_font->AsPangoFontDescription() : NULL, NULL); else { tag = gtk_pattern_tag_new("macro","\\b[A-Z_][A-Z0-9_\\-]+\\b"); g_object_set(G_OBJECT (tag), "foreground_gdk", macro_color->Color(), macro_font ? "font_desc" : NULL, macro_font ? macro_font->AsPangoFontDescription() : NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } } // preprocessor directives tags if(pp_color) { tag = gtk_text_tag_table_lookup (table,"defs"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", pp_color->Color(), pp_font ? "font_desc" : NULL, pp_font ? pp_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_pattern_tag_new("defs", "^#[ \t]*\\(include\\|if\\|ifdef\\|ifndef\\|else\\|elif\\|define\\|endif\\|pragma\\)\\b"); g_object_set(G_OBJECT (tag), "foreground_gdk", pp_color->Color(), pp_font ? "font_desc" : NULL, pp_font ? pp_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } } // constants tags if(const_color) { tag = gtk_text_tag_table_lookup (table,"char_string"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", const_color->Color(), const_font ? "font_desc" : NULL, const_font ? const_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_pattern_tag_new("char_string","'\\?[a-zA-Z0-9_\\()#@!$%^&*-=+\"{}<)]'"); g_object_set(G_OBJECT (tag), "foreground_gdk", const_color->Color(), const_font ? "font_desc" : NULL, const_font ? const_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } tag = gtk_text_tag_table_lookup (table,"numbers"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", const_color->Color(), const_font ? "font_desc" : NULL, const_font ? const_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_pattern_tag_new("numbers","\\b[0-9]+\\.?\\b"); g_object_set(G_OBJECT (tag), "foreground_gdk", const_color->Color(), const_font ? "font_desc" : NULL, const_font ? const_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } tag = gtk_text_tag_table_lookup (table,"string"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", const_color->Color(), const_font ? "font_desc" : NULL, const_font ? const_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_syntax_tag_new("string","\"","\""); g_object_set(G_OBJECT (tag), "foreground_gdk", const_color->Color(), const_font ? "font_desc" : NULL, const_font ? const_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } } // if(comment_color) { tag = gtk_text_tag_table_lookup (table,"description"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", comment_color->Color(), comment_font ? "font_desc": NULL, comment_font ? comment_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_syntax_tag_new("description","//","\n"); g_object_set(G_OBJECT (tag), "foreground_gdk", comment_color->Color(), comment_font ? "font_desc": NULL, comment_font ? comment_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } tag = gtk_text_tag_table_lookup (table,"description_multiline"); if(tag) g_object_set(G_OBJECT (tag), "foreground_gdk", comment_color->Color(), comment_font ? "font_desc": NULL, comment_font ? comment_font->AsPangoFontDescription(): NULL, NULL); else { tag = gtk_syntax_tag_new("description_multiline","/\\*","\\*/"); g_object_set(G_OBJECT (tag), "foreground_gdk", comment_color->Color(), comment_font ? "font_desc": NULL, comment_font ? comment_font->AsPangoFontDescription(): NULL, NULL); // gtk_text_tag_table_add (table, tag); list = g_list_append (list, (gpointer) tag); } } if(list) { gtk_source_buffer_install_regex_tags (GTK_SOURCE_BUFFER(buffer), list); g_list_free (list); } } /* */ void VDKEditor::Scroll (int pointer, int margin) { if(pointer >= 0) Pointer = pointer; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer), INSERT_MARK); if(mark) // more args on new gtk+ snapshoots gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(view),mark,margin,0,0,0); } /* */ void VDKEditor::Scroll(int line, int col, int margin) { Line = line; Column = col; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer), INSERT_MARK); if(mark) // more args on new gtk+ snapshoots gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(view),mark,margin,0,0,0); } /* */ void VDKEditor::Clear() { GtkTextIter start, end; gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER(buffer), &start, &end); gtk_text_buffer_delete(GTK_TEXT_BUFFER(buffer),&start,&end); } /* */ gchar* VDKEditor::GetChars(int start, int end) { GtkTextIter first,last; gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer),&first,start); if(end >= 0) gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer),&last,end); else gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(buffer),&last); // returned address should be gfree()'d by user or it will leak. return gtk_text_buffer_get_text(GTK_TEXT_BUFFER(buffer),&first,&last,FALSE); } /* */ bool VDKEditor::SaveToFile(const char* filename) { GError *err = NULL; if(gtk_source_buffer_save (GTK_SOURCE_BUFFER(buffer),filename,&err)) { Changed = false; return true; } else return false; /* FILE* fp; fp = fopen(filename,"w+b"); if(fp) { int result = 0; char* p; p = GetChars(0,-1); if(p) { result = fwrite(p,std::strlen(p),1,fp); g_free(p); } fclose(fp); Changed= false; return result == 1; } else return false; */ } /* */ void VDKEditor::TextInsert(const char* txt, int nchar) { gtk_text_buffer_insert_interactive_at_cursor (GTK_TEXT_BUFFER(buffer),txt,nchar, gtk_text_view_get_editable(GTK_TEXT_VIEW(view))); } /* */ void VDKEditor::ForwardDelete(int nchars) { GtkTextIter start, end; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer),INSERT_MARK); if(mark) { int offset = (int) Pointer + nchars; int len = Length; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(buffer),&start,mark); if(offset < len) gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer),&end,offset); else gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(buffer),&end); gtk_text_buffer_delete(GTK_TEXT_BUFFER(buffer),&start,&end); } } /* */ void VDKEditor::BackwardDelete(int nchars) { GtkTextIter start, end; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer),INSERT_MARK); if(mark) { int offset = (int) Pointer - nchars; offset = offset < 0 ? 0 : offset; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(buffer),&end,mark); gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer),&start,offset); gtk_text_buffer_delete(GTK_TEXT_BUFFER(buffer),&start,&end); } } int VDKEditor::GetLineAtOffset(int offset) { int line = -1; GtkTextIter iter; gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer),&iter,offset); line = gtk_text_iter_get_line(&iter); return line; } // /* gets the word currently at position, if pos < 0 gets the word at insertion point. some known c/c++ delimiters are used. Note: returned char* should be g_free()'d by user. */ static const int SAFE = 64; // some c/c++ tokens delimiters const char* delimiters = " \n\t()[];{}*&!:.-><+=/#"; // bool isADelimiter(const char d) { const char* p = delimiters; for(; *p ; p++) if(*p == d) return true; return false; } char* VDKEditor::GetWord(int pos) { char* word = NULL; GtkTextIter cursor, *istart,*iend; int start,end; gunichar car; int safe; if(pos < 0) pos = Pointer; gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer),&cursor,pos); istart = gtk_text_iter_copy(&cursor); iend = gtk_text_iter_copy(&cursor); // move backward until a delimiter or a safe range safe = 0; do { // next gtk+ snapshoot gtk_text_iter_backward_char(istart); // gtk_text_iter_prev_char(istart); car = gtk_text_iter_get_char(istart); if(isADelimiter(car)) break; else safe++; } while(safe < SAFE); if(isADelimiter(car)) // next gtk+ snapshoot gtk_text_iter_forward_char(istart); // gtk_text_iter_next_char(istart); start = gtk_text_iter_get_offset(istart); gtk_text_iter_free(istart); // move forward until a delimiter or a safe range safe = 0; while(safe < SAFE) { car = gtk_text_iter_get_char(iend); if( isADelimiter(car)) break; else { // next gtk+ snapshoot gtk_text_iter_forward_char(iend); // gtk_text_iter_next_char(iend); safe++; } } end = gtk_text_iter_get_offset(iend); gtk_text_iter_free(iend); if(start < end) word = GetChars(start,end); return word; } /* Overlaps src to tgt and return where overlaps ends. Overlap must be complete, returns NULL on failure */ static char* overlap(char* tgt, const char* src) { int t = 0; unsigned int z = std::strlen(src); if(z > std::strlen(tgt)) return (char*) NULL; else { for(;src[t] && (src[t] == tgt[t]);t++) ; return (unsigned int) t == z ? &tgt[t] : (char*) NULL; } } /* */ bool VDKEditor::MakeCompletion(const char* word) { TokenList local; TokenListIterator li(*tokenlist); for(;li;li++) { char* token = (char*) li.current(); if(overlap(token,word)) local.add(li.current()); } // one token found if(local.size() == 1) { char* token = (char*) local[0]; char* p; if((std::strlen(word) < std::strlen(token)) && ( p = overlap(token,word))) TextInsert(p); } // more than one token found else if(local.size() > 1) { sprintf(buff,"%2d more words:\n",local.size()); for(TokenListIterator li(local);li;li++) { std::strcat(buff,(char*) li.current()); std::strcat(buff,"\n"); } ShowTipWindow(buff); } // no tokens found, will be added to tokenlist // if user hits ctrl-a else { sprintf(buff,"\"%s\" isn't in word completion list.\n\nHit ctrl-a to add it",word); ShowTipWindow(buff); // copies word on floating buffer; std::strcpy(floating_token,word); } return local.size() > 0; } /* add a new token to token list */ void VDKEditor::AddToken() { if(!*floating_token) { sprintf(buff,"Nothing to add to completion list"); ShowTipWindow(buff); } else { VDKString s(floating_token); if(!tokenlist->find(s)) { tokenlist->add(s); sprintf(buff,"Word: \"%s\" added to completion list",floating_token); ShowTipWindow(buff); } else // should be never the case :-) { sprintf(buff,"%s already on completion list",floating_token); ShowTipWindow(buff); } *floating_token = '\0'; } } /* */ bool VDKEditor::Undo(void) { /* if(sigwid && (gtk_source_buffer_get_undo_count(buffer)) > 0) { gtk_source_buffer_undo(buffer); return true; } else */ return false; } // SETTING PROPERTIES /* */ void VDKEditor::SetSyntax(bool set) { gtk_source_buffer_set_highlight(buffer, set); } /* */ void VDKEditor::SetPointer(int char_offset) { GtkTextIter iter; gtk_text_buffer_get_iter_at_offset (GTK_TEXT_BUFFER(buffer),&iter,char_offset); gtk_text_buffer_place_cursor(GTK_TEXT_BUFFER(buffer),&iter); } /* */ int VDKEditor::GetPointer() { int offset = -1; GtkTextIter iter; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer),INSERT_MARK); if(mark) { gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(buffer),&iter,mark); offset = gtk_text_iter_get_offset(&iter); } return offset; } /* */ int VDKEditor::GetColumn() { int lineoffset = -1; GtkTextIter iter; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer),INSERT_MARK); if(mark) { gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(buffer),&iter,mark); lineoffset = gtk_text_iter_get_line_offset (&iter); } return lineoffset; } /* */ void VDKEditor::SetColumn(int col) { GtkTextIter iter; gtk_text_buffer_get_iter_at_line_offset(GTK_TEXT_BUFFER(buffer),&iter,Line,col); gtk_text_buffer_place_cursor(GTK_TEXT_BUFFER(buffer),&iter); } /* */ void VDKEditor::SetLine(int row) { GtkTextIter iter; gtk_text_buffer_get_iter_at_line(GTK_TEXT_BUFFER(buffer),&iter,row); gtk_text_buffer_place_cursor(GTK_TEXT_BUFFER(buffer),&iter); } /* */ int VDKEditor::GetLine() { int line = -1; GtkTextIter iter; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer),INSERT_MARK); if(mark) { gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(buffer),&iter,mark); line = gtk_text_iter_get_line(&iter); } return line; } /* */ bool VDKEditor::AddMarkIcon(VDKPixbuf* icon, const char * key, bool overwrite) { if(!icon) return false; else return gtk_source_view_add_pixbuf(GTK_SOURCE_VIEW(view), key, icon->AsGdkPixbuf() , overwrite); } /* */ void VDKEditor::AddLineMark(int line, const char* icon_key) { if(!gtk_source_buffer_line_has_markers (GTK_SOURCE_BUFFER(buffer),line)) gtk_source_buffer_line_add_marker (GTK_SOURCE_BUFFER(buffer),line,icon_key); } /* */ void VDKEditor::RemoveLineMark(int line, const char* icon_key) { if(!gtk_source_buffer_line_has_markers (GTK_SOURCE_BUFFER(buffer),line)) gtk_source_buffer_line_remove_marker (GTK_SOURCE_BUFFER(buffer),line,icon_key); } /* */ void VDKEditor::RemoveLineMarks(int line) { gtk_source_buffer_line_remove_markers (GTK_SOURCE_BUFFER(buffer),line); } /* */ void VDKEditor::RemoveAllLineMarks() { int end = gtk_text_buffer_get_line_count (GTK_TEXT_BUFFER (buffer)); gtk_source_buffer_remove_all_markers (GTK_SOURCE_BUFFER(buffer),-1,end); gtk_widget_queue_draw(GTK_WIDGET(WrappedWidget())); } /* */ void VDKEditor::SetTabStop(int tab_stop) { gtk_source_view_set_tab_stop(GTK_SOURCE_VIEW(view), tab_stop); } /* */ int VDKEditor::GetTabStop() { return gtk_source_view_get_tab_stop(GTK_SOURCE_VIEW(view)); } /* */ unsigned int VDKEditor::GetLength() { return gtk_text_buffer_get_char_count(GTK_TEXT_BUFFER(buffer)); } /* */ bool VDKEditor::GetEditable() { return gtk_text_view_get_editable (GTK_TEXT_VIEW(view)); } /* */ void VDKEditor::SetEditable(bool f) { gtk_text_view_set_editable (GTK_TEXT_VIEW(view),f); } /* */ void VDKEditor::SetShowLineNumbers(bool show) { gtk_source_view_set_show_line_numbers(GTK_SOURCE_VIEW(view),show); } /* */ bool VDKEditor::GetShowLineNumbers(void) { return gtk_source_view_get_show_line_numbers(GTK_SOURCE_VIEW(view)); } /* */ int VDKEditor::GetFirstVisibleLine() { GdkRectangle visible_rect; GtkTextIter iter; int line_top; gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(view),&visible_rect); gtk_text_view_get_line_at_y(GTK_TEXT_VIEW(view),&iter,visible_rect.y,NULL); line_top = gtk_text_iter_get_line(&iter); return line_top; } /* */ int VDKEditor::GetLastVisibleLine() { GdkRectangle visible_rect; GtkTextIter iter; int line_top; gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(view),&visible_rect); gtk_text_view_get_line_at_y(GTK_TEXT_VIEW(view),&iter, visible_rect.y+visible_rect.height,NULL); line_top = gtk_text_iter_get_line(&iter); return line_top; } /* */ bool VDKEditor::GetChanged() { return gtk_text_buffer_get_modified(GTK_TEXT_BUFFER(buffer)); } /* */ void VDKEditor::SetChanged(bool f) { gtk_text_buffer_set_modified(GTK_TEXT_BUFFER(buffer),f); } /* */ void VDKEditor::SetMaxUndo(int m) { /* if(sigwid) gtk_source_buffer_set_max_undo_stack(buffer, m); */ } /* SIGNALS SECTION */ void VDKEditor::LocalConnect() { // handles tab gtk_signal_connect (GTK_OBJECT (sigwid), "key_press_event", GTK_SIGNAL_FUNC (VDKEditor::TabHandler), this); // handles paren match // gtk_signal_connect (GTK_OBJECT (sigwid), "key_release_event", // GTK_SIGNAL_FUNC (VDKEditor::OnKeyRelease), this); gtk_signal_connect(GTK_OBJECT(sigwid),"realize", GTK_SIGNAL_FUNC(VDKEditor::HandleRealize), this); } /* update modified flag */ void VDKEditor::OnBufferChanged(GtkWidget* buf, gpointer gp) { VDKEditor* editor = reinterpret_cast(gp); g_return_if_fail(editor != NULL); editor->Changed = true; } /* Originally was made to handle only, now handles more keystrokes, but the name remained unchanged. */ /* some special key handling: - ctrl-tab or ctrl-a for words completion - ctrl-q for hints - ) or } for parenthesis matching */ static struct TIMERSTRUCT { VDKEditor* widget; int match,pos; char key; int timerid; bool insert; } TimerStruct; static bool timeron = false; static int ParenMatch(VDKEditor* text, int pos, char paren); static int HandleTimeOut(gpointer gp) { g_return_val_if_fail (gp != NULL,FALSE); struct TIMERSTRUCT* ts = reinterpret_cast(gp); char key[2]; key[0] = ts->key; key[1] = '\0'; ts->widget->UnselectText(); ts->widget->Pointer = ts->pos; if(ts->insert) ts->widget->TextInsert(key); gtk_timeout_remove(ts->timerid); timeron = false; return FALSE; } /* handle key release for + key pad num strokes */ //static char ansibuffer[32] = {'\0'}; //static int ansicount = 0; int VDKEditor::OnKeyRelease (GtkWidget *widget, GdkEvent *ev, gpointer gp) { VDKEditor* editor; GdkEventKey* event = NULL; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (ev != NULL, FALSE); g_return_val_if_fail (gp != NULL, FALSE); editor = reinterpret_cast(gp); event = (GdkEventKey*) ev; // bool isCtrl = event->state & GDK_CONTROL_MASK; // bool isAlt = event->state & GDK_MOD1_MASK; // bool isShift = event->state & GDK_SHIFT_MASK; /* bool isAlt = (event->keyval == GDK_Alt_L) && (event->state & GDK_MOD1_MASK) ; */ /* if(! isShift && (event->keyval == GDK_Left || event->keyval == GDK_Right)) { int pos = editor->Pointer; int start = event->keyval == GDK_Left ? pos : pos-1; int end = event->keyval == GDK_Left ? pos+1 : pos; char* key = editor->GetChars(start,end); if(* key && (key[0] == GDK_parenright || key[0] == GDK_braceright)) editor->ShowParenMatch(start,key[0],widget,false, event->keyval == GDK_Left ? -1 : pos); g_free(key); } */ return FALSE; // TRUE; } /* */ int VDKEditor::TabHandler (GtkWidget *widget, GdkEvent *ev, gpointer gp) { VDKEditor* editor; char* word; GdkEventKey* event = NULL; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (ev != NULL, FALSE); g_return_val_if_fail (gp != NULL, FALSE); editor = reinterpret_cast(gp); event = (GdkEventKey*) ev; // destroy tip window if any if(tip_window) { tip_window->Close(); tip_window->Destroy(); tip_window = NULL; } bool handled = false; bool isCtrl = event->state & GDK_CONTROL_MASK; // bool isAlt = event->state & GDK_MOD1_MASK; // bool isShift = event->state & GDK_SHIFT_MASK; // handle word completion // provided a token list was assigned to this if((isCtrl) && ((event->keyval == GDK_Tab ) || event->keyval == GDK_1) ) { if(editor->tokenlist) { word = editor->GetWord(); if(word) { editor->MakeCompletion(word); g_free(word); } } else { sprintf(buff,"No token list was provided"); editor->ShowTipWindow(buff); } handled = true; } // handles explicit parent match else if(isCtrl && (event->keyval == GDK_p )) { int pos = editor->Pointer; char* key = editor->GetChars(pos,pos+1); if(* key && (key[0] == GDK_parenright || key[0] == GDK_braceright)) editor->ShowParenMatch(pos,key[0],widget,false, pos); g_free(key); handled = true; } // handles paren match for () and {} else if (event->keyval == GDK_parenright || event->keyval == GDK_braceright) { // shows paren match and insert keystroke (last arg = true) int pos = editor->Pointer; handled = editor->ShowParenMatch(pos,event->keyval,widget,true,-1); } // handles ctrl-a (adding new tokens to completion list) // provided a token list was assigned to this else if(editor->tokenlist && isCtrl && (event->keyval == GDK_a )) { editor->AddToken(); handled = true; } // if keystroke handled stops signal emission /* if(handled) gtk_signal_emit_stop_by_name (GTK_OBJECT (widget),"key_press_event"); */ return handled; } /* search and display nearest nested parenthesis matching selecting it or if not visible prompting the user at which line the matching is. FIXME: fix to show also line content. */ int VDKEditor::ShowParenMatch(int start,char keyval, GtkWidget* widget, bool insert, int restore) { int pos = insert ? start : start-1; int match; int match_line = -1; // answers a match > 0 if a matching paren was found if ((match = ParenMatch(this,pos,keyval)) >= 0) { int visible_line = FirstVisibleLine; // stops the signal here // so won't reach underlying gtksourceview if(insert) gtk_signal_emit_stop_by_name (GTK_OBJECT (widget), "key_press_event"); // check if matching position is visible or not match_line = GetLineAtOffset(match); // is visible so enligths matching position // for a short period using a timeout. // timeout handling function will insert keystroke as well if( match_line >= visible_line) { SelectText(match,match+1); // when timer expires will restore // cursor position and inserts matching char timeron = true; TimerStruct.widget = this; TimerStruct.match = match; if(restore < 0) TimerStruct.pos = insert ? pos : pos + 1; else TimerStruct.pos = restore; TimerStruct.key = keyval; TimerStruct.insert = insert; TimerStruct.timerid = gtk_timeout_add(100,HandleTimeOut,&TimerStruct); } // matching position is not visible, prompts user // with matching line number // FIXME: fix to show also line content. else { char key[2]; key[0] = keyval; key[1] = '\0'; if(insert) TextInsert(key,1); sprintf(buff,"Match at line:%d",match_line); ShowTipWindow(buff); } return TRUE; } else // most probably a paren mismatch, warns user { sprintf(buff,"Humm.., probably a parenthesis mismatch"); ShowTipWindow(buff); return FALSE; } } /* search where (offset) is the nearest nested parenthesis. Uses a stack-like method to store nested position pushing when a closing paren and popping when an opening paren is found. Stack underflow means we reached the nearest nested parenthesis (returns pos >= 0), if buffer beginning is encountered without having a stack underflow means a paren mismatching (returns pos < 0) */ int ParenMatch(VDKEditor* text, int pos ,char paren) { char match; if(paren == GDK_parenright) match = GDK_parenleft; else if (paren == GDK_braceright) match = GDK_braceleft; else return 0; int stack = 1; do { char* slice = text->GetChars(pos,pos+1); char key = slice[0]; if(key == match) stack--; else if (key == paren) stack++; if(stack > 0) pos--; g_free(slice); } while((stack > 0) && (pos >= 0)); return pos; } /* */ void VDKEditor::SelectText(int start, int end) { GtkTextIter istart,iend; gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer), &istart, start); gtk_text_buffer_get_iter_at_offset(GTK_TEXT_BUFFER(buffer), &iend, end); gtk_text_buffer_place_cursor (GTK_TEXT_BUFFER(buffer),&istart); gtk_text_buffer_move_mark (GTK_TEXT_BUFFER(buffer), gtk_text_buffer_get_mark (GTK_TEXT_BUFFER(buffer),"selection_bound"),&iend); } /* */ void VDKEditor::UnselectText() { GtkTextIter insert; gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER(buffer), &insert, gtk_text_buffer_get_mark (GTK_TEXT_BUFFER(buffer), "insert")); gtk_text_buffer_move_mark (GTK_TEXT_BUFFER(buffer), gtk_text_buffer_get_mark (GTK_TEXT_BUFFER(buffer), "selection_bound"), &insert); } /* Scrolls to a pointer pos or (default) to current pointer position, leaving pixels free */ void VDKEditor::ScrollToPos (int pointer, int margin) { if(pointer >= 0) Pointer = pointer; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer), INSERT_MARK); if(mark) // more args on new gtk+ snapshoots gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(view),mark,margin,1,0.5,0.5); } /* Scrolls to a line,column leaving pixels free */ void VDKEditor::ScrollToLine(int line, int col, int margin) { Line = line; Column = col; GtkTextMark* mark = gtk_text_buffer_get_mark(GTK_TEXT_BUFFER(buffer), INSERT_MARK); if(mark) // more args on new gtk+ snapshoots gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(view),mark,margin,1,0.5,0.5); } /* */ TokenList* VDKEditor::LoadTokens(const char* filename) { FILE* fp; TokenList* local = NULL; fp = fopen(filename,"r"); if(fp) { local = new TokenList; char token[256]; while(fgets(token,256,fp)) { int t = std::strlen(token); if(t > 0) { token[t-1] = '\0'; if(*token) { VDKString tk = token; local->add(tk); } } } fclose(fp); } return local; } /* TIP WINDOW CLASS */ void Tipwin::Setup(void) { VDKEventBox *vbox = new VDKEventBox(this,v_box); Add(vbox,0,1,1,0); vbox->NormalBackground = VDKRgb(255,255,255); label = new VDKLabel(this,tip); vbox->Add(label,0,1,1,0); } /* */ void VDKEditor::ShowTipWindow(char* tip) { if( tip && !tip_window) { int x, y; GdkRectangle location; GtkTextIter iter; int window_x,window_y; GtkTextView *text = GTK_TEXT_VIEW(sigwid); GdkWindow* win = gtk_text_view_get_window(text,GTK_TEXT_WINDOW_TEXT); gdk_window_get_deskrelative_origin(win,&x,&y); gtk_text_buffer_get_iter_at_mark (GTK_TEXT_BUFFER(buffer), &iter, gtk_text_buffer_get_mark (GTK_TEXT_BUFFER(buffer), "insert")); gtk_text_view_get_iter_location (text,&iter,&location); gtk_text_view_buffer_to_window_coords (text, GTK_TEXT_WINDOW_TEXT, location.x, location.y, &window_x, &window_y); x += window_x; y += window_y; tip_window = new Tipwin(Owner(),tip); tip_window->Setup(); tip_window->Position = VDKPoint(x,y); tip_window->Show(); } } vdk-2.4.0/vdk/gtkdatabox.c0000644000000000000000000013725207614017441011026 /* GtkDatabox - An extension to the gtk+ library * Copyright (C) 1998 - 2002 Dr. Roland Bock * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This 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 Lesser 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. */ /* gtkdatabox.c */ #include #include "gtk/gtksignal.h" #include "gtk/gtktable.h" #include "gtk/gtktogglebutton.h" #include "gtk/gtkdrawingarea.h" #include "gtk/gtkhscrollbar.h" #include "gtk/gtkvscrollbar.h" #include "gtk/gtkruler.h" #include "gtk/gtkhruler.h" #include "gtk/gtkvruler.h" #include #include #define CROSS_BORDER 10 enum { GTK_DATABOX_SHOW_RULERS = 0, GTK_DATABOX_SHOW_SCROLLBARS, GTK_DATABOX_ENABLE_SELECTION, GTK_DATABOX_SHOW_SELECTION_FILLED, GTK_DATABOX_ENABLE_ZOOM, GTK_DATABOX_REDRAW_REQUEST, GTK_DATABOX_SELECTION_STOPPED, }; enum { GTK_DATABOX_DATA_HAS_GC = 0, }; typedef struct _GtkDataboxData GtkDataboxData; typedef void (*GtkDataboxDrawFunc) (GtkDatabox * box, GtkDataboxData * data); #define GTK_DATABOX_DRAW_FUNC(f) ((GtkDataboxDrawFunc) (f)) static GtkObjectClass *parent_class = NULL; struct _GtkDataboxData { gfloat *X; /* X (horizontal) values */ gfloat *Y; /* Y (vertical) values */ guint length; /* Number of data points */ GtkDataboxDataType type; /* How this data set is to be displayed */ GtkDataboxDrawFunc draw; /* Function that draws the data */ GdkColor color; /* Dot-color */ guint size; /* Dot-size */ GdkGC *gc; /* Dot-gc */ glong flags; /* ..HAS_GC, etc. */ guint hlines; /* Only used for grid */ guint vlines; /* Only used for grid */ }; static void gtk_databox_class_init (GtkDataboxClass * klass); static void gtk_databox_init (GtkDatabox * box); static gint gtk_databox_destroy_callback (GtkWidget * widget, GtkDatabox * box); static gint gtk_databox_expose_callback (GtkWidget * widget, GdkEventExpose * event, GtkDatabox * box); static gint gtk_databox_configure_callback (GtkWidget * widget, GdkEventConfigure * event, GtkDatabox * box); static void gtk_databox_zoom_to_selection (GtkWidget * widget, GtkDatabox * box); static void gtk_databox_zoom_out (GtkWidget * widget, GtkDatabox * box); static void gtk_databox_zoom_home (GtkWidget * widget, GtkDatabox * box); static void gtk_databox_zoomed (GtkWidget * widget, GtkDatabox * box, gboolean redraw_flag); static void gtk_databox_x_adjustment_callback (GtkWidget * widget, GtkDatabox * box); static void gtk_databox_y_adjustment_callback (GtkWidget * widget, GtkDatabox * box); static gint gtk_databox_button_press_callback (GtkWidget * widget, GdkEventButton * event, GtkDatabox * box); static gint gtk_databox_button_release_callback (GtkWidget * widget, GdkEventButton * event, GtkDatabox * box); static gint gtk_databox_motion_notify_callback (GtkWidget * widget, GdkEventMotion * event, GtkDatabox * box); static void gtk_databox_draw_request_full (GtkWidget * widget, gboolean now, GtkDatabox * box); static gint gtk_databox_draw_selection (GtkWidget * widget, GtkDatabox * box, GdkRectangle * rect); static void gtk_databox_draw (GtkWidget * widget, GtkDatabox * box, GdkEventExpose * event); static void gtk_databox_draw_points (GtkDatabox * box, GtkDataboxData * data); static void gtk_databox_draw_lines (GtkDatabox * box, GtkDataboxData * data); static void gtk_databox_draw_bars (GtkDatabox * box, GtkDataboxData * data); static void gtk_databox_draw_cross_simple (GtkDatabox * box, GtkDataboxData * data); static void gtk_databox_draw_grid (GtkDatabox * box, GtkDataboxData * data); static void gtk_databox_new_data_gc (GtkWidget * widget, GtkDatabox * box, GtkDataboxData * data); static void gtk_databox_update_x_ruler (GtkDatabox * box); static void gtk_databox_update_y_ruler (GtkDatabox * box); static void gtk_databox_data_calc_extrema (GtkDatabox * box, GtkDataboxValue * min, GtkDataboxValue * max); static gint gtk_databox_check_x_links (GList * list, gfloat * values); static gint gtk_databox_check_y_links (GList * list, gfloat * values); static void gtk_databox_destroy_data (GtkDatabox * box, GtkDataboxData * data, GList * list, gboolean free_flag); static gint gtk_databox_data_destroy_with_flag (GtkDatabox * box, gint index, gboolean free_flag); static gint gtk_databox_data_destroy_all_with_flag (GtkDatabox * box, gboolean free_flag); enum { GTK_DATABOX_ZOOMED_SIGNAL, GTK_DATABOX_MARKED_SIGNAL, GTK_DATABOX_SELECTION_STARTED_SIGNAL, GTK_DATABOX_SELECTION_CHANGED_SIGNAL, GTK_DATABOX_SELECTION_STOPPED_SIGNAL, GTK_DATABOX_SELECTION_CANCELLED_SIGNAL, LAST_SIGNAL }; static gint gtk_databox_signals[LAST_SIGNAL] = { 0 }; /* FIXME: We should take a closer look at some other widgets for better understanding... */ guint gtk_databox_get_type () { static GType databox_type = 0; if (!databox_type) { static const GTypeInfo databox_info = { sizeof (GtkDataboxClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) gtk_databox_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (GtkDatabox), 0, /* no pre-allocation */ (GInstanceInitFunc) gtk_databox_init, }; databox_type = g_type_register_static (GTK_TYPE_VBOX, "GtkDatabox", &databox_info, 0); } return databox_type; } /* FIXME: We should take a closer look at some other widgets for better understanding... */ static void gtk_databox_class_init (GtkDataboxClass * klass) { GtkObjectClass *object_class = (GtkObjectClass *) klass; /* GtkWidgetClass *widget_class = (GtkWidgetClass *) klass;*/ parent_class = g_type_class_peek_parent (klass); /* FIXME Many Gtk widgets use something like the following */ /* Should that be used here as well? */ /* object_class->destroy = gtk_databox_destroy; widget_class->configure_event = gtk_databox_configure; widget_class->expose_event = gtk_databox_expose; widget_class->button_press_event = gtk_databox_button_press; widget_class->button_release_event = gtk_databox_button_release; widget_class->motion_notify_event = gtk_databox_motion_notify; */ gtk_databox_signals[GTK_DATABOX_ZOOMED_SIGNAL] = g_signal_new ("gtk_databox_zoomed", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GtkDataboxClass, gtk_databox_zoomed), NULL, /* accumulator */ NULL, /* accumulator_data */ gtk_databox_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER); gtk_databox_signals[GTK_DATABOX_MARKED_SIGNAL] = g_signal_new ("gtk_databox_marked", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GtkDataboxClass, gtk_databox_marked), NULL, /* accumulator */ NULL, /* accumulator_data */ gtk_databox_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); gtk_databox_signals[GTK_DATABOX_SELECTION_STARTED_SIGNAL] = g_signal_new ("gtk_databox_selection_started", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GtkDataboxClass, gtk_databox_selection_started), NULL, /* accumulator */ NULL, /* accumulator_data */ gtk_databox_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); gtk_databox_signals[GTK_DATABOX_SELECTION_CHANGED_SIGNAL] = g_signal_new ("gtk_databox_selection_changed", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GtkDataboxClass, gtk_databox_selection_changed), NULL, /* accumulator */ NULL, /* accumulator_data */ gtk_databox_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER); gtk_databox_signals[GTK_DATABOX_SELECTION_STOPPED_SIGNAL] = g_signal_new ("gtk_databox_selection_stopped", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GtkDataboxClass, gtk_databox_selection_stopped), NULL, /* accumulator */ NULL, /* accumulator_data */ gtk_databox_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER); gtk_databox_signals[GTK_DATABOX_SELECTION_CANCELLED_SIGNAL] = g_signal_new ("gtk_databox_selection_cancelled", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GtkDataboxClass, gtk_databox_selection_cancelled), NULL, /* accumulator */ NULL, /* accumulator_data */ gtk_databox_marshal_VOID__VOID, G_TYPE_NONE, 0); klass->gtk_databox = NULL; klass->gtk_databox_zoomed = NULL; klass->gtk_databox_marked = NULL; klass->gtk_databox_selection_started = NULL; klass->gtk_databox_selection_changed = NULL; klass->gtk_databox_selection_stopped = NULL; klass->gtk_databox_selection_cancelled = NULL; } static void gtk_databox_init (GtkDatabox * box) { GtkWidget *widget = NULL; box->table = gtk_table_new (3, 3, FALSE); gtk_container_add (GTK_CONTAINER (box), box->table); gtk_widget_show (box->table); widget = box->draw = gtk_drawing_area_new (); gtk_widget_set_events (widget, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); g_signal_connect (GTK_OBJECT (widget), "destroy", GTK_SIGNAL_FUNC (gtk_databox_destroy_callback), box); g_signal_connect (GTK_OBJECT (widget), "configure_event", GTK_SIGNAL_FUNC (gtk_databox_configure_callback), box); g_signal_connect (GTK_OBJECT (widget), "expose_event", GTK_SIGNAL_FUNC (gtk_databox_expose_callback), box); g_signal_connect (GTK_OBJECT (widget), "button_press_event", GTK_SIGNAL_FUNC (gtk_databox_button_press_callback), box); g_signal_connect (GTK_OBJECT (widget), "button_release_event", GTK_SIGNAL_FUNC (gtk_databox_button_release_callback), box); g_signal_connect (GTK_OBJECT (widget), "motion_notify_event", GTK_SIGNAL_FUNC (gtk_databox_motion_notify_callback), box); gtk_widget_set_size_request (widget, 20, 30); gtk_table_attach (GTK_TABLE (box->table), widget, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0); gtk_widget_show (widget); box->adjX = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1.0, 0.1, 0.9, 1.0)); box->adjY = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1.0, 0.1, 0.9, 1.0)); g_object_ref (GTK_OBJECT (box->adjX)); g_object_ref (GTK_OBJECT (box->adjY)); g_signal_connect (GTK_OBJECT (box->adjY), "value_changed", GTK_SIGNAL_FUNC (gtk_databox_y_adjustment_callback), box); g_signal_connect (GTK_OBJECT (box->adjX), "value_changed", GTK_SIGNAL_FUNC (gtk_databox_x_adjustment_callback), box); box->flags = 0; gtk_databox_show_rulers (box); gtk_databox_show_scrollbars (box); gtk_databox_enable_zoom (box); gtk_databox_enable_selection (box); gtk_databox_hide_selection_filled (box); gtk_databox_set_zoom_limit (box, 0.01); box->pixmap = NULL; box->data = NULL; box->max_points = 0; box->points = NULL; box->select_gc = NULL; gtk_databox_rescale (box); } GtkWidget * gtk_databox_new () { return gtk_widget_new (GTK_TYPE_DATABOX, NULL); } void gtk_databox_show_rulers (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); if (!(box->flags & (1 << GTK_DATABOX_SHOW_RULERS))) { box->hrule = gtk_hruler_new (); gtk_ruler_set_metric (GTK_RULER (box->hrule), GTK_PIXELS); gtk_ruler_set_range (GTK_RULER (box->hrule), 1.5, -0.5, 0.5, 20); g_signal_connect_closure (box->draw, "motion_notify_event", g_cclosure_new_object_swap (GTK_SIGNAL_FUNC(GTK_WIDGET_GET_CLASS(box->hrule)->motion_notify_event), G_OBJECT (box->hrule)), FALSE); box->vrule = gtk_vruler_new (); gtk_ruler_set_metric (GTK_RULER (box->vrule), GTK_PIXELS); gtk_ruler_set_range (GTK_RULER (box->vrule), 1.5, -0.5, 0.5, 20); g_signal_connect_closure (box->draw, "motion_notify_event", g_cclosure_new_object_swap (GTK_SIGNAL_FUNC(GTK_WIDGET_GET_CLASS(box->vrule)->motion_notify_event), G_OBJECT (box->vrule)), FALSE); gtk_table_attach (GTK_TABLE (box->table), box->hrule, 1, 2, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0); gtk_table_attach (GTK_TABLE (box->table), box->vrule, 0, 1, 1, 2, GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); gtk_widget_show (box->hrule); gtk_widget_show (box->vrule); box->flags |= 1 << GTK_DATABOX_SHOW_RULERS; } } void gtk_databox_hide_rulers (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); if (box->flags & (1 << GTK_DATABOX_SHOW_RULERS)) { gtk_widget_destroy (box->hrule); box->hrule = NULL; gtk_widget_destroy (box->vrule); box->vrule = NULL; } box->flags &= ~(1 << GTK_DATABOX_SHOW_RULERS); } void gtk_databox_show_scrollbars (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); if (!(box->flags & (1 << GTK_DATABOX_SHOW_SCROLLBARS))) { box->hscroll = gtk_hscrollbar_new (box->adjX); box->vscroll = gtk_vscrollbar_new (box->adjY); gtk_table_attach (GTK_TABLE (box->table), box->hscroll, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_FILL, 0, 0); gtk_table_attach (GTK_TABLE (box->table), box->vscroll, 2, 3, 1, 2, GTK_FILL, GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0); gtk_widget_show (box->hscroll); gtk_widget_show (box->vscroll); } box->flags |= 1 << GTK_DATABOX_SHOW_SCROLLBARS; } void gtk_databox_hide_scrollbars (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); if ((box->flags & (1 << GTK_DATABOX_SHOW_SCROLLBARS))) { gtk_widget_destroy (box->hscroll); gtk_widget_destroy (box->vscroll); } box->flags &= ~(1 << GTK_DATABOX_SHOW_SCROLLBARS); } void gtk_databox_enable_selection (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); box->flags |= 1 << GTK_DATABOX_ENABLE_SELECTION; } void gtk_databox_disable_selection (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); box->flags &= ~(1 << GTK_DATABOX_ENABLE_SELECTION); box->selection_flag = 0; g_signal_emit (GTK_OBJECT (box), gtk_databox_signals [GTK_DATABOX_SELECTION_CANCELLED_SIGNAL], 0); } void gtk_databox_show_selection_filled (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); box->flags |= 1 << GTK_DATABOX_SHOW_SELECTION_FILLED; } void gtk_databox_hide_selection_filled (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); box->flags &= ~(1 << GTK_DATABOX_SHOW_SELECTION_FILLED); } void gtk_databox_enable_zoom (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); box->flags |= 1 << GTK_DATABOX_ENABLE_ZOOM; } void gtk_databox_disable_zoom (GtkDatabox * box) { g_return_if_fail (GTK_IS_DATABOX (box)); box->flags &= ~(1 << GTK_DATABOX_ENABLE_ZOOM); } void gtk_databox_set_zoom_limit (GtkDatabox * box, gfloat zoom_limit) { g_return_if_fail (GTK_IS_DATABOX (box)); box->zoom_limit = zoom_limit; } gfloat gtk_databox_get_zoom_limit (GtkDatabox * box) { g_return_val_if_fail (GTK_IS_DATABOX (box), 0); return box->zoom_limit; } static gint gtk_databox_destroy_callback (GtkWidget * widget, GtkDatabox * box) { if (box->pixmap) g_object_unref (box->pixmap); if (box->select_gc) { g_object_unref (box->select_gc); } g_object_unref (GTK_OBJECT (box->adjX)); g_object_unref (GTK_OBJECT (box->adjY)); return FALSE; } static gint gtk_databox_configure_callback (GtkWidget * widget, GdkEventConfigure * event, GtkDatabox * box) { gdk_drawable_get_size (widget->window, &(box->size.x), &(box->size.y)); if (box->pixmap) g_object_unref (box->pixmap); box->pixmap = gdk_pixmap_new (widget->window, box->size.x, box->size.y, -1); gdk_draw_rectangle (box->pixmap, widget->style->bg_gc[0], TRUE, 0, 0, box->size.x, box->size.y); if (box->selection_flag) { box->selection_flag = 0; g_signal_emit (GTK_OBJECT (box), gtk_databox_signals [GTK_DATABOX_SELECTION_CANCELLED_SIGNAL], 0); } gtk_databox_zoomed (widget, box, FALSE); return FALSE; } static gint gtk_databox_expose_callback (GtkWidget * widget, GdkEventExpose * event, GtkDatabox * box) { gtk_databox_draw (box->draw, box, event); gdk_draw_drawable (widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], box->pixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height); return FALSE; } static gint gtk_databox_button_press_callback (GtkWidget * widget, GdkEventButton * event, GtkDatabox * box) { gint x; gint y; guint button; GdkRectangle rect; if (event->type != GDK_BUTTON_PRESS) return FALSE; box->flags &= ~(1 << GTK_DATABOX_SELECTION_STOPPED); button = event->button; x = event->x; y = event->y; if (box->selection_flag) { rect.x = MIN (box->marked.x, box->select.x); rect.y = MIN (box->marked.y, box->select.y); rect.width = MAX (box->marked.x, box->select.x) - rect.x + 1; rect.height = MAX (box->marked.x, box->select.x) - rect.y + 1; gtk_databox_draw_selection (box->draw, box, &rect); } if (button == 1 || button == 2) { if (box->selection_flag) { box->selection_flag = 0; if (rect.x < x && x < MAX (box->marked.x, box->select.x) && rect.y < y && y < MAX (box->marked.y, box->select.y)) { gtk_databox_zoom_to_selection (widget, box); } else { g_signal_emit (GTK_OBJECT (box), gtk_databox_signals [GTK_DATABOX_SELECTION_CANCELLED_SIGNAL], 0); } } } else if (button == 3) { if (box->selection_flag) { box->selection_flag = 0; g_signal_emit (GTK_OBJECT (box), gtk_databox_signals [GTK_DATABOX_SELECTION_CANCELLED_SIGNAL], 0); } if (event->state & GDK_SHIFT_MASK) { gtk_databox_zoom_home (widget, box); } else { gtk_databox_zoom_out (widget, box); } } box->marked.x = x; box->marked.y = y; g_signal_emit (GTK_OBJECT (box), gtk_databox_signals[GTK_DATABOX_MARKED_SIGNAL], 0, &box->marked); return FALSE; } static gint gtk_databox_button_release_callback (GtkWidget * widget, GdkEventButton * event, GtkDatabox * box) { if (event->type != GDK_BUTTON_RELEASE) return FALSE; if (box->selection_flag) { box->flags |= 1 << GTK_DATABOX_SELECTION_STOPPED; g_signal_emit (GTK_OBJECT (box), gtk_databox_signals [GTK_DATABOX_SELECTION_STOPPED_SIGNAL], 0, &box->marked, &box->select); } return FALSE; } static gint gtk_databox_motion_notify_callback (GtkWidget * widget, GdkEventMotion * event, GtkDatabox * box) { gint x, y; GdkModifierType state; x = event->x; y = event->y; state = event->state; if (event->is_hint || (event->window != widget->window)) gdk_window_get_pointer (widget->window, &x, &y, &state); if (state & GDK_BUTTON1_MASK && (box->flags & (1 << GTK_DATABOX_ENABLE_SELECTION)) && !(box->flags & (1 << GTK_DATABOX_SELECTION_STOPPED))) { GdkRectangle rect; gint width; gint height; gdk_drawable_get_size (widget->window, &width, &height); x = MAX (0, MIN (width - 1, x)); y = MAX (0, MIN (height - 1, y)); if (box->selection_flag) { /* Clear current selection from pixmap */ gtk_databox_draw_selection (box->draw, box, NULL); } else { box->selection_flag = 1; box->marked.x = x; box->marked.y = y; box->select.x = x; box->select.y = y; g_signal_emit (GTK_OBJECT (box), gtk_databox_signals [GTK_DATABOX_SELECTION_STARTED_SIGNAL], 0, &box->marked); } /* Determine the exposure rectangle (covering old selection and new) */ rect.x = MIN (MIN (box->marked.x, box->select.x), x); rect.y = MIN (MIN (box->marked.y, box->select.y), y); rect.width = MAX (MAX (box->marked.x, box->select.x), x) - rect.x + 1; rect.height = MAX (MAX (box->marked.y, box->select.y), y) - rect.y + 1; box->select.x = x; box->select.y = y; /* Draw new selection */ gtk_databox_draw_selection (box->draw, box, &rect); g_signal_emit (GTK_OBJECT (box), gtk_databox_signals [GTK_DATABOX_SELECTION_CHANGED_SIGNAL], 0, &box->marked, &box->select); } return FALSE; } void gtk_databox_data_get_value (GtkDatabox * box, GtkDataboxCoord point, GtkDataboxValue * coord) { g_return_if_fail (GTK_IS_DATABOX (box) && coord); coord->x = box->top_left.x + point.x / box->factor.x; coord->y = box->top_left.y + point.y / box->factor.y; } void gtk_databox_data_get_marked_value (GtkDatabox * box, GtkDataboxValue * coord) { gtk_databox_data_get_value (box, box->marked, coord); } void gtk_databox_data_get_delta_value (GtkDatabox * box, GtkDataboxValue * coord) { GtkDataboxValue drooc; g_return_if_fail (GTK_IS_DATABOX (box) && coord); gtk_databox_data_get_value (box, box->marked, &drooc); gtk_databox_data_get_value (box, box->select, coord); coord->x -= drooc.x; coord->y -= drooc.y; } static void gtk_databox_data_calc_extrema (GtkDatabox * box, GtkDataboxValue * min, GtkDataboxValue * max) { gint i; GtkDataboxData *data = NULL; GList *list = NULL; GtkDataboxValue border; g_return_if_fail (GTK_IS_DATABOX (box) && min && max); if (!box->data) { min->x = -0.5; min->y = -0.5; max->x = 1.5; max->y = 1.5; return; } list = box->data; if (list) data = (GtkDataboxData *) list->data; else data = NULL; min->x = data->X[0]; min->y = data->Y[0]; max->x = data->X[0]; max->y = data->Y[0]; while (data) { for (i = 0; i < data->length; i++) { min->x = MIN (data->X[i], min->x); max->x = MAX (data->X[i], max->x); } for (i = 0; i < data->length; i++) { min->y = MIN (data->Y[i], min->y); max->y = MAX (data->Y[i], max->y); } list = g_list_next (list); if (list) data = (GtkDataboxData *) list->data; else data = NULL; } border.x = (max->x - min->x) / 10.; border.y = (max->y - min->y) / 10.; min->x = min->x - border.x; min->y = min->y - border.y; max->x = max->x + border.x; max->y = max->y + border.y; return; } void gtk_databox_data_get_extrema (GtkDatabox * box, GtkDataboxValue * min, GtkDataboxValue * max) { g_return_if_fail (GTK_IS_DATABOX (box) && min && max); *min = box->min; *max = box->max; return; } void gtk_databox_data_get_visible_extrema (GtkDatabox * box, GtkDataboxValue * min, GtkDataboxValue * max) { /* GtkDataboxValue pre_min; GtkDataboxValue pre_max; GtkDataboxCoord top_left; GtkDataboxCoord bottom_right; */ g_return_if_fail (GTK_IS_DATABOX (box) && min && max); /* top_left.x = top_left.y = 0; bottom_right.x = box->size.x - 1; bottom_right.y = box->size.y - 1; gtk_databox_data_get_value (box, top_left, &pre_min); gtk_databox_data_get_value (box, bottom_right, &pre_max); min->x = MIN (pre_min.x, pre_max.x); min->y = MIN (pre_min.y, pre_max.y); max->x = MAX (pre_min.x, pre_max.x); max->y = MAX (pre_min.y, pre_max.y); */ min->x = box->top_left.x; max->x = box->bottom_right.x; min->y = box->bottom_right.y; max->y = box->top_left.y; return; } void gtk_databox_rescale_with_values (GtkDatabox * box, GtkDataboxValue min, GtkDataboxValue max) { g_return_if_fail (GTK_IS_DATABOX (box)); box->min.x = min.x; box->max.x = max.x; box->min.y = min.y; box->max.y = max.y; if (box->max.x - box->min.x < 1e-10) { box->min.x -= 0.5e-10; box->max.x += 0.5e-10; } if (box->max.y - box->min.y < 1e-10) { box->min.y -= 0.5e-10; box->max.y += 0.5e-10; } gtk_databox_zoom_home (box->draw, box); } void gtk_databox_rescale (GtkDatabox * box) { GtkDataboxValue min, max; g_return_if_fail (GTK_IS_DATABOX (box)); gtk_databox_data_calc_extrema (box, &min, &max); gtk_databox_rescale_with_values (box, min, max); } void gtk_databox_redraw (GtkDatabox * box) { gtk_databox_draw_request_full (box->draw, TRUE, box); } static void gtk_databox_zoom_to_selection (GtkWidget * widget, GtkDatabox * box) { if (!(box->flags & (1 << GTK_DATABOX_ENABLE_ZOOM))) return; /* We always scroll from 0 to 1.0 */ box->adjX->lower = 0; box->adjX->upper = 1.0; /* The left border of the selection box is used for calculating * the left end of the visible "page" in scollbar-coordinates * (remember: we scroll from 0 to 1.0) */ box->adjX->value += (gfloat) (MIN (box->marked.x, box->select.x)) * box->adjX->page_size / box->size.x; /* The size of the selection box is used for calculating * the size of the visible "page" in scollbar-coordinates * (remember: we scroll from 0 to 1.0) */ box->adjX->page_size *= (gfloat) (ABS (box->marked.x - box->select.x) + 1) / box->size.x; /* If we zoom to far into the data, we will get funny results, because * of overflow effects. Therefore zooming is limited to box->zoom_limit. */ if (box->adjX->page_size < box->zoom_limit) { box->adjX->value = (gfloat) MAX (0, box->adjX->value - (box->zoom_limit - box->adjX->page_size) / 2.0); box->adjX->page_size = box->zoom_limit; } /* Setting the scroll increments */ box->adjX->step_increment = box->adjX->page_size / 20; box->adjX->page_increment = box->adjX->page_size * 0.9; /* And now the analog steps for the vertical scrollbar */ box->adjY->lower = 0; box->adjY->upper = 1.0; box->adjY->value += (gfloat) (MIN (box->marked.y, box->select.y)) * box->adjY->page_size / box->size.y; box->adjY->page_size *= (gfloat) (ABS (box->marked.y - box->select.y) + 1) / box->size.y; if (box->adjY->page_size < box->zoom_limit) { box->adjY->value = (gfloat) MAX (0, box->adjY->value - (box->zoom_limit - box->adjY->page_size) / 2.0); box->adjY->page_size = box->zoom_limit; } box->adjY->step_increment = box->adjY->page_size / 20; box->adjY->page_increment = box->adjY->page_size * 0.9; gtk_databox_zoomed (widget, box, TRUE); } static void gtk_databox_zoom_out (GtkWidget * widget, GtkDatabox * box) { if (!(box->flags & (1 << GTK_DATABOX_ENABLE_ZOOM))) return; box->adjX->lower = 0; box->adjY->lower = 0; box->adjX->page_size = MIN (1.0, box->adjX->page_size * 2); box->adjY->page_size = MIN (1.0, box->adjY->page_size * 2); box->adjX->value = (box->adjX->page_size == 1.0) ? 0 : (MAX (0, (box->adjX->value - box->adjX->page_size / 4))); box->adjY->value = (box->adjY->page_size == 1.0) ? 0 : (MAX (0, (box->adjY->value - box->adjY->page_size / 4))); box->adjX->upper = 1.0; box->adjY->upper = 1.0; box->adjY->step_increment = box->adjY->page_size / 20; box->adjY->page_increment = box->adjY->page_size * 0.9; box->adjX->step_increment = box->adjX->page_size / 20; box->adjX->page_increment = box->adjX->page_size * 0.9; gtk_databox_zoomed (widget, box, TRUE); } static void gtk_databox_zoom_home (GtkWidget * widget, GtkDatabox * box) { if (!(box->flags & (1 << GTK_DATABOX_ENABLE_ZOOM))) return; box->selection_flag = 0; box->adjX->lower = 0; box->adjY->lower = 0; box->adjX->page_size = 1.0; box->adjY->page_size = 1.0; box->adjX->value = 0; box->adjY->value = 0; box->adjX->upper = 1.0; box->adjY->upper = 1.0; box->adjY->step_increment = box->adjY->page_size / 20; box->adjY->page_increment = box->adjY->page_size * 0.9; box->adjX->step_increment = box->adjX->page_size / 20; box->adjX->page_increment = box->adjX->page_size * 0.9; gtk_databox_zoomed (widget, box, TRUE); } static void gtk_databox_zoomed (GtkWidget * widget, GtkDatabox * box, gboolean redraw_flag) { /* This function is called after configure events even if zoom * is disabled, and we need it because box->factor is re-calculated here. * (It is also called after zoom events, of course...) */ box->flags |= 1 << GTK_DATABOX_REDRAW_REQUEST; gtk_adjustment_changed (box->adjX); gtk_adjustment_changed (box->adjY); gtk_databox_x_adjustment_callback (widget, box); gtk_databox_y_adjustment_callback (widget, box); box->factor.x = box->size.x / (box->bottom_right.x - box->top_left.x); box->factor.y = box->size.y / (box->bottom_right.y - box->top_left.y); if (redraw_flag) { box->flags &= ~(1 << GTK_DATABOX_REDRAW_REQUEST); gtk_databox_draw_request_full (box->draw, TRUE, box); } g_signal_emit (GTK_OBJECT (box), gtk_databox_signals[GTK_DATABOX_ZOOMED_SIGNAL], 0, &box->top_left, &box->bottom_right); } static void gtk_databox_x_adjustment_callback (GtkWidget * widget, GtkDatabox * box) { if (box->adjX->page_size == 1.0) { box->top_left.x = box->min.x; box->bottom_right.x = box->max.x; } else { box->top_left.x = box->min.x + (box->max.x - box->min.x) * box->adjX->value; box->bottom_right.x = box->top_left.x + (box->max.x - box->min.x) * box->adjX->page_size; } gtk_databox_update_x_ruler (box); gtk_databox_draw_request_full (box->draw, TRUE, box); } static void gtk_databox_y_adjustment_callback (GtkWidget * widget, GtkDatabox * box) { if (box->adjY->page_size == 1.0) { box->top_left.y = box->max.y; box->bottom_right.y = box->min.y; } else { box->top_left.y = box->max.y - (box->max.y - box->min.y) * box->adjY->value; box->bottom_right.y = box->top_left.y - (box->max.y - box->min.y) * box->adjY->page_size; } gtk_databox_update_y_ruler (box); gtk_databox_draw_request_full (box->draw, TRUE, box); } static void gtk_databox_update_x_ruler (GtkDatabox * box) { if (box->flags & (1 << GTK_DATABOX_SHOW_RULERS)) { gtk_ruler_set_range (GTK_RULER (box->hrule), box->top_left.x, box->bottom_right.x, 0.5 * (box->top_left.x + box->bottom_right.x), 20); } } static void gtk_databox_update_y_ruler (GtkDatabox * box) { if (box->flags & (1 << GTK_DATABOX_SHOW_RULERS)) { gtk_ruler_set_range (GTK_RULER (box->vrule), box->top_left.y, box->bottom_right.y, 0.5 * (box->top_left.y + box->bottom_right.y), 20); } } static void gtk_databox_draw_request_full (GtkWidget * widget, gboolean now, GtkDatabox * box) { GdkRectangle redraw_rect; redraw_rect.x = 0; redraw_rect.y = 0; redraw_rect.width = box->size.x; redraw_rect.height = box->size.y; if (box->flags & (1 << GTK_DATABOX_REDRAW_REQUEST)) { return; } box->flags |= 1 << GTK_DATABOX_REDRAW_REQUEST; if (now) gtk_widget_queue_draw_area (widget, 0, 0, box->size.x, box->size.y); /* FIXME: Maybe we want to send an expose event instead. This guarantees immediate redrawing */ /* gtk_widget_draw (widget, &redraw_rect);*/ } static gint gtk_databox_draw_selection (GtkWidget * widget, GtkDatabox * box, GdkRectangle * rect) { if (!box->select_gc) { gboolean color_allocate_success; GdkGCValues values; GdkColormap *colormap; GdkColor color; color.red = 65535; color.green = 65535; color.blue = 65535; colormap = gtk_widget_get_colormap (widget); color_allocate_success = gdk_colormap_alloc_color (colormap, &color, FALSE, TRUE); /* FIXME We should add a message here ... */ g_return_val_if_fail (color_allocate_success, FALSE); values.foreground = color; values.function = GDK_XOR; box->select_gc = gdk_gc_new_with_values (widget->window, &values, GDK_GC_FUNCTION | GDK_GC_FOREGROUND); } gdk_draw_rectangle (box->pixmap, box->select_gc, box->flags & (1 << GTK_DATABOX_SHOW_SELECTION_FILLED), MIN (box->marked.x, box->select.x), MIN (box->marked.y, box->select. y), ABS (box->marked.x - box->select.x), ABS (box->marked.y - box->select.y)); if (rect) gdk_draw_drawable (widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], box->pixmap, rect->x, rect->y, rect->x, rect->y, rect->width, rect->height); return TRUE; } gint gtk_databox_data_get_color (GtkDatabox * box, gint index, GdkColor * color) { GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); g_return_val_if_fail (color, -1); data = (GtkDataboxData *) g_list_nth_data (box->data, index); g_return_val_if_fail (data, -1); *color = data->color; return 0; } gint gtk_databox_data_get_type (GtkDatabox * box, gint index, GtkDataboxDataType * type, guint * dot_size) { GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); g_return_val_if_fail (type, -1); g_return_val_if_fail (dot_size, -1); data = (GtkDataboxData *) g_list_nth_data (box->data, index); g_return_val_if_fail (data, -1); *type = data->type; *dot_size = data->size; return 0; } gint gtk_databox_data_set_type (GtkDatabox * box, gint index, GtkDataboxDataType type, guint dot_size) { GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); data = (GtkDataboxData *) g_list_nth_data (box->data, index); g_return_val_if_fail (data, -1); if (data->flags & (1 << GTK_DATABOX_DATA_HAS_GC)) { g_object_unref (data->gc); data->flags &= ~(1 << GTK_DATABOX_DATA_HAS_GC); } switch (type) { case GTK_DATABOX_NOT_DISPLAYED: data->draw = GTK_DATABOX_DRAW_FUNC (NULL); break; case GTK_DATABOX_POINTS: data->draw = GTK_DATABOX_DRAW_FUNC (gtk_databox_draw_points); break; case GTK_DATABOX_LINES: data->draw = GTK_DATABOX_DRAW_FUNC (gtk_databox_draw_lines); break; case GTK_DATABOX_BARS: data->draw = GTK_DATABOX_DRAW_FUNC (gtk_databox_draw_bars); break; case GTK_DATABOX_CROSS_SIMPLE: data->draw = GTK_DATABOX_DRAW_FUNC (gtk_databox_draw_cross_simple); break; case GTK_DATABOX_GRID: data->draw = GTK_DATABOX_DRAW_FUNC (gtk_databox_draw_grid); break; default: data->draw = GTK_DATABOX_DRAW_FUNC (NULL); } data->type = type; data->size = dot_size; return 0; } gint gtk_databox_data_set_color (GtkDatabox * box, gint index, GdkColor color) { GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); data = (GtkDataboxData *) g_list_nth_data (box->data, index); g_return_val_if_fail (data, -1); if (data->flags & (1 << GTK_DATABOX_DATA_HAS_GC)) { g_object_unref (data->gc); data->flags &= ~(1 << GTK_DATABOX_DATA_HAS_GC); } data->color = color; return 0; } gint gtk_databox_data_get_grid_config (GtkDatabox * box, gint index, guint * hlines, guint * vlines) { GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); data = (GtkDataboxData *) g_list_nth_data (box->data, index); g_return_val_if_fail (data, -1); *hlines = data->hlines; *vlines = data->vlines; return 0; } gint gtk_databox_data_set_grid_config (GtkDatabox * box, gint index, guint hlines, guint vlines) { GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); data = (GtkDataboxData *) g_list_nth_data (box->data, index); g_return_val_if_fail (data, -1); data->hlines = hlines; data->vlines = vlines; return 0; } static void gtk_databox_new_data_gc (GtkWidget * widget, GtkDatabox * box, GtkDataboxData * data) { GdkGCValues values; gboolean color_allocate_success; GdkColormap *colormap = NULL; g_return_if_fail (GTK_IS_DATABOX (box)); g_return_if_fail (GTK_IS_WIDGET (widget)); g_return_if_fail (data); colormap = gtk_widget_get_colormap (widget); g_return_if_fail (colormap); color_allocate_success = gdk_colormap_alloc_color (colormap, &data->color, FALSE, TRUE); /* FIXME We should add a message here ... */ g_return_if_fail (color_allocate_success); values.foreground = data->color; values.function = GDK_COPY; values.line_width = data->size; if (data->type == GTK_DATABOX_GRID) { values.line_style = GDK_LINE_ON_OFF_DASH; values.cap_style = GDK_CAP_BUTT; values.join_style = GDK_JOIN_MITER; } else { values.line_style = GDK_LINE_SOLID; values.cap_style = GDK_CAP_BUTT; values.join_style = GDK_JOIN_MITER; } data->gc = gdk_gc_new_with_values (widget->window, &values, GDK_GC_FUNCTION | GDK_GC_FOREGROUND | GDK_GC_LINE_WIDTH | GDK_GC_LINE_STYLE | GDK_GC_CAP_STYLE | GDK_GC_JOIN_STYLE); data->flags |= 1 << GTK_DATABOX_DATA_HAS_GC; } static void gtk_databox_draw (GtkWidget * widget, GtkDatabox * box, GdkEventExpose * event) { GList *list = NULL; GtkDataboxData *data = NULL; box->flags &= ~(1 << GTK_DATABOX_REDRAW_REQUEST); g_return_if_fail (GTK_IS_DATABOX (box)); if (!GTK_WIDGET_VISIBLE (widget)) return; gdk_draw_rectangle (box->pixmap, widget->style->bg_gc[0], TRUE, 0, 0, box->size.x, box->size.y); if (!box->data || !box->max_points) return; /* Draw last data set first so first is on top */ list = g_list_last (box->data); if (list) data = (GtkDataboxData *) list->data; else data = NULL; while (data) { if (!data->gc || !(data->flags & (1 << GTK_DATABOX_DATA_HAS_GC))) { gtk_databox_new_data_gc (widget, box, data); } if (data->length && data->draw) { data->draw (box, data); } list = g_list_previous (list); if (list) data = (GtkDataboxData *) list->data; else data = NULL; } if (box->selection_flag) { gtk_databox_draw_selection (widget, box, NULL); } return; } static void gtk_databox_draw_points (GtkDatabox * box, GtkDataboxData * data) { gint i = 0; gint count = 0; for (i = 0; i < data->length; i++) { box->points[i].x = (gint16) ((data->X[i] - box->top_left.x) * box->factor.x); box->points[i].y = (gint16) ((data->Y[i] - box->top_left.y) * box->factor.y); } count = data->length; if (data->size < 2) { /* More than 2^16 points will cause X IO error on most XServers (Hint from Paul Barton-Davis ) */ for (i = 0; i < count; i += 65536) { gdk_draw_points (box->pixmap, data->gc, box->points + i, MIN (65536, count - i)); } } else { for (i = 0; i < count; i++) { /* Why on earth is there no gdk_draw_rectangles?? */ gdk_draw_rectangle (box->pixmap, data->gc, TRUE, box->points[i].x - data->size / 2, box->points[i].y - data->size / 2, data->size, data->size); } } } static void gtk_databox_draw_lines (GtkDatabox * box, GtkDataboxData * data) { gint i; for (i = 0; i < data->length; i++) { box->points[i].x = (gint16) ((data->X[i] - box->top_left.x) * box->factor.x); box->points[i].y = (gint16) ((data->Y[i] - box->top_left.y) * box->factor.y); } /* More than 2^16 points will cause X IO error on most XServers (Hint from Paul Barton-Davis ) */ for (i = 0; i < data->length; i += 65535) { gdk_draw_lines (box->pixmap, data->gc, box->points + i, MIN (65536, data->length - i)); } } static void gtk_databox_draw_bars (GtkDatabox * box, GtkDataboxData * data) { gint i = 0; gint count = 0; GdkSegment *segments = (GdkSegment *) box->points; gfloat axis = 0; axis = ((0 - box->top_left.y) * box->factor.y); for (i = 0; i < data->length; i++) { segments[i].x1 = segments[i].x2 = (gint16) ((data->X[i] - box->top_left.x) * box->factor.x); segments[i].y1 = axis; segments[i].y2 = (gint16) ((data->Y[i] - box->top_left.y) * box->factor.y); } count = data->length; for (i = 0; i < count; i += 65536) { gdk_draw_segments (box->pixmap, data->gc, segments, MIN (65536, count - i)); } } static void gtk_databox_draw_cross_simple (GtkDatabox * box, GtkDataboxData * data) { gint x = 0; gint y = 0; gboolean xflag = FALSE; gboolean yflag = FALSE; if (0 >= box->top_left.x && 0 < box->bottom_right.x) { x = (0 - box->top_left.x) * box->factor.x; if (x >= CROSS_BORDER && x < box->size.x - CROSS_BORDER) { gdk_draw_line (box->pixmap, data->gc, x, CROSS_BORDER, x, box->size.y - CROSS_BORDER); xflag = TRUE; } } if (0 <= box->top_left.y && 0 > box->bottom_right.y) { y = (0 - box->top_left.y) * box->factor.y; if (y >= CROSS_BORDER && y < box->size.y - CROSS_BORDER) { gdk_draw_line (box->pixmap, data->gc, CROSS_BORDER, y, box->size.x - CROSS_BORDER, y); yflag = TRUE; } } } static void gtk_databox_draw_grid (GtkDatabox * box, GtkDataboxData * data) { gint x = 0; gint y = 0; gint i = 0; guint v_lines = data->vlines; guint h_lines = data->hlines; for (i = 0; i < v_lines; i++) { x = box->min.x + (i + 1) * (box->max.x - box->min.x) / (v_lines + 1); x = (gint16) ((x - box->top_left.x) * box->factor.x); gdk_draw_line (box->pixmap, data->gc, x, 0, x, box->size.y); } for (i = 0; i < h_lines; i++) { y = box->min.y + (i + 1) * (box->max.y - box->min.y) / (v_lines + 1); y = (gint16) ((y - box->top_left.y) * box->factor.y); gdk_draw_line (box->pixmap, data->gc, 0, y, box->size.x, y); } } gint gtk_databox_data_add_x_y (GtkDatabox * box, guint length, gfloat * X, gfloat * Y, GdkColor color, GtkDataboxDataType type, guint dot_size) { GtkDataboxData *data; guint index; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); g_return_val_if_fail (X, -1); g_return_val_if_fail (Y, -1); g_return_val_if_fail (length, -1); box->max_points = MAX (length, box->max_points); if (box->max_points) { /* We need twice as many GdkPoints, because draw bars uses segments * and one segment equals two points. */ box->points = (GdkPoint *) g_realloc (box->points, sizeof (GdkPoint) * box->max_points * 2); } data = g_new0 (GtkDataboxData, 1); data->X = X; data->Y = Y; data->length = length; data->flags = 0; data->gc = NULL; box->data = g_list_append (box->data, data); index = g_list_length (box->data) - 1; gtk_databox_data_set_type (box, index, type, dot_size); gtk_databox_data_set_color (box, index, color); return index; } gint gtk_databox_data_add_x (GtkDatabox * box, guint length, gfloat * X, gint shared_Y_index, GdkColor color, GtkDataboxDataType type, guint dot_size) { GtkDataboxData *data; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); g_return_val_if_fail (X, -1); data = (GtkDataboxData *) g_list_nth_data (box->data, shared_Y_index); g_return_val_if_fail (data, -1); g_return_val_if_fail (data->length == length, -1); return gtk_databox_data_add_x_y (box, length, X, data->Y, color, type, dot_size); } gint gtk_databox_data_add_y (GtkDatabox * box, guint length, gfloat * Y, gint shared_X_index, GdkColor color, GtkDataboxDataType type, guint dot_size) { GtkDataboxData *data; g_return_val_if_fail (GTK_IS_DATABOX (box), -1); g_return_val_if_fail (Y, -1); data = (GtkDataboxData *) g_list_nth_data (box->data, shared_X_index); g_return_val_if_fail (data, -1); g_return_val_if_fail (data->length == length, -1); return gtk_databox_data_add_x_y (box, length, data->X, Y, color, type, dot_size); } static gint gtk_databox_check_x_links (GList * list, gfloat * values) { GtkDataboxData *data; gint counter = 0; if (list) data = (GtkDataboxData *) list->data; else return 0; while (data) { if (data->X == values) counter++; list = g_list_next (list); if (list) data = (GtkDataboxData *) list->data; else data = NULL; } return counter; } static gint gtk_databox_check_y_links (GList * list, gfloat * values) { GtkDataboxData *data; gint counter = 0; if (list) data = (GtkDataboxData *) list->data; else return 0; while (data) { if (data->Y == values) counter++; list = g_list_next (list); if (list) data = (GtkDataboxData *) list->data; else data = NULL; } return counter; } static void gtk_databox_destroy_data (GtkDatabox * box, GtkDataboxData * data, GList * list, gboolean free_flag) { GdkColormap *colormap; if (free_flag && gtk_databox_check_x_links (box->data, data->X) == 1) { g_free (data->X); } if (free_flag && gtk_databox_check_y_links (box->data, data->Y) == 1) { g_free (data->Y); } if (data->flags & (1 << GTK_DATABOX_DATA_HAS_GC)) { colormap = gtk_widget_get_colormap (box->draw); gdk_colormap_free_colors (colormap, &data->color, 1); } if (data->gc) g_object_unref (data->gc); g_free (data); } gint gtk_databox_data_destroy_all_with_flag (GtkDatabox * box, gboolean free_flag) { GList *list = NULL; GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), 0); if (!box->data) return 0; list = box->data; if (list) data = (GtkDataboxData *) list->data; else data = NULL; while (data) { gtk_databox_destroy_data (box, data, list, free_flag); list = g_list_next (list); if (list) data = (GtkDataboxData *) list->data; else data = NULL; } g_list_free (box->data); box->data = NULL; box->max_points = 0; g_free (box->points); box->points = NULL; return 0; } gint gtk_databox_data_destroy_with_flag (GtkDatabox * box, gint index, gboolean free_flag) { GList *list = NULL; GtkDataboxData *data = NULL; g_return_val_if_fail (GTK_IS_DATABOX (box), 0); if (!box->data) return -1; list = g_list_nth (box->data, index); if (list) data = (GtkDataboxData *) list->data; else return -1; gtk_databox_destroy_data (box, data, list, free_flag); box->data = g_list_remove_link (box->data, list); g_list_free_1 (list); return 0; } gint gtk_databox_data_remove_all (GtkDatabox * box) { return gtk_databox_data_destroy_all_with_flag (box, FALSE); } gint gtk_databox_data_remove (GtkDatabox * box, gint index) { return gtk_databox_data_destroy_with_flag (box, index, FALSE); } gint gtk_databox_data_destroy_all (GtkDatabox * box) { return gtk_databox_data_destroy_all_with_flag (box, TRUE); } gint gtk_databox_data_destroy (GtkDatabox * box, gint index) { return gtk_databox_data_destroy_with_flag (box, index, TRUE); } vdk-2.4.0/vdk/gtkdataboxmarshal.c0000644000000000000000000000775607614021064012377 #include #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #define g_marshal_value_peek_char(v) g_value_get_char (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) #define g_marshal_value_peek_long(v) g_value_get_long (v) #define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) #define g_marshal_value_peek_int64(v) g_value_get_int64 (v) #define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) #define g_marshal_value_peek_enum(v) g_value_get_enum (v) #define g_marshal_value_peek_flags(v) g_value_get_flags (v) #define g_marshal_value_peek_float(v) g_value_get_float (v) #define g_marshal_value_peek_double(v) g_value_get_double (v) #define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) #define g_marshal_value_peek_param(v) g_value_get_param (v) #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the * g_value_get_*() functions */ #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #define g_marshal_value_peek_char(v) (v)->data[0].v_int #define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint #define g_marshal_value_peek_int(v) (v)->data[0].v_int #define g_marshal_value_peek_uint(v) (v)->data[0].v_uint #define g_marshal_value_peek_long(v) (v)->data[0].v_long #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 #define g_marshal_value_peek_enum(v) (v)->data[0].v_int #define g_marshal_value_peek_flags(v) (v)->data[0].v_uint #define g_marshal_value_peek_float(v) (v)->data[0].v_float #define g_marshal_value_peek_double(v) (v)->data[0].v_double #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer #define g_marshal_value_peek_param(v) (v)->data[0].v_pointer #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ /* VOID:VOID (/dev/stdin:1) */ /* VOID:POINTER (/dev/stdin:2) */ /* VOID:POINTER,POINTER (/dev/stdin:3) */ void gtk_databox_marshal_VOID__POINTER_POINTER (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__POINTER_POINTER) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_VOID__POINTER_POINTER callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__POINTER_POINTER) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_pointer (param_values + 1), g_marshal_value_peek_pointer (param_values + 2), data2); } vdk-2.4.0/vdk/abstract_button.cc0000644000000000000000000000523607446637257012253 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/abstract_button.h" #include "vdk/forms.h" #include "vdk/colors.h" VDKAbstractButton::VDKAbstractButton(VDKForm* owner): VDKObject(owner), Relief("Relief", this, GTK_RELIEF_NORMAL, &VDKAbstractButton::SetRelief, &VDKAbstractButton::GetRelief) { s_clicked.obj = this; s_clicked.signal = clicked_signal; s_enter.obj = this; s_enter.signal = enter_signal; s_leave.obj = this; s_leave.signal = leave_signal; s_toggled.obj = this; s_toggled.signal = toggled_signal; } VDKAbstractButton::~VDKAbstractButton() { } #ifdef USE_SIGCPLUSPLUS void VDKAbstractButton::make_gtksigc_connection(VDKAbstractButton* obj, GtkWidget* wid) { gtk_signal_connect(GTK_OBJECT(wid), "clicked", GTK_SIGNAL_FUNC(VDKAbstractButton::_handle_clicked), reinterpret_cast(obj)); gtk_signal_connect(GTK_OBJECT(wid), "pressed", GTK_SIGNAL_FUNC(VDKAbstractButton::_handle_pressed), reinterpret_cast(obj)); gtk_signal_connect(GTK_OBJECT(wid), "leave", GTK_SIGNAL_FUNC(VDKAbstractButton::_handle_leave), reinterpret_cast(obj)); } // will be redone using a template ... soon void VDKAbstractButton::_handle_clicked(GtkWidget* wid, gpointer gp) { VDKAbstractButton* obj=reinterpret_cast(gp); obj->OnButtonClicked(obj); } void VDKAbstractButton::_handle_pressed(GtkWidget* wid, gpointer gp) { VDKAbstractButton* obj=reinterpret_cast(gp); obj->OnButtonPressed(obj); } void VDKAbstractButton::_handle_leave(GtkWidget* wid, gpointer gp) { VDKAbstractButton* obj=reinterpret_cast(gp); obj->OnButtonLeave(obj); } #endif /* USE_SIGCPLUSPLUS */ vdk-2.4.0/vdk/application.cc0000755000000000000000000001035010022076577011336 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/application.h" #include "vdk/forms.h" #include "vdk/vdkfeatures.h" #include #include #include #ifdef VDKDEBUG extern int objectC,objectD,formC,formD,childRemoved,objRemoved; #endif //static char buff[128]; /* at idle callback: execute garbage collection */ int VDKApplication::GcCallback(gpointer app) { g_return_val_if_fail(app != NULL , FALSE); VDKApplication* theApp = reinterpret_cast((VDKApplication*) app); g_return_val_if_fail(theApp != NULL,FALSE); if (theApp->MainForm) theApp->MainForm->CollectGarbage(); return TRUE; } /* constructor executing: -rc will result in rc file loading and parsing */ VDKApplication::VDKApplication(int* argc, char** argv, char* rcf, bool have_locale) { // load rc file if(rcf) rcfile = rcf; if( ! rcfile.isNull() && ! access((char*) rcfile,F_OK) ) gtk_rc_add_default_file ((char*) rcfile); if(have_locale) { #ifdef VDKDEBUG char* i18n = NULL; i18n = gtk_set_locale(); printf("\nLocale set to: %s",i18n ? i18n : "none"); fflush(stdout); #else gtk_set_locale(); #endif } gtk_init (argc, &argv); #ifdef VDKDEBUG int depth = gdk_visual_get_best_depth(); printf("\nbpp:%d",depth); fflush(stdout); #endif // gdk_rgb_init (); deprecated in GDK 2.0 MainForm = NULL; idleTag = gcTag = 0; } /* destructor: delete main form that in turn deletes all childs and all objects */ VDKApplication::~VDKApplication() { if(MainForm) delete MainForm; #ifdef VDKDEBUG printf("\nobjects constructed:%d\nobjects destroyed:%d",objectC,objectD); printf("\nforms constructed:%d\nforms destroyed:%d",formC,formD); printf("\nchilds removed:%d\nobjs removed:%d\n\n", childRemoved, objRemoved); fflush(stdout); #endif } /* runs app: calls: Setup() thet should be overridden by user initiates event loop */ void VDKApplication::Run(void) { Setup(); g_return_if_fail(MainForm != NULL); gtk_main(); } /* call it before Run() */ void VDKApplication::SetResourceFile(char* rcf) { gtk_rc_parse (rcf); } /* set idle call back */ void VDKApplication::SetIdleCallback(GtkFunction idlecb, gpointer data) { if( (idlecb == NULL) || (data == NULL) ) { if(idleTag) gtk_idle_remove(idleTag); return; } else if(idleTag) gtk_idle_remove(idleTag); idleTag = gtk_idle_add(idlecb , data); } /* set garbage collection */ void VDKApplication::SetGarbageCollection(unsigned int tick) { gcTag = gtk_timeout_add(tick,(GtkFunction) VDKApplication::GcCallback, reinterpret_cast(this)); } /* */ void VDKApplication::RemoveGarbageCollection() { if(gcTag) gtk_timeout_remove(gcTag); } /* quit application */ void VDKApplication::Terminate(void) { MainForm->CloseChilds(); gtk_main_quit (); } /* */ GtkWidget* VDKApplication::MainWindow() { return MainForm->Window(); } /* new version in msgdialog.cc */ /* gint VDKApplication::MessageBox(char* caption, char* text, int mode, char *oktext, char *canceltext, unsigned int wait) { int answer; if(MainForm) { MessageBoxWindow* dialog = new MessageBoxWindow(MainForm, caption, text, mode, oktext, canceltext, &answer, wait); dialog->Setup(); dialog->ShowModal(GTK_WIN_POS_CENTER); } return answer; } */ vdk-2.4.0/vdk/boxes.cc0000644000000000000000000000342707446637257010175 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/boxes.h" #include "vdk/forms.h" VDKBox::VDKBox(VDKForm* owner,int mode) :VDKObjectContainer(owner) { switch(mode) { case v_box: widget = gtk_vbox_new(FALSE,0); break; case h_box: widget = gtk_hbox_new(FALSE,0); break; default: widget = gtk_vbox_new(FALSE,0); } } VDKBox::~VDKBox() { } void VDKBox::Add(VDKObject* obj, int justify, int expand, int fill , int padding) { switch(justify) { case l_justify: gtk_box_pack_start(GTK_BOX(widget), obj->Widget(),expand,fill,padding); break; case r_justify: gtk_box_pack_end(GTK_BOX(widget), obj->Widget(),expand,fill,padding); break; default: gtk_box_pack_start(GTK_BOX(widget), obj->Widget(),expand,fill,padding); } // calls ancestor (B.Liskov docet...) VDKObjectContainer::Add(obj,0,0,0,0); } vdk-2.4.0/vdk/button.cc0000644000000000000000000000600707446637260010357 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/button.h" #include "vdk/colors.h" static char * small_tick_xpm[] = { "22 22 4 1", " c None", ". c #000000000000", "X c #820782078207", "o c #FFFFFFFFFFFF", " ", " ", " ", " ", " ", " .X. ", " XoX. ", " XoX. ", " XoX. ", " X XoX. ", " XoX Xo.. ", " Xo X.o X. ", " .X o .. ", " ..X X. ", " ..X X. ", " ..X X. ", " ..X. ", " ... ", " . ", " ", " ", " "}; #include VDKButton::VDKButton(VDKForm* owner,char* tipString): VDKAbstractButton(owner) { def_pixmap = NULL; widget = gtk_button_new(); box = gtk_hbox_new(FALSE,0); gtk_container_border_width(GTK_CONTAINER(box),0); if(tipString) tip = new VDKTooltip(owner,this,tipString); else tip = NULL; gtk_signal_connect(GTK_OBJECT(widget),"clicked", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_clicked); gtk_signal_connect(GTK_OBJECT(widget),"enter", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_enter); gtk_signal_connect(GTK_OBJECT(widget),"leave", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_leave); ConnectDefaultSignals(); #ifdef USE_SIGCPLUSPLUS make_gtksigc_connection(this, widget); #endif // USE_SIGCPLUSPLUS } void VDKButton::_add_default() { GdkBitmap *mask; GtkStyle* style = gtk_widget_get_style(Owner()->Window()); def_pixmap = gdk_pixmap_create_from_xpm_d(Owner()->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], small_tick_xpm); GtkWidget* pixmapWidget = gtk_pixmap_new(def_pixmap,mask); gtk_box_pack_start(GTK_BOX(box),pixmapWidget,FALSE,FALSE,1); gtk_widget_show(pixmapWidget); GTK_WIDGET_SET_FLAGS(Widget(),GTK_CAN_DEFAULT); gtk_widget_grab_default(Widget()); } vdk-2.4.0/vdk/canvas.cc0000644000000000000000000003364707472653047010331 /* * =========================== * VDK Visual Development Kit * Version 0.6.1 * May 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * Modified by Tamas Kohegyi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/canvas.h" #include "vdk/forms.h" #include "vdk/rawpixmap.h" #include /* * Recreates the buffered pixmap */ void VDKCanvas::Reset() { if(pixmap) gdk_pixmap_unref(pixmap); pixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); if(gc) gdk_gc_destroy(gc); gc = gdk_gc_new(pixmap); return; } /* * This function called when the VDKCanvas resized, this means that the size of the * buffered pixmap is incorrect, so we have to recreate it, and the Programmer should * redraw its content in his/her ConfigureEvent function. Except if EnableClear is true * but it may cause flashes... */ int VDKCanvas::ConfigureEvent(GtkWidget* , GdkEventConfigure* , void* o) { g_return_val_if_fail(o != NULL, FALSE); VDKCanvas* canvas = reinterpret_cast(o); canvas->Reset(); if (canvas->EnableClear) canvas->DrawBackground(); return FALSE;// TRUE; } /* * This internal function caled by the Configure Event if the EnableClear is true * It clears the drawing area, and shows it on the screen. */ void VDKCanvas::DrawBackground() { Clear(); gtk_widget_draw(widget,NULL); } /* * This function fills the canvas area with the background color. */ void VDKCanvas::Clear() { gdk_draw_rectangle(pixmap, // gc ? gc : widget->style->bg_gc[GTK_WIDGET_STATE(widget)], widget->style-> bg_gc[GTK_WIDGET_STATE(widget)], TRUE, 0, 0, widget->allocation.width, widget->allocation.height); } /* * This function called, when the canvas got an expose event, and takes care * about the refresh. The Programmer may not use this event, because of the * buffered pixmap. */ int VDKCanvas::ExposeEvent(GtkWidget* w , GdkEventExpose* event, void* o) { g_return_val_if_fail(o != NULL,FALSE); g_return_val_if_fail(w != NULL,FALSE); VDKCanvas* canvas = reinterpret_cast(o); // avoid to redrawing in case of // setting canvas foreg, backg or font if(canvas->setFg) { canvas->setFg = false; return FALSE; //TRUE; } if(canvas->setBg) { canvas->setBg = false; return FALSE; // TRUE; } gdk_draw_pixmap(canvas->widget->window, canvas->gc ? canvas->gc : //canvas->widget ->style->bg_gc[GTK_WIDGET_STATE(canvas->widget)], canvas->widget->style-> bg_gc[GTK_WIDGET_STATE(canvas->widget)], canvas->pixmap, event->area.x,event->area.y, event->area.x,event->area.y, event->area.width, event->area.height); return FALSE; // TRUE; } /* * This function copies the buffered pixmap into the screen. * Call it, when you finished the drawing on the canvas, * and You would like to show it on the screen. */ void VDKCanvas::Redraw() { if(pixmap) gdk_draw_pixmap(widget->window, //gc ? gc : widget->style->bg_gc[GTK_WIDGET_STATE(widget)], widget->style->bg_gc[GTK_WIDGET_STATE(widget)], pixmap, 0, 0, 0, 0, widget->allocation.width, widget->allocation.height); return; } /* int VDKCanvas::MotionNotifyEvent(GtkWidget *w, GdkEventMotion* event, void* o) { int x, y; g_return_val_if_fail(o != NULL, FALSE); g_return_val_if_fail(w != NULL, FALSE); VDKCanvas* obj = reinterpret_cast(o); GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &x, &y, &state); if ( obj->Captured == false ) // checks where the cursor is if( x < 0 || y < 0 || x > w->allocation.width || y > w->allocation.height ) return FALSE; //TRUE; if(obj->startdragFlag && obj->EnableDrag) { obj->startdragFlag = false; GdkEventMotion *motionEv = new GdkEventMotion; *motionEv = *event; motionEv->x = x; motionEv->y = y; motionEv->state = state; motionEv->type = (GdkEventType) drag_start_event; obj->VDKObject::VDKEventPipe(w, (GdkEvent*) motionEv , o); delete motionEv; } else if(event->state ) // && (GDK_BUTTON1_MASK || GDK_BUTTON2_MASK || GDK_BUTTON3_MASK) && obj->EnableDrag ) { GdkEventMotion *motionEv = new GdkEventMotion; *motionEv = *event; motionEv->x = x; motionEv->y = y; motionEv->state = state; motionEv->type = (GdkEventType) dragging_event; obj->VDKObject::VDKEventPipe(w, (GdkEvent*) motionEv , o); delete motionEv; } else { obj->dragFlag = false; obj->VDKObject::VDKEventPipe(w, (GdkEvent*) event , o); } return FALSE; //TRUE; } */ /* int VDKCanvas::ButtonPressEvent(GtkWidget* w, GdkEventButton* event, void* o) { g_return_val_if_fail(o != NULL, FALSE); g_return_val_if_fail(w != NULL, FALSE); VDKCanvas* obj = reinterpret_cast(o); if (obj->EnableDrag) obj->dragFlag = obj->startdragFlag = true; obj->VDKObject::VDKEventPipe(w, (GdkEvent*) event , o); return FALSE; // TRUE; } */ /* int VDKCanvas::ButtonReleaseEvent(GtkWidget *w , GdkEventButton* event, void* o) { g_return_val_if_fail(o != NULL, FALSE); g_return_val_if_fail(w != NULL, FALSE); VDKCanvas* obj = reinterpret_cast(o); if(obj->dragFlag && ! obj->startdragFlag) { obj->dragFlag = false; GdkEventButton *buttonEv = new GdkEventButton; *buttonEv = *event; buttonEv->type = (GdkEventType) drag_stop_event; obj->VDKObject::VDKEventPipe(w, (GdkEvent*) buttonEv , o); delete buttonEv; } obj->startdragFlag = false; obj->VDKObject::VDKEventPipe(w, (GdkEvent*) event , o); return FALSE; // TRUE; } */ /* */ VDKCanvas::VDKCanvas(VDKForm* owner,int w, int h): VDKObject(owner), // Captured("Captured",this,false), // EnableDrag("EnableDrag",this,true), EnableClear("EnableClear",this,true) { setFg = false; setBg = false; setF = false; canvasFont = NULL; pixmap = NULL; // dragFlag = false; // startdragFlag = false; gc = NULL; widget = gtk_drawing_area_new(); gtk_drawing_area_size(GTK_DRAWING_AREA(widget),w,h); // gtk_widget_add_events(widget,GDK_ALL_EVENTS_MASK); gtk_widget_add_events(widget, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | // GDK_POINTER_MOTION_HINT_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); gtk_signal_connect (GTK_OBJECT (widget), "configure_event", GTK_SIGNAL_FUNC(VDKCanvas::ConfigureEvent),this); /* gtk_signal_connect (GTK_OBJECT (widget), "configure_event", GTK_SIGNAL_FUNC(VDKObject::VDKEventPipe),this); */ gtk_signal_connect (GTK_OBJECT (widget), "expose_event", GTK_SIGNAL_FUNC(VDKCanvas::ExposeEvent),this); /* gtk_signal_connect (GTK_OBJECT (widget), "expose_event", GTK_SIGNAL_FUNC(VDKObject::VDKEventPipe),this); gtk_signal_connect (GTK_OBJECT (widget), "motion_notify_event", GTK_SIGNAL_FUNC(VDKCanvas::MotionNotifyEvent),this); gtk_signal_connect (GTK_OBJECT (widget), "button_press_event", GTK_SIGNAL_FUNC(VDKCanvas::ButtonPressEvent),this); // gtk_signal_connect (GTK_OBJECT (widget), "button_press_event", // GTK_SIGNAL_FUNC(VDKObject::VDKEventPipe),this); gtk_signal_connect (GTK_OBJECT (widget), "button_release_event", GTK_SIGNAL_FUNC(VDKCanvas::ButtonReleaseEvent),this); */ ConnectDefaultSignals(); } /* */ VDKCanvas::~VDKCanvas() { if(gc) gdk_gc_destroy(gc); } //=========================================================== extern void PixSize(int* width, int* height, char* filename); /* */ void VDKCanvas::DrawPixmap(int x, int y, char ** data) { DrawPixmap(x,y,new VDKRawPixmap(this,data)); } /* */ void VDKCanvas::DrawPixmap(int x, int y, char *pixfile) { DrawPixmap(x,y,new VDKRawPixmap(this,pixfile)); } /* */ void VDKCanvas::DrawPixmap(int x, int y, VDKRawPixmap* pix) { if(pixmap) if(pix) pix->Paint(false,pixmap,x,y); } /* */ void VDKCanvas::DrawString(int x, int y, char* text) { GdkFont* font = NULL; if(pixmap) { if(!canvasFont) { GtkStyle *style = gtk_widget_get_style(widget); font = style ? gtk_style_get_font(style) : NULL; } else font = canvasFont; if(font) gdk_draw_string(pixmap, font, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], x, y, text); } } /* */ void VDKCanvas::DrawText(int x, int y, char* text, int n) { GdkFont* font = NULL; if(pixmap) { if(!canvasFont) { GtkStyle *style = gtk_widget_get_style(widget); font = style ? gtk_style_get_font(style) : NULL; } else font = canvasFont; if(font) gdk_draw_text(pixmap, font, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], x, y, text, n); } } /* */ void VDKCanvas::DrawPoint(int x, int y) { if(pixmap) gdk_draw_point(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], x, y); } /* */ void VDKCanvas::DrawLine(int x, int y, int x1, int y1) { if(pixmap) gdk_draw_line(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], x,y,x1,y1); } /* */ void VDKCanvas::DrawRect(gint filled, int x, int y, int w, int h) { if(pixmap) gdk_draw_rectangle(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], filled, x,y,w,h); } /* */ void VDKCanvas::DrawArc(gint filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2) { if(pixmap) gdk_draw_arc(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], filled, x, y, width, height, angle1, angle2); } /* */ void VDKCanvas::DrawPolygon(gint filled, GdkPoint *points, gint npoints) { if(pixmap) gdk_draw_polygon(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], filled, points, npoints); } /* */ void VDKCanvas::DrawPoints(GdkPoint *points, gint npoints) { if(pixmap) gdk_draw_points(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], points, npoints); } /* */ void VDKCanvas::DrawSegments(GdkSegment *segs, gint nsegs) { if(pixmap) gdk_draw_segments(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], segs, nsegs); } /* */ void VDKCanvas::DrawLines(GdkPoint *points, gint npoints) { if(pixmap) gdk_draw_lines(pixmap, gc ? gc : widget->style->fg_gc[GTK_WIDGET_STATE(widget)], points, npoints); } /* */ void VDKCanvas::SetForeground(VDKRgb rgb, GtkStateType state) { setFg = true; if(Widget()->window) { GdkColor *color = (GdkColor*) malloc (sizeof (GdkColor)); GdkColormap *colormap = gdk_window_get_colormap (Widget()->window); color->red = rgb.red << 8; color->green = rgb.green << 8; color->blue = rgb.blue << 8; if (!gdk_color_alloc (colormap, color)) gdk_color_black (colormap, color); if(gc) gdk_gc_set_foreground(gc, color); else VDKObject::SetForeground(rgb, state); free(color); } else VDKObject::SetForeground(rgb, state); } void VDKCanvas::SetBackground(VDKRgb rgb, GtkStateType state) { // setBg = true; // if(Widget()->window) // { // GdkColor *color = (GdkColor*) malloc (sizeof (GdkColor)); // GdkColormap *colormap = gdk_window_get_colormap (Widget()->window); // color->red = rgb.red << 8; // color->green = rgb.green << 8; // color->blue = rgb.blue << 8; // if (!gdk_color_alloc (colormap, color)) // gdk_color_black (colormap, color); // if(gc) // gdk_gc_set_background(gc, color); // else // VDKObject::SetBackground(rgb, state); // free(color); // } // else VDKObject::SetBackground(rgb, state); } void VDKCanvas::SetFont(VDKFont* f) { setF = true; canvasFont = f->AsGdkFont(); // VDKObject::SetFont(f); /* GtkStyle *style = gtk_widget_get_style (widget); g_return_if_fail (style != NULL); GdkFont* font = f->AsGdkFont(); g_return_if_fail (font != NULL); gtk_style_set_font (style, font); */ } /* this works only on gtk 1.2.5 or greater, replace above version when prev gtk releases will be obsolete. */ /* void VDKCanvas::SetBackground(VDKRgb rgb, GtkStateType state = GTK_STATE_NORMAL) { VDKColor *color = new VDKColor(Owner() ? Owner() : this , rgb.red,rgb.green,rgb.blue); GtkStyle* style = widget->style; g_return_if_fail(style != NULL); style = gtk_style_copy(gtk_widget_get_style(widget)); gtk_style_ref(style); style->bg[state] = *(color->Color()); gtk_widget_set_style(widget,style); } */ vdk-2.4.0/vdk/checkbutton.cc0000644000000000000000000000744707446637260011366 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/checkbutton.h" #include "vdk/forms.h" #include "vdk/tooltips.h" #include "vdk/colors.h" /* should be investigated more since seems to be unuseless, perhaps this compiler is'nt full ANSI compliant */ /* template void vdk_cast(T** obj ,void* gp) { T* addr = reinterpret_cast(gp); *obj = dynamic_cast(addr); } */ void VDKCheckButton::ToggleEvent(GtkWidget *wid, gpointer gp) { g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKCheckButton* obj = reinterpret_cast(gp); obj->Checked(GTK_TOGGLE_BUTTON(wid)->active ? true : false); obj->SignalEmit(toggled_signal); #ifdef USE_SIGCPLUSPLUS obj->OnButtonToggled(obj, GTK_TOGGLE_BUTTON(wid)->active ? true : false); #endif /* USE_SIGCPLUSPLUS */ } VDKCheckButton::VDKCheckButton(VDKForm* owner, char* label, char* tip): VDKAbstractButton(owner), Checked ("Checked", this, false, &VDKCheckButton::SetChecked, &VDKCheckButton::GetChecked), Caption ("Caption", this, label, &VDKCheckButton::SetCaption, &VDKCheckButton::GetCaption), CaptionWrap ("CaptionWrap", this, true, &VDKCheckButton::SetCaptionWrap, &VDKCheckButton::GetCaptionWrap) { if(label) widget = gtk_check_button_new_with_label(label); else widget = gtk_check_button_new (); connectId = gtk_signal_connect(GTK_OBJECT(widget),"toggled", GTK_SIGNAL_FUNC(VDKCheckButton::ToggleEvent), reinterpret_cast(this)); #ifdef USE_SIGCPLUSPLUS make_gtksigc_connection(this, widget); #endif /* USE_SIGCPLUSPLUS */ if (tip) tooltip = new VDKTooltip(owner, this, tip); else tooltip = 0; ConnectDefaultSignals(); } void VDKCheckButton::SetCaption(char* str) { gtk_label_set_text (GTK_LABEL(GTK_BIN(widget)->child),str); } char* VDKCheckButton::GetCaption () { return GTK_LABEL (GTK_BIN(widget)->child)->label; } void VDKCheckButton::SetCaptionWrap (bool flag) { gtk_label_set_line_wrap (GTK_LABEL (GTK_BIN(widget)->child), flag); } bool VDKCheckButton::GetCaptionWrap () { return GTK_LABEL (GTK_BIN(widget)->child)->wrap; } void VDKCheckButton::SetForeground(VDKRgb color, GtkStateType state) { VDKColor *vdkcolor = NULL; if(!GTK_IS_WIDGET(widget)) return; else { GtkButton* button = GTK_BUTTON(widget); GtkLabel* label = GTK_LABEL(GTK_BIN (button)->child); // vdkcolor = new VDKColor(/*Owner() ? Owner() : */this ,color); vdkcolor = new VDKColor(Owner() ? static_cast(Owner()) : static_cast(this) ,color); gtk_widget_modify_fg (GTK_WIDGET(label), state, vdkcolor->Color()); } } void VDKCheckButton::SetFont(VDKFont* font) { if(!GTK_IS_WIDGET(widget)) return; else { GtkButton* button = GTK_BUTTON(widget); GtkWidget* label = GTK_WIDGET(GTK_BIN (button)->child); VDKObject::_setFont_(label,font); } } vdk-2.4.0/vdk/colors.cc0000644000000000000000000000431207446637261010343 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/colors.h" #include VDKColor::VDKColor(VDKObject* obj, int red, int green, int blue): VDKRawObject(obj) { color = (GdkColor*) malloc (sizeof (GdkColor)); colormap = gdk_window_get_colormap (obj->Widget()->window); color->red = red << 8; color->green = green << 8; color->blue = blue << 8; if(! gdk_colormap_alloc_color (colormap, color, FALSE, TRUE)) gdk_color_black (colormap, color); } VDKColor::VDKColor(VDKObject* obj, VDKRgb rgb): VDKRawObject(obj) { color = (GdkColor*) malloc (sizeof (GdkColor)); colormap = gdk_window_get_colormap (obj->Widget()->window); color->red = rgb.red << 8; color->green = rgb.green << 8; color->blue = rgb.blue << 8; if(! gdk_colormap_alloc_color (colormap, color, FALSE, TRUE)) gdk_color_black (colormap, color); } VDKColor::VDKColor(VDKObject* obj, char* name): VDKRawObject(obj) { color = (GdkColor*) malloc (sizeof (GdkColor)); colormap = gdk_window_get_colormap (obj->Widget()->window); if( (!name) || (!gdk_color_parse(name, color)) || (! gdk_colormap_alloc_color (colormap, color, FALSE, TRUE)) ) gdk_color_black (colormap, color); } VDKColor::~VDKColor() { if(color) free(color); } vdk-2.4.0/vdk/entry.cc0000644000000000000000000002033410030604141010153 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/entry.h" #include "vdk/forms.h" #include "vdk/colors.h" #include static void EntryChanged(GtkWidget* wid, gpointer gp) { g_return_if_fail(wid != NULL); GtkEntry* entry = GTK_ENTRY(wid); VDKEntry* vdkentry = reinterpret_cast(gp); char* p = gtk_editable_get_chars (GTK_EDITABLE(entry), 0,-1); if(p) { #ifdef USE_SIGCPLUSPLUS vdkentry->Text.OnValueChanged.emit(vdkentry,vdkentry->GetText()); #endif vdkentry->SignalEmit(changed_signal); g_free(p); } } int VDKEntry::FocusOutEvent(GtkWidget *, GdkEventFocus*, gpointer wid) { g_return_val_if_fail(wid != NULL,FALSE); VDKEntry* obj = reinterpret_cast(wid); obj->SignalEmit(focus_out_signal); return FALSE;//TRUE; } /* */ int VDKEntry::FocusInEvent(GtkWidget *, GdkEventFocus *, gpointer wid) { g_return_val_if_fail(wid != NULL,FALSE); VDKEntry* obj = reinterpret_cast(wid); obj->SignalEmit(focus_in_signal); return FALSE;//TRUE; } /* */ VDKEntry::VDKEntry(VDKForm* owner, int maxLen, char* def): VDKObject(owner), Text("Text", this, NULL, &VDKEntry::SetText, &VDKEntry::GetText), Editable("Editable", this, true, &VDKEntry::SetEditable), Hidden("Hidden", this, false, &VDKEntry::SetHidden) { if(maxLen) widget = sigwid = gtk_entry_new_with_max_length(maxLen); else widget = sigwid = gtk_entry_new(); if(def) SetText(def); s_activated.obj = this; s_activated.signal = activate_signal; s_changed.obj = this; s_changed.signal = changed_signal; gtk_signal_connect(GTK_OBJECT(widget),"activate", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_activated); /* changeConnect = gtk_signal_connect(GTK_OBJECT(widget),"changed", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_changed); */ changeConnect = gtk_signal_connect(GTK_OBJECT(widget),"changed", GTK_SIGNAL_FUNC(::EntryChanged), (gpointer) this); gtk_signal_connect(GTK_OBJECT(widget), "focus_out_event", GTK_SIGNAL_FUNC(VDKEntry::FocusOutEvent), (gpointer) this); gtk_signal_connect(GTK_OBJECT(widget), "focus_in_event", GTK_SIGNAL_FUNC(VDKEntry::FocusInEvent), (gpointer) this); ConnectDefaultSignals(); } /* */ VDKEntry::~VDKEntry() { } /* */ void VDKEntry::SetText(char* s) { int len = std::strlen(s); if(len) { char* local = new char[len+1]; std::strcpy(local,s); if(!g_utf8_validate(local,-1,NULL)) g_locale_to_utf8(local,-1,NULL,NULL,NULL); gtk_entry_set_text(GTK_ENTRY(widget),local); delete[] local; } else gtk_entry_set_text(GTK_ENTRY(widget),""); } /* */ char* VDKEntry::GetText() { char* p = gtk_editable_get_chars (GTK_EDITABLE(WrappedWidget()), 0,-1); if(p) { buffer = p; g_free(p); } return (char*) buffer; } /* */ void VDKEntry::SetBackground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_base (widget, state, color->Color()); /* GtkStyle* style = gtk_style_copy(gtk_widget_get_style(widget)); g_return_if_fail(style != NULL); gtk_style_ref(style); style->base[state] = *(color->Color()); gtk_widget_set_style(widget,style); */ } /* */ void VDKEntry::SetForeground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_text (widget, state, color->Color()); /* GtkStyle* style = gtk_style_copy(gtk_widget_get_style(widget)); g_return_if_fail(style != NULL); gtk_style_ref(style); style->base[state] = *(color->Color()); gtk_widget_set_style(widget,style); */ } /* */ void VDKEntry::SetFont(VDKFont* font) { if(!GTK_WIDGET_REALIZED(WrappedWidget())) VDKObject::SetFont(font); else { GtkRcStyle *rc_style; rc_style = gtk_rc_style_new (); rc_style->font_desc = pango_font_description_copy (font->AsPangoFontDescription()); gtk_widget_modify_style (WrappedWidget(), rc_style); gtk_rc_style_unref (rc_style); gtk_widget_size_request (WrappedWidget(), NULL); } } // COMPLETION SUPPORT static GtkTreeModel * create_string_completion_model (char* completion_list[]); static gboolean match_func (GtkEntryCompletion *completion, const gchar *key, GtkTreeIter *iter, gpointer user_data); /* completion_list must be a NULL terminating string array; */ void VDKEntry::SetCompletion(char** completion_list) { // uses any previous model if any GtkEntryCompletion * completion = gtk_entry_get_completion (GTK_ENTRY (widget)); GtkTreeModel *completion_model = NULL; if(!completion) { /* Create the completion object */ completion = gtk_entry_completion_new (); /* Assign the completion to the entry */ gtk_entry_set_completion (GTK_ENTRY (widget), completion); g_object_unref (completion); } /* Create a tree model and use it as the completion model */ completion_model = create_string_completion_model (completion_list); gtk_entry_completion_set_model (completion, completion_model); g_object_unref (completion_model); /* Use model column 0 as the text column */ gtk_entry_completion_set_text_column (completion, 0); gtk_entry_completion_set_minimum_key_length (completion, 1); gtk_entry_completion_set_match_func (completion, match_func, NULL, NULL); return; } // void VDKEntry::AddCompletionItem(char* completion_item) { GtkEntryCompletion * completion = gtk_entry_get_completion (GTK_ENTRY (widget)); GtkListStore *store = NULL; if(completion) { GtkTreeIter iter; store = GTK_LIST_STORE (gtk_entry_completion_get_model (completion)); if(store) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, completion_item, -1); } } } // void VDKEntry::RemoveCompletionItem(char* completion_item) { GtkEntryCompletion * completion = gtk_entry_get_completion (GTK_ENTRY (widget)); GtkTreeModel *store = NULL; if(completion) { GtkTreeIter iter; store = gtk_entry_completion_get_model (completion); if(store) { gchar *item = NULL; for(bool flag = gtk_tree_model_get_iter_first(store,&iter); flag; flag = gtk_tree_model_iter_next(store,&iter)) { gtk_tree_model_get (store, &iter, 0, &item, -1); if(!strcmp(item,completion_item)) { gtk_list_store_remove (GTK_LIST_STORE(store),&iter); break; } } } } } /* ---------- SUPPORT --------- */ static gboolean match_func (GtkEntryCompletion *completion, const gchar *key, GtkTreeIter *iter, gpointer user_data) { gchar *item = NULL; GtkTreeModel *model; gboolean ret = FALSE; model = gtk_entry_completion_get_model (completion); gtk_tree_model_get (model, iter, 0, &item, -1); if (item != NULL) { if (strncmp (key, item, strlen (key)) == 0) ret = TRUE; g_free (item); } return ret; } GtkTreeModel * create_string_completion_model (char* completion_list[]) { GtkListStore *store; GtkTreeIter iter; store = gtk_list_store_new (1, G_TYPE_STRING); for(int t = 0; completion_list[t]; t++) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, completion_list[t], -1); } return GTK_TREE_MODEL (store); } vdk-2.4.0/vdk/filedlg.cc0000644000000000000000000000577307446637262010465 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/filedlg.h" #include DEFINE_SIGNAL_MAP(VDKFileSel,VDKForm) ON_SIGNAL(ok_button,clicked_signal,Ok), ON_SIGNAL(cancel_button,clicked_signal,Cancel) END_SIGNAL_MAP /* */ VDKFileSel::VDKFileSel(VDKForm* owner, char* selection, gchar* title): VDKForm(owner,title),selection(selection) { // can't destroy to avoid to call destroy handler // that try to delete form.. gtk_widget_unrealize(window); widget = sigwid = window = gtk_file_selection_new(title); // connect default signals SignalsConnect(); // makes dummies ok_button = new VDKObject(this, GTK_FILE_SELECTION(window)->ok_button); cancel_button = new VDKObject(this, GTK_FILE_SELECTION(window)->cancel_button); items.add(ok_button); items.add(cancel_button); cancel_button->Parent(this); ok_button->Parent(this); ok_s_clicked.obj = ok_button; ok_s_clicked.signal = clicked_signal; gtk_signal_connect(GTK_OBJECT(ok_button->Widget()),"clicked", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &(ok_s_clicked)); cancel_s_clicked.obj = cancel_button; cancel_s_clicked.signal = clicked_signal; gtk_signal_connect(GTK_OBJECT(cancel_button->Widget()),"clicked", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &(cancel_s_clicked)); if(*selection) { gtk_file_selection_set_filename(GTK_FILE_SELECTION(window),selection); *selection = '\0'; } } /* */ VDKFileSel::~VDKFileSel() { } /* FIX ME */ bool VDKFileSel::Ok(VDKObject*) { const char* filesel = gtk_file_selection_get_filename(GTK_FILE_SELECTION(window)); /* GtkFileSelection* filesel = GTK_FILE_SELECTION(window); GtkEntry* entry = GTK_ENTRY (filesel->selection_entry); const char* text = gtk_entry_get_text (entry); printf("\nfile selection:%s",gtk_file_selection_get_filename(GTK_FILE_SELECTION(window))); printf("\nfile selection:%s",text); fflush(stdout); */ if(filesel) std::strcpy(selection,filesel); Close(); return true; } /* */ bool VDKFileSel::Cancel(VDKObject*) { *selection = '\0'; Close(); return true; } vdk-2.4.0/vdk/fixed.cc0000644000000000000000000000313707446637263010147 /* * =========================== * VDK Visual Development Kit * Version 0.5 * December 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/fixed.h" #include "vdk/forms.h" VDKFixed::VDKFixed(VDKForm* owner) :VDKObjectContainer(owner) { widget = gtk_fixed_new(); } VDKFixed::~VDKFixed() { } void VDKFixed::Add(VDKObject* obj, int justify, int expand, int fill , int padding) { // here justify and exoand are used as x,y coordinates gtk_fixed_put( GTK_FIXED(widget), obj->Widget(), justify, expand ); // calls ancestor (B.Liskov docet...) VDKObjectContainer::Add(obj,0,0,0,0); } void VDKFixed::Put(VDKObject* obj, int x, int y) { gtk_fixed_put( GTK_FIXED(widget), obj->Widget(), x, y ); // calls ancestor (B.Liskov docet...) VDKObjectContainer::Add(obj,0,0,0,0); } vdk-2.4.0/vdk/forms.cc0000644000000000000000000005067107661517122010171 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/forms.h" #include "vdk/vdkobj.h" #include #include #include "vdk/colors.h" #include "vdk/vdkfont.h" #include "vdk/boxes.h" #include "vdk/rawpixmap.h" #include #include #include #if HAVE_GNOME #include #endif #ifdef VDKDEBUG int formC = 0; int formD = 0; int childRemoved = 0; int objRemoved = 0; #endif #define VERBOSE 0 /////////// ICONIFY STUFF ///////////// /* to test if ... */ static gboolean window_is_iconified (GdkWindow *window); /* to test if window is iconized */ gboolean window_is_iconified (GdkWindow *window) { XWindowAttributes xattr; XGetWindowAttributes(GDK_WINDOW_XDISPLAY(window), GDK_WINDOW_XWINDOW(window), &xattr); return (xattr.map_state == IsUnmapped); } /* */ bool VDKForm::GetIconized() { g_return_val_if_fail (window->window != NULL,false); return window_is_iconified(window->window); } /* */ void VDKForm::SetIconized(bool flag) { if(flag && ! GetIconized()) { gtk_window_iconify(GTK_WINDOW(window)); OnIconize(this); } else if (! flag && GetIconized()) { gtk_window_deiconify(GTK_WINDOW(window)); OnRestore(this); } } /* */ void VDKForm::OnIconize(VDKForm* sender) {} void VDKForm::OnRestore(VDKForm* sender) {} ///////////////////////////////////// /* Delete event handler. Checks if there are some modals open up to the hierarchy, in such case does not allow closure, otherwise call CanClose() */ int VDKForm::DeleteEvent(GtkWidget* , GdkEvent* , gpointer gp) { g_return_val_if_fail(gp != NULL,TRUE); VDKForm* form = reinterpret_cast(gp); if(!form->isModal) { bool doclose = !form->modalCount; VDKForm* own; for(own = form->Owner(); own; own = own->Owner()) { if(own->modalCount) { doclose = false; break; } } if(!doclose) return TRUE; } return form->CanClose() ? FALSE : TRUE; } /* Destroy event handler: - if the form is modal one,close it. - if the form is main form terminate app Closes recursively all childs, remove himself from owner list and notify his closure to owner. */ int VDKForm::DestroyEvent (GtkWidget*, gpointer gp) { g_return_val_if_fail(gp != NULL,FALSE); VDKForm* form = reinterpret_cast(gp); // in modal form stops inner event loop // and re-activates parent if(form->IsModal()) { form->Owner()->modalCount--; gtk_window_set_modal (GTK_WINDOW(form->Window()),FALSE); gtk_main_quit(); } // Only MainForm does not have parent, so closes application if(!form->Owner()) form->Application()->Terminate(); else { form->CloseChilds(); form->Owner()->RemoveChild(form); form->Owner()->OnChildClosing(form); } return TRUE; } /* */ //static int count = 0; int VDKForm::ConfigureEvent(GtkWidget* wid , GdkEventConfigure* ev , gpointer gp) { #if VERBOSE printf("\nOnConfigure"); fflush(stdout); #endif g_return_val_if_fail(gp != NULL,FALSE); g_return_val_if_fail(wid != NULL, FALSE); VDKForm* form = reinterpret_cast(gp); if (!GTK_WIDGET_VISIBLE(wid)) return FALSE; /* Can't get its size/pos */ VDKPoint p; if(form->never_showed) p = VDKPoint(wid->allocation.x,wid->allocation.y); else p = form->Position; // VDKPoint p = form->Position; VDKPoint s(ev->width,ev->height); if(form->never_showed) { form->never_showed = false; // sets form initial position form->_oldPos = p; form->Position(form->_oldPos); form->_oldSize = s; form->OnShow(form); } else if (p != form->_oldPos) { form->_oldPos = p; form->OnMove(form); } form->OnConfigure(form); return FALSE;// TRUE; } void VDKForm::SizeAllocateSignal(GtkWidget *widget, GtkAllocation *allocation, gpointer gp) { VDKForm* form = reinterpret_cast(gp); VDKPoint s(allocation->width,allocation->height); #if VERBOSE printf("\nVDKForm::SizeAllocateSignal()"); fflush(stdout); #endif if(s != form->_oldSize) { form->_oldSize = s; #if VERBOSE printf("\nold size(%d,%d) - new size(%d,%d)", form->_oldSize.x, form->_oldSize.y, s.x, s.y); fflush(stdout); #endif form->OnResize(form,s); } } /* */ int VDKForm::ExposeEvent(GtkWidget* , GdkEventExpose* ev, gpointer gp) { // handle only last expose event // TODO: check if it is a good strategy... g_return_val_if_fail(ev != NULL, FALSE); g_return_val_if_fail(gp != NULL, FALSE); if(ev->count == 0) { VDKForm* form = reinterpret_cast(gp); form->OnExpose(form, ev->area); } return FALSE; //TRUE; } /* */ void VDKForm::RealizeSignal(GtkWidget* , gpointer gp) { g_return_if_fail(gp != NULL); VDKForm* form = reinterpret_cast(gp); VDKPoint pos = form->Position; form->OnRealize(form); } int VDKForm::MapEvent(GtkWidget* , GdkEvent* ev ,gpointer gp) { g_return_val_if_fail(gp != NULL, FALSE); VDKForm* form = reinterpret_cast(gp); if( ! form->never_showed) form->OnRestore(form); return FALSE;// TRUE; } int VDKForm::UnmapEvent(GtkWidget* , GdkEvent* ev ,gpointer gp) { g_return_val_if_fail(gp != NULL, FALSE); VDKForm* form = reinterpret_cast(gp); form->OnIconize(form); return FALSE;// TRUE; } /* */ gboolean VDKForm::WindowStateEvent (GtkWidget *widget, GdkEventWindowState *event) { #if VERBOSE printf("\nWindowStateEvent - changed_masks:%d - new_state:%d", event->changed_mask,event->new_window_state); fflush(stdout); #endif return FALSE; } /* */ int VDKForm::FocusInEvent(GtkWidget* , GdkEvent* ev ,gpointer gp) { g_return_val_if_fail(gp != NULL, FALSE); VDKForm* form = reinterpret_cast(gp); form->OnFormActivate(form,true); return FALSE; //TRUE; } /* */ int VDKForm::FocusOutEvent(GtkWidget* , GdkEvent* ev ,gpointer gp) { g_return_val_if_fail(gp != NULL, FALSE); VDKForm* form = reinterpret_cast(gp); form->OnFormActivate(form,false); return FALSE; //TRUE; } /* ================================================== */ // MainForm constructor VDKForm::VDKForm(VDKApplication* app, gchar *title, int mode, GtkWindowType display): VDKObject(NULL), app(app), // properties Visible("Visible",this,true,&VDKForm::SetVisible,&VDKForm::GetVisible), Title("Title",this, title ? VDKString(title) : VDKString(""),&VDKForm::SetTitle), Position("Position",this,VDKPoint(-1,-1), &VDKForm::SetPosition,&VDKForm::GetPosition), Iconized("Iconized",this,false, &VDKForm::SetIconized,&VDKForm::GetIconized), BackgroundPixmap("BackgroundPixmap",this,NULL, &VDKForm::SetBackgroundPixmap), FocusWidget("FocusWidget",this,NULL,&VDKForm::SetFocusWidget) { isModal = false; modalCount = 0; never_showed = true; assert(app->MainForm == NULL || ! "MainForm"); widget = window = sigwid = gtk_window_new (display); if(title) gtk_window_set_title(GTK_WINDOW(window),title); // sets the border width of the window gtk_container_border_width (GTK_CONTAINER (window),2); box = new VDKBox(this,mode); items.add(box); gtk_widget_set_name(box->Widget(),"VDKForm::Box"); gtk_container_add(GTK_CONTAINER(window),box->Widget()); gtk_widget_show(box->Widget()); box->Parent(this); ////////////////////////////////////////////// //connect signals SignalsConnect(); gtk_widget_realize(window); #ifdef VDKDEBUG formC++; #endif } /* */ void VDKForm::SignalsConnect() { gtk_signal_connect (GTK_OBJECT (window), "delete_event", GTK_SIGNAL_FUNC (VDKForm::DeleteEvent), this); gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (VDKForm::DestroyEvent), this); gtk_signal_connect (GTK_OBJECT (window), "configure_event", GTK_SIGNAL_FUNC(VDKForm::ConfigureEvent),this); gtk_signal_connect(GTK_OBJECT(window),"realize", GTK_SIGNAL_FUNC(VDKForm::RealizeSignal),this); gtk_signal_connect(GTK_OBJECT (window), "expose_event", GTK_SIGNAL_FUNC(VDKForm::ExposeEvent),this); gtk_signal_connect(GTK_OBJECT(window),"map_event", GTK_SIGNAL_FUNC(VDKForm::MapEvent),this); gtk_signal_connect(GTK_OBJECT(window),"unmap_event", GTK_SIGNAL_FUNC(VDKForm::UnmapEvent),this); gtk_signal_connect(GTK_OBJECT(window),"focus_in_event", GTK_SIGNAL_FUNC(VDKForm::FocusInEvent),this); gtk_signal_connect(GTK_OBJECT(window),"focus_out_event", GTK_SIGNAL_FUNC(VDKForm::FocusOutEvent),this); gtk_signal_connect_after(GTK_OBJECT(window),"size_allocate", GTK_SIGNAL_FUNC(VDKForm::SizeAllocateSignal),this); /* gtk_signal_connect_after(GTK_OBJECT(window),"window_state_event", GTK_SIGNAL_FUNC(VDKForm::WindowStateEvent),this); */ gtk_widget_add_events(Window(),GDK_KEY_RELEASE_MASK); gtk_widget_add_events(Window(),GDK_KEY_PRESS_MASK); } /* */ VDKForm::VDKForm(VDKForm* owner, gchar* title , int mode, GtkWindowType display): VDKObject(owner), app(owner->Application()), Visible("Visible",this,true,&VDKForm::SetVisible,&VDKForm::GetVisible), Title("Title",this, title ? VDKString(title) : VDKString(""),&VDKForm::SetTitle), Position("Position",this,VDKPoint(0,0), &VDKForm::SetPosition,&VDKForm::GetPosition), Iconized("Iconized",this,false, &VDKForm::SetIconized,&VDKForm::GetIconized), BackgroundPixmap("BackgroundPixmap",this,NULL, &VDKForm::SetBackgroundPixmap), FocusWidget("FocusWidget",this,NULL,&VDKForm::SetFocusWidget) { isModal = false; modalCount = 0; never_showed = true; widget = window = sigwid = gtk_window_new (display); if(title) gtk_window_set_title(GTK_WINDOW(window),title); // sets the border width of the window gtk_container_border_width (GTK_CONTAINER (window), 1); box = new VDKBox(this,mode); items.add(box); gtk_widget_set_name(box->Widget(),"VDKForm::Box"); gtk_container_add(GTK_CONTAINER(window),box->Widget()); gtk_widget_show(box->Widget()); box->Parent(this); ////////////////////////////////////////////// // connect signals SignalsConnect(); gtk_widget_realize(window); owner->AddChild(this); #ifdef VDKDEBUG formC++; #endif } /* called whenever user does not override since now VDKForm is an abstract class this is cancelled void VDKForm::Setup(void) { gtk_widget_set_usize(GTK_WIDGET(box->Widget()),300,150); } */ /* Destructor */ VDKForm::~VDKForm() { // delete childs ChildListIterator li(childs); for(;li;li++) delete li.current(); CollectGarbage(); #ifdef VDKDEBUG formD++; #endif } /* CollectGarbage */ void VDKForm::CollectGarbage() { #ifdef VDKDEBUG int childs = 0; int objs = 0; #endif // delete childs garbage ChildListIterator li(childsGarbage); VDKItem *p = li.Head(); VDKItem *p1; while(p) { #ifdef VDKDEBUG childs++; #endif p1 = li.Next(p); delete li.Now(p); p = p1; } // this should be done // now so a new garbage will find // an empty list. childsGarbage.flush(); // delete items garbage ItemListIterator lo(garbages); VDKItem *o = lo.Head(); VDKItem *o1; while(o) { #ifdef VDKDEBUG objs++; #endif o1 = lo.Next(o); delete lo.Now(o); o = o1; } // this should be done // now.. garbages.flush(); #ifdef VDKDEBUG if(childs || objs) { printf("\nGarbage collect: %d child(s), %d object(s)", childs,objs); fflush(stdout); } #endif } /* removes child */ void VDKForm::RemoveChild(VDKForm* child) { if(childs.remove(child)) { childsGarbage.add(child); #ifdef VDKDEBUG childRemoved++; #endif // removes child objects ItemListIterator li(child->Items()); for(;li;li++) { li.current()->RemoveItems(); child->Garbages().add(li.current()); } #ifdef VDKDEBUG objRemoved += child->Items().size(); #endif child->Items().flush(); } } /* explicitely destroy this */ bool VDKForm::Destroy() { if(Owner() && ( Owner()->Childs().remove(this) || Owner()->ChildsGarbage().remove(this)) ) { delete this; return true; } else return false; } /* shows form: pos can be: - GTK_WIN_POS_NONE, (default) - GTK_WIN_POS_CENTER, - GTK_WIN_POS_CENTER_ALWAYS (for gtk+ version >= 1.2.5), - GTK_WIN_POS_MOUSE iteratively shows all childs */ void VDKForm::Show( GtkWindowPosition pos) { if(pos != GTK_WIN_POS_NONE) gtk_window_position(GTK_WINDOW(Window()),pos); gtk_widget_show(window); ChildListIterator li(childs); for(;li;li++) gtk_widget_show (li.current()->Window()); #if 0 printf("\nallocation.width:%d,allocation.height:%d", window->allocation.width,window->allocation.height); fflush(stdout); #endif } /* iteratively hides all childs */ void VDKForm::Hide() { gtk_widget_hide (window); ChildListIterator li(childs); for(;li;li++) gtk_widget_hide (li.current()->Window()); } /* shows modal */ void VDKForm::ShowModal(GtkWindowPosition pos) { isModal = true; Owner()->modalCount++; gtk_window_set_modal (GTK_WINDOW(window),TRUE); //gtk_grab_add(GTK_WIDGET(window)); if(owner) // this makes modal child // to stay always on top // of his parent. // modal cannot be closed with WM sys menu // if parent is iconized modal will be as well gtk_window_set_transient_for( GTK_WINDOW(window), GTK_WINDOW(owner->Window()) ); Show(pos); // initiates inner loop gtk_main(); #if 0 printf("\nallocation.width:%d,allocation.height:%d", window->allocation.width,window->allocation.height); fflush(stdout); #endif } /* add a child window */ void VDKForm::AddChild(VDKForm* child) { childs.add(child); child->Parent(this); } /* add an object */ void VDKForm::Add(VDKObject* obj, int justify, int expand, int fill, int padding) { items.add(obj); // gtk+1.2.4 switch (justify) { case l_justify: gtk_box_pack_start(GTK_BOX(box->Widget()), obj->Widget(),expand,fill,padding); break; case r_justify: gtk_box_pack_end(GTK_BOX(box->Widget()), obj->Widget(),expand,fill,padding); break; default: gtk_box_pack_start(GTK_BOX(box->Widget()), obj->Widget(),expand,fill,padding); } obj->Parent(box); // call setup on added object // since Setup is virtual user can override it. obj->Setup(); gtk_widget_show(obj->Widget()); } /* closes form */ void VDKForm::Close(void) { if( GTK_IS_WIDGET(window) && !DeleteEvent(NULL,NULL,this)) gtk_widget_destroy(window); } /* closes form childs (internally used) */ void VDKForm::CloseChilds(void) { ChildListIterator li(childs); VDKItem *p = li.Head(); VDKItem *p1; while(p) { p1 = li.Next(p); li.Now(p)->Close(); p = p1; } /* */ childs.flush(); } /* query to close form */ bool VDKForm::CanClose() { return true; } /* */ void VDKForm::Raise() { if(Visible) gdk_window_raise(window->window); } /* */ void VDKForm::Lower() { if(Visible) gdk_window_lower(window->window); } /* */ void VDKForm::SetIcon(VDKRawPixmap* pix) { gdk_window_set_icon (window->window, NULL, *pix, pix->Mask()); /* gdk_window_set_decorations (window->window, GdkWMDecoration(GDK_DECOR_ALL | GDK_DECOR_MENU)); gdk_window_set_functions (window->window, GdkWMFunction(GDK_FUNC_ALL | GDK_FUNC_RESIZE)); */ } /* */ void VDKForm::SetIconName(char* name) { gdk_window_set_icon_name (window->window,name); } /* */ void VDKForm::SetPosition(VDKPoint p) { if(never_showed) gtk_widget_set_uposition(GTK_WIDGET(window), p.X(),p.Y()); else gdk_window_move(window->window,p.X(),p.Y()); } /* */ VDKPoint VDKForm::GetPosition() { int x = -1,y = -1; VDKPoint p(x,y); /* if(window->window && (!never_showed)) { */ gdk_window_get_root_origin(window->window,&x,&y); //gdk_window_get_deskrelative_origin(window->window,&x,&y); // gdk_window_get_position (window->window,&x,&y); p.x = x; p.y = y; /* } else p = VDKPoint(window->allocation.x,window->allocation.y); */ return p; } /* */ void VDKForm::SetDefaultSize(VDKPoint p) { if(window) { gtk_window_set_default_size(GTK_WINDOW(window),p.X(),p.Y()); _oldSize = p; } } /* */ void VDKForm::SetBackgroundPixmap(VDKRawPixmap* pix) { GtkStyle *style; /* since a particular theme engine might not respect the background pixmap, instead of copying the widget's current style, i would create a new style from scratch: */ style = gtk_style_new (); g_return_if_fail(style != NULL); if(pix == NULL) style->bg_pixmap[GTK_STATE_NORMAL] = NULL; else style->bg_pixmap[GTK_STATE_NORMAL] = pix->AsGdkPixmap(); // style->bg_pixmap[GTK_STATE_NORMAL] = pix ? *pix : NULL; gtk_widget_set_style( Window(), style ); /* Don't forget to unref the new style, or it will leak. */ gtk_style_unref(style); } void VDKForm::SetFocusWidget(VDKObject* focuswidget) { g_return_if_fail(focuswidget != NULL); focuswidget->GrabFocus(); } /* ================================================ General responses (place holders for subclasses) ================================================ */ void VDKForm::OnExpose( VDKForm*, GdkRectangle) { } void VDKForm::OnChildClosing(VDKForm* ) { } void VDKForm::OnShow(VDKForm*) { } void VDKForm::OnRealize(VDKForm*) { } void VDKForm::OnConfigure(VDKForm*) {} void VDKForm::OnMove(VDKForm* sender) {} void VDKForm::OnResize(VDKForm* sender,VDKPoint& ) {} void VDKForm::OnFormActivate(VDKForm* sender,bool in_out ) {} /* ===================== GNOME STUFF GOES HERE ===================== */ VDKForm::VDKForm(VDKApplication* app, GtkWidget* wid, gchar *title): VDKObject(NULL), app(app), // properties Visible("Visible",this,true,&VDKForm::SetVisible,&VDKForm::GetVisible), Title("Title",this, title ? VDKString(title) : VDKString(""),&VDKForm::SetTitle), Position("Position",this,VDKPoint(-1,-1), &VDKForm::SetPosition,&VDKForm::GetPosition), Iconized("Iconized",this,false, &VDKForm::SetIconized,&VDKForm::GetIconized), BackgroundPixmap("BackgroundPixmap",this,NULL, &VDKForm::SetBackgroundPixmap), FocusWidget("FocusWidget",this,NULL,&VDKForm::SetFocusWidget) { isModal = false; modalCount = 0; never_showed = true; assert(app->MainForm == NULL || ! "MainForm"); assert(wid != NULL); widget = window = sigwid = wid; if(title) gtk_window_set_title(GTK_WINDOW(window),title); box = NULL; //connect signals SignalsConnect(); #ifdef VDKDEBUG formC++; #endif } // for builder only #if HAVE_GNOME VDKForm::VDKForm(VDKForm* owner, GtkWidget* wid, char* title): VDKObject(NULL), app(owner->Application()), // properties Visible("Visible",this,true,&VDKForm::SetVisible,&VDKForm::GetVisible), Title("Title",this, title ? VDKString(title) : VDKString(""),&VDKForm::SetTitle), Position("Position",this,VDKPoint(-1,-1), &VDKForm::SetPosition,&VDKForm::GetPosition), Iconized("Iconized",this,false, &VDKForm::SetIconized,&VDKForm::GetIconized), BackgroundPixmap("BackgroundPixmap",this,NULL, &VDKForm::SetBackgroundPixmap), FocusWidget("FocusWidget",this,NULL,&VDKForm::SetFocusWidget) { isModal = false; modalCount = 0; never_showed = true; assert(wid != NULL); widget = window = sigwid = wid; if(title) gtk_window_set_title(GTK_WINDOW(window),title); // set an inner box // check if widget is a gnome app box = new VDKBox(this,v_box); items.add(box); gtk_widget_set_name(box->Widget(),"VDKGnomeForm::Box"); gnome_app_set_contents(GNOME_APP(window),box->Widget()); gtk_widget_show(box->Widget()); box->Parent(this); //connect signals SignalsConnect(); owner->AddChild(this); #ifdef VDKDEBUG formC++; #endif } #endif vdk-2.4.0/vdk/frame.cc0000644000000000000000000000367307446637264010150 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/frame.h" VDKFrame::VDKFrame(VDKForm* owner, char* label, int mode, int shadow): VDKObjectContainer(owner), Label("Label",this,NULL,&VDKFrame::SetLabel), Shadow("Shadow",this,shadow_in,&VDKFrame::SetShadow), Align("Align",this,l_justify,&VDKFrame::SetAlign) { widget = gtk_frame_new(label); Label(label); Shadow(shadow); gtk_frame_set_shadow_type(GTK_FRAME(widget),(GtkShadowType) shadow); box = new VDKBox(owner,mode); items.add(box); box->Parent(this); gtk_container_add(GTK_CONTAINER(widget),box->Widget()); gtk_container_border_width(GTK_CONTAINER(box->Widget()), 1); gtk_widget_show(box->Widget()); } /* */ void VDKFrame::SetAlign(int j) { float xalign = 0.0+0.5*j; gtk_frame_set_label_align(GTK_FRAME(widget),xalign,0.0); } /* */ void VDKFrame::Add(VDKObject* obj,int justify, int expand, int fill, int padding) { box->Add(obj, justify,expand,fill,padding); obj->Parent(box); // does not call ancestor Add) // obj->Setup(); } vdk-2.4.0/vdk/handlebox.cc0000644000000000000000000000467707446637264011027 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/handlebox.h" #include "vdk/forms.h" void VDKHandleBox::HandleBoxSignal (GtkWidget* hb, GtkWidget *child, gpointer gp) { g_return_if_fail(hb!= NULL); g_return_if_fail(child != NULL); g_return_if_fail(gp != NULL); VDKObjectSignal *signal = reinterpret_cast(gp); VDKHandleBox* obj = reinterpret_cast(signal->obj); obj->SignalEmit(signal->signal); } /* */ VDKHandleBox::VDKHandleBox(VDKForm* owner) : VDKObjectContainer(owner), Child("Child",this,NULL) { widget = gtk_handle_box_new (); gtk_container_border_width (GTK_CONTAINER (widget),1); s_child_attached.obj = this; s_child_attached.signal = child_attached_signal; s_child_detached.obj = this; s_child_detached.signal = child_detached_signal; gtk_signal_connect (GTK_OBJECT (widget), "child_attached", GTK_SIGNAL_FUNC (VDKHandleBox::HandleBoxSignal), reinterpret_cast(&s_child_attached)); gtk_signal_connect (GTK_OBJECT (widget), "child_detached", GTK_SIGNAL_FUNC (VDKHandleBox::HandleBoxSignal), reinterpret_cast(&s_child_detached)); } VDKHandleBox::~VDKHandleBox() {} void VDKHandleBox::Add(VDKObject* obj, int , int , int , int) { //items.add(obj); gtk_container_add (GTK_CONTAINER (widget), obj->Widget()); //gtk_widget_show(obj->Widget()); // set property Child(obj); // sets handle box as object parent //obj->Parent(this); //obj->Setup(); VDKObjectContainer::Add(obj,0,0,0,0); } vdk-2.4.0/vdk/image.cc0000755000000000000000000001756710022076734010131 /* * =========================== * VDK Visual Development Kit * Version 2.0 * February 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include #include #include #include #include #include #include #include #define DEFAULT_ICON_SIZE GTK_ICON_SIZE_BUTTON #include "gtk/gtkstock.h" #include "gtk/gtkiconfactory.h" static void x_gtk_image_update_size (GtkImage *image, gint image_width, gint image_height) { GTK_WIDGET (image)->requisition.width = image_width + GTK_MISC (image)->xpad * 2; GTK_WIDGET (image)->requisition.height = image_height + GTK_MISC (image)->ypad * 2; if (GTK_WIDGET_VISIBLE (image)) gtk_widget_queue_resize (GTK_WIDGET (image)); } static void x_gtk_image_clear (GtkImage *image) { g_object_freeze_notify (G_OBJECT (image)); /* printf("\nhere!!"); fflush(stdout); */ if (image->storage_type != GTK_IMAGE_EMPTY) g_object_notify (G_OBJECT (image), "storage_type"); if (image->mask) { g_object_unref (image->mask); image->mask = NULL; g_object_notify (G_OBJECT (image), "mask"); } if (image->icon_size != DEFAULT_ICON_SIZE) { image->icon_size = DEFAULT_ICON_SIZE; g_object_notify (G_OBJECT (image), "icon_size"); } switch (image->storage_type) { case GTK_IMAGE_PIXMAP: if (image->data.pixmap.pixmap) g_object_unref (image->data.pixmap.pixmap); image->data.pixmap.pixmap = NULL; g_object_notify (G_OBJECT (image), "pixmap"); break; case GTK_IMAGE_IMAGE: if (image->data.image.image) g_object_unref (image->data.image.image); image->data.image.image = NULL; g_object_notify (G_OBJECT (image), "image"); break; case GTK_IMAGE_PIXBUF: if (image->data.pixbuf.pixbuf) g_object_unref (image->data.pixbuf.pixbuf); g_object_notify (G_OBJECT (image), "pixbuf"); break; case GTK_IMAGE_STOCK: g_free (image->data.stock.stock_id); image->data.stock.stock_id = NULL; g_object_notify (G_OBJECT (image), "stock"); break; case GTK_IMAGE_ICON_SET: if (image->data.icon_set.icon_set) gtk_icon_set_unref (image->data.icon_set.icon_set); image->data.icon_set.icon_set = NULL; g_object_notify (G_OBJECT (image), "icon_set"); break; case GTK_IMAGE_ANIMATION: if (image->data.anim.frame_timeout) g_source_remove (image->data.anim.frame_timeout); if (image->data.anim.anim) g_object_unref (image->data.anim.anim); image->data.anim.frame_timeout = 0; image->data.anim.anim = NULL; g_object_notify (G_OBJECT (image), "pixbuf_animation"); break; case GTK_IMAGE_EMPTY: default: break; } image->storage_type = GTK_IMAGE_EMPTY; memset (&image->data, '\0', sizeof (image->data)); g_object_thaw_notify (G_OBJECT (image)); } static int handle_expose(GtkWidget* w , GdkEventExpose* event, void* o) { g_return_val_if_fail(o != NULL,FALSE); g_return_val_if_fail(w != NULL,FALSE); printf("\nexpose event"); return FALSE; } /* */ VDKImage::VDKImage(VDKForm* owner, const char* pixfile, char* tipString, bool sensitive): VDKObject(owner) { width = height = 0; if(sensitive) widget = gtk_event_box_new(); else widget = gtk_vbox_new(true,0); if(!GTK_WIDGET_REALIZED(owner->Window())) gtk_widget_realize(owner->Window()); if(pixfile) { pixmap = new VDKPixbuf(owner,pixfile); if(pixmap != NULL) { pixmapWid = sigwid = gtk_image_new_from_pixbuf(pixmap->AsGdkPixbuf()); // g_signal_connect_data(pixmapWid, "expose_event", G_CALLBACK (handle_expose), this, NULL,(GConnectFlags) 0); width = pixmap->Width(); height = pixmap->Height(); gtk_widget_set_size_request(widget,width-10,height-10); gtk_container_add(GTK_CONTAINER(widget),pixmapWid); gtk_widget_show(pixmapWid); gtk_widget_queue_draw(pixmapWid); } else pixmapWid = NULL; } else { pixmap = NULL; pixmapWid = NULL; tip = NULL; } oldRawPix = pixmap; if(tipString) tip = new VDKTooltip(owner,this,tipString); else tip = NULL; ConnectDefaultSignals(); } /* */ VDKImage::VDKImage(VDKForm* owner, const char** pixdata, char* tipString, bool sensitive): VDKObject(owner) { width = height = 0; if(sensitive) widget = gtk_event_box_new(); else widget = gtk_vbox_new(true,0); if(!GTK_WIDGET_REALIZED(owner->Window())) gtk_widget_realize(owner->Window()); if(pixdata) { pixmap = new VDKPixbuf(owner,pixdata); if(pixmap != NULL) { pixmapWid = sigwid = gtk_image_new_from_pixbuf(pixmap->AsGdkPixbuf()); width = pixmap->Width(); height = pixmap->Height(); gtk_widget_set_size_request(widget,width-1,height-1); gtk_container_add(GTK_CONTAINER(widget),pixmapWid); gtk_widget_show(pixmapWid); gtk_widget_queue_draw(pixmapWid); } else pixmapWid = NULL; } else { pixmap = NULL; pixmapWid = NULL; tip = NULL; } oldRawPix = pixmap; if(tipString) tip = new VDKTooltip(owner,this,tipString); else tip = NULL; gtk_signal_connect (GTK_OBJECT (widget), "button_press_event", GTK_SIGNAL_FUNC(VDKObject::VDKEventPipe),this); ConnectDefaultSignals(); } VDKImage::~VDKImage() { } /* */ VDKPixbuf* VDKImage::SetImage(const char* file) { if(!file) { if(GTK_WIDGET_REALIZED(WrappedWidget())) { if(pixmapWid) { x_gtk_image_clear (GTK_IMAGE(pixmapWid)); x_gtk_image_update_size (GTK_IMAGE(pixmapWid),0,0); } } return NULL; } else return SetImage(new VDKPixbuf(this,file)); } /* */ VDKPixbuf* VDKImage::SetImage(const char** pixdata) { if(!pixdata) { if(GTK_WIDGET_REALIZED(WrappedWidget())) { if(pixmapWid) { x_gtk_image_clear (GTK_IMAGE(pixmapWid)); x_gtk_image_update_size (GTK_IMAGE(pixmapWid),0,0); } } return NULL; } return SetImage(new VDKPixbuf(this,pixdata)); } VDKPixbuf* VDKImage::SetImage(VDKPixbuf* newpix) { VDKPixbuf* oldpix; if(oldRawPix == newpix) return NULL; else { oldpix = oldRawPix; if(pixmap) { pixmap = NULL; } if(pixmapWid) { pixmap = newpix; gtk_image_set_from_pixbuf(GTK_IMAGE(pixmapWid), pixmap->AsGdkPixbuf()); gtk_widget_set_size_request(widget,newpix->Width()-1,newpix->Height()-1); gtk_widget_queue_draw(pixmapWid); } else { pixmap = newpix; pixmapWid = gtk_image_new_from_pixbuf(pixmap->AsGdkPixbuf()); gtk_widget_set_size_request(widget,newpix->Width()-1,newpix->Height()-1); gtk_container_add(GTK_CONTAINER(widget),pixmapWid); gtk_widget_show(pixmapWid); gtk_widget_queue_draw(pixmapWid); } oldRawPix = newpix; } return oldpix; } vdk-2.4.0/vdk/label.cc0000644000000000000000000000616607446637264010135 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/label.h" #include VDKLabel::VDKLabel(VDKForm* owner, const char* label, GtkJustification jtype): VDKObject(owner), Justify("Justify",this,jtype,&VDKLabel::SetJustify), Caption ("Caption", this, label, &VDKLabel::SetCaption, &VDKLabel::GetCaption), CaptionWrap ("CaptionWrap", this, false, &VDKLabel::SetCaptionWrap, &VDKLabel::GetCaptionWrap) { double x = 0.0,y = .5; if(label) { int len = std::strlen(label); if(len) { char* local = new char[len+1]; std::strcpy(local,label); if(!g_utf8_validate(local,-1,NULL)) g_locale_to_utf8(local,-1,NULL,NULL,NULL); widget = gtk_label_new(local); delete[] local; } else widget = gtk_label_new(" "); } else widget = gtk_label_new(" "); gtk_label_set_justify (GTK_LABEL(widget),jtype); switch(jtype) { case GTK_JUSTIFY_LEFT: x = 0; break; case GTK_JUSTIFY_RIGHT: x = 1; break; case GTK_JUSTIFY_CENTER: x = .5; break; case GTK_JUSTIFY_FILL: break; } gtk_misc_set_alignment (GTK_MISC(widget), x, y); ConnectDefaultSignals(); } /* */ void VDKLabel::SetJustify(GtkJustification jtype) { double x = 0.0,y = .5; gtk_label_set_justify (GTK_LABEL(widget),jtype); switch(jtype) { case GTK_JUSTIFY_LEFT: x = 0; break; case GTK_JUSTIFY_RIGHT: x = 1; break; case GTK_JUSTIFY_CENTER: x = .5; break; case GTK_JUSTIFY_FILL: break; } gtk_misc_set_alignment (GTK_MISC(widget), x, y); } /* */ VDKLabel::~VDKLabel() { } void VDKLabel::SetCaption(const char* s) { int len = std::strlen(s); if(len) { char* local = new char[len+1]; std::strcpy(local,s); if(!g_utf8_validate(local,-1,NULL)) g_locale_to_utf8(local,-1,NULL,NULL,NULL); gtk_label_set_text (GTK_LABEL(widget),local); delete[] local; } else gtk_label_set_text (GTK_LABEL(widget),""); } const char* VDKLabel::GetCaption () { return GTK_LABEL (widget)->label; } void VDKLabel::SetCaptionWrap (bool flag) { gtk_label_set_line_wrap (GTK_LABEL (widget), flag); } bool VDKLabel::GetCaptionWrap () { return GTK_LABEL (widget)->wrap; } vdk-2.4.0/vdk/menu.cc0000644000000000000000000003532007446637265010015 /* * =========================== * VDK Visual Development Kit * Version 0.4 * Revision 0.2 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/menu.h" #include "vdk/forms.h" #include "vdk/vdkfont.h" /* XPM */ /* static char *tick_xpm []= { "22 18 4 1", "a c #808080", "# c #000000", ". c None", "b c #ffffff", "......................", "......................", "................#a#...", "...............aba#...", "..............aba#....", ".............aba#.....", ".......a....aba#......", "......aba..ab##.......", ".....ab..a#b.a#.......", ".....#a...b.##........", ".....##a....a#........", "......##a..a#.........", ".......##a.a#.........", "........##a#..........", ".........###..........", "..........#...........", "......................", "......................" }; */ /* XPM */ static char * tick_xpm[] = { "16 14 4 1", " c None s None", ". c blue", "X c white", "o c gray50", " ", " ", " ", " ", " ... ", " .XX.. ", " .XX..o ", " .....o ", " ...oo ", " ooo ", " ", " ", " ", " " }; /* */ VDKMenu::VDKMenu(VDKForm* owner): VDKObjectContainer(owner) { widget = gtk_menu_new(); accel_group = gtk_accel_group_new (); if(accel_group) { gtk_window_add_accel_group (GTK_WINDOW (owner->Window()), accel_group); gtk_menu_set_accel_group (GTK_MENU(widget), accel_group); // gtk_accel_group_attach (accel_group, G_OBJECT (widget)); } g_object_unref (accel_group); Parent(owner); } /* */ VDKMenu::~VDKMenu() { } /* */ void VDKMenu::Add(VDKObject* wid, int justify, int expand, int fill , int padding) { VDKMenuItem* menuitem = dynamic_cast(wid); g_return_if_fail(menuitem != NULL); switch(justify) { case l_justify: gtk_menu_shell_append(GTK_MENU_SHELL(Widget()),wid->Widget()); break; case r_justify: gtk_menu_shell_prepend(GTK_MENU_SHELL(Widget()),wid->Widget()); break; default: if(justify >= pos_justify) gtk_menu_shell_insert(GTK_MENU_SHELL(Widget()),wid->Widget(),justify-pos_justify); break; } gtk_widget_show(wid->Widget()); AddItem(wid); wid->Parent(this); if(menuitem->AccKey() != GDK_VoidSymbol) { gtk_widget_add_accelerator (menuitem->Widget(), "activate", AccelGroup(), menuitem->AccKey(), (GdkModifierType) menuitem->ModKey(), (GtkAccelFlags)(GTK_ACCEL_VISIBLE) ); /* gtk_accel_groups_activate (G_OBJECT(menuitem->Widget()), menuitem->AccKey(), (GdkModifierType) menuitem->ModKey()); */ } } void VDKMenu::Separator() { GtkWidget* sep = gtk_menu_item_new (); gtk_container_add (GTK_CONTAINER (widget), sep); gtk_widget_show(sep); } /* */ void VDKMenu::SetFont(VDKFont* font) { ItemListIterator li(items); for(;li;li++) li.current()->SetFont(font); } /* */ void VDKMenu::Popup(guint button, guint32 activate_time) { /* probably this kind of menu isn't showed before this call, so try to add to owner item list. add() method will assures won't be added twice */ Owner()->AddItem(this); gtk_menu_popup(GTK_MENU(widget), NULL,NULL,NULL,NULL, button, activate_time); } /* */ VDKMenuItem::VDKMenuItem(VDKMenu* menu , const char* prompt, char** pix, guint key, guint8 modkey, bool accel): VDKObject(menu->Owner()), Checked("Checked",this,false,&VDKMenuItem::Tick), Caption ("Caption", this, prompt, &VDKMenuItem::SetCaption, &VDKMenuItem::GetCaption) { GdkBitmap *mask = NULL; GtkStyle* style = NULL; const char* local = " "; widget = gtk_menu_item_new(); box = gtk_hbox_new(FALSE,0); gtk_container_border_width(GTK_CONTAINER(box),1); // packs pixmap if(pix) { style = gtk_widget_get_style(owner->Window()); pixmap = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pix); pixmapWidget = gtk_pixmap_new(pixmap,mask); gtk_box_pack_start(GTK_BOX(box),pixmapWidget,FALSE,FALSE,1); gtk_widget_show(pixmapWidget); } else { pixmap = NULL; pixmapWidget = NULL; } // packs label and set accelerator prompt = prompt ? prompt : local; if(accel) lbl = gtk_accel_label_new(prompt); else lbl = gtk_label_new(prompt); gtk_box_pack_start(GTK_BOX(box),lbl,FALSE,FALSE,1); gtk_widget_show(lbl); if(accel) { VDKMenuItem::modkey = modkey; accelerator_key = key == GDK_VoidSymbol ? gtk_label_parse_uline (GTK_LABEL (lbl), prompt): key ; /* if (accelerator_key != GDK_VoidSymbol) gtk_widget_add_accelerator (widget, "activate", menu->AccelGroup(), accelerator_key, modkey, (GtkAccelFlags)( GTK_ACCEL_VISIBLE)); */ } //////////////// gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(widget),box); s_activated.obj = this; s_activated.signal = activate_signal; gtk_menu_shell_append(GTK_MENU_SHELL(menu->Widget()),widget); gtk_widget_show(widget); menu->AddItem(this); //Parent(menu->Owner()); Parent(menu); gtk_signal_connect(GTK_OBJECT(widget),"activate", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_activated); // ConnectDefaultSignals(); tickPixmap = NULL; tickWidget = NULL; ticked = false; } /* */ void VDKMenuItem::SetCaption(const char* str) { gtk_label_set_text (GTK_LABEL(lbl),str); accelerator_key = gtk_label_parse_uline (GTK_LABEL (lbl), str); VDKMenu* menu = NULL; VDKMenubar* bar = NULL; bar = dynamic_cast(Parent()); if(bar && (accelerator_key != GDK_VoidSymbol)) { gtk_widget_add_accelerator (widget, "activate", bar->AccelGroup(), accelerator_key, (GdkModifierType) modkey, (GtkAccelFlags)(GTK_ACCEL_VISIBLE)); return; } menu = dynamic_cast(Parent()); if(menu && (accelerator_key != GDK_VoidSymbol)) { gtk_widget_add_accelerator (widget, "activate", menu->AccelGroup(), accelerator_key, (GdkModifierType) modkey, (GtkAccelFlags)(//GTK_ACCEL_LOCKED| GTK_ACCEL_VISIBLE/*| GTK_ACCEL_SIGNAL_VISIBLE*/)); return; } } /* */ const char* VDKMenuItem::GetCaption () { return GTK_LABEL(lbl)->label; } /* */ void VDKMenuItem::SetPixmap(VDKRawPixmap* newpix) { // g_return_if_fail(newpix != NULL); if(!newpix && pixmapWidget) { gtk_container_remove(GTK_CONTAINER (box),pixmapWidget); pixmapWidget = NULL; pixmap = NULL; return; } if(!pixmap) { // temp remove label gtk_widget_ref(lbl); gtk_container_remove(GTK_CONTAINER (box),lbl); // add pixmap pixmap = *newpix; pixmapWidget = gtk_pixmap_new(pixmap,newpix->Mask()); gtk_box_pack_start(GTK_BOX(box),pixmapWidget,FALSE,FALSE,1); gtk_widget_show(pixmapWidget); // add label gtk_box_pack_start(GTK_BOX(box),lbl,FALSE,FALSE,1); gtk_widget_show(lbl); gtk_widget_unref(lbl); } else { pixmap = *newpix; gtk_pixmap_set (GTK_PIXMAP(pixmapWidget), pixmap, newpix->Mask()); gtk_widget_queue_draw(pixmapWidget); } } /* */ VDKMenuItem::VDKMenuItem(VDKMenubar* bar, const char* prompt, char** pix, int align, guint key, guint8 modkey, bool accel): VDKObject(bar->Owner()), Checked("Checked",this,false,&VDKMenuItem::Tick), Caption ("Caption", this, prompt, &VDKMenuItem::SetCaption, &VDKMenuItem::GetCaption) { const char* local = " "; widget = gtk_menu_item_new(); box = gtk_hbox_new(FALSE,0); gtk_container_border_width(GTK_CONTAINER(box),1); // packs pixmap if(pix) { GdkBitmap *mask; GtkStyle* style = gtk_widget_get_style(owner->Window()); pixmap = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pix); pixmapWidget = gtk_pixmap_new(pixmap,mask); gtk_box_pack_start(GTK_BOX(box),pixmapWidget,FALSE,FALSE,1); gtk_widget_show(pixmapWidget); } else { pixmap = NULL; pixmapWidget = NULL; } // packs label prompt = prompt ? prompt : local; if(accel) { lbl = gtk_accel_label_new(prompt); accelerator_key = key == GDK_VoidSymbol ? gtk_label_parse_uline (GTK_LABEL (lbl), prompt): key ; VDKMenuItem::modkey = modkey; /* if (accelerator_key != GDK_VoidSymbol) gtk_widget_add_accelerator (widget, "activate", bar->AccelGroup(), accelerator_key, modkey, (GtkAccelFlags)(GTK_ACCEL_VISIBLE)); */ } else lbl = gtk_label_new(prompt); if(!pixmap) gtk_box_pack_start(GTK_BOX(box),lbl,FALSE,FALSE,1); else gtk_box_pack_end(GTK_BOX(box),lbl,FALSE,FALSE,1); gtk_widget_show(lbl); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(widget),box); s_activated.obj = this; s_activated.signal = activate_signal; gtk_signal_connect(GTK_OBJECT(widget),"activate", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_activated); if(align == r_justify) gtk_menu_item_right_justify(GTK_MENU_ITEM(widget)); gtk_menu_bar_append(GTK_MENU_BAR(bar->Widget()),widget); gtk_widget_show(widget); bar->AddItem(this); Parent(bar); tickPixmap = NULL; tickWidget = NULL; ticked = false; } /* */ VDKMenuItem::VDKMenuItem(VDKForm* owner, const char* prompt, char** pix, int align, guint key, guint8 modkey, bool accel): VDKObject(owner), modkey(modkey), Checked("Checked",this,false,&VDKMenuItem::Tick), Caption ("Caption", this, prompt, &VDKMenuItem::SetCaption, &VDKMenuItem::GetCaption) { const char* local = " "; widget = gtk_menu_item_new(); box = gtk_hbox_new(FALSE,0); gtk_container_border_width(GTK_CONTAINER(box),1); // packs pixmap if(pix) { GdkBitmap *mask; GtkStyle* style = gtk_widget_get_style(owner->Window()); pixmap = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pix); pixmapWidget = gtk_pixmap_new(pixmap,mask); gtk_box_pack_start(GTK_BOX(box),pixmapWidget,FALSE,FALSE,1); gtk_widget_show(pixmapWidget); } else { pixmap = NULL; pixmapWidget = NULL; } // packs label prompt = prompt ? prompt : local; if(accel) { lbl = gtk_accel_label_new(prompt); accelerator_key = key == GDK_VoidSymbol ? gtk_label_parse_uline (GTK_LABEL (lbl), prompt): key; } else lbl = gtk_label_new(prompt); if(!pixmap) gtk_box_pack_start(GTK_BOX(box),lbl,FALSE,FALSE,1); else gtk_box_pack_end(GTK_BOX(box),lbl,FALSE,FALSE,1); gtk_widget_show(lbl); gtk_widget_show(box); gtk_container_add(GTK_CONTAINER(widget),box); s_activated.obj = this; s_activated.signal = activate_signal; gtk_signal_connect(GTK_OBJECT(widget),"activate", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_activated); if(align == r_justify) gtk_menu_item_right_justify(GTK_MENU_ITEM(widget)); tickPixmap = NULL; tickWidget = NULL; ticked = false; } /* */ void VDKMenuItem::Tick(bool flag) { ticked = flag; if(flag) { if(!tickWidget) { GdkBitmap *mask; GtkStyle* style = gtk_widget_get_style(owner->Window()); tickPixmap = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], tick_xpm); tickWidget = gtk_pixmap_new(tickPixmap,mask); gtk_box_pack_start(GTK_BOX(box),tickWidget,FALSE,FALSE,1); gtk_widget_show(tickWidget); } else gtk_widget_show(tickWidget); } else if(tickWidget) gtk_widget_hide(tickWidget); } /* */ void VDKMenuItem::SetFont(VDKFont* font) { _setFont_(lbl,font); ItemListIterator li(items); for(;li;li++) li.current()->SetFont(font); } /* */ VDKMenuItem::~VDKMenuItem() { if(pixmap) gdk_pixmap_unref(pixmap); if(tickPixmap) gdk_pixmap_unref(tickPixmap); } /* */ void VDKMenuItem::Add(VDKMenu* submenu) { gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget),submenu->Widget()); AddItem(submenu); submenu->Parent(this); } /* */ VDKMenubar::VDKMenubar(VDKForm* owner): VDKObjectContainer(owner), Shadow("Shadow",this,shadow_out,&VDKMenubar::SetShadow) { widget = gtk_menu_bar_new(); accel_group = gtk_accel_group_new (); if(accel_group) gtk_window_add_accel_group(GTK_WINDOW(owner->Window()), accel_group); } /* */ VDKMenubar::~VDKMenubar() { } /*cd test */ void VDKMenubar::Add(VDKObject* wid, int justify, int expand, int fill , int padding) { VDKMenuItem* menuitem = dynamic_cast(wid); g_return_if_fail(menuitem != NULL); switch(justify) { case l_justify: gtk_menu_shell_append (GTK_MENU_SHELL(Widget()),wid->Widget()); break; case r_justify: gtk_menu_shell_prepend (GTK_MENU_SHELL(Widget()),wid->Widget()); //gtk_menu_item_right_justify(GTK_MENU_ITEM(wid->Widget())); break; default: if(justify >= pos_justify) gtk_menu_shell_insert (GTK_MENU_SHELL(Widget()),wid->Widget(),justify-pos_justify); break; } gtk_widget_show(wid->Widget()); AddItem(wid); wid->Parent(this); if(menuitem->AccKey() != GDK_VoidSymbol) gtk_widget_add_accelerator (menuitem->Widget(), "activate", AccelGroup(), menuitem->AccKey(), (GdkModifierType) menuitem->ModKey(), (GtkAccelFlags)(//GTK_ACCEL_LOCKED| GTK_ACCEL_VISIBLE/*| GTK_ACCEL_SIGNAL_VISIBLE*/)); } /* */ void VDKMenubar::SetFont(VDKFont* font) { ItemListIterator li(items); for(;li;li++) li.current()->SetFont(font); } /* */ VDKOptionMenu::VDKOptionMenu(VDKForm* owner): VDKObject(owner) { widget = gtk_option_menu_new (); } /* */ VDKOptionMenu::~VDKOptionMenu() { } void VDKOptionMenu::Add(VDKMenu* menu) { gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu->Widget()); AddItem(menu); menu->Parent(this); } vdk-2.4.0/vdk/msgdialog.cc0000644000000000000000000001302410022101564010760 /* * =========================== * VDK Visual Development Kit * Version 2.0 * December 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include static int answer = 0; static int mtype = 0; static int timerId = 0; static int OnDialogDestroy (GtkWidget* dialog, gpointer gp) { if(timerId) { gtk_timeout_remove(timerId); timerId = 0; } gtk_widget_destroy(dialog); gtk_main_quit(); return TRUE; } static void OnDialogResponse(GtkWidget *dialog, gint response_id, gpointer gp) { switch(response_id) { case GTK_RESPONSE_OK: answer = VDK_IDOK; break; case GTK_RESPONSE_CANCEL: answer = VDK_IDCANCEL; break; case GTK_RESPONSE_YES: answer = VDK_IDYES; break; case GTK_RESPONSE_NO: answer = VDK_IDNO; break; case GTK_RESPONSE_DELETE_EVENT: switch(mtype & VDK_TYPEMASK) { case VDK_OKCANCEL: answer = VDK_IDCANCEL; break; case VDK_YESNO: answer = VDK_IDNO; break; default: answer = VDK_IDCANCEL; } break; default: answer = response_id; } OnDialogDestroy(dialog,NULL); } static int OnDialogKeyPress(GtkWidget *dialog, GdkEvent* ev, gpointer gp) { GdkEventKey* event = (GdkEventKey*) ev; int answer = -1; switch(event->keyval) { case GDK_Return : switch(mtype & VDK_TYPEMASK) { case VDK_OKCANCEL: answer = VDK_IDOK; break; case VDK_YESNO: answer = VDK_IDYES; break; default: answer = VDK_IDOK; } break; case GDK_Escape: switch(mtype & VDK_TYPEMASK) { case VDK_OKCANCEL: answer = VDK_IDCANCEL; break; case VDK_YESNO: answer = VDK_IDNO; break; default: answer = VDK_IDCANCEL; } } if(answer >= 0) { OnDialogResponse(dialog, answer, gp); return TRUE; } else return FALSE; } static int HandleTimeOut(gpointer gp) { if(timerId) { gtk_timeout_remove(timerId); timerId = 0; } GtkWidget* dialog = reinterpret_cast (gp); OnDialogResponse(dialog, GTK_RESPONSE_DELETE_EVENT,NULL); return FALSE; } static GtkWidget* MakeDialog(GtkMessageType type,GtkButtonsType buttons, char* prompt, GtkWindow* parent, unsigned int wait) { answer = 0; GtkWidget* dialog = gtk_message_dialog_new ( parent, GtkDialogFlags(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT), type, buttons, prompt); if(parent) { gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent)); gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); } gtk_signal_connect (GTK_OBJECT (dialog), "destroy", GTK_SIGNAL_FUNC (::OnDialogDestroy), NULL); gtk_signal_connect (GTK_OBJECT (dialog), "key_press_event", GTK_SIGNAL_FUNC (::OnDialogKeyPress), NULL); gtk_signal_connect (GTK_OBJECT (dialog), "response", GTK_SIGNAL_FUNC (::OnDialogResponse), NULL); if(wait) timerId = gtk_timeout_add(wait,::HandleTimeOut,dialog); return dialog; } gint VDKApplication::VDKMessageBox(char* caption, char* text, int mode,char *oktext ,char *canceltext ,unsigned int wait) { GtkMessageType type; GtkButtonsType buttons; mtype = mode; /* masks icon */ switch(mode & VDK_ICONMASK) { case VDK_ICONQUESTION: type = GTK_MESSAGE_QUESTION; break; case VDK_ICONINFORMATION: type = GTK_MESSAGE_INFO; break; case VDK_ICONERROR: type = GTK_MESSAGE_ERROR; break; case VDK_ICONSTOP: type = GTK_MESSAGE_WARNING; break; default: type = GTK_MESSAGE_INFO; } /* masks buttons */ switch(mode & VDK_TYPEMASK) { case VDK_OKCANCEL: buttons = GTK_BUTTONS_OK_CANCEL; break; case VDK_YESNO: buttons = GTK_BUTTONS_YES_NO; break; case VDK_OK: buttons = GTK_BUTTONS_OK; break; default: buttons = GTK_BUTTONS_OK; break; } GtkWidget *dialog = MakeDialog(type, buttons, text, GTK_WINDOW(MainForm->Window()), wait); if(caption) gtk_window_set_title(GTK_WINDOW(dialog),caption); gtk_window_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER); gtk_widget_show(dialog); gtk_main(); /* gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); */ return answer; } vdk-2.4.0/vdk/notebook.cc0000644000000000000000000002032007466564305010657 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/notebook.h" #include "vdk/forms.h" #include "vdk/pixmaps.h" #include "vdk/label.h" #include "vdk/boxes.h" #include "vdk/colors.h" //================ // class tab page //================ VDKTabPage::VDKTabPage(VDKObject* book, VDKObject* child, const char *lbl, char **closed_xpm, char **open_xpm): child(child),book(book) { GtkWidget *pixwid; GdkColor *transparent = NULL; tab = gtk_hbox_new (FALSE, 0); // if(closed_xpm) closed = gdk_pixmap_create_from_xpm_d (book->Widget()->window, &closed_mask,transparent, closed_xpm); else closed = NULL; // if(open_xpm) open = gdk_pixmap_create_from_xpm_d (book->Widget()->window, &open_mask, transparent, open_xpm); else open = NULL; // if(closed) { pixwid = gtk_pixmap_new (closed, closed_mask); gtk_box_pack_start (GTK_BOX (tab), pixwid, FALSE, TRUE, 0); gtk_misc_set_padding (GTK_MISC (pixwid), 3, 1); } TabLabel = new VDKLabel(book->Owner(),lbl); gtk_box_pack_start (GTK_BOX (tab), TabLabel->Widget(), FALSE, TRUE, 0); gtk_widget_show(child->Widget()); // gtk_widget_show_all (tab); gtk_notebook_append_page(GTK_NOTEBOOK(book->Widget()), child->Widget(), tab); book->Owner()->Objects().add(TabLabel); } //================ // class page list //================ /* */ VDKTabPage* PageList::operator[](int n) { return PList::operator[](n); } /* */ PageList::~PageList() { for(PListIterator li(*this);li;li++) delete li.current(); } /* */ void PageList::AddPage(VDKObject* child, const char *label, char **pixmap_open, char **pixmap_closed) { VDKTabPage *page = new VDKTabPage(book, child, label, pixmap_open, pixmap_closed); add(page); child->Parent(book); } //=============== // class notebook //=============== void VDKNotebook::PageSwitch(GtkWidget *widget, GtkNotebookPage *page, int pagenum, gpointer gp) { GdkPixmap *open = NULL; GdkPixmap *closed = NULL; GdkBitmap *open_mask; GdkBitmap *closed_mask; int lastpage; g_return_if_fail(gp != NULL); VDKNotebook* obj = reinterpret_cast(gp); GtkNotebookPage *oldpage; GtkWidget *pixwid = NULL; oldpage = GTK_NOTEBOOK (widget)->cur_page; if ((page == oldpage) || (!obj->Pages.size()) || (pagenum < 0) || (pagenum >= obj->Pages.size()) ) return; bool enabled = obj->Pages[pagenum]->TabLabel->Enabled; // does not proceed if page is disabled if(! enabled) { gtk_signal_emit_stop_by_name(GTK_OBJECT(widget),"switch_page"); return; } // lastpage = gtk_notebook_current_page(GTK_NOTEBOOK(widget)); open = obj->Pages[pagenum]->open; open_mask = obj->Pages[pagenum]->open_mask; if(open) { /* this should replace below lines on new gtk+ snapshoots, since GtkNoteBook page is now a private struct on gtknotebook.c */ GtkWidget* tab_label = gtk_notebook_get_tab_label (GTK_NOTEBOOK(widget), GTK_WIDGET(page)); if(tab_label) { pixwid = ((GtkBoxChild*)(GTK_BOX (tab_label)->children->data))->widget; if(pixwid) gtk_pixmap_set (GTK_PIXMAP (pixwid), open, open_mask); } // /* //================ pixwid = ((GtkBoxChild*) (GTK_BOX (page->tab_label)->children->data))->widget; if(pixwid) gtk_pixmap_set (GTK_PIXMAP (pixwid), open, open_mask); //================ */ } if ( (lastpage >= 0) && (lastpage < obj->Pages.size()) && (oldpage && closed)) { closed = obj->Pages[lastpage]->closed; closed_mask = obj->Pages[lastpage]->closed_mask; /* this should replace below lines on new gtk+ snapshoots, since GtkNoteBook page is now a private struct on gtknotebook.c */ GtkWidget* tab_label = gtk_notebook_get_tab_label (GTK_NOTEBOOK(widget), GTK_WIDGET(oldpage)); if(tab_label) { pixwid = ((GtkBoxChild*) (GTK_BOX (tab_label)->children->data))->widget; if(pixwid) gtk_pixmap_set (GTK_PIXMAP (pixwid), closed, closed_mask); } // /* //================= pixwid = ((GtkBoxChild*) (GTK_BOX(oldpage->tab_label)->children->data))->widget; if(pixwid) gtk_pixmap_set (GTK_PIXMAP (pixwid), closed, closed_mask); //================= */ } obj->ActivePage(pagenum); obj->SignalEmit(switch_page_signal); #ifdef USE_SIGCPLUSPLUS obj->OnPageSwitch(obj,pagenum); #endif } /* */ VDKNotebook::VDKNotebook(VDKForm* owner): VDKObjectContainer(owner), ActivePage("ActivePage",this), TabPosition("TabPosition",this), Scrollable("Scrollable",this,false,&VDKNotebook::SetScrollable), PopUp("PopUp",this,false,&VDKNotebook::SetPopUp), PreviousActivePage("PreviousActivePage",this,-1, &VDKNotebook::GetPreviousActivePage) { widget = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(widget),GTK_POS_TOP); Pages.book = this; gtk_signal_connect (GTK_OBJECT (widget), "switch_page", GTK_SIGNAL_FUNC (VDKNotebook::PageSwitch),this); } /* */ VDKNotebook::~VDKNotebook() { } /* */ void VDKNotebook::AddPage(VDKObject* obj, const char *label, char **pixmap_open, char **pixmap_closed) { Pages.AddPage(obj,label,pixmap_open,pixmap_closed); Owner()->Objects().add(obj); } /* */ void VDKNotebook::RemovePage(int page, bool removechild) { if(page < 0 || page >= Pages.size()) return; VDKObject* child = Pages[page]->child; gtk_notebook_remove_page(GTK_NOTEBOOK(widget),page); VDKTabPage *tabpage = Pages[page]; if(Pages.remove(tabpage)) { if(removechild) Owner()->RemoveItem(child); delete tabpage; // set active page ActivePage(gtk_notebook_get_current_page(GTK_NOTEBOOK(Widget()))); } } /* */ ActivePageProperty::ActivePageProperty(){} ActivePageProperty::ActivePageProperty( char* name, VDKNotebook* object, void (VDKNotebook::*write)(int), int (VDKNotebook::*read)(void) ) : NoteBookIntProp(name,object,0,write,read) {} ActivePageProperty::~ActivePageProperty() {} /* */ ActivePageProperty::operator int() { //value = gtk_notebook_get_current_page(GTK_NOTEBOOK(object->Widget())); return value; } /* */ void ActivePageProperty::operator=(int page) { value = page; if(page >= 0 && page < object->Pages.size()) gtk_notebook_set_current_page(GTK_NOTEBOOK(object->Widget()),page); } /* */ void ActivePageProperty::operator++() { gtk_notebook_next_page(GTK_NOTEBOOK(object->Widget())); } /* */ void ActivePageProperty::operator--() { gtk_notebook_prev_page(GTK_NOTEBOOK(object->Widget())); } /* */ void ActivePageProperty::operator++(int) { gtk_notebook_next_page(GTK_NOTEBOOK(object->Widget())); } /* */ void ActivePageProperty::operator--(int) { gtk_notebook_prev_page(GTK_NOTEBOOK(object->Widget())); } /* */ NotebookTabPosProperty::NotebookTabPosProperty(){} NotebookTabPosProperty::NotebookTabPosProperty( char* name, VDKNotebook* object, void (VDKNotebook::*write)(int), int (VDKNotebook::*read)(void) ): NoteBookIntProp(name,object,GTK_POS_TOP,write,read) { } NotebookTabPosProperty::~NotebookTabPosProperty() {} void NotebookTabPosProperty::operator=(int pos) { value = pos%GTK_POS_BOTTOM; gtk_notebook_set_tab_pos(GTK_NOTEBOOK(object->Widget()), (GtkPositionType) value); } vdk-2.4.0/vdk/numentry.cc0000644000000000000000000000374007667640115010724 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/numentry.h" #include "vdk/vdkobj.h" #include "vdk/forms.h" #include #include /* */ int VDKNumericEntry::KeyEvent(GtkWidget *wid, GdkEventKey *ev, gpointer data) { g_return_val_if_fail(wid != NULL,FALSE); g_return_val_if_fail(data != NULL,FALSE); switch(ev->keyval) { case GDK_Tab: case GDK_Linefeed: case GDK_Clear: case GDK_BackSpace: case GDK_Delete: case GDK_Right: case GDK_Left: case GDK_Return: case GDK_End: case GDK_Home: case '.': case ',': case '-': break; default: if(ev->keyval < 48 || ev->keyval > 57) return TRUE; //gtk_signal_emit_stop_by_name(GTK_OBJECT(wid),"key_press_event"); } return FALSE; } /* */ VDKNumericEntry::VDKNumericEntry(VDKForm* owner, int maxLen, char* def): VDKEntry(owner,maxLen,def) { gtk_signal_connect(GTK_OBJECT(widget),"key_press_event", GTK_SIGNAL_FUNC(VDKNumericEntry::KeyEvent), (gpointer) this); } /* */ VDKNumericEntry::~VDKNumericEntry() {} vdk-2.4.0/vdk/paned.cc0000644000000000000000000000404407455236550010127 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/paned.h" #include "vdk/forms.h" /* */ VDKPaned::VDKPaned(VDKForm* owner,int mode) :VDKObjectContainer(owner) { widget = mode == v_box ? gtk_vpaned_new() : gtk_hpaned_new(); // ConnectDefaultSignals(); } /* */ VDKPaned::~VDKPaned() {} /* */ void VDKPaned::Add(VDKObject* obj, int pane, int fill, int expand, int padding ) { // items.add(obj); //BorderWidth(1); if(pane == 1) gtk_paned_add1(GTK_PANED(widget),obj->Widget()); else gtk_paned_add2(GTK_PANED(widget),obj->Widget()); // gtk_widget_show(obj->Widget()); // obj->Parent(this); // obj->Setup(); // calls ancestor (B.Liskov docet...) VDKObjectContainer::Add(obj,l_justify,fill,expand,padding); } void VDKPaned::Pack(VDKObject* obj, int pane , bool resize, bool shrink) { // items.add(obj); // BorderWidth(1); if(pane == 1) gtk_paned_pack1(GTK_PANED(widget),obj->Widget(), resize, shrink); else gtk_paned_pack2(GTK_PANED(widget),obj->Widget(), resize, shrink); //gtk_widget_show(obj->Widget()); //obj->Parent(this); //obj->Setup(); VDKObjectContainer::Add(obj,l_justify,0,0,0); } vdk-2.4.0/vdk/pixdata.cc0000644000000000000000000003031607446637266010504 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ char* info_xpm[]={ /* width height num_colors chars_per_pixel */ " 38 38 47 1", /* colors */ ". c none", "# c #697579", "a c #595d79", "b c #414961", "c c #697196", "d c #181830", "e c #101028", "f c #182041", "g c #202859", "h c #202049", "i c #202849", "j c #494d61", "k c #101830", "l c #303871", "m c #38418e", "n c #38498e", "o c #384586", "p c #383c59", "q c #515569", "r c #283449", "s c #304179", "t c #515d96", "u c #d7d7df", "v c #efebef", "w c #dfdbdf", "x c #59619e", "y c #41498e", "z c #283061", "A c #e7e3e7", "B c #c7c3c7", "C c #9692a6", "D c #c7cbcf", "E c #182038", "F c #41518e", "G c #797da6", "H c #cfcbdf", "I c #868696", "J c #101828", "K c #415196", "L c #495196", "M c #f7f3f7", "N c #868aae", "O c #d7d3d7", "P c #495996", "Q c #49598e", "R c #fffbff", "S c #181828", /* pixels */ "......................................", "......................................", "......................................", "......................................", "................aabbbac...............", "..............ddddfggghijj............", "............kkggmmmnnnnnoop...........", "...........pkkggmmmnnnnnoopq..........", "........fkkzmmmmuuABBCsyyyyyyaa.......", "........fkkzmmmmuuABBCsyyyyyyaa.......", ".......rkllmmmmmvvBBBDEyyyyyyFF.......", "......qezmmmmmmmHHBDDIJyyyyyFFF.......", "......dhmmmmmmnnxxCIIEEyyyyFFFFcc.....", ".....qelmmmmmnnnnnsJJEsyyyFFFFFLL.....", ".....qelmmmmmnnnnnsJJEsyyyFFFFFLL.....", "....rrhmmmmmnxvvvvvMMMyyFFFFFKKLLN....", "....kkzmmmmnnxooDDDOOOJFFFFFKLLLLt....", "....eesmmnnnnnoovvOOOwJFFFFKLLLLLL....", "....kkmmnnnnnnyyMMOwwwJFFFKLLLLLLL....", "....ffmnnnnnnyyyMMOwwwJFKKLLLLLLLL....", "....ffnnnnnnyyyyMMwwwAJKLLLLLLLLLP....", "....ddnnnnnyyyyyMMwAAAJLLLLLLLLPPP....", "....ddnnnnnyyyyyMMwAAAJLLLLLLLLPPP....", "....qqsnyyyyyyyyMMAAAAJLLLLLLPPPP.....", "....qqsnyyyyyyyyMMAAAAJLLLLLLPPPP.....", "......iyyyyyyyFFMMAAAvJLLLLLPPPPP.....", "......jyyyyyyFFFMMAvvvJLLLLPPPP.......", ".......lyyyyFFFFMMvvvvJLLLPPPPP.......", ".......IQyyFFFMMMMvMMMMRPPPPPxx.......", "........QyyFFFMMMMvMMMMRPPPPPxx.......", "........cQQFFFKKJJJJJJSSSSPPx.........", "............FKLLLLLLLLPPPPPc..........", ".............tLLLLLLLPPPxx............", "................GGGGGN................", "......................................", "......................................", "......................................", "......................................" }; char * HandOpen_xpm[] = { "32 32 4 1", "b c #808080", ". c none", "# c #ffffff", "a c #ff0000", "................................", "................................", "..........############..........", ".........#aaaaaaaaaaaab.........", "........#aaaaaaaaaaaaaab........", ".......#aaaaaaaaaaaaaaaab.......", "......#aaaaaaaaaaaaaaaaaab......", ".....#aaaaaaaaaaaaaaaaaaaab.....", "....#aaaaaaaaaaaaaaaaaaaaaab....", "...#aaaaaaaaaaaaaaaaaaaaaaaab...", "..#aa###aa#####aa###aa####aaab..", "..#a#aaa#aaa#aaa#aaa#a#aaa#aab..", "..#a#aaaaaaa#aaa#aaa#a#aaa#aab..", "..#a#aaaaaaa#aaa#aaa#a#aaa#aab..", "..#aa#aaaaaa#aaa#aaa#a#aaa#aab..", "..#aaa#aaaaa#aaa#aaa#a####aaab..", "..#aaaa#aaaa#aaa#aaa#a#aaaaaab..", "..#aaaaa#aaa#aaa#aaa#a#aaaaaab..", "..#aaaaa#aaa#aaa#aaa#a#aaaaaab..", "..#aaaaa#aaa#aaa#aaa#a#aaaaaab..", "..#a#aaa#aaa#aaa#aaa#a#aaaaaab..", "..#aa###aaaa#aaaa###aa#aaaaaab..", "...#aaaaaaaaaaaaaaaaaaaaaaaab...", "....#aaaaaaaaaaaaaaaaaaaaaab....", ".....#aaaaaaaaaaaaaaaaaaaab.....", "......#aaaaaaaaaaaaaaaaaab......", ".......#aaaaaaaaaaaaaaaab.......", "........#aaaaaaaaaaaaaab........", ".........#aaaaaaaaaaaab.........", "..........#bbbbbbbbbbb..........", "................................", "................................" }; /* XPM */ char * Question_xpm[] = { "23 33 6 1", ". c None", "e c #808080", "c c #c3c3c3", "a c #000000", "b c #dcdcdc", "# c #ffffff", "..........##aaa........", "........##bbbbaa.......", "......##bbbaaaaaaa.....", ".....#bbbaaaaaaaaaa....", "....#bbaaa.....caaaa...", "...#bbaaa.......caaaa..", "..#bbaaa.........caaaa.", "..#bbaa..........caaaa.", "..#baaa...........caaaa", "..#aaaa...........caaaa", "...aaa............#aaaa", "..................##aaa", "..................##aaa", ".................##aaa.", ".................##aaa.", "................###aa..", "...............###aa...", "..............###aa....", ".............###aa.....", "............###aa......", "...........###aa.......", "..........e##aa........", "..........eeaaa........", "..........##aaa........", "..........##aaa........", "..........##aaa........", "..........##aaa........", "...........#aa.........", ".......................", "...........aaa.........", "..........##aaa........", "..........###aa........", "...........aaa........." }; /* XPM */ char * mini_exclam_xpm[] = { "16 14 5 1", " c None", ". c gray50", "X c #008000", "o c white", "O c black", " .X ", " .oXX. ", " .oXXXO ", " XXXXXO ", " .XXXXO. ", " XXXXXO ", " XXXXO ", " XXXO ", " XXO ", " XO ", " .oXX ", " XXXX. ", " XXO. ", " .O. "}; /* XPM */ char * blue_ball_xpm[] = { "16 14 4 1", " c None", ". c blue", "X c white", "o c gray50", " ", " ", " ", " ", " ... ", " .XX.. ", " .XX..o ", " .....o ", " ...oo ", " ooo ", " ", " ", " ", " "}; /* XPM */ char * folder_xpm[] = { "16 16 6 1", " s None c None", ". c grey51", "X c grey76", "o c yellow1", "O c white", "+ c grey4", " ", " ..... ", " .XoXoX. ", ".XoXoXoX...... ", ".OOOOOOOOOOOO.+ ", ".OoXoXoXoXoXo.+ ", ".OXoXoXoXoXoX.+ ", ".OoXoXoXoXoXo.+ ", ".OXoXoXoXoXoX.+ ", ".OoXoXoXoXoXo.+ ", ".OXoXoXoXoXoX.+ ", ".OoXoXoXoXoXo.+ ", "..............+ ", " ++++++++++++++ ", " ", " "}; /* XPM */ char* folder_open_xpm[]={ "16 16 6 1", " s None c None", ". c grey51", "X c white", "o c grey76", "O c yellow1", "+ c grey4", " ", " .... ", " .XXXX. ", " .XoOooX...... ", " .XOoOOoXXXXX.+ ", " .XoOooOoOoOo.+ ", "............O.+ ", ".XXXXXXXXX.+o.+ ", ".XoOoOOoOoO+..+ ", " .XoOooOoOo.+.+ ", " .XOoOOoOoOo+.+ ", " .XOooOoOoO.++ ", " ...........++ ", " ++++++++++++ ", " ", " "}; /* XPM */ char * c_xpm[] = { "16 16 5 1", " s None c None", ". c grey51", "X c white", "o c grey76", "O c grey4", " ", " .......... ", " .XXXXXXXXo. ", " .XooooooXoX. ", " .XXXXXXXXOOOO ", " .XooooooXXXoO ", " .XXXXXXXXXXoO ", " .XooooooooXoO ", " .XXXXXXOOXXoO ", " .XooooOooOXoO ", " .XXXXXOXXXXoO ", " .XoOOoOooOXoO ", " .XXOOXXOOXXoO ", " .XXXXXXXXXXoO ", " .oooooooooooO ", " OOOOOOOOOOOOO "}; /* XPM */ char * file_xpm[] = { "16 16 5 1", " s None c None", ". c grey51", "X c white", "o c grey76", "O c grey4", " ", " .......... ", " .XXXXXXXXo. ", " .XXXXXXXXoX. ", " .XXXXXXXXOOOO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .XXXXXXXXXXoO ", " .oooooooooooO ", " OOOOOOOOOOOOO "}; /* XPM */ char * xpm_xpm[] = { "16 16 8 1", " s None c None", ". c grey51", "X c white", "o c grey76", "O c blue1", "+ c grey4", "@ c red1", "# c green1", " ", " .......... ", " .XXXXXXXXo. ", " .XXXXXXXXoX. ", " .XXXOOXXX++++ ", " .XXXOOXXXXXo+ ", " .X@@XX@@XXXo+ ", " .X@@XX@@XXXo+ ", " .XXX##XX##Xo+ ", " .XXX##XX##Xo+ ", " .X##XXOOXXXo+ ", " .X##XXOOXXXo+ ", " .XXXXXXX@@Xo+ ", " .XXXXXXX@@Xo+ ", " .ooooooooooo+ ", " +++++++++++++ "}; /* XPM */ char * text_xpm[] = { "16 16 5 1", " #none", ". c grey4", "X c grey51", "o c white", "O c grey76", " . . . . . ", " . X X X X . ", " Xo.o.o.o.o.o. ", " XooooooooooO. ", " XooooooooooO. ", " Xoo...o..ooO. ", " XooooooooooO. ", " Xoo......ooO. ", " XooooooooooO. ", " Xoo......ooO. ", " XooooooooooO. ", " Xoo......ooO. ", " XooooooooooO. ", " XooooooooooO. ", " XOOOOOOOOOOO. ", " ........... "}; /* XPM */ char * gif_xpm[] = { "16 16 17 1", " s None c None", ". c grey26", "X c turquoise4", "o c grey76", "O c cyan3", "+ c grey51", "@ c grey89", "# c grey39", "$ c grey13", "% c grey64", "& c ForestGreen", "* c firebrick3", "= c red1", "- c brown4", "; c LimeGreen", ": c orange3", "> c yellow4", " ", " .XXXXXXX.o ", " XOOOOOOOX+o ", " XOOOOOOOXo+o@ ", " XOOOOOOOX##$@ ", " XOOOOOOOXOOX@ ", " $XOOOOO.+OOX@ ", " #o#X+OXoo#O.@ ", " #++oo+%%&&+#@ ", " .%o%%o+&&&&.@ ", " .&&*=-&&&&&$@ ", " &;:@o=>&>&&&@ ", " &>%%@+:;:>;&@ ", " &;%+@%;;:>;&@ ", " &;%%%;;;>;;&@ ", " ############@ "}; /* XPM */ char * h_xpm[] = { "16 16 5 1", " s None c None", ". c grey51", "X c white", "o c grey76", "O c grey4", " ", " .......... ", " .XXXXXXXXo. ", " .XooooooXoX. ", " .XXXXXXXXOOOO ", " .XoooXOXXXXoO ", " .XXXXXOXXXXoO ", " .XoooXOXXXXoO ", " .XXXXXOoOoXoO ", " .XoooXOOoOXoO ", " .XXXXXOXXOXoO ", " .XXOOXOXXOXoO ", " .XXOOXOXXOXoO ", " .XXXXXXXXXXoO ", " .oooooooooooO ", " OOOOOOOOOOOOO "}; /* XPM */ char * html_xpm[] = { "16 16 10 1", " s None c None", ". c grey51", "X c white", "o c yellow1", "O c grey76", "+ c grey4", "@ c turquoise4", "# c ForestGreen", "$ c blue1", "% c blue4", " ", " .......... ", " .XXXoXXXoO. ", " .XoXXXoXXOX. ", " .XXXoXXXo++++ ", " .XXXO@@@OXXO+ ", " .XoO@.@#@OoO+ ", " .XX@O@$@#.XO+ ", " .Xo@XO#%$%oO+ ", " .XX@O.#@$%XO+ ", " .Xo.$$#$%%oO+ ", " .XXO%$%%+OXO+ ", " .XoXO+++OXoO+ ", " .XXXoXXXoXXO+ ", " .OOOOOOOOOOO+ ", " +++++++++++++ "}; /* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ char* tgz_xpm[]={ "16 16 9 1", "# c #000000", "a c #ffffff", "g c #808080", "b c #ff0000", "f c #000000", "d c #c0c000", "e c #ffff00", "c c #ffffc0", ". c None", "................", ".......##.##....", "......#aa#aa##..", "..b..#aa#aaaaa#.", ".bb.#aa#a###a#..", "####aa#a#aaa##..", "..#ac#c#aaaaaa#.", ".#cc#c#aaadaa#..", ".#ecf#aaadaa#...", "..#g#ccadaa#....", "...#cccdac#bbb..", "...##cccc#.bb...", ".....##c#..b....", ".......#........", "................", "................"}; /* XPM */ char* link_xpm[]={ "12 12 3 1", "# c #000000", "a c #ffffff", ". c None", "############", "#aaaaaaaaaa#", "#aaaaaaaaaa#", "#aa#aa#aaaa#", "#aa##a##aaa#", "#aaa#####aa#", "#aaaaa##aaa#", "#aaaaa#aaaa#", "#aaaaaaaaaa#", "############" }; /* XPM */ char *exec_xpm[]={ "16 16 6 1", "# c #000000", "d c #a0a0a4", "a c #ffffff", "b c #585858", "c c #c0c0c0", ". c None", "................", ".....######.....", "..###abcaba###..", ".#cabcbaababaa#.", ".#cccaaccaacaa#.", ".###accaacca###.", "#ccccca##aaccaa#", "#dd#ccc##cca#cc#", "#d#dccccccacc#c#", "##adcccccccccd##", ".#ad#c#cc#d#cd#.", ".#a#ad#cc#dd#d#.", ".###ad#dd#dd###.", "...#ad#cc#dd#...", "...####cc####...", "......####......"}; /* XPM */ /* Drawn by Mark Donohoe for the K Desktop Environment */ /* See http://www.kde.org */ char *socket_xpm[]={ "16 14 5 1", "# c #000000", "a c #808080", "b c #ff0000", "c c #ffff00", ". c None", "................", "..........#.....", ".......a.#a.....", "......abba..#...", ".....abbbb.#a...", "....abbbbbba....", "....abbbbbba....", "....abbbbba#....", "....abbbba#.....", "...acaaaa#......", "..acaa###.......", ".acaa...........", "..aa............", "..a............."}; vdk-2.4.0/vdk/pixmaps.cc0000644000000000000000000001362407446637267010537 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/pixmaps.h" #include "vdk/forms.h" #include "vdk/colors.h" #include "vdk/tooltips.h" #include #include #include #include "vdk/rawpixmap.h" extern void PixSize(int* width, int* height, char* filename); /* */ VDKPixmap::VDKPixmap(VDKForm* owner, char* pixfile, char* tipString, bool sensitive): VDKObject(owner) { width = height = 0; if(sensitive) widget = gtk_event_box_new(); else widget = gtk_vbox_new(true,0); GdkBitmap *mask; if(!GTK_WIDGET_REALIZED(owner->Window())) gtk_widget_realize(owner->Window()); if(pixfile) { GtkStyle* style = gtk_widget_get_style(owner->Window()); pixmap = gdk_pixmap_create_from_xpm(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pixfile); if(pixmap != NULL) { pixmapWid = gtk_pixmap_new(pixmap,mask); gtk_widget_show(pixmapWid); PixSize(&width,&height,pixfile); gtk_widget_set_size_request(widget,width,height); gtk_container_add(GTK_CONTAINER(widget),pixmapWid); } else pixmapWid = NULL; } else { pixmap = NULL; pixmapWid = NULL; tip = NULL; } oldRawPix = NULL; if(tipString) tip = new VDKTooltip(owner,this,tipString); else tip = NULL; /* gtk_signal_connect (GTK_OBJECT (widget), "button_press_event", GTK_SIGNAL_FUNC(VDKObject::VDKEventPipe),this); */ ConnectDefaultSignals(); } /* */ VDKPixmap::VDKPixmap(VDKForm* owner, char** pixdata, char* tipString, bool sensitive): VDKObject(owner) { width = height = 0; if(sensitive) widget = gtk_event_box_new(); else widget = gtk_vbox_new(true,0); GdkBitmap *mask; if(!GTK_WIDGET_REALIZED(owner->Window())) gtk_widget_realize(owner->Window()); if(pixdata) { GtkStyle* style = gtk_widget_get_style(owner->Window()); pixmap = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pixdata); if(pixmap != NULL) { pixmapWid = gtk_pixmap_new(pixmap,mask); sscanf (pixdata[0],"%d %d", &width, &height); gtk_widget_set_size_request(widget,width+1,height+1); gtk_container_add(GTK_CONTAINER(widget),pixmapWid); gtk_widget_show(pixmapWid); } else pixmapWid = NULL; } else { pixmap = NULL; pixmapWid = NULL; tip = NULL; } oldRawPix = NULL; if(tipString) tip = new VDKTooltip(owner,this,tipString); else tip = NULL; /* gtk_signal_connect (GTK_OBJECT (widget), "button_press_event", GTK_SIGNAL_FUNC(VDKObject::VDKEventPipe),this); */ ConnectDefaultSignals(); } VDKPixmap::~VDKPixmap() { // VDK 0.5 // this caused a: /* Gdk-ERROR **: BadAccess (attempt to access private resource denied) serial 2887 error_code 10 request_code 88 minor_code 0 aborting... [1]+ IOT trap/Abort (core dumped) testvdk */ // problem should be further investigated... //--- /* if(pixmap) gdk_pixmap_unref(pixmap); */ } /* */ VDKRawPixmap* VDKPixmap::SetPixmap(char* file) { return SetPixmap(new VDKRawPixmap(this,file)); } /* */ VDKRawPixmap* VDKPixmap::SetPixmap(char** pixdata) { return SetPixmap(new VDKRawPixmap(this,pixdata)); } // static void clear_widget(GtkWidget * widget); VDKRawPixmap* VDKPixmap::SetPixmap(VDKRawPixmap* newpix) { VDKRawPixmap* oldpix; if(oldRawPix == newpix) return NULL; else { oldpix = oldRawPix; if(pixmap) { pixmap = NULL; } if(pixmapWid) { pixmap = *newpix; gtk_pixmap_set (GTK_PIXMAP(pixmapWid), pixmap, newpix->Mask()); gtk_widget_queue_draw(pixmapWid); } else { pixmap = *newpix; pixmapWid = gtk_pixmap_new(pixmap,newpix->Mask()); gtk_widget_set_size_request(widget,newpix->Width(),newpix->Height()); gtk_container_add(GTK_CONTAINER(widget),pixmapWid); gtk_widget_show(pixmapWid); } oldRawPix = newpix; } return oldpix; } /* void clear_widget(GtkWidget * widget) { gint x, y, w, h; x = widget->allocation.x; y = widget->allocation.y; w = widget->allocation.width; h = widget->allocation.height; // Don't try to refresh an area if the width or height is 0. if (w == 0 || h == 0) return; // Clear GdkWindow *window = widget->window; g_return_if_fail(window != NULL); gdk_window_clear_area (window, x, y, w, h); gtk_widget_draw (widget, NULL); } */ /* */ void VDKPixmap::Clear() { if(! pixmapWid) return; GtkWidget* wid; GdkPixmap *pix; wid = pixmapWid; if(pixmap) pix = pixmap; else if(oldRawPix) pix = *oldRawPix; else pix = NULL; // GdkPixmap *pix = pixmap ? pixmap : oldRawPix ? *oldRawPix : NULL ; if(pix) { gdk_draw_rectangle(pix, wid->style-> bg_gc[GTK_WIDGET_STATE(wid)], TRUE, 0, 0, wid->allocation.width, wid->allocation.height); gtk_widget_queue_draw(wid); } // gtk_widget_draw(wid,NULL); } vdk-2.4.0/vdk/progressbar.cc0000644000000000000000000000411707446637267011404 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include #include #include /* */ VDKProgressBar::VDKProgressBar(VDKForm* owner, double min , double max): VDKObject(owner),min(min),max(max), Value("Value",this,min,&VDKProgressBar::Update,&VDKProgressBar::Position), BlockCount("Block Count", this,0,&VDKProgressBar::SetBlockCount), BarStyle("Bar Style", this,GTK_PROGRESS_CONTINUOUS,&VDKProgressBar::SetBarStyle), BarOrientation("Bar Orientation", this,GTK_PROGRESS_LEFT_TO_RIGHT,&VDKProgressBar::SetBarOrientation), ActivityMode("Activity Mode",this,false,&VDKProgressBar::SetActivityMode) { GtkAdjustment * adj = (GtkAdjustment *) gtk_adjustment_new (min, min, max, 0, 0, 0); widget = gtk_progress_bar_new_with_adjustment (adj); ConnectDefaultSignals(); } /* */ VDKProgressBar::~VDKProgressBar() { } /* */ void VDKProgressBar::Update(double val) { assert(min != max); double scale = (val-min)/(max-min); gtk_progress_bar_update(GTK_PROGRESS_BAR(widget),scale); } /* */ double VDKProgressBar::Position() { double p = gtk_progress_get_current_percentage(GTK_PROGRESS(widget)); p = p*(max-min) + min; return p; } vdk-2.4.0/vdk/radiobtngroup.cc0000644000000000000000000001162007446637267011727 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/radiobtngroup.h" #include "vdk/forms.h" #include static int defaultFlag = 0; // stop emit if raised void VDKRadioButtonGroup::ToggleEvent(GtkWidget *wid, gpointer gp) { g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKRadioButton* buttonToggled = reinterpret_cast (gp); VDKRadioButtonGroup* group = buttonToggled->Group(); int t = 0; int toggled = -1; if(defaultFlag) { defaultFlag--; return; } RadioButtonListIterator li(group->Buttons); for(;li;li++,t++) { if(li.current() == buttonToggled) { toggled = t; break; } } if(toggled < 0) return; bool active = GTK_TOGGLE_BUTTON(wid)->active ? true : false; buttonToggled->Checked(active); if(active) { group->Selected(toggled); group->SignalEmit(toggled_signal); group->SignalEmit("toggled"); } } /* */ VDKRadioButton::VDKRadioButton( VDKRadioButtonGroup* group, char* label): VDKCheckButton(group->Owner(),label),rbgroup(group) { gtk_signal_disconnect(GTK_OBJECT(widget),connectId); gtk_widget_destroy(widget); /* if(! rbgroup->GsGroup()) { widget = gtk_radio_button_new_with_label(NULL,label); rbgroup->GsGroup(gtk_radio_button_group(GTK_RADIO_BUTTON(widget))); } else { // GtkWidget* wid = rbgroup->Buttons[rbgroup->Buttons.size()-1]->Widget(); widget = gtk_radio_button_new_with_label(rbgroup->GsGroup(),label); rbgroup->GsGroup(gtk_radio_button_group(GTK_RADIO_BUTTON(widget))); } */ widget = gtk_radio_button_new_with_label( rbgroup->GsGroup() ? rbgroup->GsGroup() : NULL, label); rbgroup->GsGroup(gtk_radio_button_group(GTK_RADIO_BUTTON(widget))); gtk_signal_connect(GTK_OBJECT(widget),"toggled", GTK_SIGNAL_FUNC(VDKRadioButtonGroup::ToggleEvent), (gpointer) this); rbgroup->GBox()->Add(this); rbgroup->Buttons.add(this); } /* */ VDKRadioButton::VDKRadioButton(VDKForm* owner,char* label): VDKCheckButton(owner,label),rbgroup(NULL) { } /* */ void VDKRadioButtonGroup::Add(VDKObject* obj, int , int , int , int ) { char* label; VDKRadioButton* radiobutton = dynamic_cast(obj); g_return_if_fail(radiobutton != NULL); label = new char[std::strlen(((char*)radiobutton->Caption))+1]; std::strcpy(label,(char*)radiobutton->Caption); gtk_signal_disconnect(GTK_OBJECT(radiobutton->widget), radiobutton->connectId); gtk_widget_destroy(radiobutton->widget); radiobutton->widget = gtk_radio_button_new_with_label( gs_group ? gs_group : NULL,label); gs_group = gtk_radio_button_group(GTK_RADIO_BUTTON(radiobutton->widget)); gtk_signal_connect(GTK_OBJECT(radiobutton->widget),"toggled", GTK_SIGNAL_FUNC(VDKRadioButtonGroup::ToggleEvent), (gpointer) radiobutton); box->Add(radiobutton); Buttons.add(radiobutton); radiobutton->Group(this); delete label; } /* */ VDKRadioButtonGroup::VDKRadioButtonGroup(VDKForm* owner, int mode): VDKObjectContainer(owner), Selected( "Selected", this, 0, &VDKRadioButtonGroup::SetSelected ), ButtonList("ButtonList",this,NULL) { box = new VDKEventBox(owner,mode); widget = box->Widget(); owner->Objects().add(box); gs_group = NULL; ButtonList(&Buttons); } /* */ void VDKRadioButtonGroup::RemoveButton(VDKRadioButton* button) { if(Buttons.remove(button)) { button->Visible = false; if(Buttons.size() <= 0) gs_group = NULL; if (GTK_WIDGET_VISIBLE (widget)) gtk_widget_queue_resize (GTK_WIDGET (widget)); } } /* */ void VDKRadioButtonGroup::SetDefault(int bn) { if(bn >= 0 && bn < Buttons.size()) { defaultFlag+=2; // deny "toggled" signal processing GtkWidget* wid = Buttons[bn]->Widget(); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(wid),TRUE); Selected(bn); } } void VDKRadioButtonGroup::SetSelected(int index) { if(index >= 0 && index < Buttons.size()) Buttons[index]->Checked = true; } vdk-2.4.0/vdk/rawobj.cc0000644000000000000000000000315207446637270010327 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/rawobj.h" #include "vdk/vdkobj.h" #include "vdk/forms.h" #include #include #ifdef VDKDEBUG extern int objectC; extern int objectD; #endif /* */ VDKRawObject::VDKRawObject(VDKObject* owner): owner(owner) { if(owner) { owner->raws.add(this); #ifdef VDKDEBUG objectC++; #endif } } /* */ bool VDKRawObject::Destroy() { RawList *raws = &owner->raws; if(raws->remove(this)) { #ifdef VDKDEBUG printf("\n(raw) destroyed:%p",this); fflush(stdout); #endif delete this; return true; } else return false; } /* */ VDKRawObject::~VDKRawObject() { #ifdef VDKDEBUG objectD++; #endif } vdk-2.4.0/vdk/rawpixbuf.cc0000644000000000000000000000325607446637270011057 /* * =========================== * VDK Visual Development Kit * Version 2.0 * February 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include #include #include /* constructor */ VDKPixbuf::VDKPixbuf(VDKObject* owner, const char* pixfile): VDKRawObject(owner) { pixbuf = gdk_pixbuf_new_from_file(pixfile,NULL); if(pixbuf) { w = gdk_pixbuf_get_width(pixbuf); h = gdk_pixbuf_get_height(pixbuf); } else { w = -1; h = -1; } } /* */ VDKPixbuf::VDKPixbuf(VDKObject* owner,const char** pixdata): VDKRawObject(owner) { pixbuf = gdk_pixbuf_new_from_xpm_data (pixdata); if(pixbuf) { w = gdk_pixbuf_get_width(pixbuf); h = gdk_pixbuf_get_height(pixbuf); } } /* destructor */ VDKPixbuf::~VDKPixbuf() { if(pixbuf) gdk_pixbuf_unref(pixbuf); } vdk-2.4.0/vdk/rawpixmap.cc0000644000000000000000000001321607446637270011055 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/rawpixmap.h" #include "vdk/forms.h" #include "gdk/gdkprivate.h" #include static gint pixmap_read_string (FILE *infile, gchar **buffer, guint *buffer_size); static gint pixmap_seek_string (FILE *infile, const gchar *str, gint skip_comments); static gint pixmap_seek_char (FILE *infile, gchar c); void PixSize(int* width, int* height, char* filename); /* constructor */ VDKRawPixmap::VDKRawPixmap(VDKObject* owner, char* pixfile): VDKRawObject(owner) { GtkWidget* widget = owner->Widget(); GdkWindow* window = widget->window; #if HAVE_GNOME if(! window) { gtk_widget_realize(widget); window = widget->window; } #endif if(! window) { pixmap = NULL; style = NULL; } else { style = gtk_widget_get_style(widget); pixmap = gdk_pixmap_create_from_xpm(window, &mask, &style->bg[GTK_STATE_NORMAL], pixfile); PixSize(&w,&h,pixfile); } } /* */ VDKRawPixmap::VDKRawPixmap(VDKObject* owner,char** pixdata): VDKRawObject(owner) { GtkWidget* widget = owner->Widget(); GdkWindow* window = widget->window; if(! window) { pixmap = NULL; style = NULL; } else { style = gtk_widget_get_style(widget); pixmap = gdk_pixmap_create_from_xpm_d(window, &mask, &style->bg[GTK_STATE_NORMAL], pixdata); sscanf(pixdata[0],"%d %d", &w, &h); } } /* destructor */ VDKRawPixmap::~VDKRawPixmap() { if(pixmap) { /* STUB GdkWindowPrivate *p = (GdkWindowPrivate *) pixmap; if(p->ref_count > 0) gdk_pixmap_unref(pixmap); */ } } /* */ void VDKRawPixmap::Paint(int x, int y) { // if(x != 0 && y != 0) lastDraw = VDKPoint(x,y); GtkWidget* widget = owner->Widget(); if(!pixmap) return; GdkWindow* window = widget->window; gdk_draw_pixmap(window, widget->style->bg_gc[GTK_WIDGET_STATE(widget)], pixmap, 0, 0, x ? x : lastDraw.X(), y ? y : lastDraw.Y(), w, h); } void VDKRawPixmap::Paint(bool lastdraw, GdkWindow* window, int x, int y) { if(!lastdraw) lastDraw = VDKPoint(x,y); if(!pixmap) return; GtkWidget* widget = owner->Widget(); if (!window) window = widget->window; gdk_draw_pixmap(window, widget->style->bg_gc[GTK_WIDGET_STATE(widget)], pixmap, 0, 0, x ? x : lastDraw.X(), y ? y : lastDraw.Y(), w, h); } //================================= gint pixmap_read_string (FILE *infile, gchar **buffer, guint *buffer_size) { gint c; guint cnt = 0; if ((*buffer) == NULL) { (*buffer_size) = 10 * sizeof (gchar); (*buffer) = g_new(gchar, *buffer_size); } do c = getc (infile); while (c != EOF && c != '"'); if (c != '"') return FALSE; while ((c = getc(infile)) != EOF) { if (cnt == (*buffer_size)) { guint new_size = (*buffer_size) * 2; if (new_size > (*buffer_size)) *buffer_size = new_size; else return FALSE; (*buffer) = (gchar *) g_realloc ((*buffer), *buffer_size); } if (c != '"') (*buffer)[cnt++] = c; else { (*buffer)[cnt++] = 0; return TRUE; } } return FALSE; } gint pixmap_seek_string (FILE *infile, const gchar *str, gint skip_comments) { char instr[1024]; while (!feof (infile)) { fscanf (infile, "%1023s", instr); if (skip_comments == TRUE && std::strcmp (instr, "/*") == 0) { fscanf (infile, "%1023s", instr); while (!feof (infile) && std::strcmp (instr, "*/") != 0) fscanf (infile, "%1023s", instr); fscanf(infile, "%1023s", instr); } if (std::strcmp (instr, str)==0) return TRUE; } return FALSE; } gint pixmap_seek_char (FILE *infile, gchar c) { gint b, oldb; while ((b = getc(infile)) != EOF) { if (c != b && b == '/') { b = getc (infile); if (b == EOF) return FALSE; else if (b == '*') /* we have a comment */ { b = -1; do { oldb = b; b = getc (infile); if (b == EOF) return FALSE; } while (!(oldb == '*' && b == '/')); } } else if (c == b) return TRUE; } return FALSE; } void PixSize(int* width, int* height, char* filename) { FILE *infile = NULL; char *buffer = NULL; guint buffer_size = 0; infile = fopen (filename, "rb"); if ( (infile) && (pixmap_seek_string (infile, "XPM", FALSE) == TRUE)) { if (pixmap_seek_char (infile,'{') == TRUE) { pixmap_seek_char (infile, '"'); fseek (infile, -1, SEEK_CUR); pixmap_read_string (infile, &buffer, &buffer_size); sscanf (buffer,"%d %d", width, height); } else *width = *height = 0; fclose(infile); } else *width = *height = 0; } vdk-2.4.0/vdk/scrolled.cc0000644000000000000000000000476507446637271010666 /* * =========================== * VDK Visual Development Kit * Version 0.5 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/scrolled.h" #include "vdk/forms.h" /* */ VDKScrolled::VDKScrolled(VDKForm* owner,int mode) :VDKObjectContainer(owner), BorderShadow("BorderShadow",this, GTK_SHADOW_IN, &VDKScrolled::SetBorderShadow) { widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),GTK_SHADOW_IN); //ConnectDefaultSignals(); } /* */ VDKScrolled::~VDKScrolled() {} /* */ void VDKScrolled::Add(VDKObject* obj, int , int, int , int ) { AddWithViewport(obj); } /* */ void VDKScrolled::AddWithoutViewport(VDKObject* obj, int justify, int expand, int fill , int padding) { gtk_container_add(GTK_CONTAINER(widget),obj->Widget()); // calls ancestor (B.Liskov docet...) VDKObjectContainer::Add(obj,0,0,0,0); } /* */ void VDKScrolled::AddWithViewport(VDKObject* obj) { gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(widget), obj->Widget()); gtk_container_set_focus_hadjustment ( GTK_CONTAINER (obj->Widget()), gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (widget))); gtk_container_set_focus_vadjustment (GTK_CONTAINER (obj->Widget()), gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (widget))); // calls ancestor (B.Liskov docet...) VDKObjectContainer::Add(obj,0,0,0,0); } /* */ void VDKScrolled::SetBorderShadow(GtkShadowType bs) { gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget),bs); } vdk-2.4.0/vdk/separator.cc0000644000000000000000000000231307446637271011042 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/separator.h" /* */ VDKSeparator::VDKSeparator(VDKForm* owner ,int mode): VDKObject(owner) { widget = mode == h_separator ? gtk_hseparator_new(): gtk_vseparator_new(); ConnectDefaultSignals(); } /* */ VDKSeparator::~VDKSeparator() { } vdk-2.4.0/vdk/slider.cc0000644000000000000000000000661707446637272010340 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/slider.h" #include "vdk/forms.h" /* the signal sender is the adjustment inside scale widget. */ void VDKSlider::ValueChanged(GtkWidget *wid, gpointer gp) { g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKSlider* obj = reinterpret_cast (gp); obj->Value(GTK_ADJUSTMENT(wid)->value); obj->SignalEmit(value_changed_signal); #ifdef USE_SIGCPLUSPLUS obj->OnSliderValueChanged(obj, obj->Value); #endif /* USE_SIGCPLUSPLUS */ } VDKSlider::VDKSlider(VDKForm* owner, float defValue, float lower, float upper, float step, int mode, int w, int h): VDKObject(owner), Value("Value",this,defValue,&VDKSlider::SetValue), Digits("Digits",this,1,&VDKSlider::SetDigits), UpdatePolicy("UpdatePolicy",this,update_discontinuos, &VDKSlider::SetUpdatePolicy), LowerBound("LowerBound",this,lower,&VDKSlider::SetLowerBound, &VDKSlider::GetLowerBound), UpperBound("UpperBound",this,lower,&VDKSlider::SetUpperBound, &VDKSlider::GetUpperBound), Step("Step",this,step, &VDKSlider::SetStep, &VDKSlider::GetStep) { adj = gtk_adjustment_new (defValue, lower, upper+step, step, step, step); widget = mode == h_box ? gtk_hscale_new (GTK_ADJUSTMENT (adj)) : gtk_vscale_new (GTK_ADJUSTMENT (adj)); gtk_widget_set_size_request (GTK_WIDGET (widget), w, h); gtk_range_set_update_policy (GTK_RANGE (widget), (GtkUpdateType) update_discontinuos); gtk_scale_set_digits (GTK_SCALE (widget), 1); gtk_scale_set_draw_value (GTK_SCALE (widget), TRUE); gtk_signal_connect(adj,"value_changed", GTK_SIGNAL_FUNC(VDKSlider::ValueChanged), (gpointer) this); ConnectDefaultSignals(); } VDKSlider::~VDKSlider() { } void VDKSlider::SetValue(float f) { /* GtkWidget* widget = WrappedWidget(); GtkRange* range = &(GTK_SCALE(widget)->range); GtkAdjustment* adj = gtk_range_get_adjustment(range); */ // setting value gtk_adjustment_set_value(GTK_ADJUSTMENT(adj),f); Value(f); } float VDKSlider::GetStep(void) { return GTK_ADJUSTMENT(adj)->step_increment; } void VDKSlider::SetStep(float f) { GTK_ADJUSTMENT(adj)->step_increment = f; } float VDKSlider::GetLowerBound(void) { return GTK_ADJUSTMENT(adj)->lower; } void VDKSlider::SetLowerBound(float f) { GTK_ADJUSTMENT(adj)->lower = f; } float VDKSlider::GetUpperBound(void) { return GTK_ADJUSTMENT(adj)->upper; } void VDKSlider::SetUpperBound(float f) { GTK_ADJUSTMENT(adj)->upper = f; } vdk-2.4.0/vdk/spins.cc0000644000000000000000000001134207446637272010201 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/spins.h" #include "vdk/forms.h" #include "vdk/colors.h" /* */ void VDKSpinButton::OnValueChanged(GtkWidget *wid, gpointer gp) { g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKSpinButton* obj = reinterpret_cast(gp); obj->SignalEmit("value_changed"); #ifdef USE_SIGCPLUSPLUS obj->OnSpinValueChanged(obj, obj->GetValueAsFloat()); #endif } /* */ VDKSpinButton::VDKSpinButton(VDKForm* owner, float defValue, float lower, float upper, float step, float climb): VDKObject(owner), ValueAsFloat("ValueAsFloat",this,defValue, &VDKSpinButton::SetValueAsFloat, &VDKSpinButton::GetValueAsFloat), ValueAsInt("ValueAsInt",this,int(defValue), &VDKSpinButton::GetValueAsInt), Digits("Digits",this,1, &VDKSpinButton::SetDigits), LowerBound("LowerBound",this,0.0, &VDKSpinButton::SetLowerBound, &VDKSpinButton::GetLowerBound), UpperBound("UpperBound",this,1.0, &VDKSpinButton::SetUpperBound, &VDKSpinButton::GetUpperBound) { adj = gtk_adjustment_new (defValue, lower, upper, step, step, step); widget = gtk_spin_button_new (GTK_ADJUSTMENT (adj), climb, 1); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (widget), TRUE); s_value_changed.obj = this; s_value_changed.signal = value_changed_signal; gtk_signal_connect(adj,"value_changed", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_value_changed); gtk_signal_connect(adj,"value_changed", GTK_SIGNAL_FUNC(VDKSpinButton::OnValueChanged), (gpointer) this); ConnectDefaultSignals(); LowerBound(lower); UpperBound(upper); } VDKSpinButton::~VDKSpinButton() { } void VDKSpinButton::SetDigits(int digits) { gtk_spin_button_set_digits(GTK_SPIN_BUTTON(widget), digits); } int VDKSpinButton::GetValueAsInt() { return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget)); } void VDKSpinButton::SetValueAsFloat(float f) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(widget),f); } float VDKSpinButton::GetValueAsFloat() { return gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(widget)); } void VDKSpinButton::SetLowerBound(float f) { GtkAdjustment* adjustment = GTK_SPIN_BUTTON(widget)->adjustment; if(adjustment) adjustment->lower = f; } float VDKSpinButton::GetLowerBound() { GtkAdjustment* adjustment = GTK_SPIN_BUTTON(widget)->adjustment; return adjustment ? adjustment->lower : 0.0; } void VDKSpinButton::SetUpperBound(float f) { GtkAdjustment* adjustment = GTK_SPIN_BUTTON(widget)->adjustment; if(adjustment) adjustment->upper = f; } float VDKSpinButton::GetUpperBound() { GtkAdjustment* adjustment = GTK_SPIN_BUTTON(widget)->adjustment; return adjustment ? adjustment->upper : 0.0; } void VDKSpinButton::SetForeground(VDKRgb color, GtkStateType state) { VDKColor *vdkcolor = NULL; if(!GTK_IS_WIDGET(widget)) return; else { GtkSpinButton *spin = GTK_SPIN_BUTTON(widget); GtkEntry * entry = &(spin->entry); // vdkcolor = new VDKColor(/*Owner() ? Owner() : */this ,color); vdkcolor = new VDKColor(Owner() ? static_cast(Owner()) : static_cast(this) ,color); gtk_widget_modify_text (GTK_WIDGET(entry), state, vdkcolor->Color()); } } void VDKSpinButton::SetBackground(VDKRgb color, GtkStateType state) { VDKColor *vdkcolor = NULL; if(!GTK_IS_WIDGET(widget)) return; else { GtkSpinButton *spin = GTK_SPIN_BUTTON(widget); GtkEntry * entry = &(spin->entry); // vdkcolor = new VDKColor(/*Owner() ? Owner() : */this ,color); vdkcolor = new VDKColor(Owner() ? static_cast(Owner()) : static_cast(this) ,color); gtk_widget_modify_base (GTK_WIDGET(entry), state, vdkcolor->Color()); } } vdk-2.4.0/vdk/statusbar.cc0000644000000000000000000000313207446637272011053 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/statusbar.h" #include "vdk/forms.h" /* */ VDKStatusbar::VDKStatusbar(VDKForm* owner): VDKObject(owner), Shadow("Shadow",this,shadow_in,&VDKStatusbar::SetShadow) { widget = gtk_statusbar_new(); contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(widget), "#no context#"); items.add(new VDKObject(owner, GTK_STATUSBAR(widget)->frame)); items.add(new VDKObject(owner, GTK_STATUSBAR(widget)->label)); ConnectDefaultSignals(); } /* */ VDKStatusbar::~VDKStatusbar() { /* umh, seems that GTkStatusbar make memory freeing within "internals" */ //while (GTK_STATUSBAR(widget)->messages) //Pop(); } vdk-2.4.0/vdk/tables.cc0000644000000000000000000000553307446637273010325 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * Update to VDK 0.5.0 * by mm 12.13.1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/tables.h" #include "vdk/forms.h" VDKTable::VDKTable(VDKForm* owner, int rows, int cols, int homogeneous): VDKObjectContainer(owner), ColSpacing("ColSpacing",this,1,&VDKTable::SetColSpacings), RowSpacing("RowSpacing",this,1,&VDKTable::SetRowSpacings) { widget = gtk_table_new(rows,cols,homogeneous); gtk_table_set_row_spacings(GTK_TABLE(widget),1); gtk_table_set_col_spacings(GTK_TABLE(widget),1); } /* */ VDKTable::~VDKTable() { } /* Simple attachment, (use defaults) */ void VDKTable::Add(VDKObject* obj, int left_attach, int right_attach, int top_attach, int bot_attach) { gtk_table_attach_defaults(GTK_TABLE(widget), obj->Widget(), left_attach, right_attach, top_attach, bot_attach); VDKObjectContainer::Add(obj,0,0,0,0); } /* Easier attachment that use same args both for x,y direction. Args: row,col: table cell coordinates where put object opt: if you like to fill/expand (valid for both x,y) padding: if you want pad or not (both x,y) For more precise adding use AddExt() */ void VDKTable:: AddToCell(VDKObject* obj, int row, int col, int opt, int padding) { gtk_table_attach(GTK_TABLE(widget), obj->Widget(), col,col+1,row,row+1, GtkAttachOptions(opt), GtkAttachOptions(opt), padding,padding); VDKObjectContainer::Add(obj,0,0,0,0); } /* Extended attachment all args set by user */ void VDKTable::AddExt(VDKObject* obj, int l_a, // left attach int r_a, // right attach int t_a, //top attach int b_a, // bottom attach int x_o, // x options int y_o, // y options int x_p, // x padding int y_p) // y padding { gtk_table_attach(GTK_TABLE(widget), obj->Widget(), l_a,r_a,t_a,b_a, GtkAttachOptions(x_o), GtkAttachOptions(y_o),x_p,y_p); VDKObjectContainer::Add(obj,0,0,0,0); } vdk-2.4.0/vdk/timer.cc0000644000000000000000000000433307446637273010170 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/timer.h" #include "vdk/forms.h" /* */ VDKTimer::VDKTimer(VDKForm* owner,unsigned int tick, bool start): VDKObject(owner),tick(tick), TimeTick("TimeTick",this,tick,&VDKTimer::SetTimeTick) { timerId = gtk_timeout_add(tick,VDKTimer::HandleTimerTick,this); started = start; owner->Objects().add(this); Parent(owner); } /* */ void VDKTimer::SetTimeTick(unsigned int t) { if((t > 0) && (timerId) ) { gtk_timeout_remove(timerId); timerId = gtk_timeout_add(t,VDKTimer::HandleTimerTick,this); TimeTick(t); } } /* */ VDKTimer::~VDKTimer() { if(timerId) { gtk_timeout_remove(timerId); timerId = 0; } } /* */ void VDKTimer::Stop() { if(! started) return; else { started = false; #ifdef USE_SIGCPLUSPLUS OnTimerRunning(this,false); #endif } } /* */ void VDKTimer::Start() { if(started) return; else{ started = true; #ifdef USE_SIGCPLUSPLUS OnTimerRunning(this,true); #endif /* USE_SIGCPLUSPLUS */ } } /* */ int VDKTimer::HandleTimerTick(gpointer gp) { VDKTimer* timer = reinterpret_cast(gp); if(timer->started) { timer->SignalEmit(timer_tick_signal); timer->SignalEmit("timer_tick_signal"); #ifdef USE_SIGCPLUSPLUS timer->OnTimerTick(timer); #endif /* USE_SIGCPLUSPLUS */ } return TRUE; } vdk-2.4.0/vdk/toolbar.cc0000644000000000000000000001270407455236547010512 /* * =========================== * VDK Visual Development Kit * Version 0.4 * revision to 0.5.0 * October,November 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/toolbar.h" #include "vdk/forms.h" #include "vdk/vdkobj.h" #include "vdk/colors.h" #define DEFAULT_SPACE_SIZE 5 #define DEFAULT_SPACE_STYLE GTK_TOOLBAR_SPACE_EMPTY /* */ static GtkWidget* new_pixmap_data (char **pixdata, GdkWindow *window, GdkColor *background); static GtkWidget* new_pixmap_file (char *pixfile, GdkWindow *window, GdkColor *background); /* */ void VDKToolbar::ButtonSignal(GtkWidget *wid, gpointer gp) { int t = 0; g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKToolbar* toolbar = reinterpret_cast (gp); GtkWidgetListIterator li(toolbar->widgets); for(;li;li++,t++) if(wid == li.current()) break; if(t < toolbar->widgets.size()) { toolbar->ButtonPressed(t); toolbar->SignalEmit(clicked_signal); } } /* */ VDKToolbar::VDKToolbar(VDKForm* owner, GtkOrientation orientation): VDKObjectContainer(owner), WidgetList("WidgetList",this,NULL), ButtonList("ButtonList",this,NULL), ButtonPressed("ButtonPressed",this,-1), Orientation("Orientation", this, GTK_ORIENTATION_HORIZONTAL, &VDKToolbar::SetOrientation), Style("Style",this,GTK_TOOLBAR_ICONS,&VDKToolbar::SetStyle), SpaceStyle("SpaceStyle", this, DEFAULT_SPACE_STYLE, &VDKToolbar::SetSpaceStyle, &VDKToolbar::GetSpaceStyle), Borderless("Borderless",this,true,&VDKToolbar::SetBorderless), Relief ("Relief", this, GTK_RELIEF_NONE, &VDKToolbar::SetRelief), Spacing("Spacing",this,DEFAULT_SPACE_SIZE,&VDKToolbar::SetSpacing) { widget = gtk_toolbar_new(/*orientation,GTK_TOOLBAR_ICONS*/); WidgetList(&toolWidgets); ButtonList(&widgets); } void VDKToolbar::AddWidget(VDKObject* obj,char* tip) { gtk_toolbar_append_widget(GTK_TOOLBAR(widget), obj->Widget(), tip,NULL); //gtk_widget_show(obj->Widget()); // items.add(obj); toolWidgets.add(obj); //obj->Parent(this); // obj->Setup(); VDKObjectContainer::Add(obj,l_justify,0,0,0); } /* */ void VDKToolbar::AddButton(char** pixdata, char* tip, char* text) { GtkWidget *button; GtkWidget *pixmap = pixdata ? new_pixmap_data (pixdata, Owner()->Window()->window, &widget->style->bg[GTK_STATE_NORMAL]) : NULL ; button = gtk_toolbar_append_item (GTK_TOOLBAR (widget), text, NULL, NULL, pixmap, GTK_SIGNAL_FUNC(VDKToolbar::ButtonSignal), (gpointer) this); VDKObject* tbutton = new VDKObject(Owner(),button); Owner()->Items().add(tbutton); tool_buttons.add(tbutton); if(tip) tbutton->SetTip(tip); widgets.add(button); return ; } void VDKToolbar::AddButton(char* pixfile, char* tip, char* text) { GtkWidget *button; GtkWidget *pixmap = pixfile ? new_pixmap_file (pixfile, Owner()->Window()->window, &widget->style->bg[GTK_STATE_NORMAL]) : NULL ; button = gtk_toolbar_append_item (GTK_TOOLBAR (widget), text, NULL, NULL, pixmap, GTK_SIGNAL_FUNC(VDKToolbar::ButtonSignal), (gpointer) this); VDKObject* tbutton = new VDKObject(Owner(),button); Owner()->Items().add(tbutton); tool_buttons.add(tbutton); if(tip) tbutton->SetTip(tip); widgets.add(button); return ; } void VDKToolbar::SetRelief(GtkReliefStyle style) { GList *children; GtkToolbarChild *child; GtkToolbar* tbar = GTK_TOOLBAR(WrappedWidget()); for (children = tbar->children; children; children = children->next) { child = (GtkToolbarChild *) children->data; if (child->type == GTK_TOOLBAR_CHILD_BUTTON || child->type == GTK_TOOLBAR_CHILD_RADIOBUTTON || child->type == GTK_TOOLBAR_CHILD_TOGGLEBUTTON) gtk_button_set_relief (GTK_BUTTON (child->widget), GTK_RELIEF_NONE); } gtk_widget_queue_resize (GTK_WIDGET (tbar)); } GtkWidget* new_pixmap_data (char **pixdata, GdkWindow *window, GdkColor *background) { GtkWidget *wpixmap; GdkPixmap *pixmap; GdkBitmap *mask; pixmap = gdk_pixmap_create_from_xpm_d (window, &mask, background, pixdata); wpixmap = gtk_pixmap_new (pixmap, mask); return wpixmap; } GtkWidget* new_pixmap_file (char *pixfile, GdkWindow *window, GdkColor *background) { GtkWidget *wpixmap; GdkPixmap *pixmap; GdkBitmap *mask; pixmap = gdk_pixmap_create_from_xpm (window, &mask, background, pixfile); wpixmap = gtk_pixmap_new (pixmap, mask); return wpixmap; } vdk-2.4.0/vdk/tooltips.cc0000644000000000000000000000535307466175605010726 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/tooltips.h" #include "vdk/colors.h" #include "vdk/vdkcustom.h" #include VDKTooltip::VDKTooltip(VDKForm* owner,VDKObject *tipped, char* tipString, int delay): VDKObject(owner),tipped(tipped),delay(delay) { GtkWidget* tippedGtkWidget = NULL; VDKCustom* custom = NULL; tooltip = gtk_tooltips_new(); widget = (GtkWidget*) tooltip; if( (custom = dynamic_cast(tipped)) ) tippedGtkWidget = custom->CustomWidget(); else tippedGtkWidget = tipped->WrappedWidget(); if(tipString) { tip = new char[std::strlen(tipString)+1]; std::strcpy(tip,tipString); gtk_tooltips_set_tip(tooltip,tippedGtkWidget,tip,NULL); gtk_tooltips_set_delay(tooltip,delay ? delay : 700); gtk_tooltips_force_window (tooltip); } tipped->AddItem(this); } VDKTooltip::~VDKTooltip() { delete[] tip; } void VDKTooltip::SetColors(int fred, int fgreen, int fblue, int bred, int bgreen, int bblue) { /* VDKColor *back = new VDKColor(Owner(),bred,bgreen,bblue); VDKColor *fore = new VDKColor(Owner(),fred,fgreen,fblue); gtk_tooltips_set_colors (tooltip, *back, *fore); */ } void VDKTooltip::SetDelay(int delay) { gtk_tooltips_set_delay(tooltip,delay); } void VDKTooltip::SetTip(char* tipString) { GtkWidget* tippedGtkWidget = NULL; VDKCustom* custom = NULL; if(tip) delete[] tip; tip = new char[std::strlen(tipString)+1]; std::strcpy(tip,tipString); tooltip = gtk_tooltips_new(); widget = (GtkWidget*) tooltip; if( (custom = dynamic_cast(tipped)) ) tippedGtkWidget = custom->CustomWidget(); else tippedGtkWidget = tipped->WrappedWidget(); gtk_tooltips_set_tip(tooltip,tippedGtkWidget,tip,NULL); gtk_tooltips_set_delay(tooltip,delay ? delay : 700); gtk_tooltips_force_window (tooltip); } vdk-2.4.0/vdk/vdkcalendar.cc0000644000000000000000000001152507446637274011330 /* * =========================== * VDK Visual Development Kit * Version 0.6 * Revision 7 * September 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /* OVERVIEW -------- This file has the aim to be a footstep that shows how to make a gtk+ widget wrapper in vdk. We choose here to wrap gtk_calendar() widget. */ #include #include /* */ VDKCalendar::VDKCalendar(VDKForm* owner): VDKObject(owner), /* this part initializes properties: args: name conventionally we use a string equal to name this obvious default value the property init value setting fun which function will be called when the user writes: property = value; getting fun which function will be called when the user writes: value = property; */ DisplayOptions("DisplayOptions",this,GTK_CALENDAR_SHOW_HEADING, &VDKCalendar::SetDisplayOptions, (GtkCalendarDisplayOptions (VDKCalendar::*)(void)) NULL), SelectedDate("SelectedDate",this,calendardate(), &VDKCalendar::GetSelectedDate, (void (VDKCalendar::*)(calendardate)) NULL), SelectedDay("SelectedDay",this,0, &VDKCalendar::SetSelectedDay, (int (VDKCalendar::*)(void)) NULL), SelectedMonth("SelectedMonth",this,VDKPoint(0,0), &VDKCalendar::SetSelectedMonth, (VDKPoint (VDKCalendar::*)(void)) NULL) { // actually make the gtk widget // and assign widget pointer widget = gtk_calendar_new(); calendardate today; // by default gtk_calendar opens on 1st day of the current month // we select today as well SelectedDay = today.Day(); // marks today in bold face gtk_calendar_mark_day ( GTK_CALENDAR(widget), today.Day()); // connecting signal handlers // we pass as user data arg so static handler can // access to calendar gtk_signal_connect (GTK_OBJECT (widget), "day_selected", GTK_SIGNAL_FUNC (VDKCalendar::DaySelectedHandler), (gpointer) this); gtk_signal_connect (GTK_OBJECT (widget), "day_selected_double_click", GTK_SIGNAL_FUNC (VDKCalendar::DaySelectedDoubleClickHandler), (gpointer)this); ConnectDefaultSignals(); } /* */ VDKCalendar::~VDKCalendar() { // nothing to do } /* ----------------------- signal handling section ---------------------- */ void VDKCalendar::DaySelectedHandler(GtkWidget* widget, gpointer p) { /* some usual checks for safety */ g_return_if_fail(widget != NULL); g_return_if_fail(p != NULL); /* cast to vdkcalendar */ VDKCalendar* obj = reinterpret_cast(p); // month,year selected (month base = 1) VDKPoint point(GTK_CALENDAR(widget)->month+1,GTK_CALENDAR(widget)->year); // set properties using a raw write obj->SelectedDay(GTK_CALENDAR(widget)->selected_day); obj->SelectedMonth(point); // feeds signal into vdk system obj->SignalEmit(day_select_signal); } void VDKCalendar::DaySelectedDoubleClickHandler(GtkWidget* widget, gpointer p) { /* same as above */ g_return_if_fail(widget != NULL); g_return_if_fail(p != NULL); VDKCalendar* obj = reinterpret_cast(p); VDKPoint point(GTK_CALENDAR(widget)->month+1,GTK_CALENDAR(widget)->year); obj->SelectedDay(GTK_CALENDAR(widget)->selected_day); obj->SelectedMonth(point); obj->SignalEmit(day_selected_double_click); } /* ---------------------------- properties handling section ---------------------------- */ void VDKCalendar::SetDisplayOptions(GtkCalendarDisplayOptions options) { gtk_calendar_display_options (GTK_CALENDAR(widget),options); } /* */ calendardate VDKCalendar::GetSelectedDate() { unsigned int day,month,year; GtkCalendar* calendar = GTK_CALENDAR(widget); gtk_calendar_get_date(calendar, &year, &month, &day); // months base 0 in gtk+ return calendardate(day,month+1,year); } /* */ void VDKCalendar::SetSelectedDay(int day) { gtk_calendar_select_day(GTK_CALENDAR(widget),day); } /* */ void VDKCalendar::SetSelectedMonth(VDKPoint p) { // gtk+ month base = 0 gtk_calendar_select_month(GTK_CALENDAR(widget), p.x-1, p.y); } vdk-2.4.0/vdk/vdkcomboentry.cc0000644000000000000000000001414110031743100011677 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.4 * March 2004 * =========================== * * Copyright (C) 1998 - 2004 Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include int VDKComboEntry::FocusOutEvent(GtkWidget *, GdkEventFocus*, gpointer wid) { g_return_val_if_fail(wid != NULL,FALSE); VDKComboEntry* obj = reinterpret_cast(wid); obj->SignalEmit(focus_out_signal); return FALSE; } /* */ int VDKComboEntry::FocusInEvent(GtkWidget *, GdkEventFocus *, gpointer wid) { g_return_val_if_fail(wid != NULL, FALSE); VDKComboEntry* obj = reinterpret_cast(wid); obj->SignalEmit(focus_in_signal); return FALSE; } /* */ VDKComboEntry::VDKComboEntry(VDKForm* owner, char** selections): VDKObject(owner), Editable("Editable", this, true, &VDKComboEntry::SetEditable), Selected("Selected",this, -1, &VDKComboEntry::SetSelected,&VDKComboEntry::GetSelected), Text("Text", this, NULL, &VDKComboEntry::SetText, &VDKComboEntry::GetText), Selections("Selections", this, NULL, &VDKComboEntry::SetSelections, &VDKComboEntry::GetSelections), StoreModel("StoreModel",this,NULL,&VDKComboEntry::SetStoreModel), Sorted("Sorted",this,false,&VDKComboEntry::SetSorted), SortingOrder("SortingOrder",this,GTK_SORT_ASCENDING) { GtkListStore* store = gtk_list_store_new (1, G_TYPE_STRING); StoreModel(store); widget = gtk_combo_box_entry_new_with_model (GTK_TREE_MODEL (store), 0); // answering vdk signals is embedded entry widget sigwid = GTK_WIDGET(GTK_ENTRY (GTK_BIN (widget)->child)); s_activated.obj = this; s_activated.signal = activate_signal; s_changed.obj = this; s_changed.signal = changed_signal; if(selections) { GtkTreeIter iter; for(int t = 0; selections[t];t++) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, selections[t], -1); } } g_signal_connect_data (GTK_ENTRY (GTK_BIN (widget)->child), "activate", G_CALLBACK (VDKObject::VDKSignalPipe), (gpointer) &s_activated, NULL,(GConnectFlags) 0); g_signal_connect_data (widget, "changed", G_CALLBACK (VDKObject::VDKSignalPipe), (gpointer) &s_changed, NULL,(GConnectFlags) 0); gtk_signal_connect(GTK_OBJECT(GTK_ENTRY (GTK_BIN (widget)->child)), "focus_out_event", GTK_SIGNAL_FUNC(VDKComboEntry::FocusOutEvent), (gpointer) this); gtk_signal_connect(GTK_OBJECT(GTK_ENTRY (GTK_BIN (widget)->child)), "focus_in_event", GTK_SIGNAL_FUNC(VDKComboEntry::FocusInEvent), (gpointer) this); ConnectDefaultSignals(); } /* */ VDKComboEntry::~VDKComboEntry() { } /* */ void VDKComboEntry::SetSelections(StringList* selections) { // clear the StoreModel GtkTreeIter iter; gtk_list_store_clear(StoreModel); if(selections) { gtk_list_store_clear(StoreModel); StringListIterator li(*selections); for(;li;li++) { char* local = (char*) li.current(); gtk_list_store_append (StoreModel, &iter); gtk_list_store_set (StoreModel, &iter, 0, local, -1); } } } StringList* VDKComboEntry::GetSelections(void) { StringList* list = new StringList; GtkTreeIter iter; gchar *item = NULL; GtkListStore* store = StoreModel; for(bool flag = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store),&iter); flag; flag = gtk_tree_model_iter_next(GTK_TREE_MODEL(store),&iter)) { gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, 0, &item, -1); list->add(VDKString(item)); } return list; } /* */ void VDKComboEntry::SetText(char* s) { gtk_entry_set_text(GTK_ENTRY(GTK_BIN (widget)->child),s); } /* returned char* should be deleted by caller; */ char* VDKComboEntry::GetText() { const char* local = gtk_entry_get_text (GTK_ENTRY (GTK_BIN (widget)->child)); char* buffer = NULL; if(local) { buffer = new char[strlen(local)+1]; strcpy(buffer,local); } return buffer; } void VDKComboEntry::SetStoreModel(GtkListStore* store_model) { GtkListStore* store = StoreModel; g_object_unref (store); gtk_combo_box_set_model (GTK_COMBO_BOX(widget),GTK_TREE_MODEL(store_model)); return; } void VDKComboEntry::SetSorted(bool flag) { GtkListStore* store = StoreModel; GtkSortType stype = SortingOrder; if(!Sorted && store && flag) gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(store),0,stype); } /* */ void VDKComboEntry::SetBackground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_base (GTK_WIDGET(GTK_ENTRY(GTK_BIN (widget)->child)), state, color->Color()); } /* */ void VDKComboEntry::SetForeground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_text (GTK_WIDGET(GTK_ENTRY(GTK_BIN (widget)->child)), state, color->Color()); } void VDKComboEntry::SetFont(VDKFont* font) { if(!GTK_WIDGET_REALIZED(GTK_WIDGET(widget))) gtk_widget_realize(widget); GtkRcStyle *rc_style; rc_style = gtk_rc_style_new (); rc_style->font_desc = pango_font_description_copy (font->AsPangoFontDescription()); gtk_widget_modify_style (GTK_WIDGET(GTK_ENTRY(GTK_BIN (widget)->child)), rc_style); gtk_rc_style_unref (rc_style); gtk_widget_size_request (GTK_WIDGET(GTK_ENTRY(GTK_BIN (widget)->child)), NULL); } vdk-2.4.0/vdk/vdkclist.cc0000644000000000000000000002560307446637274010677 /* * =========================== * VDK Visual Development Kit * Version 0.4 * updating to 0.5 (November 98) * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/vdkclist.h" #include "vdk/forms.h" #include /* */ int VDKCustomList::RowSelection(GtkWidget* , gint row, gint column, GdkEvent *event, gpointer s) { g_return_val_if_fail(s != NULL,TRUE); VDKObjectSignal* signal = reinterpret_cast(s); VDKCustomList* obj = reinterpret_cast(signal->obj); obj->pointer = row; switch(obj->mode) { case GTK_SELECTION_EXTENDED: obj->selection = VDKPoint(row,column); obj->Selected(VDKPoint(row,column)); if(event && event->type == GDK_2BUTTON_PRESS) { if( obj->Tuples.size() > 0) obj->SignalEmit(signal->signal); obj->SignalEmit("select_row"); } break; default: obj->selection = VDKPoint(row,column); obj->Selected(VDKPoint(row,column)); obj->SignalEmit(signal->signal); obj->SignalEmit("select_row"); } #ifdef USE_SIGCPLUSPLUS obj->OnRowSelect(obj, row, column); #endif return FALSE; } /* */ int VDKCustomList::RowUnselection(GtkWidget* , gint row, gint column, GdkEventButton *, gpointer s) { g_return_val_if_fail(s != NULL,TRUE); VDKObjectSignal* signal = reinterpret_cast(s); VDKCustomList* obj = reinterpret_cast(signal->obj); if(obj->mode == GTK_SELECTION_EXTENDED) return TRUE; obj->unselection = VDKPoint(row,column); obj->Unselected(VDKPoint(row,column)); obj->selection = VDKPoint(-1,-1); obj->Selected(VDKPoint(-1,-1)); obj->SignalEmit(signal->signal); obj->SignalEmit("unselect_row"); #ifdef USE_SIGCPLUSPLUS obj->OnRowUnselect(obj, row, column); #endif return FALSE; } ////////////////////////////////////////////// /* */ VDKCustomList::VDKCustomList(VDKForm* owner, int columns, char** titles, GtkSelectionMode mode): VDKCustom(owner,columns,titles,mode), WideSelection(0), // sets property Selected("Selected",this,VDKPoint(-1,-1), &VDKCustomList::SelectRow,&VDKCustomList::Selection), Unselected("Unselected",this,VDKPoint(-1,-1), &VDKCustomList::UnselectRow,&VDKCustomList::Unselection) { int t = 0; selection = VDKPoint(-1,-1); // rows pointer in extended selection pointer = -1; // rows pointer in wide selection start = end = -1; if(!titles) sigwid = custom_widget = gtk_clist_new(columns); else sigwid = custom_widget = gtk_clist_new_with_titles(columns,titles); gtk_container_add (GTK_CONTAINER (widget), custom_widget); gtk_widget_show(GTK_WIDGET(custom_widget)); /* */ gtk_clist_set_selection_mode(GTK_CLIST(custom_widget),mode); //gtk_clist_set_shadow_type(GTK_CLIST(custom_widget), GTK_SHADOW_ETCHED_OUT); if(titles) { for (t = 0; t < columns; t++) { Titles[t] = new VDKObject(owner, GTK_CLIST(custom_widget)->column[t].button); AddItem(Titles[t]); } } GtkRcStyle *rc_style = gtk_widget_get_modifier_style (custom_widget); GdkFont* font = rc_style ? gdk_font_from_description (rc_style->font_desc): NULL; if(font) { int rh = font->ascent + font->descent+1; RowHeight(rh); } // gtk_clist_set_row_height(GTK_CLIST(custom_widget), rh); ConnectSignals(); #ifdef USE_SIGCPLUSPLUS make_gtksigc_connection(this); #endif } /* */ /* */ void VDKCustomList::ConnectSignals() { // call ancestor VDKCustom::ConnectSignals(); // s_list_select.obj = this; s_list_select.signal = select_row_signal; s_list_unselect.obj = this; s_list_unselect.signal = unselect_row_signal; select_connect = gtk_signal_connect( GTK_OBJECT(custom_widget), "select_row", GTK_SIGNAL_FUNC(VDKCustomList::RowSelection), (gpointer) &s_list_select); unselect_connect = gtk_signal_connect(GTK_OBJECT(custom_widget), "unselect_row", GTK_SIGNAL_FUNC(VDKCustomList::RowUnselection), (gpointer) &s_list_unselect); // specialized connect to realize signal s_realize.obj = this; s_realize.signal = realize_signal; gtk_signal_connect(GTK_OBJECT(CustomWidget()),"realize", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_realize); } /* */ VDKCustomList::~VDKCustomList() { } /* removed since conflicts with i18n void VDKCustomList::AddRow(vector v, char** pixdata, int col) { char **s; s = (char **)malloc(v.size() * sizeof(char *)); if(s != NULL) { for(unsigned int n = 0; n < v.size(); n++) { const char *cTmp = v[n].c_str(); s[n] = (char *)malloc(strlen(cTmp)); if(s[n] != NULL) { strcpy(s[n], v[n].c_str()); } // else // do something useful here... throw an exception mebbe? } } AddRow(s, pixdata, col); for(unsigned int n = 0; n < v.size(); n++) { free(s[n]); } free(s); return; } */ /* */ void VDKCustomList::AddRow(char** s,char** pixdata, int col) { Tuple tuple(columns); int j ; for(j = 0; j < tuple.size(); j++) tuple[j] = s[j]; Tuples.add(tuple); /*int row = */ gtk_clist_append(GTK_CLIST(custom_widget),s); // SetStyle(row); pointer = pointer < 0 ? 0 : pointer; if(pixdata) _update_pix(Tuples.size()-1,s[col],pixdata,col); return; } /* */ void VDKCustomList::SetStyle(int row) { /* GtkStyle *style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(custom_widget))); g_return_if_fail(style != NULL); gtk_style_ref(style); if(UnselectedBackground) style->base[GTK_STATE_NORMAL] = *(*UnselectedBackground); if(SelectedBackground) style->bg[GTK_STATE_SELECTED] = *(*SelectedBackground); if(UnselectedForeground) style->fg[GTK_STATE_NORMAL] = *(*UnselectedForeground); if(SelectedForeground) style->fg[GTK_STATE_SELECTED] = *(*SelectedForeground); gtk_clist_set_row_style (GTK_CLIST (custom_widget), row, style); */ } /* */ void VDKCustomList::UpdateRow(int row, char** s, char** pixdata, int col) { if (row < 0 || row >= Tuples.size() ) return; Tuple tuple(columns); int j ; for(j = 0; j < tuple.size(); j++) tuple[j] = s[j]; Tuples[row] = tuple; for(j = 0; j < columns; j++) gtk_clist_set_text(GTK_CLIST(custom_widget),row,j, s[j]); if(pixdata) _update_pix(row,s[col],pixdata,col); } /* */ void VDKCustomList::UpdateRow(int row, Tuple& tuple, char** pixdata, int col) { int t; char **array = new char*[tuple.size()]; for(t = 0; t < tuple.size(); t++) { array[t] = new char[std::strlen((char*) tuple[t])+1]; std::strcpy(array[t],(char*) tuple[t]); } UpdateRow(row,array,pixdata,col); for(t = 0; t < tuple.size(); t++) delete array[t]; delete[] array; } /* */ void VDKCustomList::UpdateCell(int row, int col, const char* s, char** pixdata) { if(row < 0 || row >= Tuples.size()) return ; if(col < 0 || col >= columns) return; Tuples[row][col] = s; gtk_clist_set_text(GTK_CLIST(custom_widget),row,col, s); if(pixdata) _update_pix(row,s,pixdata,col); } /* */ void VDKCustomList::RemoveRow(int row) { if(row < 0 || row >= Tuples.size()) return; Tuples.unlink(row); gtk_clist_remove(GTK_CLIST(custom_widget),row); } /* private */ void VDKCustomList::_update_pix(int row,const char* s, char** pixdata, int col) { GdkBitmap *mask; GtkStyle* style = gtk_widget_get_style(owner->Window()); GdkPixmap* pixmap = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pixdata); gtk_clist_set_pixtext(GTK_CLIST(custom_widget), row, col, s, 2, pixmap, mask); } /* */ void VDKCustomList::SelectRow(int row, int col) { gtk_clist_select_row(GTK_CLIST(custom_widget),row,col); /* it should scroll to the right position,but does not work well GtkVisibility visible = gtk_clist_row_is_visible(GTK_CLIST(custom_widget), row); if( (visible == GTK_VISIBILITY_NONE) || (visible == GTK_VISIBILITY_PARTIAL) ) gtk_clist_moveto (GTK_CLIST(custom_widget),row,0,0.0,0.0); */ } /* */ void VDKCustomList::UnselectRow(int row, int col) { gtk_clist_unselect_row(GTK_CLIST(custom_widget),row,col); } /* */ VDKIntArray& VDKCustomList::Selections() { GList* list,*head; int listSize = 0, t; WideSelection = VDKIntArray(0); if(Size() == 0) return WideSelection; else if( (mode == GTK_SELECTION_EXTENDED) || (mode == GTK_SELECTION_MULTIPLE) ) { list = head = GTK_CLIST(custom_widget)->selection; // count list size if(head) for(t=0; head; head = head->next,listSize++); // load array; WideSelection = VDKIntArray(listSize); for(t = 0; t < WideSelection.size();t++,list = list->next) WideSelection[t] = (int) list->data; } return WideSelection; } /* */ void VDKCustomList::Clear() { VDKCustom::Clear(); Tuples.flush(); selection = VDKPoint(-1,-1); unselection = VDKPoint(-1,-1); Selected(VDKPoint(-1,-1)); Unselected(VDKPoint(-1,-1)); } #ifdef USE_SIGCPLUSPLUS void VDKCustomList::make_gtksigc_connection(VDKCustomList* obj) { VDKCustom::make_gtksigc_connection(obj); gtk_signal_connect(GTK_OBJECT(obj->CustomWidget()),"row_move", GTK_SIGNAL_FUNC(&VDKCustomList::_handle_row_move), reinterpret_cast(obj)); // gtk_signal_connect(GTK_OBJECT(obj->CustomWidget()),"insert_row", // GTK_SIGNAL_FUNC(&VDKCustomList::_handle_row_insert), // reinterpret_cast(obj)); // gtk_signal_connect(GTK_OBJECT(obj->CustomWidget()),"remove_row", // GTK_SIGNAL_FUNC(&VDKCustomList::_handle_row_remove), // reinterpret_cast(obj)); } void VDKCustomList::_handle_row_move(GtkWidget* wid, int from ,int to, gpointer gp) { VDKCustomList* obj=reinterpret_cast(gp); obj->OnRowMove(obj, from, to); } /* void VDKCustomList::_handle_row_insert(GtkWidget* wid, int row, char** texts, gpointer gp) { VDKCustomList* obj=reinterpret_cast(gp); obj->OnRowInsert(obj, row, (const char**) texts); } void VDKCustomList::_handle_row_remove(GtkWidget* wid, int row, gpointer gp) { VDKCustomList* obj=reinterpret_cast(gp); obj->OnRowRemove(obj, row); }*/ #endif /* USE_SIGCPLUSPLUS */ vdk-2.4.0/vdk/vdkcsortlist.cc0000644000000000000000000000570007446637274011603 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/vdkcsortlist.h" #include "vdk/forms.h" #include VDKCustomSortedList::VDKCustomSortedList(VDKForm* owner, int keyPos, int columns, char **titles, GtkSelectionMode mode): VDKCustomList(owner,columns,titles,mode),keypos(keyPos) { Unique = false; oldkey = NULL; } bool VDKCustomSortedList::AddKey(char **s, char** pixdata, int col) { Tuple tuple(columns,keypos); int j ; for(j = 0; j < tuple.size(); j++) tuple[j] = s[j]; int row = Tuples.insert(tuple,Unique); // in case of key clush if( row < 0) return false; row = gtk_clist_insert(GTK_CLIST(custom_widget),row,s); SetStyle(row); pointer = pointer < 0 ? 0 : pointer; if(pixdata) _update_pix(row,s[col],pixdata,col); return true; } /* */ void VDKCustomSortedList::UpdateKey(const char* key, char** s, char** pixdata, int col) { VDKString k(key); int row = 0; TupleListIterator li(Tuples); for(;li;li++,row++) if (li.current()[keypos] == k) break; if(row < Tuples.size()) { VDKCustomList::RemoveRow(row); AddRow(s,pixdata,col); } } /* */ void VDKCustomSortedList::UpdateCellKey(const char* key, int col, const char* s, char** pixdata) { VDKString k(key); int row = 0; TupleListIterator li(Tuples); if(col == keypos) return; // changing key not allowed for(;li;li++,row++) if (li.current()[keypos] == k) break; if(row < Tuples.size()) VDKCustomList::UpdateCell(row,col,s,pixdata); } /* */ void VDKCustomSortedList::RemoveKey(const char* key) { VDKString k(key); int row = 0; TupleListIterator li(Tuples); for(;li;li++,row++) if (li.current()[keypos] == k) break; if(row < Tuples.size()) VDKCustomList::RemoveRow(row); } /* */ int VDKCustomSortedList::FindKey(const char* key) { int t = 0; if(! oldkey) return -1; TupleListIterator li(Tuples); for(;li;li++,t++) { char* p = (char*) li.current()[keypos]; if(!std::strcmp(p,key)) return t; } return -1; } vdk-2.4.0/vdk/vdkctree.cc0000644000000000000000000003246707446637275010672 /* * =========================== * VDK Visual Development Kit * Version 0.5 * December 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #include "vdk/vdkctree.h" #include typedef struct { VDKTreeNodeList* list; char* key; } FindInfo; static void IterateOnTree(GtkCTree *ctree, GtkCTreeNode *node, gpointer i); /* answer to selection on single selection mode */ void VDKCustomTree::NodeSelection(GtkWidget* wid, GtkCTreeNode* node, int column, gpointer s) { g_return_if_fail(s != NULL); VDKObjectSignal* signal = reinterpret_cast(s); VDKCustomTree* obj = reinterpret_cast(signal->obj); obj->SelectedNode(node); obj->SelectedColumn(column); if(obj->mode != GTK_SELECTION_EXTENDED && obj->mode != GTK_SELECTION_MULTIPLE ) { obj->SignalEmit(signal->signal); obj->SignalEmit("tree_select_row"); } #ifdef USE_SIGCPLUSPLUS obj->OnNodeSelect(obj, node, column); #endif /* USE_SIGCPLUSPLUS */ } /* answer to unselection on single selection mode */ void VDKCustomTree::NodeUnselection(GtkWidget* wid, GtkCTreeNode* node, int column, gpointer s) { g_return_if_fail(s != NULL); VDKObjectSignal* signal = reinterpret_cast(s); VDKCustomTree* obj = reinterpret_cast(signal->obj); obj->UnselectedNode(node); obj->UnselectedColumn(column); obj->SelectedNode(NULL); obj->SelectedColumn(-1); if(obj->mode != GTK_SELECTION_EXTENDED && obj->mode != GTK_SELECTION_MULTIPLE ) { obj->SignalEmit(signal->signal); obj->SignalEmit("tree_unselect_row"); } #ifdef USE_SIGCPLUSPLUS obj->OnNodeUnselect(obj, node, column); #endif /* USE_SIGCPLUSPLUS */ } /* answer to dbl click on extended mode, emits select_node signal */ int VDKCustomTree::ButtonPress (GtkWidget* wid, GdkEventButton *ev, gpointer s) { g_return_val_if_fail(wid != NULL,FALSE); g_return_val_if_fail(ev != NULL,FALSE); g_return_val_if_fail(s != NULL,FALSE); VDKCustomTree* obj = reinterpret_cast(s); if(obj->mode != GTK_SELECTION_EXTENDED) return FALSE; int row; int column; VDKTreeNode node; int res; res = gtk_clist_get_selection_info (GTK_CLIST (wid), int(ev->x), int(ev->y), &row, &column); if( (!res) || (ev->type != GDK_2BUTTON_PRESS)) return FALSE; node = GTK_CTREE_NODE (g_list_nth (GTK_CLIST (wid)->row_list, row)); if(node) { obj->SelectedNode(node); obj->SelectedColumn(column); obj->SignalEmit(select_node_signal); } return FALSE; //TRUE; } ////////////////////////////////// /* constructor */ VDKCustomTree::VDKCustomTree(VDKForm* owner, int columns, char **titles, GtkSelectionMode mode, int tree_column): VDKCustom(owner,columns,titles,mode), tree_column(tree_column), Spacing("Spacing",this,5,&VDKCustomTree::SetSpacing), SelectedNode("SelectedNode",this,NULL,&VDKCustomTree::SetSelectedNode), SelectedColumn("SelectedColumn",this,-1), UnselectedNode("UnselectedNode",this,NULL,&VDKCustomTree::SetUnselectedNode), UnselectedColumn("UnselectedColumn",this,-1), LineStyle("LineStyle",this,GTK_CTREE_LINES_SOLID, &VDKCustomTree::SetLineStyle), ExpanderStyle("ExpanderStyle",this,GTK_CTREE_EXPANDER_SQUARE, &VDKCustomTree::SetExpanderStyle) { if(!titles) sigwid = custom_widget = gtk_ctree_new(columns,tree_column); else sigwid = custom_widget = gtk_ctree_new_with_titles (columns, tree_column, titles); GtkRcStyle *rc_style = gtk_widget_get_modifier_style (custom_widget); GdkFont* font = rc_style ? gdk_font_from_description (rc_style->font_desc): NULL; if(font) { int rh = font->ascent + font->descent+1; RowHeight(rh); } /* int rh = custom_widget->style->font->ascent + custom_widget->style->font->descent+1; RowHeight(rh); */ // gtk_clist_set_row_height(GTK_CLIST(custom_widget),rh); gtk_clist_set_selection_mode(GTK_CLIST(custom_widget),mode); gtk_clist_set_shadow_type(GTK_CLIST(custom_widget), GTK_SHADOW_ETCHED_OUT); if(titles) { int t; for (t = 0; t < columns; t++) { Titles[t] = new VDKObject(owner, GTK_CLIST(custom_widget)->column[t].button); AddItem(Titles[t]); } } gtk_container_add (GTK_CONTAINER (widget), custom_widget); gtk_widget_show(GTK_WIDGET(custom_widget)); ConnectSignals(); #ifdef USE_SIGCPLUSPLUS make_gtksigc_connection(this); #endif } /* */ void VDKCustomTree::ConnectSignals() { // call ancestor VDKCustom::ConnectSignals(); s_list_select.obj = this; s_list_select.signal = select_node_signal; s_list_unselect.obj = this; s_list_unselect.signal = unselect_node_signal; select_connect = gtk_signal_connect( GTK_OBJECT(custom_widget), "tree_select_row", GTK_SIGNAL_FUNC(VDKCustomTree::NodeSelection), (gpointer) &s_list_select); unselect_connect = gtk_signal_connect(GTK_OBJECT(custom_widget), "tree_unselect_row", GTK_SIGNAL_FUNC(VDKCustomTree::NodeUnselection), (gpointer) &s_list_unselect); gtk_signal_connect (GTK_OBJECT (custom_widget), "button_press_event", GTK_SIGNAL_FUNC (VDKCustomTree::ButtonPress), this); // specialized connect to realize signal s_realize.obj = this; s_realize.signal = realize_signal; gtk_signal_connect(GTK_OBJECT(CustomWidget()),"realize", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_realize); } /* */ void VDKCustomTree::SetStyle(VDKTreeNode node) { /* GtkStyle *style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(custom_widget))); g_return_if_fail(style != NULL); gtk_style_ref(style); if(UnselectedBackground) { GdkColor c = *(*UnselectedBackground); style->base[GTK_STATE_NORMAL] = c; } if(SelectedBackground) style->bg[GTK_STATE_SELECTED] = *(*SelectedBackground); if(UnselectedForeground) { GdkColor c = *(*UnselectedForeground); style->fg[GTK_STATE_NORMAL] = c; } if(SelectedForeground) style->fg[GTK_STATE_SELECTED] = *(*SelectedForeground); gtk_ctree_node_set_row_style (GTK_CTREE (custom_widget), node, style); */ } /* */ VDKCustomTree::~VDKCustomTree() { } /* add a node to tree, if parent == NULL add a root, otherwise a child */ VDKTreeNode VDKCustomTree::AddNode( char *text[], VDKTreeNode parent, bool expanded, bool isLeaf, char **pixmap_closed, char **pixmap_opened) { VDKTreeNode node; GdkBitmap *mask = NULL,*mask1 = NULL; GdkPixmap *pixmap = NULL,*pixmap1 = NULL; GtkStyle* style = gtk_widget_get_style(owner->Window()); if(pixmap_closed) pixmap = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pixmap_closed); if(pixmap_opened) pixmap1 = gdk_pixmap_create_from_xpm_d(owner->Window()->window, &mask, &style->bg[GTK_STATE_NORMAL], pixmap_opened); node = gtk_ctree_insert_node (GTK_CTREE(custom_widget), parent, NULL, text, Spacing, pixmap, mask, pixmap1, mask1, isLeaf, expanded); // sets row height // unuseful /* if(pixmap || pixmap1) { int w = 0, h = 0; sscanf (pixmap_closed ? pixmap_closed[0] : pixmap_opened[0], "%d %d", &w, &h); printf("\nh:%d",h); fflush(stdout); gtk_clist_set_row_height (GTK_CLIST(custom_widget),h); } */ if(node) SetStyle(node); return node; } //////////////////////////////////////////////////// Tuple VDKCustomTree::operator[](VDKTreeNode node) { int t; Tuple temp(columns,tree_column); char *text; if(node == NULL) return temp; for(t=0; t < columns;t++) { if ( (GTK_CTREE_ROW (node)->row.cell[t].type == GTK_CELL_TEXT) && (gtk_ctree_node_get_text(GTK_CTREE(custom_widget), node, t, &text)) ) temp[t] = text; else if ( (GTK_CTREE_ROW (node)->row.cell[t].type == GTK_CELL_PIXTEXT) && (gtk_ctree_node_get_pixtext (GTK_CTREE(custom_widget), node, t,&text,NULL,NULL,NULL)) ) temp[t] = text; } return temp; } /* return an array filled with selected nodes, empty on single selection mode. Tip: array sequence is in a recursive form, */ VDKTreeNodeArray& VDKCustomTree::Selections() { GList* list,*head; int listSize = 0, t; WideSelection = VDKTreeNodeArray(0); if(Size() == 0) return WideSelection; else if( (mode == GTK_SELECTION_EXTENDED) || (mode == GTK_SELECTION_MULTIPLE) ) { list = head = GTK_CLIST(custom_widget)->selection; // count list size and goes to tail as well if(head) for(t=0; head; head = head->next,listSize++) ; // load array; WideSelection = VDKTreeNodeArray(listSize); for(t = 0; t < WideSelection.size();t++,list = list->next) WideSelection[t] = (VDKTreeNode) list->data; } return WideSelection; } /* some useful node functions */ bool VDKCustomTree::IsLeaf(VDKTreeNode node) { int is_leaf; if(node == NULL) return false; else if(gtk_ctree_get_node_info(GTK_CTREE(custom_widget), node,NULL,NULL,NULL,NULL, NULL,NULL,&is_leaf,NULL)) return is_leaf == 1; else return false; } /* return node key */ char* VDKCustomTree::Key(VDKTreeNode node) { char* text; if(Size() == 0) return NULL; else if(node == NULL) node = GTK_CTREE_NODE (GTK_CLIST(custom_widget)->row_list); if(gtk_ctree_get_node_info(GTK_CTREE(custom_widget), node,&text,NULL,NULL,NULL, NULL, NULL,NULL,NULL)) return text; else return NULL; } /* */ bool VDKCustomTree::IsExpanded(VDKTreeNode node) { int expanded = 0; if(node == NULL) return false; gtk_ctree_get_node_info(GTK_CTREE(custom_widget), node,NULL,NULL,NULL,NULL, NULL, NULL,NULL,&expanded); return expanded; } /* prunes entire tree */ void VDKCustomTree::Clear() { VDKCustom::Clear(); SelectedNode(NULL); UnselectedNode(NULL); } /* */ bool VDKCustomTree::RemoveNode(VDKTreeNode node) { if(gtk_ctree_find(GTK_CTREE(custom_widget),NULL,node) ) gtk_ctree_remove_node (GTK_CTREE(custom_widget),node); else return false; if(Size() == 0) { SelectedNode(NULL); UnselectedNode(NULL); } return true; } /* */ void VDKCustomTree::SetSelectedNode(VDKTreeNode node) { if(Size() == 0) return; else if(node == NULL) node = GTK_CTREE_NODE (GTK_CLIST(custom_widget)->row_list); gtk_ctree_select (GTK_CTREE(custom_widget),node); } /* */ void VDKCustomTree::SetUnselectedNode(VDKTreeNode node) { if(Size() == 0) return; else if(node == NULL) node = GTK_CTREE_NODE (GTK_CLIST(custom_widget)->row_list); gtk_ctree_unselect (GTK_CTREE(custom_widget),node); } /* called by Find(char* key)->gtk_ctree_post_recursive(), if node key matches with key add that node to list */ void IterateOnTree(GtkCTree *ctree, GtkCTreeNode *node, gpointer i) { FindInfo* info = (FindInfo*) i; char *text; int res = gtk_ctree_get_node_info (ctree, node, &text, NULL, NULL, NULL, NULL,NULL,NULL,NULL); if(res && !std::strcmp(text,info->key)) info->list->add(node); } /* return a list of nodes that match , user should delete list after use */ VDKTreeNodeList* VDKCustomTree::Find(char* key) { VDKTreeNodeList* nodelist = new VDKTreeNodeList; FindInfo info = { nodelist, key }; gtk_ctree_post_recursive(GTK_CTREE(custom_widget), NULL, IterateOnTree, (gpointer) &info); return nodelist; } /* remove all nodes that match , answer how many nodes has been removed */ int VDKCustomTree::RemoveKey(char* key) { VDKTreeNodeList* list = Find(key); int size = 0; if( (size = list->size()) > 0) { VDKTreeNodeListIterator li(*list); for(;li;li++) RemoveNode(li.current()); } delete list; return size; } #ifdef USE_SIGCPLUSPLUS void VDKCustomTree::make_gtksigc_connection(VDKCustomTree* obj) { VDKCustom::make_gtksigc_connection(obj); gtk_signal_connect(GTK_OBJECT(obj->CustomWidget()), "tree_move", GTK_SIGNAL_FUNC(&VDKCustomTree::_handle_tree_move), reinterpret_cast(obj)); gtk_signal_connect(GTK_OBJECT(obj->CustomWidget()), "tree_expand", GTK_SIGNAL_FUNC(&VDKCustomTree::_handle_tree_expand), reinterpret_cast(obj)); } void VDKCustomTree::_handle_tree_move(GtkWidget*, GtkCTreeNode* node, GtkCTreeNode* new_parent, GtkCTreeNode* new_sibling, gpointer gp) { VDKCustomTree* obj=reinterpret_cast(gp); obj->OnTreeMove(obj, node, new_parent, new_sibling); } void VDKCustomTree::_handle_tree_expand(GtkWidget*, GtkCTreeNode* node, gpointer gp) { VDKCustomTree* obj=reinterpret_cast(gp); obj->OnTreeExpand(obj, node); } #endif vdk-2.4.0/vdk/vdkcustom.cc0000644000000000000000000001357307446637275011077 /* * =========================== * VDK Visual Development Kit * Version 0.5 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/vdkcustom.h" #include "vdk/forms.h" #define color_nihil VDKRgb(-1,-1,-1) void VDKCustom::ColumnClick(GtkWidget* , gint column, gpointer s) { g_return_if_fail(s != NULL); VDKObjectSignal* signal = reinterpret_cast(s); VDKCustom* obj = reinterpret_cast(signal->obj); obj->SelectedTitle(column); obj->SignalEmit(signal->signal); obj->SignalEmit("click_column"); } ///////////////////////////////////////////////// /* */ VDKCustom::VDKCustom(VDKForm* owner, int columns, char** titles, GtkSelectionMode mode): VDKObject(owner), VPolicy("VPolicy",this,GTK_POLICY_AUTOMATIC,&VDKCustom::SetVPolicy), HPolicy("HPolicy",this,GTK_POLICY_AUTOMATIC,&VDKCustom::SetHPolicy), BorderShadow("BorderShadow",this,GTK_SHADOW_ETCHED_OUT, &VDKCustom::SetBorderShadow), RowHeight("RowHeight",this,0,&VDKCustom::SetRowHeight), AutoResize("AutoResizeColumn",this,false, &VDKCustom::SetAutoResize), SelectedForeground("SelectedForeground",this,color_nihil, &VDKCustom::SetSelectedForeground), UnselectedBackground("UnselectedBackground",this,color_nihil, &VDKCustom::SetUnselectedBackground), UnselectedForeground("UnselectedForeground",this,color_nihil, &VDKCustom::SetUnselectedForeground), SelectedTitle("SelectedTitle",this,-1), columns(columns), mode(mode) { if(titles) Titles = VDKObjectArray(columns); custom_widget = NULL; widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); } /* */ VDKCustom::~VDKCustom() { } /* */ void VDKCustom::ConnectSignals() { s_list_click_column.obj = this; s_list_click_column.signal = click_column_signal; gtk_signal_connect(GTK_OBJECT(custom_widget), "click_column", GTK_SIGNAL_FUNC(VDKCustom::ColumnClick), (gpointer) &s_list_click_column); } /* */ void VDKCustom::SetBackground(VDKRgb c, GtkStateType state) { VDKColor *color = NULL; if( !custom_widget) return; else { if(Owner()) color = new VDKColor(Owner(),c.red,c.green,c.blue); else color = new VDKColor(this, c.red,c.green,c.blue); } if(state != GTK_STATE_SELECTED) gtk_widget_modify_base (custom_widget, state,color->Color()); else gtk_widget_modify_bg (custom_widget, state,color->Color()); }; /* */ void VDKCustom::SetForeground(VDKRgb color, GtkStateType state) { if(custom_widget) _setForeground_(custom_widget,color.red,color.green,color.blue, state); } /* void VDKCustom::SetSelectedBackground(VDKColor* bg) { gtk_widget_modify_bg(custom_widget,GTK_STATE_SELECTED ,bg ? bg->Color() : NULL); } */ void VDKCustom::SetSelectedForeground(VDKRgb rgb) { VDKColor *fg = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_fg(custom_widget,GTK_STATE_SELECTED ,fg ? fg->Color() : NULL); } void /* deprecated, reverts to normal background */ VDKCustom::SetUnselectedBackground(VDKRgb rgb) { VDKColor *bg = new VDKColor(Owner() ,rgb.red,rgb.green,rgb.blue); gtk_widget_modify_base(custom_widget,GTK_STATE_NORMAL ,bg ? bg->Color() : NULL); } /* deprecated, reverts to normal foreground */ void VDKCustom::SetUnselectedForeground(VDKRgb rgb) { VDKColor *fg = new VDKColor(Owner() ,rgb.red,rgb.green,rgb.blue); gtk_widget_modify_fg(custom_widget,GTK_STATE_NORMAL ,fg ? fg->Color() : NULL); } /* */ void VDKCustom::SetFont(VDKFont* font) { if(custom_widget) _setFont_(custom_widget,font); } /* */ void VDKCustom::ActiveTitle(int col,bool flag) { if(Titles.size() <= 0) return; if(flag) gtk_clist_column_title_active(GTK_CLIST(custom_widget),col); else gtk_clist_column_title_passive(GTK_CLIST(custom_widget),col); } /* */ void VDKCustom::ActiveTitles(bool flag) { for(int t = 0; t < columns; t++) ActiveTitle(t,flag); } /* */ void VDKCustom::EnableTitles(bool flag) { for(int t = 0; t < columns; t++) Titles[t]->Enable(flag); } /* */ GtkSelectionMode VDKCustom::SelectionMode() { return mode; } /* */ void VDKCustom::ColumnSize(int col, int size) { if(col < 0 || col >= columns) return ; gtk_clist_set_column_width (GTK_CLIST(custom_widget), col, size); return; } /* */ void VDKCustom::SetAutoResize(bool flag) { for(int i = 0; i < columns; i++) gtk_clist_set_column_auto_resize(GTK_CLIST(custom_widget), i, (gboolean) flag); } /* */ void VDKCustom::AutoResizeColumn(int col,bool flag) { gtk_clist_set_column_resizeable(GTK_CLIST(custom_widget), col, (gboolean) flag); } #ifdef USE_SIGCPLUSPLUS void VDKCustom::make_gtksigc_connection(VDKCustom* obj) { gtk_signal_connect(GTK_OBJECT(obj->CustomWidget()), "click_column", GTK_SIGNAL_FUNC(VDKCustom::_handle_click_column), (gpointer) obj); } void VDKCustom::_handle_click_column(GtkWidget* wid, int col, gpointer gp) { VDKCustom* obj=reinterpret_cast(gp); obj->OnColumnClick(obj, col); } #endif /* USE_SIGCPLUSPLUS */ vdk-2.4.0/vdk/vdkcustombutton.cc0000644000000000000000000003225407446637275012330 /* * =========================== * VDK Visual Develeopment Kit * Version 0.6.2 * May 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #define DEFAULT_PADDING 5 /* static char *pixbutton_xpm[] = { " 24 22 6 1", ". c #000000", "# c #828282", "a c #none", "b c #ffff00", "c c #0000ff", "d c #ffffff", "a......................a", ".ddddddddddddddddddddd#.", ".daaaaaaaaaaaaaaaaaaa##.", ".daaaaaadddddaaaaaaaa##.", ".daaadddaaadddaaaaaaa##.", ".daaaaaaaa.ddd.daaaaa##.", ".daa#aaadd..dd..ddaaa##.", ".daab#aa.d#.#dd.dcaaa##.", ".daab#a..dd..dd.#ddaa##.", ".daabb#..dd..dd..ddda##.", ".daabb#..dd..dd..ddda##.", ".daab#a..d#.#dd.#ddaa##.", ".daab#aa.d..ddd.ddaaa##.", ".daa#aaaad.ddd.ddaaaa##.", ".daaaaaaaa.ddd.daaaaa##.", ".daaaaaaaaaaa..aaaaaa##.", ".daaaaaaaaaa..a.aaaaa##.", ".daaaaaaaaa..aaa.aaaa##.", ".daaaaaaaaaaaaaaaaaaa##.", ".d#####################.", ".######################.", "a......................a" }; */ void VDKCustomButton::ToggleEvent(GtkWidget *wid, gpointer gp) { g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKCustomButton* obj = reinterpret_cast(gp); obj->Checked(GTK_TOGGLE_BUTTON(wid)->active ? true : false); obj->SignalEmit(toggled_signal); #ifdef USE_SIGCPLUSPLUS obj->OnButtonToggled(obj, GTK_TOGGLE_BUTTON(wid)->active ? true : false); #endif /* USE_SIGCPLUSPLUS */ } /* */ VDKCustomButton::VDKCustomButton(VDKForm* owner, const char* label, unsigned int type): VDKObject(owner), ButtonBox("ButtonBox",this,NULL), Label("Label", this, NULL), Pixmap("Pixmap", this, NULL), Caption ("Caption", this, label, &VDKCustomButton::SetCaption, &VDKCustomButton::GetCaption), CaptionWrap ("CaptionWrap", this, true, &VDKCustomButton::SetCaptionWrap, &VDKCustomButton::GetCaptionWrap), Checked ("Checked", this, false, &VDKCustomButton::SetChecked, &VDKCustomButton::GetChecked), Relief("Relief", this, GTK_RELIEF_NORMAL, &VDKCustomButton::SetRelief, &VDKCustomButton::GetRelief) { VDKBox* buttonbox = NULL; bool isCombo = (type & VDK_CBUTTON_TYPEMASK) == VDK_CBUTTON_COMBO; bool isToggled = (type & VDK_CBUTTON_TOGGLEMASK) == VDK_CBUTTON_TOGGLED; if(isCombo) { printf("\n** WARNING combo button not yet supported **"); fflush(stdout); // widget = gtk_combobutton_new(); widget = gtk_button_new(); } else widget = isToggled ? gtk_toggle_button_new (): gtk_button_new(); buttonbox = new VDKBox(owner,h_box); ButtonBox(buttonbox); buttonbox->BorderWidth(0); if(label) { Label(new VDKLabel(owner,label)); GtkAccelGroup * accel_group = gtk_accel_group_new (); guint accelerator_key; if(accel_group) gtk_window_add_accel_group(GTK_WINDOW(owner->Window()), accel_group); VDKLabel* lbl = Label; accelerator_key = gtk_label_parse_uline (GTK_LABEL (lbl->Widget()), label); if (accelerator_key != GDK_VoidSymbol) { gtk_widget_add_accelerator (widget, isToggled ? "toggled" : "clicked", accel_group, accelerator_key, GDK_MOD1_MASK, (GtkAccelFlags)(//GTK_ACCEL_LOCKED| GTK_ACCEL_VISIBLE/*| GTK_ACCEL_SIGNAL_VISIBLE*/)); } // centered by default ((VDKLabel*) Label)->Justify = GTK_JUSTIFY_CENTER; buttonbox->Add((VDKLabel*) Label,l_justify,true,true,DEFAULT_PADDING); } gtk_container_add(GTK_CONTAINER(widget), buttonbox->Widget()); // since buttonbox isn't added via vdk // explicitely add to object items. AddItem(buttonbox); buttonbox->Visible = true; ConnectButtonSignals(); } /* */ VDKCustomButton:: VDKCustomButton(VDKForm* owner, const char* pixfile, const char* label, unsigned int type, GtkPositionType position): VDKObject(owner), ButtonBox("ButtonBox",this,NULL), Label("Label", this, NULL), Pixmap("Pixmap", this, NULL), Caption ("Caption", this, label, &VDKCustomButton::SetCaption, &VDKCustomButton::GetCaption), CaptionWrap ("CaptionWrap", this, true, &VDKCustomButton::SetCaptionWrap, &VDKCustomButton::GetCaptionWrap), Checked ("Checked", this, false, &VDKCustomButton::SetChecked, &VDKCustomButton::GetChecked), Relief("Relief", this, GTK_RELIEF_NORMAL, &VDKCustomButton::SetRelief, &VDKCustomButton::GetRelief) { VDKBox* buttonbox = NULL; bool isCombo = (type & VDK_CBUTTON_TYPEMASK) == VDK_CBUTTON_COMBO; bool isToggled = (type & VDK_CBUTTON_TOGGLEMASK) == VDK_CBUTTON_TOGGLED; if(isCombo) { printf("\n** WARNING combo button not yet supported **"); fflush(stdout); // widget = gtk_combobutton_new(); widget = gtk_button_new(); } else widget = isToggled ? gtk_toggle_button_new (): gtk_button_new(); if (position == GTK_POS_RIGHT || position == GTK_POS_LEFT) buttonbox = new VDKBox(owner,h_box); else buttonbox = new VDKBox(owner,v_box); buttonbox->BorderWidth(0); ButtonBox(buttonbox); if(pixfile) Pixmap(new VDKImage(owner,pixfile)); else Pixmap(NULL); if(label) { Label(new VDKLabel(owner,label)); GtkAccelGroup * accel_group = gtk_accel_group_new (); guint accelerator_key; if(accel_group) gtk_window_add_accel_group(GTK_WINDOW(owner->Window()), accel_group); VDKLabel* lbl = Label; accelerator_key = gtk_label_parse_uline (GTK_LABEL (lbl->Widget()), label); if (accelerator_key != GDK_VoidSymbol) { gtk_widget_add_accelerator (widget, isToggled ? "toggled" : "clicked", accel_group, accelerator_key, GDK_MOD1_MASK, (GtkAccelFlags)(//GTK_ACCEL_LOCKED| GTK_ACCEL_VISIBLE/*| GTK_ACCEL_SIGNAL_VISIBLE*/)); } // centered by default ((VDKLabel*) Label)->Justify = GTK_JUSTIFY_CENTER; } switch (position) { case GTK_POS_LEFT: case GTK_POS_TOP: if(label) buttonbox->Add((VDKLabel*) Label, l_justify, true,true, DEFAULT_PADDING); if(Pixmap) buttonbox->Add((VDKImage*) Pixmap,l_justify,false,false, DEFAULT_PADDING); break; default: if(Pixmap) buttonbox->Add((VDKImage*) Pixmap,l_justify,false,false, DEFAULT_PADDING); if(label) buttonbox->Add((VDKLabel*) Label,l_justify,true,true, DEFAULT_PADDING); break; } gtk_container_add(GTK_CONTAINER(widget), buttonbox->Widget()); // explicitely added to object items. AddItem(buttonbox); ConnectButtonSignals(); buttonbox->Visible = true; } /* */ VDKCustomButton:: VDKCustomButton(VDKForm* owner, const char** pixdata, const char* label, unsigned int type, GtkPositionType position): VDKObject(owner), ButtonBox("ButtonBox",this,NULL), Label("Label", this, NULL), Pixmap("Pixmap", this, NULL), Caption ("Caption", this, label, &VDKCustomButton::SetCaption, &VDKCustomButton::GetCaption), CaptionWrap ("CaptionWrap", this, true, &VDKCustomButton::SetCaptionWrap, &VDKCustomButton::GetCaptionWrap), Checked ("Checked", this, false, &VDKCustomButton::SetChecked, &VDKCustomButton::GetChecked), Relief("Relief", this, GTK_RELIEF_NORMAL, &VDKCustomButton::SetRelief, &VDKCustomButton::GetRelief) { VDKBox* buttonbox = NULL; bool isCombo = (type & VDK_CBUTTON_TYPEMASK) == VDK_CBUTTON_COMBO; bool isToggled = (type & VDK_CBUTTON_TOGGLEMASK) == VDK_CBUTTON_TOGGLED; if(isCombo) { printf("\n** WARNING combo button not yet supported **"); fflush(stdout); // widget = gtk_combobutton_new(); widget = gtk_button_new(); } else widget = isToggled ? gtk_toggle_button_new (): gtk_button_new(); if (position == GTK_POS_RIGHT || position == GTK_POS_LEFT) buttonbox = new VDKBox(owner,h_box); else buttonbox = new VDKBox(owner,v_box); buttonbox->BorderWidth(0); ButtonBox(buttonbox); if(pixdata) Pixmap(new VDKImage(owner,pixdata)); else Pixmap(NULL); // Pixmap(new VDKImage(owner,pixbutton_xpm)); if(label) { Label(new VDKLabel(owner,label)); GtkAccelGroup * accel_group = gtk_accel_group_new (); guint accelerator_key; if(accel_group) gtk_window_add_accel_group(GTK_WINDOW(owner->Window()), accel_group); VDKLabel* lbl = Label; accelerator_key = gtk_label_parse_uline (GTK_LABEL (lbl->Widget()), label); if (accelerator_key != GDK_VoidSymbol) { gtk_widget_add_accelerator (widget, isToggled ? "toggled" : "clicked", accel_group, accelerator_key, GDK_MOD1_MASK, (GtkAccelFlags)(// GTK_ACCEL_LOCKED| GTK_ACCEL_VISIBLE/*| GTK_ACCEL_SIGNAL_VISIBLE*/)); } // centered by default ((VDKLabel*) Label)->Justify = GTK_JUSTIFY_CENTER; } switch (position) { case GTK_POS_LEFT: case GTK_POS_TOP: if(label) buttonbox->Add((VDKLabel*) Label, l_justify, true,true, DEFAULT_PADDING); if(Pixmap) buttonbox->Add((VDKImage*) Pixmap,l_justify,false,false, DEFAULT_PADDING); break; default: if(Pixmap) buttonbox->Add((VDKImage*) Pixmap,l_justify,false,false, DEFAULT_PADDING); if(label) buttonbox->Add((VDKLabel*) Label,l_justify,true,true, DEFAULT_PADDING); break; } gtk_container_add(GTK_CONTAINER(widget), buttonbox->Widget()); // explicitely added to object items. AddItem(buttonbox); buttonbox->Visible = true; ConnectButtonSignals(); } /* simply a pass trough for clicked signal over embedded pixmaps. */ int pixmap_clicked(GtkWidget* , GdkEvent* , void* o) { return false; } /* */ void VDKCustomButton::ConnectButtonSignals() { s_clicked.obj = this; s_clicked.signal = clicked_signal; s_enter.obj = this; s_enter.signal = enter_signal; s_leave.obj = this; s_leave.signal = leave_signal; s_toggled.obj = this; s_toggled.signal = toggled_signal; gtk_signal_connect(GTK_OBJECT(widget),"clicked", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_clicked); gtk_signal_connect(GTK_OBJECT(widget),"enter", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_enter); gtk_signal_connect(GTK_OBJECT(widget),"leave", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_leave); if(GTK_IS_TOGGLE_BUTTON(widget)) gtk_signal_connect(GTK_OBJECT(widget),"toggled", GTK_SIGNAL_FUNC(VDKCustomButton::ToggleEvent), reinterpret_cast(this)); /* VDKImage* pix = Pixmap; if(pix) gtk_signal_connect(GTK_OBJECT(pix->WrappedWidget()),"button_release_event", GTK_SIGNAL_FUNC(pixmap_clicked), (gpointer) this); */ #ifdef USE_SIGCPLUSPLUS gtk_signal_connect(GTK_OBJECT(widget), "clicked", GTK_SIGNAL_FUNC(VDKCustomButton::_handle_clicked), reinterpret_cast(this)); gtk_signal_connect(GTK_OBJECT(widget), "pressed", GTK_SIGNAL_FUNC(VDKCustomButton::_handle_pressed), reinterpret_cast(this)); gtk_signal_connect(GTK_OBJECT(widget), "leave", GTK_SIGNAL_FUNC(VDKCustomButton::_handle_leave), reinterpret_cast(this)); #endif /* USE_SIGCPLUSPLUS */ ConnectDefaultSignals(); } /* */ VDKCustomButton:: ~VDKCustomButton() { } /* */ void VDKCustomButton::Enable(bool flag) { VDKObject::Enable(flag); VDKImage* pix = Pixmap; if(pix) pix->Enabled = flag; VDKLabel* lbl = Label; if(lbl) lbl->Enabled = flag; } void VDKCustomButton::SetComboMenu(VDKMenu* menu) { printf("\n** WARNING combo button not yet supported **"); fflush(stdout); /* if(GTK_COMBOBUTTON(widget)) { gtk_combobutton_set_menu (GTK_COMBOBUTTON(widget),menu->Widget()); menu->Parent(this); menu->Owner()->AddItem(menu); } */ } #ifdef USE_SIGCPLUSPLUS void VDKCustomButton::_handle_clicked(GtkWidget* wid, gpointer gp) { VDKCustomButton* obj=reinterpret_cast(gp); obj->OnButtonClicked(obj); } void VDKCustomButton::_handle_pressed(GtkWidget* wid, gpointer gp) { VDKCustomButton* obj=reinterpret_cast(gp); obj->OnButtonPressed(obj); } void VDKCustomButton::_handle_leave(GtkWidget* wid, gpointer gp) { VDKCustomButton* obj=reinterpret_cast(gp); obj->OnButtonLeave(obj); } #endif /* USE_SIGCPLUSPLUS */ vdk-2.4.0/vdk/vdkdate.cc0000755000000000000000000001302210022101665010437 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/vdkdate.h" #include #include #include #include /* days, moths, names */ static int monthDays[] = { 31,29,31,30, 31,30,31,31, 30,31,30,31 }; static char *days_name[] = { "Domenica","Luned","Marted", "Mercoled","Gioved","Venerd", "Sabato" }; static char *days_name_E[] = { "Sunday","Monday","Tuesday", "Wednesday","Thursday","Friday", "Saturday" }; static char *months_name[] = { "?","Gennaio","Febbraio","Marzo","Aprile", "Maggio","Giugno","Luglio","Agosto", "Settembre","Ottobre","Novembre","Dicembre" }; static char *months_name_E[] = { "?","January","February","March","April", "May","June","July","August", "September","October","November","December" }; static char internal_buffer[128]; /* private: from calendar to julian */ long calendardate::Julian(void) { long jul; int ja,jy = year, jm; int error = 0; /* checks correct date */ error = jy <= 0; if(! error) error = (month <= 0 || month > 12); if(! error) error = day > monthDays[month-1]; if(! error && month == 2) error = (! Leap(year)) && (day > 28); if(error) return -1L; if(month > 2) jm = month+1; else { jy--; jm = month+13; } jul = (long) (floor(365.25*jy)+floor(30.6001*jm)+day+1720995); if(day+31L*(month+12L*year) >= IGREG) { ja = (int) (0.01*jy); jul += 2 - ja + (int) (0.25*ja); } return jul; } /* private: compute month and year */ void calendardate::Caldate(void) { long ja,jalfa,jb,jc,jd,je; if(julian >= IGREG) { jalfa = (long) (((float) (julian-1867216L)-0.25)/36524.25); ja = julian+1+jalfa - (long) (0.25*jalfa); } else ja= julian; jb = ja+1524; jc = (long) (6680.0 + ((float) (jb-2439870L)-122.1)/365.25); jd = (long) (365*jc+(0.25*jc)); je = (long) ((jb-jd)/30.6001); day = jb-jd-(long)(30.6001*je); month = je-1; if(month > 12) month -= 12; year = jc - 4715; if(month > 2) --year; if(year <= 0) --year; } /* make a date from system date */ calendardate::calendardate(int mode): mode(mode) { time_t curtime; struct tm *loctime; /* Get the current time. */ curtime = time (NULL); /* Convert it to local time representation. */ loctime = localtime (&curtime); day = loctime->tm_mday; month = loctime->tm_mon+1; year = loctime->tm_year+1900; julian = Julian(); } /* expects a date in mmddyyyy or ddmmyyyy format, use separators included in sep */ calendardate::calendardate(char* s, int mode, char* sep): mode(mode) { char *p,*p1; int error = 0; std::memset(internal_buffer,(char) 0, sizeof(internal_buffer)); std::strcpy(internal_buffer,s); p = p1 = internal_buffer; if((p1 = std::strpbrk(p,sep)) != (char*) 0) { *p1 = '\0'; if(mode == ddmmyyyy) day = atoi(p); else month = atoi(p); p = ++p1; } else error = 1; if (! error && (p1 = std::strpbrk(p,sep)) != (char*) 0) { *p1 = '\0'; if(mode == ddmmyyyy) month = atoi(p); else day = atoi(p); p = ++p1; } else error = 1; if (! error) year = atoi(p); else error = 1; // cast to XX century. year = year < 1900 ? year+1900: year; if(! error) julian = Julian(); else julian = -1L; } /* stream output ostream& operator<<(ostream& os, calendardate& d) { if(d.day < 10) os << '0'; os << d.day << '.'; if(d.month < 10) os << '0'; os << d.month << '.'; os << d.year; if(d.julian < 0L) os << "(!)"; return os; } */ /* return formatted date */ calendardate::operator char*() { if(julian < 0) return "invalid"; if(mode == ddmmyyyy) sprintf(internal_buffer,"%02d/%02d/%d",day,month,year); else sprintf(internal_buffer,"%02d/%02d/%d",month,day,year); return internal_buffer; } /* in yyyymmdd format */ char* calendardate::AsString() { if(julian < 0) return "invalid"; sprintf(internal_buffer,"%4d%02d%02d",year,month,day); return internal_buffer; } char* calendardate::CalendarDate() { if(mode == ddmmyyyy) sprintf(internal_buffer,"%s %d %s %d", days_name[DayIndex()], day, months_name[month], year); else sprintf(internal_buffer,"%s %s %d %d", days_name_E[DayIndex()], months_name_E[month], day, year); return internal_buffer; } char* calendardate::InternalBuffer() { return internal_buffer; } /* expect a date in yyyymmdd format */ calendardate MakeDate(char* s,int mode) { calendardate today(mode); int d,m,y; if(std::strlen(s) != 8) return today; char buffer[9]; std::strcpy(buffer,s); d = std::atoi(&buffer[6]); buffer[6] = '\0'; m = std::atoi(&buffer[4]); buffer[4] = '\0'; y = std::atoi(buffer); return calendardate(d,m,y,mode); } vdk-2.4.0/vdk/vdkdatabox.cc0000644000000000000000000001754607614020113011161 /* * =========================== * VDK Visual Development Kit * Version 2.0.2 * May 2002 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * Based on ISDataBox * Developed by Ionutz Borcoman * based on GtkDatabox - An extension to the gtk+ library * Copyright (C) 1998-1999 Roland Bock * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include const GtkDataboxCoord zeroCoord = {0,0}; const GtkDataboxValue zeroValue = {0.0, 0.0}; VDKDataBox::VDKDataBox(VDKForm *owner) :VDKObject(owner), Rulers("Rulers", this, true, &VDKDataBox::SetRulers), Scrollbars("Scrollbars", this, true, &VDKDataBox::SetScrollbars), Zoom("Zoom", this, true, &VDKDataBox::SetZoom), TopLeft("TopLeft", this, zeroValue), BottomRight("BottomRight", this, zeroValue), Mark("Mark", this, zeroCoord), Select("Select", this, zeroCoord) { widget = sigwid = gtk_databox_new(); gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_zoomed", GTK_SIGNAL_FUNC(&VDKDataBox::_zoomed), this); gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_marked", GTK_SIGNAL_FUNC(&VDKDataBox::_marked), this); gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_started", GTK_SIGNAL_FUNC(&VDKDataBox::_selectionStarted), this); gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_changed", GTK_SIGNAL_FUNC(&VDKDataBox::_selectionChanged), this); gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_stopped", GTK_SIGNAL_FUNC(&VDKDataBox::_selectionStoped), this); gtk_signal_connect (GTK_OBJECT (widget), "gtk_databox_selection_canceled", GTK_SIGNAL_FUNC(&VDKDataBox::_selectionCanceled), this); ConnectDefaultSignals(); } VDKDataBox::~VDKDataBox() { } void VDKDataBox::SetRulers(bool val) { if(val) gtk_databox_show_rulers(GTK_DATABOX(widget)); else gtk_databox_hide_rulers(GTK_DATABOX(widget)); } void VDKDataBox::SetScrollbars(bool val) { if(val) gtk_databox_show_scrollbars(GTK_DATABOX(widget)); else gtk_databox_hide_scrollbars(GTK_DATABOX(widget)); } void VDKDataBox::SetZoom(bool val) { if(val) gtk_databox_enable_zoom(GTK_DATABOX(widget)); else gtk_databox_disable_zoom(GTK_DATABOX(widget)); } GtkDataboxValue VDKDataBox::GetValue(GtkDataboxCoord coord) { GtkDataboxValue ret; gtk_databox_data_get_value(GTK_DATABOX(widget), coord, &ret); return ret; } void VDKDataBox::GetExtrema(GtkDataboxValue& min, GtkDataboxValue& max, bool visible) { if(visible) gtk_databox_data_get_visible_extrema(GTK_DATABOX(widget), &min, &max); else gtk_databox_data_get_extrema(GTK_DATABOX(widget), &min, &max); } void VDKDataBox::Rescale() { gtk_databox_rescale(GTK_DATABOX(widget)); } void VDKDataBox::Rescale(GtkDataboxValue min, GtkDataboxValue max) { gtk_databox_rescale_with_values(GTK_DATABOX(widget), min, max); } void VDKDataBox::Redraw() { gtk_databox_redraw(GTK_DATABOX(widget)); } VDKColor* VDKDataBox::GetColor(int index) { VDKColor *ret; GdkColor *color; color = (GdkColor*) malloc (sizeof(GdkColor)); gtk_databox_data_get_color(GTK_DATABOX(widget), index, color); ret = new VDKColor(this, color->red, color->green, color->blue); free(color); return ret; } void VDKDataBox::SetColor(int index, VDKColor* color, bool redraw) { GdkColor *tmp = color->Color(); gtk_databox_data_set_color(GTK_DATABOX(widget), index, *tmp); if(redraw) Redraw(); } gint VDKDataBox::RemoveData(gint index) { return gtk_databox_data_remove(GTK_DATABOX(widget), index); } gint VDKDataBox::RemoveData() { return gtk_databox_data_remove_all(GTK_DATABOX(widget)); } gint VDKDataBox::DestroyData(gint index) { return gtk_databox_data_destroy(GTK_DATABOX(widget), index); } gint VDKDataBox::DestroyData() { return gtk_databox_data_destroy_all(GTK_DATABOX(widget)); } gint VDKDataBox::AddXY(guint length, gfloat *X, gfloat *Y, VDKColor *color, GtkDataboxDataType type, guint dotSize) { return gtk_databox_data_add_x_y(GTK_DATABOX(widget), length, X, Y, (GdkColor)*(color->Color()), type, dotSize); } gint VDKDataBox::AddX (guint length, gfloat *X, guint indexSharedY, VDKColor *color, GtkDataboxDataType type, guint dotSize) { return gtk_databox_data_add_x(GTK_DATABOX(widget), length, X, indexSharedY, (GdkColor)*(color->Color()), type, dotSize); } gint VDKDataBox::AddY (guint length, gfloat *Y, guint indexSharedX, VDKColor *color, GtkDataboxDataType type, guint dotSize) { return gtk_databox_data_add_y(GTK_DATABOX(widget), length, Y, indexSharedX, (GdkColor)*(color->Color()), type, dotSize); } /***************************** * Signal handling functions * *****************************/ gint VDKDataBox::_zoomed(GtkDatabox *, GtkDataboxValue *top_left, GtkDataboxValue *bottom_right, gpointer gp) { g_return_val_if_fail(gp != NULL,TRUE); VDKDataBox *obj = reinterpret_cast(gp); obj->TopLeft(*top_left); obj->BottomRight(*bottom_right); obj->SignalEmitParent(databox_zoomed_signal); obj->SignalEmitParent("databox_zoomed"); return 0; } gint VDKDataBox::_marked(GtkDatabox *, GtkDataboxCoord *mark, gpointer gp) { g_return_val_if_fail(gp != NULL,TRUE); VDKDataBox *obj = reinterpret_cast(gp); obj->Mark(*mark); obj->SignalEmitParent(databox_marked_signal); obj->SignalEmitParent("databox_marked"); return 0; } gint VDKDataBox::_selectionStarted(GtkDatabox *, GtkDataboxCoord *mark, gpointer gp) { g_return_val_if_fail(gp != NULL,TRUE); VDKDataBox *obj = reinterpret_cast(gp); obj->Mark(*mark); obj->SignalEmitParent(databox_selection_started_signal); obj->SignalEmitParent("databox_selection_started"); return 0; } gint VDKDataBox::_selectionChanged(GtkDatabox *, GtkDataboxCoord *mark, GtkDataboxCoord *select, gpointer gp) { g_return_val_if_fail(gp != NULL,TRUE); VDKDataBox *obj = reinterpret_cast(gp); obj->Mark(*mark); obj->Select(*select); obj->SignalEmitParent(databox_selection_changed_signal); obj->SignalEmitParent("databox_selection_changed"); return 0; } gint VDKDataBox::_selectionStoped(GtkDatabox *, GtkDataboxCoord *mark, GtkDataboxCoord *select, gpointer gp) { g_return_val_if_fail(gp != NULL,TRUE); VDKDataBox *obj = reinterpret_cast(gp); obj->Mark(*mark); obj->Select(*select); obj->SignalEmitParent(databox_selection_stopped_signal); obj->SignalEmitParent("databox_selection_stopped"); return 0; } gint VDKDataBox::_selectionCanceled(GtkDatabox *, gpointer gp) { g_return_val_if_fail(gp != NULL,TRUE); VDKDataBox *obj = reinterpret_cast(gp); obj->SignalEmitParent(databox_selection_canceled_signal); obj->SignalEmitParent("databox_selection_canceled"); return 0; } /* */ void VDKDataBox::SetBackground(VDKRgb color, GtkStateType state) { if(!widget) return; _setBackground_(GTK_DATABOX(widget)->draw, color.red,color.green,color.blue, state); } vdk-2.4.0/vdk/vdkdrawarea.cc0000644000000000000000000002274307446637276011353 /* * =========================== * VDK Visual Development Kit * Version 2.0.0 * March 2002 * =========================== * * Copyright (C) 2002, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/vdkdrawarea.h" #include "vdk/forms.h" #include "vdk/rawpixmap.h" #include /* VDKDRAWTOOL CLASS */ VDKDrawTool::VDKDrawTool (VDKDrawingArea* owner): owner (owner), Fill ("Fill", this, GDK_SOLID, &VDKDrawTool::SetFill), Function ("Function", this, GDK_COPY, &VDKDrawTool::SetFunction) { tile = NULL; } /* */ VDKDrawTool::~VDKDrawTool () { if (tile) gdk_pixmap_unref (tile); } /* */ void VDKDrawTool::SetFill (GdkFill fill) { gdk_gc_set_fill(owner->GC (),fill); } /* */ void VDKDrawTool::SetTile (const char* tfile) { GdkGCValues values; gdk_gc_get_values(owner->GC (),&values); GdkBitmap *mask; GdkPixmap *local = gdk_pixmap_create_from_xpm (owner->Widget()->window, &mask, &values.background, tfile); if (local) { if (tile) gdk_pixmap_unref (tile); tile = local; gdk_gc_set_tile(owner->GC (),tile); } } /* */ void VDKDrawTool::SetTile (char** tdata) { GdkGCValues values; gdk_gc_get_values(owner->GC (),&values); GdkBitmap *mask; GdkPixmap *local = gdk_pixmap_create_from_xpm_d (owner->Widget()->window, &mask, &values.background, tdata); if (local) { if (tile) gdk_pixmap_unref (tile); tile = local; gdk_gc_set_tile(owner->GC (),tile); } } /* */ void VDKDrawTool::SetTile (GdkPixmap* tile) { if(tile) gdk_gc_set_tile(owner->GC (),tile); } /* */ GdkPixmap * VDKDrawTool::Tile(char** tdata) { GdkGCValues values; gdk_gc_get_values(owner->GC (),&values); GdkBitmap *mask; GdkPixmap *local = gdk_pixmap_create_from_xpm_d (owner->Widget()->window, &mask, &values.background, tdata); return local; } /* */ GdkPixmap * VDKDrawTool::Tile(const char* tfile) { GdkGCValues values; gdk_gc_get_values(owner->GC (),&values); GdkBitmap *mask; GdkPixmap *local = gdk_pixmap_create_from_xpm (owner->Widget()->window, &mask, &values.background, tfile); return local; } /* */ void VDKDrawTool::SetFunction(GdkFunction function) { gdk_gc_set_function (owner->GC(), function); } /* VDKPEN CLASS */ VDKPen::VDKPen (VDKDrawingArea* owner): VDKDrawTool (owner), Color ("Color", this, VDKRgb ("black"), &VDKPen::SetColor), Thickness ("Thickness" , this, 1, &VDKPen::SetThickness), Style ("Style", this, GDK_LINE_SOLID, &VDKPen::SetStyle), Cap ("Cap", this,GDK_CAP_NOT_LAST, &VDKPen::SetCap), Join ("Join", this,GDK_JOIN_MITER, &VDKPen::SetJoin) { } /* */ void VDKPen::SetColor (VDKRgb color) { owner->SetForeground (color); return; } /* */ void VDKPen::SetThickness (int t) { gdk_gc_set_line_attributes(owner->GC (),t, Style,Cap,Join); } /* */ void VDKPen::SetStyle (GdkLineStyle style) { gdk_gc_set_line_attributes(owner->GC (), Thickness,style, Cap,Join); } /* */ void VDKPen::SetCap (GdkCapStyle cap) { gdk_gc_set_line_attributes(owner->GC (), Thickness,Style, cap,Join); } /* */ void VDKPen::SetJoin (GdkJoinStyle join) { gdk_gc_set_line_attributes(owner->GC (), Thickness,Style, Cap,join); } /* VDKDRAWINGAREA CLASS */ void VDKDrawingArea::RealizeEvent (GtkWidget* wid, gpointer gp ) { VDKDrawingArea* area = reinterpret_cast (gp); if(!area->_gc) area->_gc = gdk_gc_new(wid->window); } /* */ VDKDrawingArea::VDKDrawingArea(VDKForm* owner): VDKObject(owner) { _gc = NULL; Pen = new VDKPen (this); Brush = new VDKBrush (this); widget = sigwid = gtk_drawing_area_new(); gtk_widget_add_events(widget, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); ConnectDefaultSignals(); g_signal_connect_data (sigwid, "realize", G_CALLBACK (VDKDrawingArea::RealizeEvent), this, NULL,(GConnectFlags) 0); } /* */ VDKDrawingArea::~VDKDrawingArea() { if(_gc) gdk_gc_destroy(_gc); if (Pen) delete Pen; if (Brush) delete Brush; } /* */ void VDKDrawingArea::Clear() { if(widget->window) gdk_window_clear (widget->window); } //=========================================================== // extern void PixSize(int* width, int* height, char* filename); void VDKDrawingArea::DrawPixbuf(int x, int y, const char ** data) { DrawPixbuf(x,y,new VDKPixbuf(this,data)); } void VDKDrawingArea::DrawPixbuf(int x, int y, const char *pixfile) { DrawPixbuf(x,y,new VDKPixbuf(this,pixfile)); } /* */ void VDKDrawingArea::DrawPixbuf(int x, int y, VDKPixbuf* pix) { if(pix) gdk_pixbuf_render_to_drawable (pix->AsGdkPixbuf (), widget->window, _gc, 0,0, x,y, -1, -1, GDK_RGB_DITHER_NORMAL, x, y); } /* */ void VDKDrawingArea::DrawString(int x, int y, char* text) { GdkFont* font = NULL; VDKFont* vdkfont = Font; if(!vdkfont) { GtkStyle *style = gtk_widget_get_style(widget); font = style ? gtk_style_get_font(style) : NULL; } else font = vdkfont->AsGdkFont (); if(font && text) gdk_draw_string(widget->window, font, _gc, x, y, text); } /* */ void VDKDrawingArea::DrawText(int x, int y, char* text, int n) { GdkFont* font = NULL; VDKFont* vdkfont = Font; if(!vdkfont) { GtkStyle *style = gtk_widget_get_style(widget); font = style ? gtk_style_get_font(style) : NULL; } else font = vdkfont->AsGdkFont (); if(font) gdk_draw_text(widget->window, font, _gc, x, y, text, n); } /* */ void VDKDrawingArea::DrawPoint(int x, int y) { gdk_draw_point(widget->window, _gc, x, y); } /* */ void VDKDrawingArea::DrawLine(int x, int y, int x1, int y1) { gdk_draw_line(widget->window, _gc, x,y,x1,y1); } /* */ void VDKDrawingArea::DrawRect(gint filled, int x, int y, int w, int h) { gdk_draw_rectangle(widget->window, _gc, filled, x,y,w,h); } /* */ void VDKDrawingArea::DrawArc(gint filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2) { gdk_draw_arc(widget->window,_gc, filled, x, y, width, height, angle1, angle2); } /* */ void VDKDrawingArea::DrawPolygon(gint filled, GdkPoint *points, gint npoints) { gdk_draw_polygon(widget->window, _gc, filled, points, npoints); } /* */ void VDKDrawingArea::DrawPoints(GdkPoint *points, gint npoints) { gdk_draw_points(widget->window, _gc, points, npoints); } /* */ void VDKDrawingArea::DrawSegments(GdkSegment *segs, gint nsegs) { gdk_draw_segments(widget->window, _gc, segs, nsegs); } /* */ void VDKDrawingArea::DrawLines(GdkPoint *points, gint npoints) { gdk_draw_lines(widget->window, _gc, points, npoints); } /* */ void VDKDrawingArea::SetForeground(VDKRgb rgb, GtkStateType state) { if(Widget()->window) { if (!_gc) RealizeEvent (widget, this ); GdkColor *color = (GdkColor*) malloc (sizeof (GdkColor)); GdkColormap *colormap = gdk_window_get_colormap (Widget()->window); color->red = rgb.red << 8; color->green = rgb.green << 8; color->blue = rgb.blue << 8; if (!gdk_color_alloc (colormap, color)) gdk_color_black (colormap, color); gdk_gc_set_foreground(_gc, color); free(color); } } void VDKDrawingArea::SetBackground(VDKRgb rgb, GtkStateType state) { if(GTK_WIDGET_REALIZED (widget)) { if (!_gc) RealizeEvent (widget, this ); GdkColor *color = (GdkColor*) malloc (sizeof (GdkColor)); GdkColormap *colormap = gdk_window_get_colormap (Widget()->window); color->red = rgb.red << 8; color->green = rgb.green << 8; color->blue = rgb.blue << 8; if (!gdk_color_alloc (colormap, color)) gdk_color_black (colormap, color); gdk_window_set_background (widget->window,color); Clear(); free(color); } else VDKObject::SetBackground (rgb); } void VDKDrawingArea::SetFont(VDKFont* f) { Font(f); } vdk-2.4.0/vdk/vdkdnd.cc0000644000000000000000000001571407446637276010332 /* * =========================== * VDK Visual Development Kit * Version 1.0.3 * November 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include VDKDnDEntry::VDKDnDEntry(VDKObject* object, VDKDnD* dnd, GtkWidget* widget): object(object),dnd(dnd),widget(widget) { } /* */ VDKDnD::VDKDnD(VDKForm* owner, GtkTargetEntry* target_table, guint n_entries): VDKRawObject(owner), target_table(target_table), n_entries(n_entries), DragSource("DragSource",this,NULL), DragPoint("DragPoint",this,VDKPoint(-1,-1)) { } /* */ VDKDnD::~VDKDnD() { // free sources and targets tables entries VDKDnDIterator ls(sources); for(;ls;ls++) delete ls.current(); VDKDnDIterator lt(targets); for(;lt;lt++) delete lt.current(); } /* */ void VDKDnD::AddSource(VDKObject* source) { // sets source GtkWidget* src_widget = NULL; if(!src_widget) { VDKCustom* custom = dynamic_cast(source); src_widget = custom ? custom->CustomWidget() : NULL; } /* if(!src_widget) { VDKCustom* checkbutton = dynamic_cast(source); src_widget = checkbutton ? GTK_BIN(checkbutton->Widget())->child : NULL; } */ if(!src_widget) src_widget = source->Widget(); gtk_drag_source_set( src_widget, (GdkModifierType)(GDK_BUTTON1_MASK | GDK_BUTTON3_MASK), target_table, n_entries, GdkDragAction(GDK_ACTION_COPY |GDK_ACTION_MOVE) ); VDKDnDEntry *entry = new VDKDnDEntry(source,this,src_widget); sources.add(entry); gtk_signal_connect (GTK_OBJECT (src_widget), "drag_data_get", GTK_SIGNAL_FUNC (VDKDnD::source_drag_data_get), entry); } /* */ void VDKDnD::AddTarget(VDKObject* target) { GtkWidget* src_widget = NULL; src_widget = target->WrappedWidget(); // sets target gtk_drag_dest_set (src_widget, GTK_DEST_DEFAULT_ALL, target_table, n_entries, GdkDragAction(GDK_ACTION_COPY | GDK_ACTION_MOVE) ); VDKDnDEntry *entry = new VDKDnDEntry(target,this,src_widget); targets.add(entry); // connect target to drop signal gtk_signal_connect (GTK_OBJECT (src_widget), "drag_drop", GTK_SIGNAL_FUNC (VDKDnD::drag_drop), entry); gtk_signal_connect (GTK_OBJECT (src_widget), "drag_leave", GTK_SIGNAL_FUNC (VDKDnD::drag_leave), entry); gtk_signal_connect (GTK_OBJECT (src_widget), "drag_motion", GTK_SIGNAL_FUNC (VDKDnD::drag_motion), entry); } /* */ gboolean VDKDnD::drag_drop(GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer data) { g_return_val_if_fail(widget != NULL, FALSE); g_return_val_if_fail(data != NULL, FALSE); VDKDnDEntry* targetdata = reinterpret_cast(data); if (context && context->targets) { targetdata->dnd->DragPoint(VDKPoint(x,y)); targetdata->object->SignalEmit(dnd_dropped_signal); targetdata->object->SignalEmit("dnd_dropped"); return TRUE; } return FALSE; } /* */ void VDKDnD::source_drag_data_get(GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, gpointer data) { g_return_if_fail(widget != NULL); g_return_if_fail(data != NULL); VDKDnDEntry* sourcedata = reinterpret_cast(data); if (context && context->targets) { sourcedata->object->SignalEmit(dnd_get_data_signal); sourcedata->object->SignalEmit("dnd_get_data"); gtk_drag_finish (context, FALSE, FALSE, time); sourcedata->dnd->DragSource(sourcedata->object); } } /* */ gboolean VDKDnD::drag_motion (GtkWidget *widget, GdkDragContext *context, gint x, gint y, guint time, gpointer data) { g_return_val_if_fail(widget != NULL,FALSE); g_return_val_if_fail(data != NULL, FALSE); g_return_val_if_fail(context != NULL, FALSE); VDKDnDEntry* targetdata = reinterpret_cast(data); GtkWidget *source_widget; source_widget = gtk_drag_get_source_widget (context); // look on the source table to find source object targetdata->dnd->DragSource(NULL); VDKDnDIterator li(targetdata->dnd->sources); for(;li;li++) { if(li.current()->widget == source_widget) { targetdata->dnd->DragSource(li.current()->object); targetdata->dnd->DragPoint(VDKPoint(x,y)); } } targetdata->object->SignalEmit(dnd_drag_motion_signal); targetdata->object->SignalEmit("dnd_drag_motion"); return TRUE; } void VDKDnD::drag_leave (GtkWidget *widget, GdkDragContext *context, guint time, gpointer data) { g_return_if_fail(widget != NULL); g_return_if_fail(data != NULL); VDKDnDEntry* targetdata = reinterpret_cast(data); if (context && context->targets) { targetdata->object->SignalEmit(dnd_drag_leave_signal); targetdata->object->SignalEmit("dnd_drag_leave"); } } /* */ void VDKDnD::SetIcon(VDKObject* widget, VDKRawPixmap* pixmap) { VDKDnDIterator li(sources); for(;li;li++) { if(li.current()->object == widget) { gtk_drag_source_set_icon (li.current()->widget, gtk_widget_get_colormap(li.current()->widget), *pixmap, pixmap->Mask()); break; } } } /* */ void VDKDnD::RemoveSource(VDKObject* source) { int t = 0; VDKDnDIterator li(sources); for(;li;li++,t++) { if(li.current()->object == source) { gtk_drag_source_unset(li.current()->widget); break; } } if(t < sources.size()) sources.remove(sources[t]); } /* */ void VDKDnD::RemoveTarget(VDKObject* target) { int t = 0; VDKDnDIterator li(targets); for(;li;li++,t++) { if(li.current()->object == target) { gtk_drag_dest_unset(li.current()->widget); break; } } if(t < targets.size()) targets.remove(targets[t]); } vdk-2.4.0/vdk/vdkfilechooser.cc0000644000000000000000000001727010030341645012035 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.4 * March 2004 * =========================== * * Copyright (C) 1998 - 2004 Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include static char * stock_open_16_xpm[] = { "16 16 64 1", " c None", ". c #000000", "+ c #E4E5DF", "@ c #D5D6CB", "# c #D6D7CA", "$ c #A3A39D", "% c #F5F6F0", "& c #8D907B", "* c #92957E", "= c #90937D", "- c #979B84", "; c #6D705F", "> c #EAECDB", ", c #8A8C7D", "' c #8E917B", ") c #91947F", "! c #8B8E7A", "~ c #999B87", "{ c #919480", "] c #989B86", "^ c #B1B4A2", "/ c #A2A394", "( c #F7F7F7", "_ c #878A75", ": c #666858", "< c #4B4D3F", "[ c #4D4F40", "} c #404135", "| c #424337", "1 c #434437", "2 c #404236", "3 c #3C3D32", "4 c #48493C", "5 c #1A1A16", "6 c #C6C6BE", "7 c #848672", "8 c #25261F", "9 c #F1F2E9", "0 c #DDE0C7", "a c #D6DABB", "b c #CDD2AC", "c c #C7CCA7", "d c #989C80", "e c #C6C7BE", "f c #5F6152", "g c #888980", "h c #A7AB8C", "i c #878A70", "j c #9FA19A", "k c #EFF0E5", "l c #9EA284", "m c #80817B", "n c #96968D", "o c #E3E5D1", "p c #83866D", "q c #97998D", "r c #EDEFE2", "s c #A2A688", "t c #767671", "u c #E7E9DA", "v c #D1D3BD", "w c #BBBF9D", "x c #989B80", "y c #6E715C", " ", " ", " .... ", " .+@#$. ", " .%&*=-;..... ", " .>,')!~{]{^/. ", " .(_:<[}||12345 ", " .67890abbbbbcd.", " .efg0bbbbbbbhi.", " .j8kabbbbbbbl. ", " .mnobbbbbbbbp. ", " .qrbbbbbbbbs. ", " .tuvwwwwwwxy. ", " ........... ", " ", " "}; static char * stock_cancel_20_xpm[] = { "20 20 8 1", " c None", ". c #000000", "+ c #C46D74", "@ c #9F3C44", "# c #B5444E", "$ c #BD5A62", "% c #7B2D34", "& c #8C343C", " ", " ", " ", " .. . ", " .+@. .#. ", " .##. .$#. ", " .#@. .$#%. ", " .##..$#&. ", " .####@. ", " .####. ", " .$###. ", " .$####. ", " .$#&..#&. ", " .+#&. .@#. ", " .#&. .#@. ", " .. .@#. ", " .. ", " ", " ", " "}; GtkWindowType VDKFileChooser::DisplayType = GTK_WINDOW_TOPLEVEL; GtkWindowPosition VDKFileChooser::InitialPosition = GTK_WIN_POS_NONE; /* defining signal and events dynamics tables */ DEFINE_SIGNAL_LIST(VDKFileChooser,VDKForm); DEFINE_EVENT_LIST(VDKFileChooser,VDKForm); /* defining signal static table */ DEFINE_SIGNAL_MAP(VDKFileChooser,VDKForm) ON_SIGNAL(okButton,clicked_signal,OnokButtonClick), ON_SIGNAL(cancelButton,clicked_signal,OncancelButtonClick) END_SIGNAL_MAP // Vdkfc FORM CLASS /* form constructor */ VDKFileChooser::VDKFileChooser(VDKForm* owner, FileStringArray* selections, char* title): VDKForm(owner,title,v_box,DisplayType),selections(selections), MultiSelection("MultiSelection",this,false,&VDKFileChooser::SetMultiSelection,&VDKFileChooser::GetMultiSelection), Action("Action",this,GTK_FILE_CHOOSER_ACTION_OPEN,&VDKFileChooser::SetAction,&VDKFileChooser::GetAction) { VDKFileChooser::Setup(); } /* form destructor */ VDKFileChooser::~VDKFileChooser() { } /* form setup */ void VDKFileChooser::Setup(void) { SetSize(438,326); mainbox = new VDKBox(this,v_box); Add(mainbox,0,1,1,0); fcbox = new VDKBox(this,v_box); mainbox->Add(fcbox,0,1,1,0); fcbox->BorderWidth(0); separator0 = new VDKSeparator(this,h_separator); gtk_widget_set_name (GTK_WIDGET(separator0->WrappedWidget()), "separator0"); mainbox->Add(separator0,0,0,0,5); buttonbox = new VDKBox(this,h_box); mainbox->Add(buttonbox,0,0,0,2); buttonbox->BorderWidth(0); okButton = new VDKCustomButton(this,(const char**) stock_open_16_xpm," OK",16,(GtkPositionType) 1); gtk_widget_set_name (GTK_WIDGET(okButton->WrappedWidget()), "okButton"); buttonbox->Add(okButton,0,1,0,0); cancelButton = new VDKCustomButton(this,(const char**) stock_cancel_20_xpm," Cancel",16,(GtkPositionType) 1); gtk_widget_set_name (GTK_WIDGET(cancelButton->WrappedWidget()), "cancelButton"); buttonbox->Add(cancelButton,0,1,0,0); // makes GtkFileChooser sigwid = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN); // makes dummy filechooser = new VDKObject(this,sigwid); fcbox->Add(filechooser,l_justify,true,true,0); g_signal_connect_data (sigwid, "file-activated", G_CALLBACK (VDKFileChooser::file_activated), this, NULL,(GConnectFlags) 0); } //signal response method bool VDKFileChooser::OncancelButtonClick(VDKObject* sender) { Close(); return true; } //signal response method bool VDKFileChooser::OnokButtonClick(VDKObject* sender) { if(MultiSelection) { int t = 0; GSList* listhead = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(sigwid)); GSList* list = listhead; selections->resize(g_slist_length(list ? list : 0)); while(list) { VDKString s((char*)list->data); (*selections)[t] = s; g_free(list->data); t++; list = list->next; } if(listhead) g_slist_free(listhead); } else { char* sel; sel = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(sigwid)); if(sel) { selections->resize(1); VDKString s(sel); (*selections)[0] = s; g_free(sel); } } Close(); return true; } // void VDKFileChooser::file_activated (GtkFileChooser *filechooser, gpointer user_data) { VDKFileChooser* fc = reinterpret_cast(user_data); fc->OnokButtonClick(NULL); } // void VDKFileChooser::AddFilterPattern(char* name, char* pattern) { GtkFileFilter *filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, name); gtk_file_filter_add_pattern (filter, pattern); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (sigwid), filter); } // void VDKFileChooser::AddMimeType(char* name, char* mime) { GtkFileFilter *filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, name); gtk_file_filter_add_mime_type (filter, mime); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (sigwid), filter); } // void VDKFileChooser::SetDefaultFilter(char* name) { GSList* listhead = gtk_file_chooser_list_filters (GTK_FILE_CHOOSER (sigwid)); GSList* list = listhead; while(list) { const gchar* fname = gtk_file_filter_get_name ((GtkFileFilter*) list->data); if(!strcmp(fname,name)) { gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (sigwid),(GtkFileFilter*) list->data); break; } list = list->next; } if(listhead) g_slist_free(listhead); } // void VDKFileChooser::RemoveFilter(char* name) { GSList* listhead = gtk_file_chooser_list_filters (GTK_FILE_CHOOSER (sigwid)); GSList* list = listhead; while(list) { const gchar* fname = gtk_file_filter_get_name ((GtkFileFilter*) list->data); if(!strcmp(fname,name)) { gtk_file_chooser_remove_filter (GTK_FILE_CHOOSER (sigwid),(GtkFileFilter*) list->data); break; } list = list->next; } if(listhead) g_slist_free(listhead); } // end of file:vdkfc.cc vdk-2.4.0/vdk/vdkinchannel.cc0000644000000000000000000000276607446637300011513 /* * Copyright (C) 1999-2001 Jonathan R. Hudson * Developed by Jonathan R. Hudson * Modified by Mario Motta * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdkinchannel.h" #include VDKInputChannel::VDKInputChannel(VDKForm* obj,int fd, GdkInputCondition c): VDKObject(obj->Owner ()), tag(0), fd(fd), condition(c) { tag = gdk_input_add(fd, c, VDKInputChannel::HandleIO, this); obj->Objects().add(this); Parent(obj); } VDKInputChannel::~VDKInputChannel() { gdk_input_remove(tag); } void VDKInputChannel::HandleIO(gpointer gp, gint source, GdkInputCondition condition) { VDKInputChannel *ip = static_cast(gp); ip->condition = condition; ip->SignalEmit(INPUT_SIGNAL); ip->SignalEmit("input_signal"); } vdk-2.4.0/vdk/vdkfont.cc0000644000000000000000000000551507446637277010532 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/vdkfont.h" #include "vdk/forms.h" #include /* */ VDKFont::VDKFont(char* name): VDKRawObject((VDKObject*) NULL) { pangoDes = NULL; fontName = NULL; if(name) { fontName = new char[std::strlen(name)+1]; std::strcpy(fontName,name); pangoDes = pango_font_description_from_string (fontName); } } /* */ VDKFont::VDKFont(VDKObject* obj, char* name): VDKRawObject(obj) { pangoDes = NULL; fontName = NULL; if(name) { fontName = new char[std::strlen(name)+1]; std::strcpy(fontName,name); pangoDes = pango_font_description_from_string (fontName); } } /* */ VDKFont::~VDKFont() { if(fontName) delete[] fontName; if(pangoDes) pango_font_description_free (pangoDes); } /* */ bool VDKFont::operator==(VDKFont& f) { if(pangoDes) return pango_font_description_equal(pangoDes,f.pangoDes); else return false; } /* */ int VDKFont::Height(const char* s) { GdkFont* gdkfont = NULL; if(fontName && pangoDes) gdkfont = gdk_font_from_description (pangoDes); if(gdkfont) { int h = gdk_string_height (gdkfont,s); gdk_font_unref(gdkfont); return h; } else return 0; } /* */ VDKFont::operator char*() { return fontName; } /* */ int VDKFont::FontId() { return -1; } int VDKFont::Width(const char* s) { GdkFont* gdkfont = NULL; if(fontName && pangoDes) gdkfont = gdk_font_from_description (pangoDes); if(gdkfont) { int w = gdk_string_width(gdkfont,s); gdk_font_unref(gdkfont); return w; } else return 0; } VDKFont::operator GdkFont*() { if(fontName && pangoDes) return gdk_font_from_description (pangoDes); else return NULL; } GdkFont* VDKFont:: AsGdkFont() { if(fontName && pangoDes) return gdk_font_from_description (pangoDes); else return NULL; } PangoFontDescription * VDKFont::AsPangoFontDescription() { return pangoDes; } vdk-2.4.0/vdk/vdkhlbutton.cc0000644000000000000000000000773407613765220011412 /* * =========================== * VDK Visual Development Kit * Version 2.0.3 * January 2003 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #define PIXELATE 3.0 #define DARKENED 0.50 DEFINE_EVENT_LIST (VDKHLButton, VDKCustomButton); /* */ VDKHLButton::VDKHLButton ( VDKForm *owner, const char *pixfile, const char *label, unsigned int type, GtkPositionType position): VDKCustomButton (owner, pixfile, label ,type,position) { normal_pix = new VDKPixbuf (this, pixfile); pixellated_pix = new VDKPixbuf (this, pixfile); darkened_pix = new VDKPixbuf (this, pixfile); GdkPixbuf* pixbuf = pixellated_pix->AsGdkPixbuf(); gdk_pixbuf_saturate_and_pixelate(pixbuf,pixbuf,PIXELATE,FALSE); pixbuf = darkened_pix->AsGdkPixbuf(); gdk_pixbuf_saturate_and_pixelate(pixbuf,pixbuf,DARKENED,FALSE); } /* */ VDKHLButton::VDKHLButton ( VDKForm *owner, const char **pixdata, const char *label, unsigned int type, GtkPositionType position): VDKCustomButton (owner, pixdata, label,type, position) { normal_pix = new VDKPixbuf (this, pixdata); pixellated_pix = new VDKPixbuf (this, pixdata); darkened_pix = new VDKPixbuf (this, pixdata); GdkPixbuf* pixbuf = pixellated_pix->AsGdkPixbuf(); gdk_pixbuf_saturate_and_pixelate(pixbuf,pixbuf,PIXELATE,FALSE); pixbuf = darkened_pix->AsGdkPixbuf(); gdk_pixbuf_saturate_and_pixelate(pixbuf,pixbuf,DARKENED,FALSE); } /* */ void VDKHLButton::Setup (void) { Relief = (GtkReliefStyle) 2; EventConnect("enter_notify_event",&VDKHLButton::OnEnter); EventConnect("leave_notify_event",&VDKHLButton ::OnLeave); EventConnect("button_release_event",&VDKHLButton ::OnClickRelease); EventConnect("button_press_event",&VDKHLButton ::OnClickPress); } /* */ bool VDKHLButton::OnClickRelease (VDKObject*, GdkEvent* event) { GdkEventButton* e = (GdkEventButton*) event; double w = GTK_WIDGET (WrappedWidget ())->allocation.width; double h = GTK_WIDGET (WrappedWidget ())->allocation.height; VDKRect rect(0, 0, int (w), int (h) ); VDKPoint p (int (e->x), int (e->y)); if ( rect.Contains (p) ) { VDKImage* image = Pixmap; image->SetImage (pixellated_pix); gtk_widget_queue_draw (image->WrappedWidget ()); SignalEmit (clicked_signal); SignalEmit ("clicked"); } return false; } /* */ bool VDKHLButton::OnClickPress (VDKObject*, GdkEvent* event) { VDKImage* image = Pixmap; image->SetImage (darkened_pix); gtk_widget_queue_draw (image->WrappedWidget ()); return false; } /* */ bool VDKHLButton::OnEnter (VDKObject*, GdkEvent*) { VDKImage* image = Pixmap; image->SetImage (pixellated_pix); // Cursor = curHandPtr; gtk_widget_queue_draw (image->WrappedWidget ()); SignalEmit (enter_signal); SignalEmit ("enter"); return true; } /* */ bool VDKHLButton::OnLeave (VDKObject*, GdkEvent*) { VDKImage* image = Pixmap; image->SetImage (normal_pix); // Cursor = curDefault; gtk_widget_queue_draw (image->WrappedWidget ()); SignalEmit (leave_signal); SignalEmit ("leave"); return true; } vdk-2.4.0/vdk/vdkhlbuttonbar.cc0000644000000000000000000000470507613765065012101 /* * =========================== * VDK Visual Development Kit * Version 2.0.3 * January 2003 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include DEFINE_SIGNAL_LIST (VDKHLButtonBar, VDKFrame); /* */ VDKHLButtonBar::VDKHLButtonBar (VDKForm* owner, int mode, int shadow): VDKFrame (owner, NULL, mode, shadow), ButtonPressed ("ButtonPressed", this, -1) { } /* */ VDKHLButtonBar::~VDKHLButtonBar () { } /* */ bool VDKHLButtonBar::OnClick (VDKObject* sender) { ButtonListIterator li (blist); int t = 0; for (;li;li++, t++) if (li.current () == sender) break; if (t < blist.size ()) { ButtonPressed (t); SignalEmit (clicked_signal); SignalEmit ("clicked"); } else ButtonPressed (-1); return true; } /* */ void VDKHLButtonBar::AddButton (const char** pixdata, const char* tip, const char* text) { VDKHLButton *button = new VDKHLButton (Owner (),pixdata, text); if (tip) button->SetTip ((char*) tip); Add (button, l_justify, false, false, 0); blist.add (button); SignalConnect (button, "clicked", &VDKHLButtonBar::OnClick); } /* */ void VDKHLButtonBar::AddButton (const char* pixfile, const char* tip, const char* text) { VDKHLButton *button = new VDKHLButton (Owner (),pixfile, text); if (tip) button->SetTip ((char*) tip); Add (button, l_justify, false, false, 0); blist.add (button); SignalConnect (button, "clicked", &VDKHLButtonBar::OnClick); } /* */ VDKHLButton* VDKHLButtonBar::operator[](int n) { if( (n >= 0) && (n < blist.size())) return blist[n]; else return NULL; } vdk-2.4.0/vdk/vdkobj.cc0000644000000000000000000004354007446640423010321 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * Revision on vdk 0.5.3 * Feb 1999 by mm * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/vdkobj.h" #include "vdk/forms.h" #include "vdk/evhandle.h" #include "vdk/evobjhandle.h" #include "vdk/colors.h" #include "vdk/tooltips.h" #include "vdk/vdkfont.h" #include #include #include #ifdef VDKDEBUG int objectC = 0; int objectD = 0; extern int objRemoved; #endif #define color_nihil VDKRgb(-1,-1,-1) GtkWidget* VDKObject::Widget() { return widget ? GTK_WIDGET(widget): (GtkWidget*) NULL; } /* */ GtkWidget* VDKObject::ConnectingWidget() { return sigwid ? GTK_WIDGET(sigwid) : widget ? GTK_WIDGET(widget): (GtkWidget*) NULL; } GtkWidget* VDKObject::WrappedWidget() { return ConnectingWidget(); } /* */ VDKObject::VDKObject(VDKForm* owner): // sets properties NormalBackground("NormalBackGround",this, color_nihil, &VDKObject::SetNormalBackground), PrelightBackground("PrelightBackGround",this, color_nihil, &VDKObject::SetPrelightBackground), InsensitiveBackground("InsensitiveBackGround", this, color_nihil, &VDKObject::SetInsensitiveBackground), ActiveBackground("ActiveBackGround", this, color_nihil, &VDKObject::SetActiveBackground), SelectedBackground("SelectedBackGround", this, color_nihil, &VDKObject::SetSelectedBackground), Foreground("Foreground",this, color_nihil, &VDKObject::SetNormalForeground), Font("Font",this,NULL,&VDKObject::SetFont), Usize("Usize",this), Enabled("Enabled",this,true,&VDKObject::Enable), Cursor("Cursor",this,curDefault,&VDKObject::SetCursor), Visible("Visible",this,true,&VDKObject::SetVisible,&VDKObject::GetVisible), Tag(0), // tip(NULL), owner(owner), widget(NULL), sigwid(NULL), parent(NULL) #ifdef USE_SIGCPLUSPLUS , OnRawEvent(this) , OnButtonEvent(this) , OnKeyEvent(this) , OnKeyFocusEvent(this) , OnPointerFocusEvent(this) , OnPointerEvent(this) , OnMapEvent(this) , OnGeometryEvent(this) , OnPaintEvent(this) #endif { #ifdef VDKDEBUG objectC++; #endif /* USE_SIGCPLUSPLUS */ } /* */ VDKObject::VDKObject(VDKForm* owner,GtkWidget* widget): // sets properties NormalBackground("NormalBackGround",this, color_nihil, &VDKObject::SetNormalBackground), PrelightBackground("PrelightBackGround",this, color_nihil, &VDKObject::SetPrelightBackground), InsensitiveBackground("InsensitiveBackGround", this, color_nihil, &VDKObject::SetInsensitiveBackground), ActiveBackground("ActiveBackGround", this, color_nihil, &VDKObject::SetActiveBackground), SelectedBackground("SelectedBackGround", this, color_nihil, &VDKObject::SetSelectedBackground), Foreground("Foreground",this, color_nihil, &VDKObject::SetNormalForeground), Font("Font",this,NULL,&VDKObject::SetFont), Usize("Usize",this), Enabled("Enabled",this,true,&VDKObject::Enable), Cursor("Cursor",this,curDefault,&VDKObject::SetCursor), Visible("Visible",this,true,&VDKObject::SetVisible,&VDKObject::GetVisible), Tag(0), // tip(NULL), owner(owner), widget(widget), sigwid(NULL), parent(NULL) #ifdef USE_SIGCPLUSPLUS , OnRawEvent(this) , OnButtonEvent(this) , OnKeyEvent(this) , OnKeyFocusEvent(this) , OnPointerFocusEvent(this) , OnPointerEvent(this) , OnMapEvent(this) , OnGeometryEvent(this) , OnPaintEvent(this) #endif /* USE_SIGCPLUSPLUS */ { #ifdef VDKDEBUG objectC++; #endif } /* */ void VDKObject::SetCursor(VDKCursorType curType) { GdkCursor *cursor = NULL; if( (! widget) || (! widget->window)) return; // restore default cursor else if(curType == curDefault) gdk_window_set_cursor (widget->window, NULL); else { cursor = gdk_cursor_new ((GdkCursorType) curType); gdk_window_set_cursor (widget->window, cursor); gdk_cursor_destroy (cursor); } /* X operations are not synchronous. Request is queued by the client but not delivered to the server. So with this call the change occurs immediately */ gdk_flush(); } /* Overridden in some subclasses */ void VDKObject::ConnectDefaultEvents() { } /* */ void VDKObject::ConnectDefaultSignals() { if(! widget ) return; else if(!(dynamic_cast(this))) { s_realize.obj = this; s_realize.signal = realize_signal; GtkWidget* gtkwidget = ConnectingWidget(); gtk_signal_connect(GTK_OBJECT(gtkwidget),"realize", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_realize); } /* gtk_widget_set_events(widget,GDK_ALL_EVENTS_MASK); gtk_widget_set_events(WrappedWidget(),GDK_ALL_EVENTS_MASK); */ // printf("\nvoid VDKObject::ConnectDefaultSignals()"); // fflush(stdout); } /* */ VDKObject::~VDKObject() { /* delete items, garbage and raws */ ItemListIterator li(items); for(;li;li++) delete li.current(); ItemListIterator lg(garbages); for(;lg;lg++) delete lg.current(); RawListIterator lr(raws); for(;lr;lr++) delete lr.current(); // deletes signal unit list SignalUnitListIterator lu(suList); for(;lu;lu++) delete lu.current(); // deletes event unit list EventUnitListIterator le(euList); for(;le;le++) delete le.current(); #ifdef VDKDEBUG objectD++; #endif } /* */ void VDKObject::SetVisible(bool visible) { /* could be wrong iterate on subwidget tree since gtk+ makes the job already (who knows ?) mm. 5.51999 ItemListIterator li(items); for(;li;li++) li.current()->SetVisible(visible); */ ShowWidget(visible); } /* ================================== SIGNAL HANDLING FOR STATIC TABLES AND DYNAMIC SIGNAL LISTS ================================== "the signal is considered treated if and only if a user response returned true". Signal flow: 1. to object level and up to his hierarchy if not treated. 2. to parent level and up to parent hierarchy if not treated. if parent has a parent step 2 will be repeated until found a parent without parent. 3. if yet not treated signal is lost. */ /* ======================= handles signal calling static tables routines ======================= */ void VDKObject::VDKSignalPipe(GtkWidget* w, void* s) { g_return_if_fail(s != NULL); VDKObjectSignal* signal = reinterpret_cast(s); VDKObject* obj = reinterpret_cast(signal->obj); // visits class level if(obj->VDKObjectSignalResponse(w,signal->signal,obj,false)) return; // visit parent level VDKObject* parent; for(parent = obj->Parent(); parent; parent = parent->Parent()) if(parent->VDKSignalResponse(w,signal->signal,obj,obj,false)) break; } /* ======================= handles signal calling dynamic list routines ======================= */ void VDKObject::VDKSignalUnitPipe(GtkWidget* w, void* s) { g_return_if_fail(s != NULL); VDKObjectSignalUnit* signal = reinterpret_cast(s); VDKObject* obj = reinterpret_cast(signal->obj); // visits class level if signal->owner == signal->obj // it depends if user call SignalEmit(obj,signal,func) // or SignalEmitParent(obj,signal,func) if(signal->owner == signal->obj) //SignalEmit() { if(obj->VDKSignalUnitResponse(w,(char*) signal->signal,obj)) return; VDKForm* f; /* if obj is a form, see if has an owner, in this case is a child form so try to disseminate also to his parent form */ if((f = dynamic_cast(obj)) ) { // main application does not have an owner VDKForm* owner = f->Owner(); if(owner) { bool result = owner->VDKSignalUnitResponse(w,(char*) signal->signal,obj); if(result) return; } } } // else visit parent level user called SignalEmitParent() VDKObject* parent; for(parent = obj->Parent(); parent; parent = parent->Parent()) { if(parent->VDKSignalUnitResponse(w,(char*) signal->signal,obj)) break; VDKForm* f; /* if parent is a form, see if has an owner, in this case is a child form so try to disseminate also to his parent form */ if((f = dynamic_cast(parent)) ) { // main application does not have an owner VDKForm* owner = f->Owner(); if(owner) { bool result = owner->VDKSignalUnitResponse(w,(char*) signal->signal,obj); if(result) return; } } } } /* ======================= handles events calling static tables routines ======================= */ int VDKObject::VDKEventPipe(GtkWidget* w, GdkEvent* event, void* o) { g_return_val_if_fail(o!= NULL, FALSE); VDKObject* obj = reinterpret_cast(o); if(obj->VDKObjectEventResponse(w,event,o,false)) return TRUE; VDKObject* parent; for(parent = obj->Parent(); parent; parent = parent->Parent()) if(parent->VDKEventResponse(w,event,o,o, false)) return TRUE; return FALSE; //TRUE; } /* ======================= handles events calling dynamic list routines ======================= */ int VDKObject::VDKEventUnitPipe(GtkWidget* w, GdkEvent* ev, void* s) { g_return_val_if_fail(s != NULL, TRUE); VDKObjectEventUnit* event = reinterpret_cast(s); VDKObject* obj = reinterpret_cast(event->obj); // visits class level if event->owner == event->obj if(event->owner == event->obj) { if(obj->VDKEventUnitResponse(w,(char*) event->signal, ev, obj)) return TRUE; VDKForm* f; /* if obj is a form, see if has an owner, in this case is a child form so try to disseminate also to his parent form */ if((f = dynamic_cast(obj)) ) { // main application form does not have an owner VDKForm* owner = f->Owner(); if(owner) { bool result = owner->VDKEventUnitResponse(w,(char*) event->signal,ev,obj); if(result) return TRUE; } } } // visit parent level VDKObject* parent; for(parent = obj->Parent(); parent; parent = parent->Parent()) { if(parent->VDKEventUnitResponse(w,(char*) event->signal,ev, obj)) return TRUE; VDKForm* f; /* if parent is a form, see if has an owner, in this case is a child form so try to disseminate also to his parent form */ if((f = dynamic_cast(parent)) ) { // main application form does not have an owner VDKForm* owner = f->Owner(); if(owner) { bool result = owner->VDKEventUnitResponse(w,(char*) event->signal,ev,obj); if(result) return TRUE; } } } return FALSE; } /* ================== signal emitting (static tables) ================= */ void VDKObject::SignalEmit(int sig) { VDKObjectSignal signal; signal.obj = this; signal.signal = sig; VDKSignalPipe(widget,&signal); } /* ================== signal emitting (dyna tables) ================= */ void VDKObject::SignalEmit(char* sig) { VDKObjectSignalUnit* signal = new VDKObjectSignalUnit(this,this,sig); suList.add(signal); VDKSignalUnitPipe(widget,signal); } /* ================== signal emitting to parent level (dyna lists) ================= */ void VDKObject::SignalEmitParent(char* sig) { VDKObjectSignalUnit* signal = new VDKObjectSignalUnit(Parent(),this,sig); suList.add(signal); VDKSignalUnitPipe(widget,signal); } /* ================== signal emitting to class or parent level (static tables) ================= private */ void VDKObject::SignalEmit(int signal, int level) { VDKObject* obj_parent; switch (level) { // visit class level case Class_level: if(VDKObjectSignalResponse(widget, signal, this,false)) return; // visit level passing himself as sender case Parent_level: for(obj_parent = Parent(); obj_parent; obj_parent = obj_parent->Parent()) if(obj_parent->VDKSignalResponse(widget, signal, this, this, false)) break; } } /* ====================================================================== */ /* */ void VDKObject::SetFont(VDKFont* font) { if(!widget) return; _setFont_(widget,font); ItemListIterator li(items); for(;li;li++) li.current()->SetFont(font); } /* */ void VDKObject::_setFont_(GtkWidget* wid, VDKFont* font) { if(GTK_IS_WIDGET(wid) && font) { // if(!GTK_WIDGET_REALIZED(wid)) // { PangoFontDescription* font_desc = font->AsPangoFontDescription(); g_return_if_fail (font_desc != NULL); gtk_widget_modify_font (wid,font_desc); // } /* else { GtkRcStyle *rc_style; rc_style = gtk_rc_style_new (); rc_style->font_desc = pango_font_description_copy (font->AsPangoFontDescription()); gtk_widget_modify_style (WrappedWidget(), rc_style); gtk_rc_style_unref (rc_style); gtk_widget_size_request (wid, NULL); } */ } } /* */ void VDKObject::SetForeground(VDKRgb color, GtkStateType state) { if(!widget) return; _setForeground_(widget,color.red,color.green,color.blue, state); } /* */ void VDKObject::SetBackground(VDKRgb color, GtkStateType state) { if(!widget) return; _setBackground_(widget,color.red,color.green,color.blue, state); } /* read background color property */ VDKRgb VDKObject::GetBackground(GtkStateType state) { VDKRgb rgb; switch(state) { case GTK_STATE_ACTIVE: rgb = ActiveBackground; break; case GTK_STATE_PRELIGHT: rgb = PrelightBackground; break; case GTK_STATE_SELECTED: rgb = SelectedBackground; break; case GTK_STATE_INSENSITIVE: rgb = InsensitiveBackground; break; default: rgb = NormalBackground; } return rgb; } /* read foreground color property */ VDKRgb VDKObject::GetForeground(GtkStateType state) { VDKRgb rgb = Foreground; return rgb; } void VDKObject::_setBackground_(GtkWidget* wid, int red,int green, int blue, GtkStateType state) { VDKColor *color = NULL; if(!GTK_IS_WIDGET(wid)) return; else color = new VDKColor(Owner() ? Owner() : this ,red,green,blue); gtk_widget_modify_bg (wid,state,color->Color()); } /* */ void VDKObject::_setForeground_(GtkWidget* wid, int red,int green, int blue, GtkStateType state) { VDKColor *color = NULL; if(!GTK_IS_WIDGET(wid)) return; else color = new VDKColor(Owner() ? Owner() : this ,red,green,blue); gtk_widget_modify_fg (wid,state,color->Color()); } /* */ void VDKObject::Enable(bool flag) { if(GTK_IS_WIDGET(widget)) { gtk_widget_set_sensitive (widget, flag); Enabled(flag); } } /* */ void VDKObject::SetTip(char* t) { if(tip) tip->SetTip(t); else tip = new VDKTooltip(Owner(), this, t); } /* */ void VDKObject::GrabFocus() { if(widget) { VDKCustom* custom = dynamic_cast(this); if(custom) gtk_widget_grab_focus(custom->CustomWidget()); else gtk_widget_grab_focus(WrappedWidget()); } } /* */ void VDKObject::ShowWidget(bool visible) { if(widget && GTK_IS_WIDGET(widget)) { if(visible) gtk_widget_show(widget); else gtk_widget_hide(widget); } } /* */ void VDKObject::Add(VDKObject*, int, int , int , int ) { g_warning("VDKObject::Add() unuseful call"); } /* */ void VDKObject::AddItem(VDKObject* item) { items.add(item); } /* */ void VDKObject::RemoveItem(VDKObject* item) { if(items.remove(item)) { if(Owner()) Owner()->Garbages().add(item); else Garbages().add(item); } } /* recursively removes items */ void VDKObject::RemoveItems() { if(items.size() > 0) { ItemListIterator li(items); for(;li;li++) { li.current()->RemoveItems(); if(Owner()) Owner()->Garbages().add(li.current()); else Garbages().add(li.current()); } #ifdef VDKDEBUG objRemoved += items.size(); #endif items.flush(); } if(Owner()) Owner()->Garbages().add(this); else Garbages().add(this); #ifdef VDKDEBUG objRemoved ++; #endif } /* explicitely destroy this */ bool VDKObject::Destroy() { VDKObject* parent = NULL; for(parent = Parent() ; parent; parent = parent->Parent()) if( Parent()->Items().remove(this) || Parent()->Garbages().remove(this) ) break; if(parent && widget != NULL && GTK_IS_WIDGET(widget)) { #ifdef VDKDEBUG printf("\ndestroying widget:%p",Widget()); fflush(stdout); #endif gtk_widget_destroy(Widget()); delete this; return true; } else return false; } /* */ void VDKObject::Draw(GdkRectangle* area) { if(widget) gtk_widget_draw(widget,area); } /* */ void SizeObjectProp::operator = (VDKPoint p) { value = p; GtkWidget* wid = object->Widget(); if(wid) gtk_widget_set_size_request(wid,p.X(), p.Y()); } /* */ SizeObjectProp::operator VDKPoint() { GtkWidget* wid = object->Widget(); return wid ? VDKPoint (wid->allocation.width, wid->allocation.height) : VDKPoint(0,0); } #ifdef USE_SIGCPLUSPLUS // Compiled from here in order to avoid complicated conditionals // in makefile, will change in near future #include "sigc_events.cc" #include "sigc_eventsignals.cc" #endif /* USE_SIGCPLUSPLUS */ vdk-2.4.0/vdk/vdkstring.cc0000644000000000000000000003012507624136205011044 /* * =========================== * VDK Visual Development Kit * Version 1.2.3 * October 1998, August 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include "vdk/vdkstring.h" #include #include #include #include #include extern "C" { #include } VDKString VDKString::operator + (const char* s) const { VDKString temp(*this); temp += s; return temp; } VDKString operator +(const char* s, const VDKString& vdks) { VDKString temp(s); temp += vdks; return temp; } VDKString::VDKString() { p = new STRING; p->s = 0; p->ref = 1; } VDKString::VDKString (const char*s) { p = new STRING; if(s) { p->s = new char[std::strlen(s)+1]; std::strcpy(p->s,s); } else { p->s = 0; } p->ref = 1; } VDKString::VDKString (const char& c) { p = new STRING; if(c != '\0') { p->s = new char[2]; (p->s)[0] = c; (p->s)[1] = '\0'; } else { p->s = 0; } p->ref = 1; } VDKString::VDKString(const VDKString& s) { s.p-> ref++; p = s.p; } VDKString& VDKString::operator= (const VDKString& s) { if (this == &s) return *this; else s.p->ref++; if (--p->ref == 0) { if(p->s != 0)delete[] p->s; delete p; } p= s.p; return *this; } VDKString& VDKString::operator= (const char* s) { if (p->ref > 1) { p->ref--; p = new STRING; } else if (p->ref == 1 && p->s != 0 ) { delete[] p->s; } if(s) { p->s = new char[std::strlen(s)+1]; std::strcpy(p->s,s); } else { p->s = 0; } p->ref = 1; return *this; } VDKString::~VDKString() { if(--p->ref == 0) { if(p->s != 0) delete[] p->s; delete p; } } int VDKString::operator == (const VDKString& s) const { if(p->s == s.p->s) // can be 0 either return true; else if ((p->s == 0) || (s.p->s == 0)) return false; else return !std::strcmp(p->s,s.p->s); } int VDKString::operator <( const VDKString& s) const { if ((p->s == 0) || (s.p->s == 0)) return false; else return std::strcmp(p->s,s.p->s) < 0; } int VDKString::operator>(const VDKString& s) const { if ((p->s == 0) || (s.p->s == 0)) return false; else return std::strcmp(p->s,s.p->s) > 0; } int VDKString::operator <=(const VDKString& s) const { return (*this < s || *this == s); } int VDKString::operator >=(const VDKString& s) const { return (*this > s || *this == s); } int VDKString::operator !=(const VDKString& s) const { return !(*this == s); } VDKString& VDKString::operator +=(const char* s) { if(isNull()) { *this = VDKString(s); } else { if(s) { char* local = new char[std::strlen(p->s)+std::strlen (s)+1]; std::strcat(std::strcpy(local,p->s),s); *this = VDKString(local); delete[] local; } } return *this; } VDKString& VDKString::operator +=(const VDKString& s) { *this += s.c_str(); return *this; } const char* VDKString::c_str() const { return p->s; } VDKString VDKString::operator + (const VDKString& s) const { return *this + s.c_str(); } bool VDKString::isNull() const { return (p->s == 0); } int VDKString::size() const { if(!isNull()) return std::strlen(p->s); else return 0; } char VDKString::operator[](unsigned int ix) const { if((p->s == 0) || (ix > std::strlen(p->s))) return '\0'; else return p->s[ix]; } VDKString& VDKString::DelSelection(unsigned int begin, unsigned int len) { if (isNull() || (len == 0)) return *this; unsigned int L = (unsigned int)size(); if (begin > L) return *this; VDKString temp = p->s; temp.Cut(begin); if (begin + len < L) temp += (p->s + begin + len); *this = temp; return *this; } VDKString& VDKString::RTrim() { if (isNull()) return *this; unsigned int iPos = (unsigned int)size(); unsigned int iCar = *(p->s + iPos - 1); while (iCar == ' ') { iPos--; iCar = *(p->s + iPos); } VDKString temp = p->s; *this = temp.Cut(iPos + 1); return *this; } VDKString& VDKString::LTrim() { if (isNull()) return *this; unsigned int iPos = 0; unsigned int iCar = *(p->s); while (iCar == ' ') { iPos++; iCar = *(p->s + iPos); } *this = DelSelection(0, iPos); return *this; } VDKString& VDKString::Trim() { RTrim(); LTrim(); return *this; } unsigned int VDKString::CharCount(const char car) const { if (isNull()) return 0; unsigned int i = 0, nbcar = 0; char Car = *p->s; while (Car != 0) { if (Car == car) nbcar++; Car = *(p->s + i + 1); i++; } return nbcar; } // This essentially for english or french people // It has to be completed for other countries VDKString& VDKString::UpperCase() { if (isNull()) return *this; unsigned int L = (unsigned int)size(); char *szTemp = new char[L + 1]; // Memory error if (szTemp == 0) return *this; for (unsigned int i = 0; i < L; i++) { switch (p->s[i]) { case '' : case '' : case '' : case '' : szTemp[i] = 'A'; break; case '' : case '' : case '' : case '' : szTemp[i] = 'E'; break; case '' : case '' : case '' : case '' : szTemp[i] = 'I'; break; case '' : case '' : case '' : case '' : szTemp[i] = 'O'; break; case '' : case '' : case '' : case '' : szTemp[i] = 'U'; break; default : szTemp[i] = toupper(p->s[i]); } } szTemp[L] = 0; *this = szTemp; return *this; } // It is supposed here that upper case letters // never have accents VDKString& VDKString::LowerCase() { if (isNull()) return *this; unsigned int L = (unsigned int)size(); char *szTemp = new char[L + 1]; // Memory error if (szTemp == 0) return *this; for (unsigned int i = 0; i < L; i++) { szTemp[i] = tolower(p->s[i]); } szTemp[L] = 0; *this = szTemp; return *this; } bool VDKString::isEmpty() const { return (size() == 0); } VDKString& VDKString::Concatf(const char* format, ...) { va_list argptr; int cnt; // buffer is already full up, give up if (size() > MAXPRINTFLEN - 1) return *this; // alloc a large string char* szBuffer = new char[MAXPRINTFLEN]; // Memory error, nothing is done yet if (szBuffer == 0) return *this; // constructing the new string va_start(argptr, format); cnt = g_vsnprintf(szBuffer, MAXPRINTFLEN, format, argptr); va_end(argptr); if (cnt == EOF) { // EOF encountered, returns backward delete[] szBuffer; return *this; } *this = (*this += szBuffer); delete[] szBuffer; return *this; } VDKString& VDKString::Sprintf(const char* format, ...) { va_list argptr; int cnt; // buffer is already full up, give up if (size() > MAXPRINTFLEN - 1) return *this; // alloc a large string char* szBuffer = new char[MAXPRINTFLEN]; // Memory error, nothing is done yet if (szBuffer == 0) return *this; // constructing the new string va_start(argptr, format); cnt = g_vsnprintf(szBuffer, MAXPRINTFLEN, format, argptr); va_end(argptr); if (cnt == EOF) { // EOF encountered, returns backward delete[] szBuffer; return *this; } *this = szBuffer; delete[] szBuffer; return *this; } VDKString& VDKString::GetPart(unsigned int i, const char sep) { unsigned int L; char szSep[2]; VDKString temp; if (isNull()) return *this; if ((i == 0) || (i > CharCount(sep) + 1)) { *this = temp; return *this; } unsigned int j = 1; szSep[0] = sep; szSep[1] = 0; char* szS = std::strpbrk(p->s, szSep); char* szP = p->s; while (j < i) { szP = szS + 1; szS = std::strpbrk(szP, szSep); j ++; } if (szS != 0) L = szS - szP; else L = (p->s + size()) - szP; temp = *this; temp.SubStr((szP - p->s), L); *this = temp; return *this; } int VDKString::GetFCharPos(const char car) const { if (isNull()) return -1; int rslt = (std::strchr(p->s, car) - p->s); if (rslt < 0) return -1; else return rslt; } int VDKString::GetLCharPos(const char car) const { if (isNull()) return -1; char *oldpos = p->s, *newpos = p->s; while (newpos) { oldpos = newpos; newpos = std::strchr(oldpos + 1, car); } if (oldpos == p->s) return -1; else return (oldpos - p->s); } double VDKString::StrtoDouble() const { if (isNull()) return 0; else return atof(p->s); } int VDKString::StrtoInt() const { if (isNull()) return 0; else return std::atoi(p->s); } VDKString& VDKString::SubStr(unsigned int start, unsigned int len) { if (isNull() || (start > (unsigned int)size())) return *this; char *szTemp = new char[size() + 1]; std::strncpy(szTemp, (p->s + start), len); *(szTemp + len) = 0; // put ZT that strncpy always forget !! *this = szTemp; delete[] szTemp; return *this; } VDKString& VDKString::Cut(unsigned int len) { if (isNull() || (len >= (unsigned int)size())) return *this; VDKString temp = p->s; *(temp.p->s + len) = 0; *this = temp.p->s; return *this; } VDKString& VDKString::LPad(unsigned int len, const char car) { if (isNull()) return *this; unsigned int L = (unsigned int)size(); int s = len - L; // s = number of missing chars if (s > 0) { char *local = new char[s + 1]; std::memset(local, car, s); local[s] = 0; VDKString temp = local; *this = (temp += *this); delete[] local; } return *this; } VDKString& VDKString::RPad(unsigned int len, const char car) { if (isNull()) return *this; unsigned int L = (unsigned int)size(); int s = len - L; // s = number of missing chars if (s > 0) { char *local = new char[s + 1]; std::memset(local, car, s); local[s] = 0; VDKString temp = local; *this = (*this += temp); delete[] local; } return *this; } VDKString& VDKString::DoubleChar(const char car) { char DCar[3]; VDKString temp, rslt; unsigned int i = 1, ncar; if (isNull() || (car == 0)) return *this; ncar = CharCount(car); // Nothing to modify here if (ncar == 0) return *this; DCar[0] = DCar[1] = car; DCar[2] = 0; for(i = 1; i <= ncar; i++) { temp = *this; temp.GetPart(i, car); rslt += temp; rslt += DCar; } temp = *this; temp.GetPart(i, car); rslt += temp; *this = rslt; return *this; } VDKString& VDKString::FormatDate(const char sep, int orig, int ret) { char day[3], month[3], year[5], rslt[11]; unsigned int doffset, moffset, yoffset; if (isNull() || (size() < 8)) return *this; bool HasSep = (!isdigit(p->s[2]) || !isdigit(p->s[4])); std::memset(day, 0, 3); std::memset(month, 0, 3); std::memset(year, 0, 5); switch(orig) { case ENG_DATE : if (HasSep) { doffset = 3; moffset = 0; yoffset = 6; } else { doffset = 2; moffset = 0; yoffset = 4; } break; case EUR_DATE : if (HasSep) { doffset = 0; moffset = 3; yoffset = 6; } else { doffset = 0; moffset = 2; yoffset = 4; } break; default : // defaults to INT_DATE if (HasSep) { doffset = 8; moffset = 5; yoffset = 0; } else { doffset = 6; moffset = 4; yoffset = 0; } } std::memcpy(day, p->s + doffset, 2); std::memcpy(month, p->s + moffset, 2); std::memcpy(year, p->s + yoffset, 4); switch(ret) { case ENG_DATE : if (sep != 0) sprintf(rslt, "%s%c%s%c%s", month, sep, day, sep, year); else sprintf(rslt, "%s%s%s", month, day, year); break; case EUR_DATE : if (sep != 0) sprintf(rslt, "%s%c%s%c%s", day, sep, month, sep, year); else sprintf(rslt, "%s%s%s", day, month, year); break; default : // defaults to INT_DATE if (sep != 0) sprintf(rslt, "%s%c%s%c%s", year, sep, month, sep, day); else sprintf(rslt, "%s%s%s", year, month, day); } *this = rslt; return *this; } vdk-2.4.0/vdk/vdktextview.cc0000644000000000000000000004157507472653256011443 /* * =========================== * VDK Visual Development Kit * Version 2.0.0 * December 2000 * =========================== * * Copyright (C) 1998,199,2000,2001 Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include /* --------------------------------------------- VDKTextBuffer class --------------------------------------------- */ /* */ void VDKTextBuffer::Ref() { ref++; } /* */ void VDKTextBuffer::Unref() { ref--; if(ref == (unsigned int) 0 ) delete this; } /* */ VDKTextBuffer::VDKTextBuffer():ref(0), Pointer("Pointer",this,0,&VDKTextBuffer::SetPointer, &VDKTextBuffer::GetPointer), Column("Column",this,0,&VDKTextBuffer::SetColumn, &VDKTextBuffer::GetColumn), Line("Line",this,0,&VDKTextBuffer::SetLine, &VDKTextBuffer::GetLine), Length("Length",this,0,&VDKTextBuffer::GetLength), Changed("Changed",this,false,&VDKTextBuffer::SetChanged, &VDKTextBuffer::GetChanged) { buffer = gtk_text_buffer_new (NULL); } VDKTextBuffer::VDKTextBuffer(char* filename):ref(0), Pointer("Pointer",this,0,&VDKTextBuffer::SetPointer,&VDKTextBuffer::GetPointer), Column("Column",this,0,&VDKTextBuffer::SetColumn,&VDKTextBuffer::GetColumn), Line("Line",this,0,&VDKTextBuffer::SetLine, &VDKTextBuffer::GetLine), Length("Length",this,0,&VDKTextBuffer::GetLength), Changed("Changed",this,false,&VDKTextBuffer::SetChanged, &VDKTextBuffer::GetChanged) { buffer = gtk_text_buffer_new (NULL); LoadFromFile(filename); } /* */ VDKTextBuffer::~VDKTextBuffer() { #if VERBOSE printf("\ndebug: deleting textbuffer:%p",this); fflush(stdout); #endif } /* */ bool VDKTextBuffer::LoadFromFile(const char* filename) { FILE* fp; char* edbuff,*p; fp = fopen(filename,"r"); if(fp) { int c; struct stat info; stat(filename,&info); unsigned int size = info.st_size; edbuff = p = new char[size]; while( (c = fgetc(fp)) != EOF) *p++ = (char) c; fclose(fp); gtk_text_buffer_set_text(buffer,edbuff,size); return true; } else { return false; } } /* */ bool VDKTextBuffer::SaveToFile(const char* filename) { FILE* fp; fp = fopen(filename,"w+b"); if(fp) { int result = 0; char* p; p = GetChars(0,-1); if(p) { result = fwrite(p, strlen(p) /*Length*/,1,fp); g_free(p); } fclose(fp); return result == 1; } else return false; } /* */ void VDKTextBuffer::TextInsert(const char* txt, int nchar) { gtk_text_buffer_insert_at_cursor (buffer,txt,nchar); } /* */ void VDKTextBuffer::Clear() { GtkTextIter start, end; gtk_text_buffer_get_bounds (buffer, &start, &end); gtk_text_buffer_delete(buffer,&start,&end); } /* */ void VDKTextBuffer::SetPointer(int char_offset) { GtkTextIter iter; gtk_text_buffer_get_iter_at_offset (buffer,&iter,char_offset); gtk_text_buffer_place_cursor(buffer,&iter); } /* */ int VDKTextBuffer::GetPointer() { int offset = -1; GtkTextIter iter; GtkTextMark* mark = gtk_text_buffer_get_mark(buffer,INSERT_MARK); if(mark) { gtk_text_buffer_get_iter_at_mark(buffer,&iter,mark); offset = gtk_text_iter_get_offset(&iter); } return offset; } /* */ void VDKTextBuffer::SetLine(int row) { GtkTextIter iter; gtk_text_buffer_get_iter_at_line(buffer,&iter,row); gtk_text_buffer_place_cursor(buffer,&iter); } /* */ int VDKTextBuffer::GetLine() { int line = -1; GtkTextIter iter; GtkTextMark* mark = gtk_text_buffer_get_mark(buffer,INSERT_MARK); if(mark) { gtk_text_buffer_get_iter_at_mark(buffer,&iter,mark); line = gtk_text_iter_get_line(&iter); } return line; } /* */ int VDKTextBuffer::GetColumn() { int lineoffset = -1; GtkTextIter iter; GtkTextMark* mark = gtk_text_buffer_get_mark(buffer,INSERT_MARK); if(mark) { gtk_text_buffer_get_iter_at_mark(buffer,&iter,mark); lineoffset = gtk_text_iter_get_line_offset (&iter); } return lineoffset; } /* */ void VDKTextBuffer::SetColumn(int col) { GtkTextIter iter; gtk_text_buffer_get_iter_at_line_offset(buffer,&iter,Line,col); gtk_text_buffer_place_cursor(buffer,&iter); } /* */ gchar* VDKTextBuffer::GetChars(int start, int end) { GtkTextIter first,last; gtk_text_buffer_get_iter_at_offset(buffer,&first,start); if(end >= 0) gtk_text_buffer_get_iter_at_offset(buffer,&last,end); else gtk_text_buffer_get_end_iter(buffer,&last); // returned address should be gfree()'d by user or it will leak. return gtk_text_buffer_get_slice(buffer,&first,&last,FALSE); } /* Forward delete chars from insertion point */ void VDKTextBuffer::ForwardDelete(int nchars) { GtkTextIter start, end; GtkTextMark* mark = gtk_text_buffer_get_mark(buffer,INSERT_MARK); if(mark) { int offset = (int) Pointer + nchars; int len = Length; gtk_text_buffer_get_iter_at_mark(buffer,&start,mark); if(offset < len) gtk_text_buffer_get_iter_at_offset(buffer,&end,offset); else gtk_text_buffer_get_end_iter(buffer,&end); gtk_text_buffer_delete(buffer,&start,&end); } } /* */ void VDKTextBuffer::BackwardDelete(int nchars) { GtkTextIter start, end; GtkTextMark* mark = gtk_text_buffer_get_mark(buffer,INSERT_MARK); if(mark) { int offset = (int) Pointer - nchars; offset = offset < 0 ? 0 : offset; gtk_text_buffer_get_iter_at_mark(buffer,&end,mark); gtk_text_buffer_get_iter_at_offset(buffer,&start,offset); gtk_text_buffer_delete(buffer,&start,&end); } } /* */ int VDKTextBuffer::GetLineAtOffset(int offset) { int line = -1; GtkTextIter iter; gtk_text_buffer_get_iter_at_offset(buffer,&iter,offset); line = gtk_text_iter_get_line(&iter); return line; } /* --------------------------------------------- VDKTextView class --------------------------------------------- */ /* */ VDKTextView::VDKTextView(VDKForm* owner, VDKTextBuffer* buff, int left_border): VDKObjectContainer(owner),buffer(buff),left_border(left_border), Pointer("Pointer",this,0,&VDKTextView::SetPointer, &VDKTextView::GetPointer), Column("Column",this,0,&VDKTextView::SetColumn,&VDKTextView::GetColumn), Line("Line",this,0,&VDKTextView::SetLine,&VDKTextView::GetLine), Length("Length",this,0,&VDKTextView::GetLength), Editable("Editable",this,true,&VDKTextView::SetEditable,&VDKTextView::GetEditable), MaxUndo("MaxUndo",this,0), LineAutoSelect("LineAutoSelect",this,false), ShowLineNumbers("ShowLineNumbers",this,false,&VDKTextView::SetShowLineNumbers), FirstVisibleLine("FirstVisibleLine",this,0,&VDKTextView::GetFirstVisibleLine), LastVisibleLine("LastVisibleLine",this,0,&VDKTextView::GetLastVisibleLine), Changed("Changed",this,false,&VDKTextView::SetChanged,&VDKTextView::GetChanged) { widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); if(!buffer) { //GtkTextTagTable *table = gtk_text_tag_table_new(); buffer = new VDKTextBuffer(); //g_object_ref(table); //GTK_TEXT_BUFFER(buffer->buffer)->tag_table = table; } else buffer->Ref(); view = gtk_text_view_new_with_buffer (buffer->buffer); sigwid = view; if(left_border) TextBorder(left_border,TVB_LEFT); gtk_container_add (GTK_CONTAINER (widget), view); gtk_widget_show(view); // ConnectDefaultSignals(); ConnectSignals(); } /* */ void VDKTextView::HandleRealize(GtkWidget* widget, gpointer gp) { /* VDKTextView* text = reinterpret_cast(gp); GtkTextView* wid = GTK_TEXT_VIEW(text->WrappedWidget()); GdkWindow* win = gtk_text_view_get_window (wid,GTK_TEXT_WINDOW_LEFT); VDKColor * color = new VDKColor(text->Owner(),"black"); if( win ) gdk_window_set_background(win,color->Color()); */ VDKTextView* text = reinterpret_cast(gp); if(text) { text->SignalEmit(realize_signal); text->SignalEmit("realize"); } } /* */ void VDKTextView::ConnectSignals() { gtk_signal_connect(GTK_OBJECT(view),"realize", GTK_SIGNAL_FUNC(VDKTextView::HandleRealize), (gpointer) this); } /* */ VDKTextView::~VDKTextView() { if(buffer) buffer->Unref(); } /* */ VDKTextBuffer* VDKTextView::Buffer(VDKTextBuffer* buff) { if(buff && (buff != buffer)) { if(buffer) buffer->Unref(); buffer = buff; buffer->Ref(); gtk_text_view_set_buffer(GTK_TEXT_VIEW(view),buffer->buffer); } return buffer; } /* */ void VDKTextView::SetBackground(VDKRgb rgb, GtkStateType state) { /* VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); GdkWindow* win = gtk_text_view_get_window (GTK_TEXT_VIEW(view),GTK_TEXT_WINDOW_TEXT); if(win) { gdk_window_set_background (win,color->Color()); } */ VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_base (GTK_WIDGET(view),state, color->Color()); } void VDKTextView::SetForeground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); gtk_widget_modify_text (GTK_WIDGET(view), state, color->Color()); } void VDKTextView::SetFont(VDKFont* font) { VDKObject::_setFont_(sigwid,font); } void VDKTextView::TextBorder(int size, int which) { int mask = which & TVB_TYPEMASK; if((which == TVB_ALL) || (mask == TVB_LEFT)) gtk_text_view_set_border_window_size (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_LEFT, size); if((which == TVB_ALL) || (mask == TVB_TOP)) gtk_text_view_set_border_window_size (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_TOP, size); if((which == TVB_ALL) || (mask == TVB_RIGHT)) gtk_text_view_set_border_window_size (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_RIGHT, size); if((which == TVB_ALL) || (mask == TVB_BOTTOM)) gtk_text_view_set_border_window_size (GTK_TEXT_VIEW (view), GTK_TEXT_WINDOW_BOTTOM, size); } /* Scrolls to a pointer pos or (default) to current pointer position, leaving pixels free */ void VDKTextView::ScrollToPos (int pointer, int margin) { if(pointer >= 0) buffer->Pointer = pointer; GtkTextMark* mark = gtk_text_buffer_get_mark(buffer->Buffer(), INSERT_MARK); if(mark) // more args on new gtk+ snapshoots gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(view),mark,margin,0,0,0); } /* Scrolls to a line,column leaving pixels free */ void VDKTextView::ScrollToLine(int line, int col, int margin) { buffer->Line = line; buffer->Column = col; GtkTextMark* mark = gtk_text_buffer_get_mark(buffer->Buffer(), INSERT_MARK); if(mark) // more args on new gtk+ snapshoots gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(view),mark,margin,0,0,0); } /* gets lines */ static void get_lines (GtkTextView *text_view, gint first_y, gint last_y, GArray *buffer_coords, GArray *numbers, gint *countp) { GtkTextIter iter; gint count; gint size; g_array_set_size (buffer_coords, 0); g_array_set_size (numbers, 0); /* Get iter at first y */ gtk_text_view_get_line_at_y (text_view, &iter, first_y, NULL); /* For each iter, get its location and add it to the arrays. * Stop when we pass last_y */ count = 0; size = 0; while (!gtk_text_iter_is_end (&iter)) { gint y, height; gint line_num; gtk_text_view_get_line_yrange (text_view, &iter, &y, &height); g_array_append_val (buffer_coords, y); line_num = gtk_text_iter_get_line (&iter); g_array_append_val (numbers, line_num); ++count; if ((y + height) >= last_y) break; gtk_text_iter_forward_line (&iter); } *countp = count; } /* handle expose on text view showing line numbers (shameless stolen from testext.c example in gtk+ distribution) */ static gint line_numbers_expose (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { gint count; GArray *numbers; GArray *pixels; gint first_y; gint last_y; gint i; GdkWindow *left_win; PangoLayout *layout; GtkTextView *text_view; GtkTextWindowType type; GdkDrawable *target; VDKTextView* text = reinterpret_cast(user_data); if(! text || !(text->ShowLineNumbers)) return FALSE; else text_view = GTK_TEXT_VIEW (widget); /* See if this expose is on the line numbers window */ left_win = gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_LEFT); if (event->window == left_win) { type = GTK_TEXT_WINDOW_LEFT; target = left_win; } else return FALSE; first_y = event->area.y; last_y = first_y + event->area.height; gtk_text_view_window_to_buffer_coords (text_view, type, 0, first_y, NULL, &first_y); gtk_text_view_window_to_buffer_coords (text_view, type, 0, last_y, NULL, &last_y); numbers = g_array_new (FALSE, FALSE, sizeof (gint)); pixels = g_array_new (FALSE, FALSE, sizeof (gint)); get_lines (text_view, first_y, last_y, pixels, numbers, &count); /* Draw fully internationalized numbers! */ layout = gtk_widget_create_pango_layout (widget, ""); i = 0; while (i < count) { gint pos; gchar *str; gtk_text_view_buffer_to_window_coords (text_view, type, 0, g_array_index (pixels, gint, i), NULL, &pos); str = g_strdup_printf ("%5d:", g_array_index (numbers, gint, i)+1); pango_layout_set_text (layout, str, -1); gdk_draw_layout (target, widget->style->fg_gc [widget->state], /* 2 is just a random padding */ 2, pos + 2, layout); g_free (str); ++i; } g_array_free (pixels, TRUE); g_array_free (numbers, TRUE); g_object_unref (G_OBJECT (layout)); return TRUE; } /* */ static int expose_connection = 0; void VDKTextView::SetShowLineNumbers(bool show) { GdkWindow* left_win = gtk_text_view_get_window (GTK_TEXT_VIEW(view), GTK_TEXT_WINDOW_LEFT); if(left_win) { if(show) { expose_connection = gtk_signal_connect (GTK_OBJECT (view), "expose_event", GTK_SIGNAL_FUNC (line_numbers_expose), this); gtk_widget_queue_draw(view); } else { gtk_signal_disconnect(GTK_OBJECT (view),expose_connection); TextBorder(0, TVB_LEFT); } } } /* */ int VDKTextView::GetFirstVisibleLine() { GdkRectangle visible_rect; GtkTextIter iter; int line_top; gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(view),&visible_rect); gtk_text_view_get_line_at_y(GTK_TEXT_VIEW(view),&iter,visible_rect.y,NULL); line_top = gtk_text_iter_get_line(&iter); return line_top; } /* */ int VDKTextView::GetLastVisibleLine() { GdkRectangle visible_rect; GtkTextIter iter; int line_top; gtk_text_view_get_visible_rect(GTK_TEXT_VIEW(view),&visible_rect); gtk_text_view_get_line_at_y(GTK_TEXT_VIEW(view),&iter, visible_rect.y+visible_rect.height,NULL); line_top = gtk_text_iter_get_line(&iter); return line_top; } /* */ vdk-2.4.0/vdk/vdktreeview.cc0000644000000000000000000005121310031555126011362 /* * =========================== * VDK Visual Development Kit * Version 2.0 * November 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include static void col_clicked_cb (GtkTreeViewColumn *col, gpointer data); /* static void toggled_callback (GtkCellRendererToggle *celltoggle, gchar *path_string, gpointer *tree); */ static void selection_cb (GtkTreeSelection *selection, gpointer *gp); static void row_activated_cb (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column,gpointer *gp); /* */ VDKTreeViewModel::VDKTreeViewModel( GType* types, int ncol) { model = gtk_tree_store_newv (ncol,types); } /* */ void VDKTreeViewModel::AppendBlank(GtkTreeIter* iter,GtkTreeIter* parent) { gtk_tree_store_append (GTK_TREE_STORE (model), iter, parent); } /* */ void VDKTreeViewModel::PrependBlank(GtkTreeIter* iter,GtkTreeIter* parent) { gtk_tree_store_prepend (GTK_TREE_STORE (model), iter, parent); } /* */ void VDKTreeViewModel::InsertTuple(GtkTreeIter* iter,VDKTreeViewModelTuple &tuple, GtkTreeIter* parent, bool recurse) { int t = 0; VDKTreeViewModelIterator ti(this,parent); for(;ti;ti++) { VDKTreeViewModelTuple visited_tuple; GetTuple(ti.current(),visited_tuple); // sets key index and compare function in visited tuple int key_index = tuple.KeyIndex; VDKStringCompareFunction less = tuple.Less; VDKStringCompareFunction equal = tuple.Equal; visited_tuple.KeyIndex = key_index; visited_tuple.Less = less; visited_tuple.Equal = equal; // insert before greater node if(tuple < visited_tuple) { gtk_tree_store_insert_before (GTK_TREE_STORE(GtkModel()), iter, NULL, ti.current()); for(t = 0; t < tuple.size(); t++) SetCell(iter,t,(char*) tuple[t]); return ; } else if(recurse && ti.HasChild()) { InsertTuple(iter,tuple, ti.current(),recurse); return; } } // append to last node AppendBlank(iter,parent); for(t = 0; t < tuple.size(); t++) SetCell(iter,t,(char*) tuple[t]); return ; } /* */ void VDKTreeViewModel::Remove(GtkTreeIter* i) { gtk_tree_store_remove (GTK_TREE_STORE (model), i); return ; } /* */ void VDKTreeViewModel::Clear() { gtk_tree_store_clear(GTK_TREE_STORE (model)); } /* */ void VDKTreeViewModel::SetData(GtkTreeIter* node,...) { va_list ap; va_start(ap,node); gtk_tree_store_set_valist(GTK_TREE_STORE(model),node,ap); va_end(ap); } /* */ VDKTreeViewModel::~VDKTreeViewModel() { } /* */ bool VDKTreeViewModel::Root(GtkTreeIter* iter) { return gtk_tree_model_get_iter_root(GTK_TREE_MODEL(model),iter) ? true : false; } /* */ bool VDKTreeViewModel::Next(GtkTreeIter* iter) { return gtk_tree_model_iter_next(GTK_TREE_MODEL(model), iter) ? true : false; } bool VDKTreeViewModel::Child(GtkTreeIter* iter,GtkTreeIter* parent) { return gtk_tree_model_iter_children (GTK_TREE_MODEL(model), iter, parent) ? true : false; } /* local buffer should be freed by caller if not NULL. */ char * VDKTreeViewModel::GetCell(GtkTreeIter* node, int column) { const char* buff; char* local = NULL; GValue value = {0, }; gtk_tree_model_get_value (GTK_TREE_MODEL(model), node, column, &value); GType type = gtk_tree_model_get_column_type (GTK_TREE_MODEL(model), column); switch(type) { case G_TYPE_CHAR: { char val = g_value_get_char(&value); local = new char[2]; local[0] = val; local[1] = '\0'; } break; case G_TYPE_STRING: if ( (buff = g_value_get_string (&value)) ) { local = new char[strlen(buff)+1]; strcpy(local,buff); } break; case G_TYPE_BOOLEAN: { bool val = g_value_get_boolean (&value); local = new char[8]; sprintf(local,"%s",val ? "1" : "0"); } break; case G_TYPE_INT: { int val = g_value_get_int(&value); local = new char[32]; sprintf(local,"%d",val); } break; case G_TYPE_UINT: { unsigned int val = g_value_get_uint(&value); local = new char[32]; sprintf(local,"%u",val); } break; case G_TYPE_LONG: { long val = g_value_get_long(&value); local = new char[32]; sprintf(local,"%ld",val); } break; case G_TYPE_ULONG: { unsigned long val = g_value_get_ulong(&value); local = new char[32]; sprintf(local,"%lu",val); } break; case G_TYPE_FLOAT: { float val = g_value_get_ulong(&value); local = new char[64]; sprintf(local,"%f",val); } break; case G_TYPE_DOUBLE: { double val = g_value_get_double(&value); local = new char[64]; sprintf(local,"%f",val); } break; case G_TYPE_POINTER: { void* val = g_value_get_pointer(&value); local = new char[16]; sprintf(local,"%p",val); } default: { if( type == GDK_TYPE_PIXBUF) { void* val = g_value_get_pointer(&value); local = new char[16]; sprintf(local,"%p",val); } } } g_value_unset (&value); return local; } /* */ void VDKTreeViewModel::SetCell(GtkTreeIter* node, int column, const char* val) { GValue value = {0, }; GType type = gtk_tree_model_get_column_type (GTK_TREE_MODEL(model), column); g_value_init(&value,type); switch(type) { case G_TYPE_CHAR: g_value_set_char (&value,val[0]); break; case G_TYPE_STRING: g_value_set_string (&value,val); break; case G_TYPE_BOOLEAN: if(!strcasecmp("true",val)) g_value_set_boolean (&value, 1); else if(!strcasecmp("false",val)) g_value_set_boolean (&value, 0); else g_value_set_boolean (&value, atoi(val)); break; case G_TYPE_INT: g_value_set_int (&value, atoi(val)); break; case G_TYPE_UINT: { unsigned int v = (unsigned int) atoi(val); g_value_set_uint (&value, v); } break; case G_TYPE_LONG: g_value_set_long (&value, atol(val)); break; case G_TYPE_ULONG: { unsigned long v = (unsigned long) atol(val); g_value_set_ulong (&value, v); } break; case G_TYPE_FLOAT: g_value_set_float (&value, atof(val)); break; case G_TYPE_DOUBLE: { char * endptr; double v = strtod(val,&endptr); g_value_set_double (&value, v); } break; default: g_value_unset (&value); return; } gtk_tree_store_set_value (GTK_TREE_STORE(model),node,column,&value); g_value_unset (&value); } /* linear search on tree (depth first) */ static GtkTreeIter* recurse(VDKTreeViewModel * model, int column, char* value, GtkTreeIter* iter) { VDKTreeViewModelIterator ti(model,iter); GtkTreeIter * found = NULL; for(;ti;ti++) { char* visited_value = model->GetCell(ti.current(),column); if(visited_value && !strcmp(value,visited_value)) { delete[] visited_value; found = ti.current(); break; } else if(visited_value) delete[] visited_value; if(ti.HasChild()) { found = recurse (model,column,value,ti.current()); if(found) break; } } return found; } bool VDKTreeViewModel::Find(GtkTreeIter* iter,int column, char* value) { GtkTreeIter *found_iter = recurse(this,column,value,NULL); if(found_iter) { *iter = *found_iter; return true; } else return false; } /* */ void VDKTreeViewModel::GetTuple(GtkTreeIter* node,VDKTreeViewModelTuple& tuple) { int t; char* local; int n_columns = gtk_tree_model_get_n_columns (GTK_TREE_MODEL(model)); tuple.resize(n_columns); for(t = 0; t < n_columns; t++) { local = GetCell(node,t); if(local) { tuple[t] = local; delete[] local; } } return ; } /* VDK_TREE_VIEW_ITERAROR */ /* */ VDKTreeViewModelIterator::VDKTreeViewModelIterator(VDKTreeViewModel* model,GtkTreeIter* parent): model(model) { if(parent) { if(gtk_tree_model_iter_children (GTK_TREE_MODEL(model->GtkModel()), &iter, parent)) internal_iter = &iter; else internal_iter = NULL; } else if(gtk_tree_model_get_iter_root(GTK_TREE_MODEL(model->GtkModel()) ,&iter)) internal_iter = &iter; else internal_iter = NULL; } void VDKTreeViewModelIterator::operator++() { if(gtk_tree_model_iter_next(GTK_TREE_MODEL(model->GtkModel()), &iter)) internal_iter = &iter; else internal_iter = NULL; } void VDKTreeViewModelIterator::operator++(int) { if(gtk_tree_model_iter_next(GTK_TREE_MODEL(model->GtkModel()), &iter)) internal_iter = &iter; else internal_iter = NULL; } bool VDKTreeViewModelIterator::HasChild() { if(internal_iter) { if(gtk_tree_model_iter_has_child (GTK_TREE_MODEL(model->GtkModel()), &iter)) return true; } return false; } /* VDKTREEVIEWCOLUMN */ void VDKTreeViewColumn::edited_callback (GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer data) { VDKTreeViewColumn* column = reinterpret_cast(data); VDKTreeView* tree = column->Owner(); VDKTreeViewModel *model = tree->Model; #ifdef USE_SIGCPLUSPLUS { int t = 0; GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(model->GtkModel()), &iter, path); VDKTreeViewColumnListIterator li(*tree->Columns()); for(;li;li++,t++) if(column == li.current()) break; t = t < tree->Columns()->size() ? t : -1; tree->OnCellEdited(tree,&iter,t,new_text); gtk_tree_path_free (path); } #endif } /* */ void VDKTreeViewColumn::toggled_callback (GtkCellRendererToggle *cell, gchar *path_string, gpointer data) { VDKTreeViewColumn* column = reinterpret_cast(data); VDKTreeView* tree = column->Owner(); VDKTreeViewModel *model = tree->Model; #ifdef USE_SIGCPLUSPLUS { int t = 0; GtkTreeIter iter; gboolean value; GtkTreePath *path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(model->GtkModel()), &iter, path); VDKTreeViewColumnListIterator li(*tree->Columns()); for(;li;li++,t++) if(column == li.current()) break; t = t < tree->Columns()->size() ? t : -1; if(t>=0) { gtk_tree_model_get (GTK_TREE_MODEL(model->GtkModel()), &iter, t, &value, -1); tree->OnCellToggled(tree,&iter,t,value); gtk_tree_path_free (path); } } #endif } /* */ VDKTreeViewColumn::VDKTreeViewColumn(VDKTreeView *owner, int col, char* title, bool editable, int ecol): owner(owner), handler_seq_no(0), NormalBackground("NormalBackground",this,VDKRgb(-1,-1,-1), &VDKTreeViewColumn::SetNormalBackground), Foreground("Foreground",this,VDKRgb(-1,-1,-1), &VDKTreeViewColumn::SetForeground), Font("Font",this,NULL,&VDKTreeViewColumn::SetFont), Title("Title",this,NULL,&VDKTreeViewColumn::SetTitle,&VDKTreeViewColumn::GetTitle), Width("Width",this,0,&VDKTreeViewColumn::SetWidth,&VDKTreeViewColumn::GetWidth), Sortable("Sortable",this,false,&VDKTreeViewColumn::SetSortable) { VDKTreeViewModel* model = owner->Model; // error if no model ..... and/or editable stuff GType type = gtk_tree_model_get_column_type (GTK_TREE_MODEL(model->GtkModel()), col); if( type == GDK_TYPE_PIXBUF) { cell = gtk_cell_renderer_pixbuf_new (); column = gtk_tree_view_column_new_with_attributes (title,cell,"pixbuf",col, NULL); } else { switch(type) { case G_TYPE_STRING: cell = gtk_cell_renderer_text_new (); if(!editable) column = gtk_tree_view_column_new_with_attributes (title,cell,"text",col,NULL); else { column = gtk_tree_view_column_new_with_attributes (title,cell, "text",col, "editable",ecol >= 0 ? ecol : 0, NULL); g_signal_connect_data (G_OBJECT (cell), "edited", G_CALLBACK (VDKTreeViewColumn::edited_callback), this, NULL,(GConnectFlags) 0); } break; case G_TYPE_BOOLEAN: cell = gtk_cell_renderer_toggle_new (); /* g_object_set (G_OBJECT (cell),"activatable", TRUE, "radio", FALSE, NULL); */ column = gtk_tree_view_column_new_with_attributes (title,cell, "active", col,NULL); g_signal_connect_data (G_OBJECT (cell), "toggled", G_CALLBACK (VDKTreeViewColumn::toggled_callback), this, NULL,(GConnectFlags) 0); break; default: column = NULL; // ERROR } } if(column) { if(title) Title = title; SetWidth(0); owner->Columns()->add(this); gtk_tree_view_append_column (GTK_TREE_VIEW (owner->WrappedWidget()), GTK_TREE_VIEW_COLUMN (column)); } } /* */ VDKTreeViewColumn::~VDKTreeViewColumn() { } /* */ void VDKTreeViewColumn::ActiveTitle(bool flag) { gtk_tree_view_column_set_clickable (GtkColumn(), flag); if(flag && (handler_seq_no == (gulong) 0)) handler_seq_no = g_signal_connect_data (G_OBJECT (GtkColumn()), "clicked", (GCallback) ::col_clicked_cb, owner ,NULL,(GConnectFlags) 0); } /* */ void VDKTreeViewColumn::SetNormalBackground(VDKRgb rgb) { VDKColor *color = NULL; color = new VDKColor( owner->Owner() ,rgb.red, rgb.green, rgb.blue); g_object_set (G_OBJECT (cell),"background-gdk", color->Color(),NULL); } /* */ void VDKTreeViewColumn::SetForeground(VDKRgb rgb) { VDKColor *color = NULL; color = new VDKColor( owner->Owner() ,rgb.red, rgb.green, rgb.blue); g_object_set (G_OBJECT (cell),"foreground-gdk", color->Color(),NULL); } /* */ void VDKTreeViewColumn::SetFont(VDKFont* font) { g_object_set (G_OBJECT (cell),"font-desc", font->AsPangoFontDescription(),NULL); } /* */ void VDKTreeViewColumn::SetTitle(const char* title) { gtk_tree_view_column_set_title (GTK_TREE_VIEW_COLUMN (column),title); } /* */ const char* VDKTreeViewColumn::GetTitle() { return gtk_tree_view_column_get_title (GTK_TREE_VIEW_COLUMN (column)); } /* */ void VDKTreeViewColumn::SetWidth(int w) { if(w > 0) { gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column),w); } else gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column), GTK_TREE_VIEW_COLUMN_AUTOSIZE); } /* */ int VDKTreeViewColumn::GetWidth() { return gtk_tree_view_column_get_width (GTK_TREE_VIEW_COLUMN (column)); } /* */ void VDKTreeViewColumn::SetSortable(bool flag ) { int t = 0; if(flag) { VDKTreeViewColumnListIterator li(*owner->Columns()); for(;li;li++,t++) if(this == li.current()) gtk_tree_view_column_set_sort_column_id (GtkColumn(),t); } else gtk_tree_view_column_set_sort_column_id (GtkColumn(),-1); } /* VDKTREEVIEWITERATOR CLASS ========================= */ bool VDKTreeViewIter::Child(VDKTreeViewIter* child_iter) { if(model && gtk_tree_model_iter_children(model,child_iter,this)) { child_iter->Model(model); return true; } else return false; } bool VDKTreeViewIter::Parent(VDKTreeViewIter* parent_iter) { if (model && gtk_tree_model_iter_parent (model,parent_iter,this)) { parent_iter->Model(model); return true; } else return false; } /* VDKTREEVIEW CLASS */ void col_clicked_cb (GtkTreeViewColumn *col, gpointer gp) { VDKTreeView * tree = reinterpret_cast(gp); VDKTreeViewColumnListIterator li(*(tree->Columns())); int t = 0; for(;li;li++,t++) { if(li.current()->GtkColumn() == col) { tree->SelectedColumn(t); tree->SignalEmit(click_column_signal); tree->SignalEmit("click_column_signal"); return; } } tree->SelectedColumn(-1); } /* */ /* void toggled_callback (GtkCellRendererToggle *celltoggle, gchar *path_string, gpointer *tree) { printf("\ncelltoggle:%p, %s, gpointer:%p",celltoggle,path_string,tree); fflush(stdout); return; } */ void selection_cb (GtkTreeSelection *selection, gpointer *gp) { VDKTreeView* tree = reinterpret_cast(gp); VDKTreeViewModel *model = tree->Model; VDKTreeViewIter iter(model ? GTK_TREE_MODEL(model->GtkModel()) : NULL); tree->Selections().flush(); if (!gtk_tree_selection_get_selected (selection, NULL,&iter)) return; else { tree->Selections().add(iter); tree->SignalEmit(select_row_signal); tree->SignalEmit("select_row_signal"); } } static void visit_selection (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer gp) { VDKTreeViewIter i(model); VDKTreeView* tree = reinterpret_cast(gp); gtk_tree_model_get_iter (model, &i, path); /* uhmmm... using GtkTreeIter private data could not be a good idea on compatibility side, in other hand i suspect a O(n2) time using gtk_tree_model_get_iter() */ /* i.stamp = iter->stamp; i.user_data = iter->user_data; i.user_data2 = iter->user_data2; i.user_data3 = iter->user_data3; */ tree->Selections().add(i); } void row_activated_cb (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer *gp) { VDKTreeView* tree = reinterpret_cast(gp); tree->SignalEmit(row_activated_signal); tree->SignalEmit("row_activated_signal"); } void VDKTreeView::GetSelections() { Selections().flush(); gtk_tree_selection_selected_foreach(selection, visit_selection, this); } /* */ VDKTreeView::VDKTreeView(VDKForm* owner, VDKTreeViewModel* model, GtkSelectionMode mode): VDKObject(owner), Model("Model",this,NULL,&VDKTreeView::SetModel,NULL), SelectedColumn("SelectedColumn",this,-1) { if(model) { widget = sigwid = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model->GtkModel())); Model(model); } else widget = sigwid = gtk_tree_view_new (); ConnectDefaultSignals(); gtk_tree_selection_set_mode (GTK_TREE_SELECTION (gtk_tree_view_get_selection (GTK_TREE_VIEW (sigwid))),mode); // columns = new VDKTreeViewColumnList; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sigwid)); switch(mode) { case GTK_SELECTION_SINGLE: case GTK_SELECTION_BROWSE: g_signal_connect_data(selection, "changed", G_CALLBACK (selection_cb), this, NULL,(GConnectFlags) 0); g_signal_connect_data (sigwid, "row_activated", G_CALLBACK (row_activated_cb), this, NULL,(GConnectFlags) 0); break; case GTK_SELECTION_MULTIPLE: g_signal_connect_data (sigwid, "row_activated", G_CALLBACK (row_activated_cb), this, NULL,(GConnectFlags) 0); break; case GTK_SELECTION_NONE: break; } } /* */ VDKTreeView::~VDKTreeView() { VDKTreeViewModel *model = Model; if(model) delete model; delete columns; } /* */ void VDKTreeView::SetModel(VDKTreeViewModel* mod) { VDKTreeViewModel *old = Model; gtk_tree_view_set_model (GTK_TREE_VIEW(widget),GTK_TREE_MODEL (mod->GtkModel())); if(old) { delete old; } } /* */ void VDKTreeView::SelectNode(GtkTreeIter* iter) { if(iter) gtk_tree_selection_select_iter (selection,iter); } /* */ void VDKTreeView::UnselectNode(GtkTreeIter* iter) { if(iter) gtk_tree_selection_unselect_iter (selection,iter); } /* */ void VDKTreeView::Expand(GtkTreeIter* iter, bool expand_all) { if(!iter) gtk_tree_view_expand_all(GTK_TREE_VIEW(sigwid)); else { VDKTreeViewModel *model = Model; GtkTreePath* path = gtk_tree_model_get_path (GTK_TREE_MODEL(model->GtkModel()),iter); if(path) { gtk_tree_view_expand_row (GTK_TREE_VIEW(sigwid),path,expand_all); gtk_tree_path_free(path); } } } /* */ void VDKTreeView::RemoveSelected(void) { GetSelections(); VDKTreeViewModel* model = Model; VDKTreeViewIterListIterator li(Selections()); if(Selections().size() == 1) model->Remove(&(Selections()[0])); else if(Selections().size()> 1) { for(li.last();li;li--) model->Remove(&li.current()); } Selections().flush(); } vdk-2.4.0/vdk/vdkthread.cc0000644000000000000000000000544407446637301011020 /* * =========================== * VDK Visual Development Kit * Version 0.6 * Jan 1999 * =========================== * * Copyright (C) 1999, Salmaso Raffaele * Developed by Salmaso Raffaele * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdkthread.h" VDKMutex::VDKMutex () { pthread_mutex_init (&mutex, (pthread_mutexattr_t *) 0); }; VDKMutex::~VDKMutex () { pthread_mutex_destroy (&mutex); }; VDKMutexEnum VDKMutex::Lock () { if (pthread_mutex_trylock (&mutex) != 0) return VDKMUTEX_ERROR; return VDKMUTEX_OK; } VDKMutexEnum VDKMutex::Release () { if (pthread_mutex_unlock (&mutex) != 0) return VDKMUTEX_ERROR; return VDKMUTEX_OK; }; VDKMutexEnum VDKMutex::Wait (long time) { if (pthread_mutex_lock (&mutex) != 0) return VDKMUTEX_ERROR; return VDKMUTEX_OK; } VDKThread::VDKThread () { state = VDKTHREAD_IDLE; } VDKThread::~VDKThread () { } VDKThreadEnum VDKThread::Start (void * arg) { if (state != VDKTHREAD_IDLE) return VDKTHREAD_IS_YET_RUNNING; state = VDKTHREAD_RUNNING; if (arg == NULL) { if (pthread_create (&id, (pthread_attr_t *) 0, VDKThread::EntryPoint, (void *) this) != 0) { state = VDKTHREAD_IDLE; return VDKTHREAD_CANNOT_CREATE; } } else { if (pthread_create (&id, (pthread_attr_t *) 0, (void * (*)(void *)) arg, NULL) != 0) { state = VDKTHREAD_IDLE; return VDKTHREAD_CANNOT_CREATE; } } return VDKTHREAD_RUNNING; } void * VDKThread::EntryPoint (void * arg) { VDKThread * thread = (VDKThread *) arg; thread->Execute (); return NULL; } void VDKThread::Execute () { } VDKThreadEnum VDKThread::Stop () { if (state == VDKTHREAD_RUNNING) if (pthread_cancel (id) == 0) state =VDKTHREAD_STOPPED; return state; } void VDKThread::Exit (void * status) { state = VDKTHREAD_EXITED; pthread_exit (status); } void * VDKThread::Wait () { void * status = 0; if (state != VDKTHREAD_IDLE) { pthread_join (id, &status); state = VDKTHREAD_IDLE; } return status; } vdk-2.4.0/vdk/widcontain.cc0000644000000000000000000000664007455236704011204 /* * =========================== * VDK Visual Develeopment Kit * Version 0.4 * Revision 0.4.1 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ //#include #include #include /*! Add an object. */ void VDKObjectContainer::Add(VDKObject* obj, int justify, int fill, int expand, int padding) { // agreed isn't a good OOP practice, but it's too late to // redesign the whole VDKDockerBox* dbox = dynamic_cast(obj); if(dbox) { dbox->justify = justify; dbox->fill = fill; dbox->expand = expand; dbox->padding = padding; } items.add(obj); obj->Parent(this); obj->Setup(); gtk_widget_show(obj->Widget()); } /* */ VDKObjectContainer::VDKObjectContainer(VDKForm* owner): VDKObject(owner) { } /* This function will remove an object from a container without destroying it. Note: Should be used to reparent an widget, or it will leak. Use this: // remove from source container // referencing it otherwise will be destroyed by gtk+ source->RemoveObjectFromContainer(widget); // add to target container (referencing it again) target->Add(widget); // set target as parent widget->Parent(target); // unref widget again (or it will leak) gtk_widget_unref(widget->Widget()); */ void VDKObjectContainer::RemoveObjectFromContainer(VDKObject* obj) { if(obj->Widget() && GTK_IS_WIDGET(obj->Widget()) && GTK_IS_CONTAINER(obj->Widget()->parent)) { int result = 0; // remove from source container // referencing it otherwise will be destroyed by gtk+ gtk_widget_ref(obj->Widget()); gtk_container_remove(GTK_CONTAINER (obj->Widget()->parent), obj->Widget()); result = items.remove(obj); #ifdef VDKDEBUG printf("\nremoved from gtk+ container:%p - result:%d",widget,result); fflush(stdout); #endif } } /* */ void VDKObjectContainer::RemoveObjects() { ItemListIterator li(items); VDKItem *p = li.Head(); VDKItem *p1; while(p) { p1 = li.Next(p); li.Now(p)->Destroy(); p = p1; } } /* */ VDKObject* VDKObjectContainer::FindTag(int tag) { ItemListIterator li(items); for(;li;li++) if(li.current()->Tag == tag) return li.current(); return static_cast(NULL); } /* */void VDKObjectContainer::ForEachDo(void (*action)(VDKObject*)) { ItemListIterator li(items); for(;li;li++) action(li.current()); } /* */ void VDKObjectContainer::Select(ItemList* list, bool (*condition)(VDKObject*)) { ItemListIterator li(items); for(;li;li++) if(condition(li.current())) list->add(li.current()); return ; } vdk-2.4.0/vdk/eventbox.cc0000644000000000000000000000431207446637262010675 /* * =========================== * VDK Visual Development Kit * Version 0.7 * March 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include VDKEventBox::VDKEventBox(VDKForm* owner, int mode): VDKObjectContainer(owner),mode(mode) { widget = sigwid = gtk_event_box_new(); switch(mode) { case v_box: box = gtk_vbox_new(FALSE,0); break; case h_box: box = gtk_hbox_new(FALSE,0); break; default: box = gtk_vbox_new(FALSE,0); } gtk_container_add(GTK_CONTAINER(widget),box); } void VDKEventBox::Add(VDKObject* obj, int justify, int expand, int fill , int padding) { switch(justify) { case l_justify: gtk_box_pack_start(GTK_BOX(box), obj->Widget(),expand,fill,padding); break; case r_justify: gtk_box_pack_end(GTK_BOX(box), obj->Widget(),expand,fill,padding); break; default: gtk_box_pack_start(GTK_BOX(box), obj->Widget(),expand,fill,padding); } gtk_widget_show(box); // calls ancestor (B.Liskov docet...) VDKObjectContainer::Add(obj,0,0,0,0); } /* returns event box position relative to his outmost parent */ VDKPoint VDKEventBox::FormPosition() { int x = Widget()->allocation.x; int y = Widget()->allocation.y; VDKObject* p ; for( p = Parent(); p; p = p->Parent()) { x += p->Widget()->allocation.x ; y += p->Widget()->allocation.y ; } return VDKPoint(x,y); } vdk-2.4.0/vdk/vdkdockable.cc0000644000000000000000000000525407455275035011316 /* * =========================== * VDK Visual Development Kit * Version 2.0.2 * April 2002 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include /* */ VDKDockerBox:: VDKDockerBox (VDKForm* owner, int mode): VDKBox (owner, mode), justify(l_justify), fill(1), expand(1), padding(0), Docked ("Docked", this, false, &VDKDockerBox::SetDocked, &VDKDockerBox::GetDocked) { dock_form = NULL; } /* */ VDKDockerBox::~VDKDockerBox () { } /* */ void VDKDockerBox::Dock () { VDKObjectContainer *container = dynamic_cast (parent); g_return_if_fail (container != NULL); if (container && !dock_form) { dock_form = new VDKDockerBoxForm (Owner (), NULL); container->RemoveObjectFromContainer (this); dock_form->box_from = container; dock_form->docker = this; dock_form->Add (this); dock_form->Objects ().remove (this); gtk_widget_unref (widget); dock_form->Show (); } } /* */ void VDKDockerBox::Undock () { if (dock_form) dock_form->Close (); } /* */ void VDKDockerBox::SetDocked (bool flag) { if (flag) { Dock (); SignalEmit(docked_signal); SignalEmit("docked"); } else { Undock (); } } /* */ bool VDKDockerBox::GetDocked () { return dock_form != NULL; } /* DOCKABLE FORM */ VDKDockerBoxForm::VDKDockerBoxForm (VDKForm* owner, char* title): VDKForm (owner, title), box_from (NULL), docker (NULL) { } /* */ VDKDockerBoxForm::~VDKDockerBoxForm () { } /* */ void VDKDockerBoxForm::Setup () { } /* */ bool VDKDockerBoxForm::CanClose () { Box ()->RemoveObjectFromContainer (docker); box_from->Add (docker,docker->justify,docker->fill,docker->expand,docker->padding); gtk_widget_unref (docker->WrappedWidget ()); docker->dock_form = NULL; docker->SignalEmit(undocked_signal); docker->SignalEmit("undocked"); return true; } vdk-2.4.0/vdk/FileDialog.cc0000644000000000000000000002771107446637262011052 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/FileDialog.h" #include #include #include #include #include #include #define PIPPO ".pippo.~fdlg" static char *titles[] = {"./sub folders",NULL}; static char buff[513]; // extensions extern char* folder_xpm[]; extern char* folder_open_xpm[]; extern char* c_xpm[]; extern char* file_xpm[]; extern char* xpm_xpm[]; extern char* text_xpm[]; extern char* gif_xpm[]; extern char* h_xpm[]; extern char* tgz_xpm[]; extern char* html_xpm[]; extern char* exec_xpm[]; extern char* link_xpm[]; extern char* socket_xpm[]; /* caution: this table must be ordered */ #define MAX_EXT 5 static struct { char* ext; char** pix; } Ext[MAX_EXT] = { { ".gz", tgz_xpm }, { ".htm", html_xpm }, { ".html", html_xpm }, { ".tar", tgz_xpm }, { ".tgz", tgz_xpm } }; /* this not */ #define MAX_CATEG 4 static struct { char cat; char** pix; } Cat[MAX_CATEG] = { { '*', exec_xpm }, { '@', link_xpm }, { '=', socket_xpm }, { '|', NULL } }; // class FileDlgWaitCursor { GdkCursor *cursor; VDKForm* form; public: FileDlgWaitCursor(VDKForm *form):form(form) { cursor = gdk_cursor_new (GDK_WATCH); gdk_window_set_cursor (form->Window()->window, cursor); gdk_cursor_destroy (cursor); } ~FileDlgWaitCursor() { cursor = gdk_cursor_new (GDK_LEFT_PTR); gdk_window_set_cursor (form->Window()->window, cursor); gdk_cursor_destroy (cursor); } }; // signal map DEFINE_SIGNAL_MAP(VDKFileDialog,VDKForm) ON_SIGNAL(dirlist,select_row_signal,DirListDoubleClick), ON_SIGNAL(open,clicked_signal,OpenClick), ON_SIGNAL(filelist,select_row_signal,OpenClick), ON_SIGNAL(cancel,clicked_signal,CancelClick), ON_SIGNAL(hiddenCb,toggled_signal,ToggleHidden), ON_SIGNAL(filetype,activate_signal,SetFileMask) END_SIGNAL_MAP /* */ VDKFileDialog::VDKFileDialog(VDKForm* owner, FileStringArray* selections, char* title, GtkWindowType display): VDKForm(owner,title, display),selections(selections), Filter("Filter",this,VDKString("")) { VDKBox* mainbox = new VDKBox(this,v_box); VDKBox *hbox = new VDKBox(this,h_box); VDKPixmap* dirpix = new VDKPixmap(this,folder_open_xpm); hbox->Add(dirpix); dir_label = new VDKLabel(this,""); hbox->Add(dir_label); mainbox->Add(hbox); mainbox->Add(new VDKSeparator(this,h_separator)); VDKBox* listbox = new VDKBox(this,h_box); dirlist = new VDKCustomList(this,1, &titles[0],GTK_SELECTION_EXTENDED); dirlist->AutoResize = false; dirlist->SetSize(200,250); dirlist->ColumnSize(0,250); dirlist->ActiveTitles(false); dirlist->PrelightBackground = clWhite; listbox->Add(dirlist); listbox->Add(new VDKSeparator(this,v_separator)); filelist = new VDKCustomList(this,1, NULL,GTK_SELECTION_EXTENDED); dirlist->AutoResize = false; filelist->PrelightBackground = clWhite; filelist->SetSize(200,250); listbox->Add(filelist); mainbox->Add(listbox); mainbox->Add(new VDKSeparator(this,h_separator)); VDKTable *table = new VDKTable(this,2,3); hiddenCb = new VDKCheckButton(this, "Shows hidden files"); filetypeLabel = new VDKLabel(this,"File type"); table->Add(hiddenCb,0,1,0,1); table->Add(filetypeLabel,0,1,1,2); filetype = new VDKEntry(this); table->Add(filetype,1,2,1,2); open = new VDKCustomButton(this,"Open"); cancel = new VDKCustomButton(this,"Cancel"); table->Add(open,2,3,0,1); table->Add(cancel,2,3,1,2); mainbox->Add(table); Add(mainbox); if(init()) // load current dir LoadDir(); } /* */ void VDKFileDialog::OnShow(VDKForm*) { VDKString filter = Filter; if( ! filter.isNull()) { filetype->Text = (char*) filter; LoadDir(); } return; } /* */ bool VDKFileDialog::init() { // get HOME char* homedir = getenv("HOME"); if(!homedir) return false; home = homedir; // gets prg work dir char* cwd = getcwd(NULL,MAXPATHLEN); if(cwd) { pcwd = cwd; first_pcwd = cwd; free(cwd); } return true; } /* */ bool VDKFileDialog::CanClose() { // restore original pwd sprintf(buff,"%s",(char*) first_pcwd); chdir(buff); return true; } /* */ void VDKFileDialog::LoadDir(char* dir) { FileStringList *filtered; //do not apply mask load dirs only FileStringList* list = load_dir(dir,false); if(!list) return; // filter dir filtered = filter(list,0);//filter dir if(filtered) { LoadDirList(filtered); delete filtered; } if(list) delete list; // filter files // apply mask load files only list = load_dir(dir,true); // apply mask if any FileStringListIterator li(*list); filtered = filter(list,1);//filter files if(filtered) { LoadFileList(filtered); delete filtered; } if(list) delete list; } /* */ /* */ inline bool is_hidden(char* s) { return *s == '.' && std::strcmp(s,"../") && std::strcmp(s,"./"); } inline bool is_a_dir(char* s) { return s[std::strlen(s)-1] == '/'; } static char* get_filename(char* s, char sep) { int t = std::strlen(s)-1; char* p = &s[t]; for(; t >= 0 && *p != sep; p--,t--) ; return t ? ++p : static_cast(0); } static char* get_extension(char* s) { int t = std::strlen(s)-1; char* p = &s[t]; for(; t >= 0 && *p != '.'; p--,t--) ; return t ? p : static_cast(0); } /* */ FileStringList* VDKFileDialog::load_dir(char* dir, int mask) { VDKString file_mask(filetype->Text); FileStringList* list = new FileStringList; char* cwd = getcwd(NULL,MAXPATHLEN); if(cwd) { DIR *d; struct dirent *e; #ifndef _USE_FNMATCH regex_t exp[1]; regmatch_t match[2]; if(!file_mask.isNull()) { regcomp(exp,(char *)file_mask, (REG_EXTENDED|REG_NEWLINE)); } #endif if(dir) chdir(dir); if((d = opendir("."))) { while((e = readdir(d))) { struct stat st; if(mask == 0 || file_mask.isNull() || #ifndef _USE_FNMATCH 0 == regexec(exp, e->d_name, 1, match, 0) #else 0 == fnmatch((char *)file_mask, e->d_name, (FNM_PATHNAME | FNM_PERIOD| FNM_NOESCAPE) ) // STUB #endif ) { VDKString s(e->d_name); if(0 == stat(e->d_name,&st)) { if(!mask && S_ISDIR(st.st_mode) || (mask && !S_ISDIR(st.st_mode))) { if(S_ISLNK(st.st_mode)) { s += "@"; } else if(S_ISDIR(st.st_mode)) { s += "/"; } else if(S_ISSOCK(st.st_mode)) { s += "="; } else if(S_ISFIFO(st.st_mode)) { s += "|"; } else if(st.st_mode & 0111) { s += "*"; } list->insert(s); } } } } closedir(d); } chdir(cwd); #ifndef _USE_FNMATCH if(!file_mask.isNull()) { regfree(exp); } #endif free(cwd); } return list; } /* */ FileStringList* VDKFileDialog::filter(FileStringList* list,int mode) { bool filter_files = mode == 1; bool filter_dir = mode == 0; int size = list->size(); FileStringList* filtered = new FileStringList; if(!size) return filtered; FileStringListIterator li(*list); for(;li;li++) { char* fn; std::strcpy(buff,(char*) li.current()); bool isadir = is_a_dir(buff); fn = filter_files ? get_filename(buff,'/'): get_filename(buff,' '); if(!fn) break; VDKString s(fn); if(!is_hidden(fn) || hiddenCb->Checked) { if(filter_dir && isadir) filtered->add(s); if(filter_files && !isadir) filtered->add(s); } } return filtered; } /* strip last char too */ static char** is_category(char* p) { int t = 0; char *c = &p[std::strlen(p)-1]; for(; t < MAX_CATEG;t++) if(Cat[t].cat == *c) { *c = '\0'; return Cat[t].pix; } return NULL; } /* */ static char** is_extension(char* ext) { // binary search, assume Ext table // already ordered !! if(!ext) return NULL; int low,high,mid; low = 0; high = MAX_EXT-1; while(low <= high) { mid = (low+high)/2; if(std::strcmp(ext,Ext[mid].ext) < 0) high = mid-1; else if(std::strcmp(ext,Ext[mid].ext) > 0) low = mid+1; else return Ext[mid].pix; } return NULL; } void VDKFileDialog::LoadFileList(FileStringList* list) { FileDlgWaitCursor c(this); FileStringListIterator li(*list); filelist->Clear(); filelist->Freeze(); for(;li;li++) { char *p = (char*) li.current(); char** s = is_extension(get_extension(p)); /* strip last char too */ char** c = is_category(p); if(s || c) filelist->AddRow(&p,s ? s : c,0); else filelist->AddRow(&p); } gtk_clist_moveto(GTK_CLIST(filelist->CustomWidget()),0,0,0,0); filelist->Thaw(); sprintf(buff,"%s ,%d file(s)", (char*) pcwd, list->size()); dir_label->Caption = buff; } /* */ void VDKFileDialog::LoadDirList(FileStringList* list) { FileStringListIterator li(*list); dirlist->Clear(); dirlist->Freeze(); for(;li;li++) { char *p = (char*) li.current(); dirlist->AddRow(&p,folder_xpm,0); } dirlist->Thaw(); gtk_clist_moveto(GTK_CLIST(dirlist->CustomWidget()),0,0,0,0); } /* */ bool VDKFileDialog::DirListDoubleClick(VDKObject* ) { char local[512]; int ndx = dirlist->Selected.Row(); if(ndx <0) return true; sprintf(local,"%s",(char*) dirlist->Tuples[ndx][0]); if(chdir(local) == 0) { // gets prg work dir char* cwd = getcwd(NULL,MAXPATHLEN); if(cwd) { pcwd = cwd; free(cwd); } LoadDir(); } return true; } /* */ bool VDKFileDialog::OpenClick(VDKObject*) { int v = filelist->Selections().size(); int j; if(v > 0) { selections->resize(filelist->Selections().size()); int t; for( t=0; t < selections->size();t++) { int row = filelist->Selections()[t]; sprintf(buff,"%s/%s",(char*) pcwd,(char*) filelist->Tuples[row][0]); VDKString s(buff); (*selections)[t] = s; } } else { j = filelist->Selected.Row(); if(j >= 0) { selections->resize(1); sprintf(buff,"%s/%s",(char*) pcwd,(char*) filelist->Tuples[j][0]); VDKString s(buff); (*selections)[0] = s; } else selections->resize(0); } if(isModal) Close(); return true; } /* */ bool VDKFileDialog::CancelClick(VDKObject*) { selections->resize(0); Close(); return true; } /* */ bool VDKFileDialog::ToggleHidden(VDKObject*) { // reload present dir LoadDir(); return true; } /* */ bool VDKFileDialog::SetFileMask(VDKObject*) { LoadDir(); return true; } vdk-2.4.0/vdk/FileSaveAsDialog.cc0000644000000000000000000000546210022102014012112 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/FileSaveAsDialog.h" #include #include #ifdef VDKDEBUG extern int objectC; extern int objectD; #endif static char buff[256]; /////////////////////////////////////////////////// DEFINE_SIGNAL_MAP(VDKFileSaveAsDialog,VDKFileDialog) ON_SIGNAL(open,clicked_signal,SaveClick), ON_SIGNAL(filelist,select_row_signal,FileSelected), ON_SIGNAL(filetype,activate_signal,SetFileMask) END_SIGNAL_MAP /////////////////////////// // ////////////////////////// bool VDKFileSaveAsDialog::CheckOverwrite(char* file) { char locbuff[256]; if (!access(file,F_OK)) { sprintf(locbuff,"File: %s\nexists, overwrite it ?",file); int answer = Application()->VDKMessageBox("File SaveAs Dialog", locbuff, VDK_YESNO | VDK_ICONINFORMATION); return answer == VDK_IDYES; } else return true; } //////////////////////////// // response method /////////////////////////// bool VDKFileSaveAsDialog::FileSelected(VDKObject*) { int sel = filelist->Selected.Row(); if(sel < 0) return true; filetype->Text = (char*) filelist->Tuples[sel][0]; return true; } /* */ bool VDKFileSaveAsDialog::SaveClick(VDKObject*) { sprintf(buff,"%s/%s",(char*) pcwd,(char*) filetype->Text); if(CheckOverwrite(buff)) { selections->resize(1); VDKString s(buff); (*selections)[0] = s; Close(); } return true; } /* */ bool VDKFileSaveAsDialog::SetFileMask(VDKObject*) { SaveClick(NULL); return true; } /* */ VDKFileSaveAsDialog::VDKFileSaveAsDialog(VDKForm* owner, FileStringArray* selections, char* title, GtkWindowType display): VDKFileDialog(owner,selections,title,display) { gtk_clist_set_selection_mode(GTK_CLIST(filelist->CustomWidget()), GTK_SELECTION_SINGLE); filetypeLabel->Caption = "Save file as"; open->Caption = "Save"; } /* */ VDKFileSaveAsDialog::~VDKFileSaveAsDialog() { } /* */ vdk-2.4.0/vdk/chart.cc0000644000000000000000000003234307472653044010144 /* * =========================== * VDK Component Library * Version 0.2 * =========================== * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * =========================================== * This library is a component of: * VDK Visual Development Kit * Version 0.4.1 * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * =========================================== * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 */ #include #include #include ///////////////////////////////////// DEFINE_EVENT_LIST(VDKChart,VDKCanvas); /* captures configure event: recompute chart allocated size and redraw chart */ bool VDKChart::OnConfigure(VDKObject* sender, GdkEvent* event) { if(!gc) gc = gdk_gc_new(pixmap); size = Usize; printf("\nsize:%d,%d",size.x,size.y); fflush(stdout); axis = ChartAxis(this,size.X(),size.Y()); axis.Draw(); DrawTitle(); DrawChart(); Redraw(); return true; } /* */ bool VDKChart::OnClick(VDKObject* sender, GdkEvent* event) { if(series.size() <= 0) return true; if(!tip_window) { char buff[64]; GdkEventButton *ev = (GdkEventButton*) event; double x = ev->x; double y = ev->y; double sx = (x - xn1 + kx*xv1)/kx; double sy = (y - yn1 + ky*yv1)/ky; sprintf(buff,"%.3f,%.3f",sx,sy); tip_window = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_position(GTK_WINDOW(tip_window),GTK_WIN_POS_MOUSE); GtkWidget* label = gtk_label_new(buff); gtk_container_add(GTK_CONTAINER(tip_window),label); gtk_widget_show(label); gtk_widget_show(tip_window); } return false; } /* */ bool VDKChart::OnClickRelease(VDKObject* sender, GdkEvent* event) { if(tip_window) { gtk_widget_destroy(tip_window); tip_window = NULL; } return true; } ///////////////////////////////////////////////////////////// /* constructor */ VDKChart::VDKChart(VDKForm* owner, int w, int h): VDKCanvas(owner,w,h), ChartBorder("ChartBorder",this,20,&VDKChart::SetChartBorder), Title("Title",this,"Untitled"), LabelX("LabelX",this,""), LabelY("LabelX",this,""), LabelXDigits("LabelXDigits",this,2), LabelYDigits("LabelYDigits",this,2) { gc = NULL; tip_window = NULL; EventConnect("configure_event",&VDKChart::OnConfigure); EventConnect("button_press_event",&VDKChart::OnClick); EventConnect("button_release_event",&VDKChart::OnClickRelease); Font(new VDKFont(owner,"helvetica Medium 10")); } /* set chart border */ void VDKChart::SetChartBorder(int b) { size = Usize; axis = ChartAxis(this,size.X(),size.Y()); DrawChart(); } /* draw title */ void VDKChart::DrawTitle() { VDKString s = Title; VDKPoint size = Usize; VDKPoint center(size.X()/2,ChartBorder/2); VDKFont* font = Font; int half_w = (gdk_string_width (font->AsGdkFont(), (char*) s))/2; VDKRgb fg = Foreground; if(fg.red >= 0) SetColor(fg); DrawString(center.X()-half_w,center.Y(), (char*) s); } /* destructor: frees series and graphic context */ VDKChart::~VDKChart() { SeriesListIterator li(series); for(;li;li++) delete li.current(); } /* add serie to chart, unicity is checked, will substitute actual series if a match is found. Old series will be destroyed */ void VDKChart::AddSeries(Series* s) { if(series.size() > 0) { SeriesListIterator li(series); for(;li;li++) if((*li.current() == *s)) break; if(li) { Series* p = li.current(); // removes series li.current() series.remove(p); delete p; } } series.add(s); ComputeDomainLimits(s); DrawChart(); } /* update domain limits: lowest and highest x and y */ void VDKChart::ComputeDomainLimits(Series* s) { if(series.size() == 1) { domainmax.x = s->Max().x; domainmax.y = s->Max().y; domainmin.x = s->Min().x; domainmin.y = s->Min().y; } else { domainmax.x = domainmax.x < s->Max().x ? s->Max().x : domainmax.x; domainmax.y = domainmax.y < s->Max().y ? s->Max().y : domainmax.y; domainmin.x = domainmin.x > s->Min().x ? s->Min().x : domainmin.x; domainmin.y = domainmin.y > s->Min().y ? s->Min().y : domainmin.y; } domainmin.x = domainmin.x == domainmax.x ? 0 : domainmin.x; domainmin.y = domainmin.y == domainmax.y ? 0 : domainmin.y; } /* clear chart, destroy series */ void VDKChart::Clear() { SeriesListIterator li(series); for(;li;li++) delete li.current(); series.flush(); VDKCanvas::Clear(); axis.Draw(); DrawTitle(); Redraw(); } /* actually draw chart: 1. Clear chart 2. Compute scaling factors 3. Calls a virtual drawing function: Plot(Series* s, int n, Coord c) with scaled coordinates. VDKChart::Plot() does nothing. Subclasses should override Plot() in order to draw different chart shapes (lines, bars, etc.) */ const int tickL = 8; void VDKChart::DrawChart() { if(series.size() <= 0) return; else { VDKCanvas::Clear(); axis.Draw(); DrawTitle(); } // recompute domain with chart allocated size xn1 = axis.Domain().Origin().X(); xn2 = xn1 + axis.Domain().W(); xv1 = domainmin.x; xv2 = domainmax.x; //xv1 = xv1 == xv2 ? 0 : xv1; yn1 = axis.Domain().Origin().Y(); yn2 = yn1 - axis.Domain().H(); yv1 = domainmin.y; yv2 = domainmax.y; //yv1 = yv1 == yv2 ? 0 : yv1; kx = (xn2-xn1)/(xv2-xv1); ky = (yn2-yn1)/(yv2-yv1); // iterates over series // n-square algorithm :-( SeriesListIterator li(series); int z; for(z=0;li;li++,z++) { int t; CoordListIterator lc(*li.current()); // scales each point for(t = 0;lc;lc++,t++) { VDKPoint p( int(xn1+kx*(lc.current().x-xv1)), int((yn1+ky*(lc.current().y-yv1))) ); Plot(p,t,li.current()); } } // draw x,y axis ticks DrawTicks(); // DrawLabels(); // redraw with no expose event Redraw(); } /* Draws x,y ticks (major and minor) */ void VDKChart::DrawTicks() { char buff[32]; // compute and draws x,y axis min,max value double lminx = xn1+kx*(domainmin.x-xv1); double lminy = yn1+ky*(domainmin.y-yv1); double lmaxx = xn1+kx*(domainmax.x-xv1); double lmaxy = yn1+ky*(domainmax.y-yv1); VDKFont* vdkfont = Font; GdkFont* font = vdkfont->AsGdkFont(); int h = font->ascent + font->descent + 1; int w; // draws x ticks int t; VDKRgb fg = Foreground; if(fg.red >= 0) SetColor(fg); double j,lx,k = (domainmax.x-domainmin.x)/10.0; int x_digits = LabelXDigits; int y_digits = LabelYDigits; for(j = domainmin.x, t=0; j <= domainmax.x; j+=k,t++) { lx = xn1+kx*(j-xv1); if ( (t%2) == 0) { sprintf(buff,"%.*f",x_digits,j); w = gdk_string_width (font, buff); DrawString(int(lx-w/2),int(lminy+tickL+h),buff); // major tick DrawLine(int(lx),int(lminy),int(lx),int(lminy+tickL)); } else // minor tick DrawLine(int(lx),int(lminy),int(lx),int(lminy+tickL/2)); } if(t <= 10) { sprintf(buff,"%.*f",x_digits,domainmax.x); w = gdk_string_width (font, buff); DrawString(int(lmaxx-w/2),int(lminy+tickL+h),buff); } // draws y ticks double ly; k = (domainmax.y-domainmin.y)/10; for(j = domainmin.y, t=0; j <= domainmax.y ; j+=k,t++) { ly = yn1+ky*(j-yv1); if ( (t%2) == 0) { sprintf(buff,"%.*f",y_digits,j); w = gdk_string_width (font, buff); DrawString(int(lminx-w-tickL),int(ly+h/3),buff); // major tick DrawLine(int(lminx),int(ly),int(lminx-tickL),int(ly)); } else // minor tick DrawLine(int(lminx),int(ly),int(lminx-tickL/2),int(ly)); } if(t <= 10) { sprintf(buff,"%.*f",y_digits,domainmax.y); w = gdk_string_width (font, buff); DrawString(int(lminx-w-tickL),int(lmaxy),buff); } } /* draw x and y labels */ void VDKChart::DrawLabels() { // x labels VDKString s = LabelX; VDKPoint size = Usize; VDKFont* vdkfont = Font; GdkFont* font = vdkfont->AsGdkFont(); VDKRgb fg = Foreground; if(fg.red >= 0) SetColor(fg); if(! s.isNull()) { VDKPoint center(size.X()/2, axis.Domain().Origin().Y() + ChartBorder - 5); int half_w = (gdk_string_width (font, (char*) s))/2; DrawString(center.X()-half_w,center.Y(), (char*) s); } s = LabelY; if(! s.isNull()) { int h = font->ascent+font->descent; int z = std::strlen((char*) s); int sh = h*z; char *p = (char*) s; VDKPoint center(axis.Domain().Origin().X() - ChartBorder + 5, size.Y()/2-sh/2); int t = 0; for(; t < z; t++,p++) DrawText(center.X(),center.Y()+t*h, p,1); } } /* set drawing color. Use this to set color for Plot() function. (see VDKLineChart::Plot()) */ void VDKChart::SetColor(VDKRgb rgb) { GdkColor *color = (GdkColor*) malloc (sizeof (GdkColor)); GdkColormap *colormap = gdk_window_get_colormap (Widget()->window); color->red = rgb.red << 8; color->green = rgb.green << 8; color->blue = rgb.blue << 8; if (!gdk_color_alloc (colormap, color)) gdk_color_black (colormap, color); gdk_gc_set_foreground(GC(), color); free(color); } /* set line style Use this to set line style for Plot() function. (see VDKLineChart::Plot()) */ void VDKChart::SetLineAttributes( gint lineWidth, GdkLineStyle lineStyle, GdkCapStyle capStyle, GdkJoinStyle joinStyle) { if(gc) gdk_gc_set_line_attributes(gc, lineWidth, lineStyle, capStyle, joinStyle); } //////////////////// CHART AXIS ///////////////////////////// /* constructor: compute axis origin and chart domain based on chart size and chart border. This will be surely changed by configure event. (see OnConfigure()) */ ChartAxis::ChartAxis(VDKChart* owner,int w, int h): owner(owner) { domain = VDKRect(owner->ChartBorder, h-owner->ChartBorder, w-owner->ChartBorder*2, h-owner->ChartBorder*2); } /* copy-initializer */ ChartAxis::ChartAxis(ChartAxis& a) { owner = a.owner; domain = a.domain; } /* draws axis on owner canvas */ void ChartAxis::Draw() { if(!owner) return; VDKRgb fg = owner->Foreground; if(fg.red >= 0) owner-> SetColor(fg); owner->DrawLine(domain.Origin().X(), domain.Origin().Y(), domain.Origin().X(), owner->ChartBorder); owner->DrawLine(domain.Origin().X(), domain.Origin().Y(), domain.Origin().X()+ domain.W(), domain.Origin().Y()); } /////////////////////// SERIES /////////////////////// /* add a point ot series, computes on the fly max and min x,y */ void Series::Add(double x, double y) { if(size() < 1) { max.x = x; max.y = y; min.x = x; min.y = y; } else { max.x = max.x < x ? x : max.x; max.y = max.y < y ? y : max.y; min.x = min.x > x ? x : min.x; min.y = min.y > y ? y : min.y; } Coord c(x,y); CoordList::add(c); } /* add a point array */ void Series::Add(double* x, double* y, int n) { int i; for(i=0;iColor; SetColor(color); SetLineAttributes( series->LineWidth, series->LineStyle, series->LineCapStyle, series->LineJoinStyle); fx = p.X(); fy = p.Y(); } else { // pixmap is a protected member of VDKCanvas class if(pixmap) gdk_draw_line(pixmap, GC(), fx,fy,p.X(),p.Y()); fx = p.X(); fy = p.Y(); } } ///////////////////////// SCATTERED CHART ////////////// /* Plot a scattered chart */ void VDKScatteredChart::Plot(VDKPoint& p, int t, Series* series) { if(t == 0) { VDKRgb color = series->Color; SetColor(color); SetLineAttributes( series->LineWidth, series->LineStyle, series->LineCapStyle, series->LineJoinStyle); } gdk_draw_rectangle(pixmap,GC(),TRUE,p.X()-2,p.Y()-2,4,4); } ///////////////////////// BAR CHART ////////////// /* Plot a bar chart */ void VDKBarChart::Plot(VDKPoint& p, int t, Series* series) { if(t == 0) { VDKRgb color = series->Color; SetColor(color); SetLineAttributes( series->LineWidth, series->LineStyle, series->LineCapStyle, series->LineJoinStyle); } if(Labels) { char buff[64]; VDKFont* vdkfont = Font; GdkFont* font = vdkfont->AsGdkFont(); sprintf(buff,"%.1f",(p.Y() - yn1 + ky*yv1)/ky); int w = gdk_string_width (font, buff); gdk_draw_string(pixmap,font,GC(),p.X()- w/2,p.Y()-2,buff); } gdk_draw_rectangle(pixmap,GC(),TRUE, p.X()-BarWidth/2, p.Y(), BarWidth, axis.Domain().Origin().Y()-p.Y() ); } vdk-2.4.0/vdk/combo.cc0000644000000000000000000002020507446637261010140 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-130 * This is a wrapper for GtkCombo. Author: Eric T. Wienke */ #include "vdk/combo.h" #include "vdk/vdkobj.h" #include "vdk/dlist.h" #include "vdk/forms.h" #include "vdk/entry.h" #include "vdk/colors.h" #include // Modified to make gcc 2.95 happy // ionutz static gint sortfunc(gconstpointer a, gconstpointer b) { return std::strcmp((const char*) a, (const char*) b); } int VDKCombo::FocusOutEvent(GtkWidget *, GdkEventFocus*, gpointer wid) { g_return_val_if_fail(wid != NULL,FALSE); VDKEntry* obj = reinterpret_cast(wid); obj->SignalEmit(focus_out_signal); return FALSE; //TRUE; } /* */ int VDKCombo::FocusInEvent(GtkWidget *, GdkEventFocus *, gpointer wid) { g_return_val_if_fail(wid != NULL, FALSE); VDKEntry* obj = reinterpret_cast(wid); obj->SignalEmit(focus_in_signal); return FALSE; //TRUE; } /* */ VDKCombo::VDKCombo(VDKForm* owner, char* def,GtkWidget* combo): VDKObject(owner), Text("Text", this, NULL, &VDKCombo::SetText, &VDKCombo::GetText), Editable("Editable", this, true, &VDKCombo::SetEditable), Sorted("Sorted", this, false, &VDKCombo::SetSorted), Hidden("Hidden", this, false, &VDKCombo::SetHidden), CaseSensitive("CaseSensitive", this, true, &VDKCombo::SetCaseSensitive, &VDKCombo::GetCaseSensitive), PopdownStrings("PopdownStrings",this, StringList(), &VDKCombo::SetPopdownStrings, &VDKCombo::GetPopdownStrings), Selected("Selected",this, -1, &VDKCombo::GetSelected) { if(combo) widget = combo; else widget = gtk_combo_new(); popdownlist = NULL; if(def) gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(widget)->entry),def); s_activated.obj = this; s_activated.signal = activate_signal; s_changed.obj = this; s_changed.signal = changed_signal; s_selected.obj = this; s_selected.signal = selection_changed_signal; gtk_signal_connect(GTK_OBJECT(GTK_ENTRY(GTK_COMBO(widget)->entry)), "activate", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_activated); changeConnect = gtk_signal_connect(GTK_OBJECT(GTK_ENTRY(GTK_COMBO(widget)->entry)),"changed", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_changed); gtk_signal_connect(GTK_OBJECT(GTK_COMBO(widget)->entry), "focus_out_event", GTK_SIGNAL_FUNC(VDKCombo::FocusOutEvent), (gpointer) this); gtk_signal_connect(GTK_OBJECT(GTK_COMBO(widget)->entry), "focus_in_event", GTK_SIGNAL_FUNC(VDKCombo::FocusInEvent), (gpointer) this); gtk_signal_connect(GTK_OBJECT(GTK_LIST(GTK_COMBO(widget)->list)),"selection_changed", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_selected); ConnectDefaultSignals(); #ifdef USE_SIGCPLUSPLUS make_gtksigc_connection(this); #endif } /* */ VDKCombo::~VDKCombo() { if (popdownlist) g_list_free(popdownlist); } /* */ void VDKCombo::SetText(char* s) { gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(widget)->entry),s); } /* */ char* VDKCombo::GetText() { //return (char*) gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(widget)->entry)); char* p = gtk_editable_get_chars (GTK_EDITABLE(GTK_COMBO(widget)->entry), 0,-1); if(p) { buffer = p; g_free(p); } return (char*) buffer; } /* */ void VDKCombo::ClearList() { gtk_list_clear_items(GTK_LIST(GTK_COMBO(widget)->list),0, g_list_length(GTK_LIST(GTK_COMBO(widget)->list)->children)); } /* */ void VDKCombo::SetBackground(VDKRgb rgb, GtkStateType state) { VDKColor *color = new VDKColor(Owner(),rgb.red,rgb.green,rgb.blue); GtkStyle* style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(GTK_COMBO(widget)->entry))) ; gtk_style_ref(style); style->base[state] = *(color->Color()); gtk_widget_set_style(GTK_WIDGET(GTK_COMBO(widget)->entry),style); /* Style of List is not changed as it would require changing each associated GtkListItem. That would probably be undesirable at times and unflexible. */ } /* */ void VDKCombo::SetPopdownStrings(StringList str) { if (popdownlist) { g_list_free(popdownlist); } popdownlist = g_list_alloc(); popdownlist->next=NULL; popdownlist->prev=NULL; popdownlist->data=(gchar*)str[0]; for (int i=1; ilist)->children; popdownstr.flush(); while (list) { GList *cc = gtk_container_children(GTK_CONTAINER(list->data)); assert(GTK_IS_LABEL(cc->data)); gchar *text = GTK_LABEL(cc->data)->label; VDKString s(text); popdownstr.add(s); list = list->next; } return popdownstr; } int VDKCombo::GetSelected() { GList *selected = GTK_LIST(GTK_COMBO(widget)->list)->selection; if (!selected) { return -1; } /* assume that selection is always in mode GTK_SELECTION_SINGLE, so we only have to check the first item in the returned list. */ GtkWidget *child = GTK_WIDGET(selected->data); return gtk_list_child_position(GTK_LIST(GTK_COMBO(widget)->list), child); } void VDKCombo::SortList() { StringList temp = GetPopdownStrings(); SetPopdownStrings(temp); } #ifdef USE_SIGCPLUSPLUS void VDKCombo::make_gtksigc_connection(VDKCombo* obj) { gtk_signal_connect(GTK_OBJECT(GTK_LIST(GTK_COMBO(obj->widget)->list)), "select_child", GTK_SIGNAL_FUNC(&VDKCombo::_handle_item_select), (gpointer) obj); gtk_signal_connect(GTK_OBJECT(GTK_LIST(GTK_COMBO(obj->widget)->list)), "unselect_child", GTK_SIGNAL_FUNC(&VDKCombo::_handle_item_unselect), (gpointer) obj); gtk_signal_connect(GTK_OBJECT(GTK_ENTRY(GTK_COMBO(obj->widget)->entry)), "activate", GTK_SIGNAL_FUNC(&VDKCombo::_handle_item_activate), (gpointer) obj); gtk_signal_connect(GTK_OBJECT(GTK_ENTRY(GTK_COMBO(obj->widget)->entry)), "changed", GTK_SIGNAL_FUNC(&VDKCombo::_handle_item_text_changed), (gpointer) obj); } void VDKCombo::_handle_item_select(GtkWidget* wid, GtkWidget* item, gpointer gp) { VDKCombo* obj=reinterpret_cast(gp); int item_id=gtk_list_child_position(GTK_LIST(wid), item); if(item_id!=-1) // To handle mysteriuos emission at destruction obj->OnItemSelect(obj, item_id); } void VDKCombo::_handle_item_unselect(GtkWidget* wid, GtkWidget* item, gpointer gp) { VDKCombo* obj=reinterpret_cast(gp); int item_id= gtk_list_child_position(GTK_LIST(wid), item); if(item_id!=-1) obj->OnItemUnselect(obj, item_id); } void VDKCombo::_handle_item_activate(GtkWidget* wid, gpointer gp) { VDKCombo* obj=reinterpret_cast(gp); obj->OnItemActivate(obj, obj->Selected); } void VDKCombo::_handle_item_text_changed(GtkWidget* wid, gpointer gp) { VDKCombo* obj=reinterpret_cast(gp); obj->OnItemTextChanged(obj, obj->GetSelected(), obj->GetText()); // gtk_entry_get_text(GTK_ENTRY(wid))); } #endif /* USE_SIGCPLUSPLUS */ vdk-2.4.0/vdk/folder_collapsed.xpm0000644000000000000000000000055207206652353012555 /* XPM */ static char * folder_collapsed_xpm[] = { "16 12 4 1", " c None", ". c #000000", "+ c #FFF800", "@ c #FFF8FF", " ..... ", " .+@+@+. ", "..@+@+@....... ", ".@.....@+@+@+@. ", ".+@+@+@+@+@+@+. ", ".@+@+@+@+@+@+@. ", ".+@+@+@+@+@+@+. ", ".@+@+@+@+@+@+@. ", ".+@+@+@+@+@+@+. ", ".@+@+@+@+@+@+@. ", ".+@+@+@+@+@+@+. ", "............... "}; vdk-2.4.0/vdk/folder_expanded.xpm0000644000000000000000000000057007206652353012377 /* XPM */ static char * folder_expanded_xpm[] = { "16 12 5 1", " c None", ". c #000000", "+ c #BFB8BF", "@ c #FFF8FF", "# c #FFF800", " ..... ", " .+++++. ", "..+++++....... ", ".+.....+++++++. ", ".+++++++++++++. ", ".++.............", ".+..@#@#@#@#@#@.", ".+.@#@#@#@#@#@#.", "...#@#@#@#@#@#..", "..#@#@#@#@#@#.. ", ".#@#@#@#@#@#@. ", ".............. "}; vdk-2.4.0/vdk/panelbar.cc0000644000000000000000000000253607446637266010641 /* * =========================== * VDK Visual Development Kit * Version 0.4 * October 1998 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "vdk/panelbar.h" #include "vdk/forms.h" /* */ VDKPanelbar::VDKPanelbar(VDKForm* owner, int panels_num, int shadow): VDKFrame(owner,NULL,h_box,shadow) { int i = 0; for(; i< panels_num; i++) { VDKLabel* panel = new VDKLabel(owner," "); Add(panel); if(i < (panels_num -1)) Add(new VDKSeparator(owner,v_separator)); panels.add(panel); } //Owner()->Add(this,r_justify); } vdk-2.4.0/vdk/vdkgnomeapp.cc0000644000000000000000000000274407446637277011373 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ static void dummy(void) {} #if HAVE_GNOME #include VDKGnomeApplication::VDKGnomeApplication(char* app_id, char* title, int* argc, char** argv): VDKApplication(argc,argv) { _app_id = new char[strlen(app_id)+1]; if(_app_id) strcpy(_app_id,app_id); _title = new char[strlen(title)+1]; if(_title) strcpy(_title,title); gnome_init(_app_id,_title,*argc,argv); } VDKGnomeApplication::~VDKGnomeApplication() { if(_app_id) delete[] _app_id; if(_title) delete[] _title; } #endif vdk-2.4.0/vdk/vdkgnomeform.cc0000644000000000000000000000543707446637300011543 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ /* */ static void dummy(void) {} #if HAVE_GNOME #include #include #include #include #include VDKGnomeForm::VDKGnomeForm(VDKGnomeApplication* app, char* title, int mode): VDKForm(app,gnome_app_new(app->AppId(),app->AppTitle()),title) { box = new VDKBox(this,mode); items.add(box); gtk_widget_set_name(box->Widget(),"VDKGnomeForm::Box"); gnome_app_set_contents(GNOME_APP(window),box->Widget()); gtk_widget_show(box->Widget()); box->Parent(this); } /* for builder only */ VDKGnomeForm::VDKGnomeForm(VDKForm* owner, char* app_id, char* title, int mode): VDKForm(owner,gnome_app_new(app_id,app_id),title) { box = new VDKBox(this,mode); items.add(box); gtk_widget_set_name(box->Widget(),"VDKGnomeForm::Box"); gnome_app_set_contents(GNOME_APP(window),box->Widget()); gtk_widget_show(box->Widget()); box->Parent(this); } /* */ VDKGnomeForm::~VDKGnomeForm() { } /* */ void VDKGnomeForm::Add(VDKObject* obj, int justify, int expand, int fill , int padding) { if(dynamic_cast(obj)) { gnome_app_set_statusbar(GNOME_APP(window),obj->Widget()); items.add(obj); obj->Setup(); gtk_widget_show(obj->Widget()); } else if(dynamic_cast(obj)) { gnome_app_set_toolbar(GNOME_APP(window), GTK_TOOLBAR(obj->Widget())); items.add(obj); obj->Setup(); gtk_widget_show(obj->Widget()); } else if(dynamic_cast(obj)) { gnome_app_set_menus(GNOME_APP(window), GTK_MENU_BAR(obj->Widget())); items.add(obj); obj->Setup(); gtk_widget_show(obj->Widget()); } else // call ancestor VDKForm::Add(obj,justify,expand,fill,padding); // set this as parent in any case obj->Parent(this); } #endif vdk-2.4.0/vdk/vdkgnomeappbar.cc0000644000000000000000000000334207446637277012053 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #if HAVE_GNOME #include #include VDKGnomeAppBar::VDKGnomeAppBar(VDKForm* owner, bool has_progress, bool has_status, GnomePreferencesType interact): VDKObject(owner), Status("Status",this,(char*) NULL,&VDKGnomeAppBar::SetStatus), Default("Default",this,(char*) NULL,&VDKGnomeAppBar::SetDefault), Progress("Progress",this,0.0,&VDKGnomeAppBar::SetProgress, &VDKGnomeAppBar::GetProgress) { widget = gnome_appbar_new(has_progress,has_status,interact); if(has_progress) { progress = new VDKObject(owner, GTK_WIDGET(gnome_appbar_get_progress(GNOME_APPBAR(widget)))); items.add(progress); } else progress = NULL; ConnectDefaultSignals(); } VDKGnomeAppBar::~VDKGnomeAppBar() { } #endif vdk-2.4.0/vdk/vdkgnomededit.cc0000644000000000000000000001261007446637277011675 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #if HAVE_GNOME #include #include int VDKGnomeDateEdit::FocusOutEvent(GtkWidget *, GdkEventFocus*, gpointer wid) { g_return_val_if_fail(wid != NULL,FALSE); VDKGnomeDateEdit* obj = reinterpret_cast(wid); obj->SignalEmit(focus_out_signal); return TRUE; } /* */ int VDKGnomeDateEdit::FocusInEvent(GtkWidget *, GdkEventFocus *, gpointer wid) { g_return_val_if_fail(wid != NULL,FALSE); VDKGnomeDateEdit* obj = reinterpret_cast(wid); obj->SignalEmit(focus_in_signal); return TRUE; } /* */ void VDKGnomeDateEdit::HandleDateChange(GtkWidget *wid, gpointer gp) { g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKGnomeDateEdit* obj = reinterpret_cast(gp); obj->SignalEmit(date_changed_signal); } /* */ void VDKGnomeDateEdit::HandleTimeChange(GtkWidget *wid, gpointer gp) { g_return_if_fail(wid != NULL); g_return_if_fail(gp != NULL); VDKGnomeDateEdit* obj = reinterpret_cast(gp); obj->SignalEmit(time_changed_signal); } /* Constructor, makes a date edit initializing it with an absolute time (seconds elapsed since 1-1-1970) */ VDKGnomeDateEdit::VDKGnomeDateEdit(VDKForm* owner, time_t the_time, bool show_time, bool format24, int mode): VDKObject(owner), mode(mode), AbsoluteTime("AbsoluteTime",this,the_time, &VDKGnomeDateEdit::SetAbsoluteTime, &VDKGnomeDateEdit::GetAbsoluteTime), Date("Date",this,calendardate(), &VDKGnomeDateEdit::SetDate, &VDKGnomeDateEdit::GetDate) { time_t t; if(!the_time) { time(&t); AbsoluteTime(t); } widget = gnome_date_edit_new(the_time ? the_time : t, show_time, format24); ConnectDefaultSignals(); ConnectSignals(); } /* Constructor, makes a date edit initializing it with a calendar date constructed with the_date string. the_date must be int the format mm-dd-yyyy, separator can be one of "./-" */ VDKGnomeDateEdit::VDKGnomeDateEdit(VDKForm* owner, char* the_date, bool show_time, bool format24, int mode): VDKObject(owner), mode(mode), AbsoluteTime("AbsoluteTime",this,-1, &VDKGnomeDateEdit::SetAbsoluteTime, &VDKGnomeDateEdit::GetAbsoluteTime), Date("Date",this,calendardate(), &VDKGnomeDateEdit::SetDate, &VDKGnomeDateEdit::GetDate) { time_t t; struct tm b; calendardate d; if(the_date) d = calendardate(the_date); if(d.Valid()) { b.tm_sec = 0; b.tm_min = 0; b.tm_hour = 12; b.tm_isdst = 0; b.tm_mday = d.Day(); b.tm_mon = d.Month()-1; b.tm_year = d.Year()-1900; t = mktime(&b); AbsoluteTime(t); } else { time(&t); AbsoluteTime(t); } widget = gnome_date_edit_new(t, show_time,format24); ConnectDefaultSignals(); ConnectSignals(); } /* connect date edit signals */ void VDKGnomeDateEdit::ConnectSignals() { s_activated.obj = this; s_activated.signal = activate_signal; gtk_signal_connect(GTK_OBJECT(GNOME_DATE_EDIT(widget)->date_entry), "activate", GTK_SIGNAL_FUNC(VDKObject::VDKSignalPipe), (gpointer) &s_activated); gtk_signal_connect(GTK_OBJECT(widget), "date_changed", GTK_SIGNAL_FUNC(VDKGnomeDateEdit::HandleDateChange), (gpointer) this); gtk_signal_connect(GTK_OBJECT(widget), "time_changed", GTK_SIGNAL_FUNC(VDKGnomeDateEdit::HandleTimeChange), (gpointer) this); gtk_signal_connect(GTK_OBJECT(GNOME_DATE_EDIT(widget)->date_entry), "focus_out_event", GTK_SIGNAL_FUNC(VDKGnomeDateEdit::FocusOutEvent), (gpointer) this); gtk_signal_connect(GTK_OBJECT(GNOME_DATE_EDIT(widget)->date_entry), "focus_in_event", GTK_SIGNAL_FUNC(VDKGnomeDateEdit::FocusInEvent), (gpointer) this); } /* destructor */ VDKGnomeDateEdit::~VDKGnomeDateEdit() { } /* this routine works from 1/1/1970 until 12/31/2038 */ void VDKGnomeDateEdit::SetDate(calendardate d) { struct tm b; b.tm_sec = 0; b.tm_min = 0; b.tm_hour = 12; b.tm_isdst = 0; b.tm_mday = d.Day(); b.tm_mon = d.Month()-1; b.tm_year = d.Year()-1900; time_t t = mktime(&b); AbsoluteTime = t; } /* this routine works from 1/1/1970 until 12/31/2038 */ calendardate VDKGnomeDateEdit::GetDate() { time_t t = AbsoluteTime; struct tm *b = localtime(&t); return calendardate(b->tm_mday, b->tm_mon+1, b->tm_year + 1900); } #endif vdk-2.4.0/vdk/vdkgnomeentry.cc0000644000000000000000000000260607446637300011734 /* * =========================== * VDK Visual Develeopment Kit * Version 1.0.4 * December 1999 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #if HAVE_GNOME #include #include #include "vdk/vdkobj.h" const unsigned int MAX_SAVED = 10; VDKGnomeEntry::VDKGnomeEntry(VDKForm* owner, char* def, char* history): VDKCombo(owner,def,gnome_entry_new(history)), History("History",this,history,&VDKGnomeEntry::SetHistory), MaxSaved("MaxSaved",this,0,&VDKGnomeEntry::SetMaxSaved) { MaxSaved = MAX_SAVED; } VDKGnomeEntry::~VDKGnomeEntry() { } #endif vdk-2.4.0/vdk/rgb.cc0000644000000000000000000004173707446637270007630 ! $XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp $ 255 250 250 snow 248 248 255 ghost white 248 248 255 GhostWhite 245 245 245 white smoke 245 245 245 WhiteSmoke 220 220 220 gainsboro 255 250 240 floral white 255 250 240 FloralWhite 253 245 230 old lace 253 245 230 OldLace 250 240 230 linen 250 235 215 antique white 250 235 215 AntiqueWhite 255 239 213 papaya whip 255 239 213 PapayaWhip 255 235 205 blanched almond 255 235 205 BlanchedAlmond 255 228 196 bisque 255 218 185 peach puff 255 218 185 PeachPuff 255 222 173 navajo white 255 222 173 NavajoWhite 255 228 181 moccasin 255 248 220 cornsilk 255 255 240 ivory 255 250 205 lemon chiffon 255 250 205 LemonChiffon 255 245 238 seashell 240 255 240 honeydew 245 255 250 mint cream 245 255 250 MintCream 240 255 255 azure 240 248 255 alice blue 240 248 255 AliceBlue 230 230 250 lavender 255 240 245 lavender blush 255 240 245 LavenderBlush 255 228 225 misty rose 255 228 225 MistyRose 255 255 255 white 0 0 0 black 47 79 79 dark slate gray 47 79 79 DarkSlateGray 47 79 79 dark slate grey 47 79 79 DarkSlateGrey 105 105 105 dim gray 105 105 105 DimGray 105 105 105 dim grey 105 105 105 DimGrey 112 128 144 slate gray 112 128 144 SlateGray 112 128 144 slate grey 112 128 144 SlateGrey 119 136 153 light slate gray 119 136 153 LightSlateGray 119 136 153 light slate grey 119 136 153 LightSlateGrey 190 190 190 gray 190 190 190 grey 211 211 211 light grey 211 211 211 LightGrey 211 211 211 light gray 211 211 211 LightGray 25 25 112 midnight blue 25 25 112 MidnightBlue 0 0 128 navy 0 0 128 navy blue 0 0 128 NavyBlue 100 149 237 cornflower blue 100 149 237 CornflowerBlue 72 61 139 dark slate blue 72 61 139 DarkSlateBlue 106 90 205 slate blue 106 90 205 SlateBlue 123 104 238 medium slate blue 123 104 238 MediumSlateBlue 132 112 255 light slate blue 132 112 255 LightSlateBlue 0 0 205 medium blue 0 0 205 MediumBlue 65 105 225 royal blue 65 105 225 RoyalBlue 0 0 255 blue 30 144 255 dodger blue 30 144 255 DodgerBlue 0 191 255 deep sky blue 0 191 255 DeepSkyBlue 135 206 235 sky blue 135 206 235 SkyBlue 135 206 250 light sky blue 135 206 250 LightSkyBlue 70 130 180 steel blue 70 130 180 SteelBlue 176 196 222 light steel blue 176 196 222 LightSteelBlue 173 216 230 light blue 173 216 230 LightBlue 176 224 230 powder blue 176 224 230 PowderBlue 175 238 238 pale turquoise 175 238 238 PaleTurquoise 0 206 209 dark turquoise 0 206 209 DarkTurquoise 72 209 204 medium turquoise 72 209 204 MediumTurquoise 64 224 208 turquoise 0 255 255 cyan 224 255 255 light cyan 224 255 255 LightCyan 95 158 160 cadet blue 95 158 160 CadetBlue 102 205 170 medium aquamarine 102 205 170 MediumAquamarine 127 255 212 aquamarine 0 100 0 dark green 0 100 0 DarkGreen 85 107 47 dark olive green 85 107 47 DarkOliveGreen 143 188 143 dark sea green 143 188 143 DarkSeaGreen 46 139 87 sea green 46 139 87 SeaGreen 60 179 113 medium sea green 60 179 113 MediumSeaGreen 32 178 170 light sea green 32 178 170 LightSeaGreen 152 251 152 pale green 152 251 152 PaleGreen 0 255 127 spring green 0 255 127 SpringGreen 124 252 0 lawn green 124 252 0 LawnGreen 0 255 0 green 127 255 0 chartreuse 0 250 154 medium spring green 0 250 154 MediumSpringGreen 173 255 47 green yellow 173 255 47 GreenYellow 50 205 50 lime green 50 205 50 LimeGreen 154 205 50 yellow green 154 205 50 YellowGreen 34 139 34 forest green 34 139 34 ForestGreen 107 142 35 olive drab 107 142 35 OliveDrab 189 183 107 dark khaki 189 183 107 DarkKhaki 240 230 140 khaki 238 232 170 pale goldenrod 238 232 170 PaleGoldenrod 250 250 210 light goldenrod yellow 250 250 210 LightGoldenrodYellow 255 255 224 light yellow 255 255 224 LightYellow 255 255 0 yellow 255 215 0 gold 238 221 130 light goldenrod 238 221 130 LightGoldenrod 218 165 32 goldenrod 184 134 11 dark goldenrod 184 134 11 DarkGoldenrod 188 143 143 rosy brown 188 143 143 RosyBrown 205 92 92 indian red 205 92 92 IndianRed 139 69 19 saddle brown 139 69 19 SaddleBrown 160 82 45 sienna 205 133 63 peru 222 184 135 burlywood 245 245 220 beige 245 222 179 wheat 244 164 96 sandy brown 244 164 96 SandyBrown 210 180 140 tan 210 105 30 chocolate 178 34 34 firebrick 165 42 42 brown 233 150 122 dark salmon 233 150 122 DarkSalmon 250 128 114 salmon 255 160 122 light salmon 255 160 122 LightSalmon 255 165 0 orange 255 140 0 dark orange 255 140 0 DarkOrange 255 127 80 coral 240 128 128 light coral 240 128 128 LightCoral 255 99 71 tomato 255 69 0 orange red 255 69 0 OrangeRed 255 0 0 red 255 105 180 hot pink 255 105 180 HotPink 255 20 147 deep pink 255 20 147 DeepPink 255 192 203 pink 255 182 193 light pink 255 182 193 LightPink 219 112 147 pale violet red 219 112 147 PaleVioletRed 176 48 96 maroon 199 21 133 medium violet red 199 21 133 MediumVioletRed 208 32 144 violet red 208 32 144 VioletRed 255 0 255 magenta 238 130 238 violet 221 160 221 plum 218 112 214 orchid 186 85 211 medium orchid 186 85 211 MediumOrchid 153 50 204 dark orchid 153 50 204 DarkOrchid 148 0 211 dark violet 148 0 211 DarkViolet 138 43 226 blue violet 138 43 226 BlueViolet 160 32 240 purple 147 112 219 medium purple 147 112 219 MediumPurple 216 191 216 thistle 255 250 250 snow1 238 233 233 snow2 205 201 201 snow3 139 137 137 snow4 255 245 238 seashell1 238 229 222 seashell2 205 197 191 seashell3 139 134 130 seashell4 255 239 219 AntiqueWhite1 238 223 204 AntiqueWhite2 205 192 176 AntiqueWhite3 139 131 120 AntiqueWhite4 255 228 196 bisque1 238 213 183 bisque2 205 183 158 bisque3 139 125 107 bisque4 255 218 185 PeachPuff1 238 203 173 PeachPuff2 205 175 149 PeachPuff3 139 119 101 PeachPuff4 255 222 173 NavajoWhite1 238 207 161 NavajoWhite2 205 179 139 NavajoWhite3 139 121 94 NavajoWhite4 255 250 205 LemonChiffon1 238 233 191 LemonChiffon2 205 201 165 LemonChiffon3 139 137 112 LemonChiffon4 255 248 220 cornsilk1 238 232 205 cornsilk2 205 200 177 cornsilk3 139 136 120 cornsilk4 255 255 240 ivory1 238 238 224 ivory2 205 205 193 ivory3 139 139 131 ivory4 240 255 240 honeydew1 224 238 224 honeydew2 193 205 193 honeydew3 131 139 131 honeydew4 255 240 245 LavenderBlush1 238 224 229 LavenderBlush2 205 193 197 LavenderBlush3 139 131 134 LavenderBlush4 255 228 225 MistyRose1 238 213 210 MistyRose2 205 183 181 MistyRose3 139 125 123 MistyRose4 240 255 255 azure1 224 238 238 azure2 193 205 205 azure3 131 139 139 azure4 131 111 255 SlateBlue1 122 103 238 SlateBlue2 105 89 205 SlateBlue3 71 60 139 SlateBlue4 72 118 255 RoyalBlue1 67 110 238 RoyalBlue2 58 95 205 RoyalBlue3 39 64 139 RoyalBlue4 0 0 255 blue1 0 0 238 blue2 0 0 205 blue3 0 0 139 blue4 30 144 255 DodgerBlue1 28 134 238 DodgerBlue2 24 116 205 DodgerBlue3 16 78 139 DodgerBlue4 99 184 255 SteelBlue1 92 172 238 SteelBlue2 79 148 205 SteelBlue3 54 100 139 SteelBlue4 0 191 255 DeepSkyBlue1 0 178 238 DeepSkyBlue2 0 154 205 DeepSkyBlue3 0 104 139 DeepSkyBlue4 135 206 255 SkyBlue1 126 192 238 SkyBlue2 108 166 205 SkyBlue3 74 112 139 SkyBlue4 176 226 255 LightSkyBlue1 164 211 238 LightSkyBlue2 141 182 205 LightSkyBlue3 96 123 139 LightSkyBlue4 198 226 255 SlateGray1 185 211 238 SlateGray2 159 182 205 SlateGray3 108 123 139 SlateGray4 202 225 255 LightSteelBlue1 188 210 238 LightSteelBlue2 162 181 205 LightSteelBlue3 110 123 139 LightSteelBlue4 191 239 255 LightBlue1 178 223 238 LightBlue2 154 192 205 LightBlue3 104 131 139 LightBlue4 224 255 255 LightCyan1 209 238 238 LightCyan2 180 205 205 LightCyan3 122 139 139 LightCyan4 187 255 255 PaleTurquoise1 174 238 238 PaleTurquoise2 150 205 205 PaleTurquoise3 102 139 139 PaleTurquoise4 152 245 255 CadetBlue1 142 229 238 CadetBlue2 122 197 205 CadetBlue3 83 134 139 CadetBlue4 0 245 255 turquoise1 0 229 238 turquoise2 0 197 205 turquoise3 0 134 139 turquoise4 0 255 255 cyan1 0 238 238 cyan2 0 205 205 cyan3 0 139 139 cyan4 151 255 255 DarkSlateGray1 141 238 238 DarkSlateGray2 121 205 205 DarkSlateGray3 82 139 139 DarkSlateGray4 127 255 212 aquamarine1 118 238 198 aquamarine2 102 205 170 aquamarine3 69 139 116 aquamarine4 193 255 193 DarkSeaGreen1 180 238 180 DarkSeaGreen2 155 205 155 DarkSeaGreen3 105 139 105 DarkSeaGreen4 84 255 159 SeaGreen1 78 238 148 SeaGreen2 67 205 128 SeaGreen3 46 139 87 SeaGreen4 154 255 154 PaleGreen1 144 238 144 PaleGreen2 124 205 124 PaleGreen3 84 139 84 PaleGreen4 0 255 127 SpringGreen1 0 238 118 SpringGreen2 0 205 102 SpringGreen3 0 139 69 SpringGreen4 0 255 0 green1 0 238 0 green2 0 205 0 green3 0 139 0 green4 127 255 0 chartreuse1 118 238 0 chartreuse2 102 205 0 chartreuse3 69 139 0 chartreuse4 192 255 62 OliveDrab1 179 238 58 OliveDrab2 154 205 50 OliveDrab3 105 139 34 OliveDrab4 202 255 112 DarkOliveGreen1 188 238 104 DarkOliveGreen2 162 205 90 DarkOliveGreen3 110 139 61 DarkOliveGreen4 255 246 143 khaki1 238 230 133 khaki2 205 198 115 khaki3 139 134 78 khaki4 255 236 139 LightGoldenrod1 238 220 130 LightGoldenrod2 205 190 112 LightGoldenrod3 139 129 76 LightGoldenrod4 255 255 224 LightYellow1 238 238 209 LightYellow2 205 205 180 LightYellow3 139 139 122 LightYellow4 255 255 0 yellow1 238 238 0 yellow2 205 205 0 yellow3 139 139 0 yellow4 255 215 0 gold1 238 201 0 gold2 205 173 0 gold3 139 117 0 gold4 255 193 37 goldenrod1 238 180 34 goldenrod2 205 155 29 goldenrod3 139 105 20 goldenrod4 255 185 15 DarkGoldenrod1 238 173 14 DarkGoldenrod2 205 149 12 DarkGoldenrod3 139 101 8 DarkGoldenrod4 255 193 193 RosyBrown1 238 180 180 RosyBrown2 205 155 155 RosyBrown3 139 105 105 RosyBrown4 255 106 106 IndianRed1 238 99 99 IndianRed2 205 85 85 IndianRed3 139 58 58 IndianRed4 255 130 71 sienna1 238 121 66 sienna2 205 104 57 sienna3 139 71 38 sienna4 255 211 155 burlywood1 238 197 145 burlywood2 205 170 125 burlywood3 139 115 85 burlywood4 255 231 186 wheat1 238 216 174 wheat2 205 186 150 wheat3 139 126 102 wheat4 255 165 79 tan1 238 154 73 tan2 205 133 63 tan3 139 90 43 tan4 255 127 36 chocolate1 238 118 33 chocolate2 205 102 29 chocolate3 139 69 19 chocolate4 255 48 48 firebrick1 238 44 44 firebrick2 205 38 38 firebrick3 139 26 26 firebrick4 255 64 64 brown1 238 59 59 brown2 205 51 51 brown3 139 35 35 brown4 255 140 105 salmon1 238 130 98 salmon2 205 112 84 salmon3 139 76 57 salmon4 255 160 122 LightSalmon1 238 149 114 LightSalmon2 205 129 98 LightSalmon3 139 87 66 LightSalmon4 255 165 0 orange1 238 154 0 orange2 205 133 0 orange3 139 90 0 orange4 255 127 0 DarkOrange1 238 118 0 DarkOrange2 205 102 0 DarkOrange3 139 69 0 DarkOrange4 255 114 86 coral1 238 106 80 coral2 205 91 69 coral3 139 62 47 coral4 255 99 71 tomato1 238 92 66 tomato2 205 79 57 tomato3 139 54 38 tomato4 255 69 0 OrangeRed1 238 64 0 OrangeRed2 205 55 0 OrangeRed3 139 37 0 OrangeRed4 255 0 0 red1 238 0 0 red2 205 0 0 red3 139 0 0 red4 255 20 147 DeepPink1 238 18 137 DeepPink2 205 16 118 DeepPink3 139 10 80 DeepPink4 255 110 180 HotPink1 238 106 167 HotPink2 205 96 144 HotPink3 139 58 98 HotPink4 255 181 197 pink1 238 169 184 pink2 205 145 158 pink3 139 99 108 pink4 255 174 185 LightPink1 238 162 173 LightPink2 205 140 149 LightPink3 139 95 101 LightPink4 255 130 171 PaleVioletRed1 238 121 159 PaleVioletRed2 205 104 137 PaleVioletRed3 139 71 93 PaleVioletRed4 255 52 179 maroon1 238 48 167 maroon2 205 41 144 maroon3 139 28 98 maroon4 255 62 150 VioletRed1 238 58 140 VioletRed2 205 50 120 VioletRed3 139 34 82 VioletRed4 255 0 255 magenta1 238 0 238 magenta2 205 0 205 magenta3 139 0 139 magenta4 255 131 250 orchid1 238 122 233 orchid2 205 105 201 orchid3 139 71 137 orchid4 255 187 255 plum1 238 174 238 plum2 205 150 205 plum3 139 102 139 plum4 224 102 255 MediumOrchid1 209 95 238 MediumOrchid2 180 82 205 MediumOrchid3 122 55 139 MediumOrchid4 191 62 255 DarkOrchid1 178 58 238 DarkOrchid2 154 50 205 DarkOrchid3 104 34 139 DarkOrchid4 155 48 255 purple1 145 44 238 purple2 125 38 205 purple3 85 26 139 purple4 171 130 255 MediumPurple1 159 121 238 MediumPurple2 137 104 205 MediumPurple3 93 71 139 MediumPurple4 255 225 255 thistle1 238 210 238 thistle2 205 181 205 thistle3 139 123 139 thistle4 0 0 0 gray0 0 0 0 grey0 3 3 3 gray1 3 3 3 grey1 5 5 5 gray2 5 5 5 grey2 8 8 8 gray3 8 8 8 grey3 10 10 10 gray4 10 10 10 grey4 13 13 13 gray5 13 13 13 grey5 15 15 15 gray6 15 15 15 grey6 18 18 18 gray7 18 18 18 grey7 20 20 20 gray8 20 20 20 grey8 23 23 23 gray9 23 23 23 grey9 26 26 26 gray10 26 26 26 grey10 28 28 28 gray11 28 28 28 grey11 31 31 31 gray12 31 31 31 grey12 33 33 33 gray13 33 33 33 grey13 36 36 36 gray14 36 36 36 grey14 38 38 38 gray15 38 38 38 grey15 41 41 41 gray16 41 41 41 grey16 43 43 43 gray17 43 43 43 grey17 46 46 46 gray18 46 46 46 grey18 48 48 48 gray19 48 48 48 grey19 51 51 51 gray20 51 51 51 grey20 54 54 54 gray21 54 54 54 grey21 56 56 56 gray22 56 56 56 grey22 59 59 59 gray23 59 59 59 grey23 61 61 61 gray24 61 61 61 grey24 64 64 64 gray25 64 64 64 grey25 66 66 66 gray26 66 66 66 grey26 69 69 69 gray27 69 69 69 grey27 71 71 71 gray28 71 71 71 grey28 74 74 74 gray29 74 74 74 grey29 77 77 77 gray30 77 77 77 grey30 79 79 79 gray31 79 79 79 grey31 82 82 82 gray32 82 82 82 grey32 84 84 84 gray33 84 84 84 grey33 87 87 87 gray34 87 87 87 grey34 89 89 89 gray35 89 89 89 grey35 92 92 92 gray36 92 92 92 grey36 94 94 94 gray37 94 94 94 grey37 97 97 97 gray38 97 97 97 grey38 99 99 99 gray39 99 99 99 grey39 102 102 102 gray40 102 102 102 grey40 105 105 105 gray41 105 105 105 grey41 107 107 107 gray42 107 107 107 grey42 110 110 110 gray43 110 110 110 grey43 112 112 112 gray44 112 112 112 grey44 115 115 115 gray45 115 115 115 grey45 117 117 117 gray46 117 117 117 grey46 120 120 120 gray47 120 120 120 grey47 122 122 122 gray48 122 122 122 grey48 125 125 125 gray49 125 125 125 grey49 127 127 127 gray50 127 127 127 grey50 130 130 130 gray51 130 130 130 grey51 133 133 133 gray52 133 133 133 grey52 135 135 135 gray53 135 135 135 grey53 138 138 138 gray54 138 138 138 grey54 140 140 140 gray55 140 140 140 grey55 143 143 143 gray56 143 143 143 grey56 145 145 145 gray57 145 145 145 grey57 148 148 148 gray58 148 148 148 grey58 150 150 150 gray59 150 150 150 grey59 153 153 153 gray60 153 153 153 grey60 156 156 156 gray61 156 156 156 grey61 158 158 158 gray62 158 158 158 grey62 161 161 161 gray63 161 161 161 grey63 163 163 163 gray64 163 163 163 grey64 166 166 166 gray65 166 166 166 grey65 168 168 168 gray66 168 168 168 grey66 171 171 171 gray67 171 171 171 grey67 173 173 173 gray68 173 173 173 grey68 176 176 176 gray69 176 176 176 grey69 179 179 179 gray70 179 179 179 grey70 181 181 181 gray71 181 181 181 grey71 184 184 184 gray72 184 184 184 grey72 186 186 186 gray73 186 186 186 grey73 189 189 189 gray74 189 189 189 grey74 191 191 191 gray75 191 191 191 grey75 194 194 194 gray76 194 194 194 grey76 196 196 196 gray77 196 196 196 grey77 199 199 199 gray78 199 199 199 grey78 201 201 201 gray79 201 201 201 grey79 204 204 204 gray80 204 204 204 grey80 207 207 207 gray81 207 207 207 grey81 209 209 209 gray82 209 209 209 grey82 212 212 212 gray83 212 212 212 grey83 214 214 214 gray84 214 214 214 grey84 217 217 217 gray85 217 217 217 grey85 219 219 219 gray86 219 219 219 grey86 222 222 222 gray87 222 222 222 grey87 224 224 224 gray88 224 224 224 grey88 227 227 227 gray89 227 227 227 grey89 229 229 229 gray90 229 229 229 grey90 232 232 232 gray91 232 232 232 grey91 235 235 235 gray92 235 235 235 grey92 237 237 237 gray93 237 237 237 grey93 240 240 240 gray94 240 240 240 grey94 242 242 242 gray95 242 242 242 grey95 245 245 245 gray96 245 245 245 grey96 247 247 247 gray97 247 247 247 grey97 250 250 250 gray98 250 250 250 grey98 252 252 252 gray99 252 252 252 grey99 255 255 255 gray100 255 255 255 grey100 169 169 169 dark grey 169 169 169 DarkGrey 169 169 169 dark gray 169 169 169 DarkGray 0 0 139 dark blue 0 0 139 DarkBlue 0 139 139 dark cyan 0 139 139 DarkCyan 139 0 139 dark magenta 139 0 139 DarkMagenta 139 0 0 dark red 139 0 0 DarkRed 144 238 144 light green 144 238 144 LightGreen vdk-2.4.0/vdk/sigc_events.cc0000644000000000000000000001116507446637271011360 /* * =========================== * VDK Visual Development Kit * Version 1.0.5 * Jan 2000 * Revision on vdk 1.0.5 * Jan 2000 by tl * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */ #include #include #include /* +-----------------------------------------------------------------+ | class: VDKAnyEvent | +-----------------------------------------------------------------*/ VDKAnyEvent::VDKAnyEvent(const GdkEvent * eve, VDKObject* obj) { #ifdef VDKDEBUG g_return_if_fail(obj!=NULL); g_return_if_fail(eve!=NULL); #endif /* VDKDEBUG */ _obj=obj; _type=eve->type; } VDKObject* VDKAnyEvent::Sender() const {return _obj;} /* +----------------------------------------------------------------+ | class VDKKeyEvent | +----------------------------------------------------------------*/ VDKKeyEvent::VDKKeyEvent(const GdkEventKey * eve, VDKObject* obj) : VDKAnyEvent((const GdkEvent*) eve, obj), _state(eve->state), _keyval(eve->keyval) { _string=g_strdup(eve->string); } VDKKeyEvent::~VDKKeyEvent() { g_free(_string); } unsigned int VDKKeyEvent::Key() const {return _keyval;} unsigned int VDKKeyEvent::Modifier() const {return _state;} VDKString VDKKeyEvent::String() const {return _string;} const char * VDKKeyEvent::CString() const {return _string;} /* +----------------------------------------------------------------+ | class VDKMouseEvent | +----------------------------------------------------------------*/ VDKMouseEvent::VDKMouseEvent(const GdkEventMotion * eve, VDKObject* obj) : VDKAnyEvent((const GdkEvent*)eve, obj), _pos((int) eve->x, (int) eve->y), _state(eve->state), _button(GDK_VoidSymbol) { _gwin=eve->window; } VDKMouseEvent::VDKMouseEvent(const GdkEventButton * eve, VDKObject* obj) : VDKAnyEvent((const GdkEvent*) eve, obj), _pos((int) eve->x, (int) eve->y), _state(eve->state), _button(eve->button) { _gwin=eve->window; } VDKMouseEvent::VDKMouseEvent(const GdkEventCrossing * eve, VDKObject* obj) : VDKAnyEvent((const GdkEvent*) eve, obj), _pos((int) eve->x, (int) eve->y), _state(eve->state), _button(GDK_VoidSymbol) { _gwin=eve->window; } VDKPoint const& VDKMouseEvent::Position() const { return _pos; } VDKPoint VDKMouseEvent::AbsPosition() const { gint x,y; gdk_window_get_root_origin(_gwin,&x,&y); VDKPoint point(_pos); return point.OffsetBy(x,y); } unsigned int VDKMouseEvent::Button() const { return _button; } unsigned int VDKMouseEvent::Modifier() const { return _state; } /* ***************************************************************** * ****** VDKMapEvent ****** * ****************************************************************/ VDKMapEvent::VDKMapEvent(const GdkEventVisibility* eve, VDKObject* sender) : VDKAnyEvent((const GdkEvent*) eve,sender) { switch(eve->state){ case GDK_VISIBILITY_UNOBSCURED: _state=FULLY_VISIBLE; break; case GDK_VISIBILITY_PARTIAL: _state=PARTIAL_VISIBLE; break; case GDK_VISIBILITY_FULLY_OBSCURED: _state=NOT_VISIBLE; break; default: break; } } /* ***************************************************************** * ***** VDKSelectionEvent ***** * ****************************************************************/ // VDKSelection::~VDKSelection() // { // if(_str_sel) // delete _str_sel; // if(_str_prop) // delete _str_prop; // } // VDKString // VDKSelectionEvent::Selection() const // { // if(!_str_sel){//if not allready fetched, then fetch // } // return *_str_sel; // } vdk-2.4.0/vdk/sigc_eventsignals.cc0000644000000000000000000002417007446637271012556 #include #include #include #include /** ********************************************************************** * VDKAnyEventSignal * **********************************************************************/ VDKRawEventSignal::VDKRawEventSignal(VDKObject* obj) : _obj(obj), _handler_id(0) {}; VDKRawEventSignal::~VDKRawEventSignal() { if(_handler_id!=0){ gtk_signal_disconnect(GTK_OBJECT(_obj->ConnectingWidget()), _handler_id); } }; Connection VDKRawEventSignal::connect(const Slot2& sl) { if(_handler_id==0) _handler_id=gtk_signal_connect(GTK_OBJECT(_obj->ConnectingWidget()), "event", GTK_SIGNAL_FUNC(&VDKRawEventSignal::event_handler), (gpointer) this); return VDKSignal1::connect(sl); } Connection VDKRawEventSignal::connect(const Slot1& sl) { if(_handler_id==0) _handler_id=gtk_signal_connect(GTK_OBJECT(_obj->ConnectingWidget()), "event", GTK_SIGNAL_FUNC(&VDKRawEventSignal::event_handler), (gpointer) this); return VDKSignal1::connect(sl); } void VDKRawEventSignal::disconnect(Connection& c) { c.disconnect(); if(empty() && _handler_id!=0){ gtk_signal_disconnect(GTK_OBJECT(_obj->ConnectingWidget()), _handler_id); _handler_id=0; } } gint VDKRawEventSignal::event_handler(GtkObject* wid, GdkEvent* eve, gpointer sig) { VDKRawEventSignal* s=reinterpret_cast(sig); s->emit(s->_obj, eve); return FALSE; } /* *********************************************************************** * * DirectEventSignal * * **********************************************************************/ template DirectEventSignal::~DirectEventSignal() { if(_handler_id) gtk_signal_disconnect(GTK_OBJECT(_sender->ConnectingWidget()), _handler_id); } template Connection DirectEventSignal::connect(const Slot2& sl) { if(_handler_id==0){ // ensure gtksigc connectivity _handler_id=gtk_signal_connect(GTK_OBJECT(_sender->ConnectingWidget()), T_trait::signame, GTK_SIGNAL_FUNC(&DirectEventSignal::event_handler), (gpointer) this); } return VDKSignal1::connect(sl); } template Connection DirectEventSignal::connect(const Slot1& sl) { if(_handler_id==0){ // ensure gtksigc connectivity _handler_id=gtk_signal_connect(GTK_OBJECT(_sender->ConnectingWidget()), T_trait::signame, GTK_SIGNAL_FUNC(&DirectEventSignal::event_handler), (gpointer) this); } return VDKSignal1::connect(sl); } template void DirectEventSignal::disconnect(Connection& con) { con.disconnect(); if(empty()){ gtk_signal_disconnect(GTK_OBJECT(_sender->ConnectingWidget()), _handler_id); _handler_id=0; } } template void DirectEventSignal::event_handler(GtkObject*, GdkEvent* eve, gpointer obj) { DirectEventSignal* s= reinterpret_cast(obj); s->emit(s->_sender,T_vevent((const T_trait::ge_type *) eve, s->_sender)); } /* ************************************************************************ * *********** SignalWrapperStage1M2 *********** * ***********************************************************************/ template bool SignalWrapperStage1M2::empty() const { return (swrap1.empty() && swrap2.empty()); } template Connection SignalWrapperStage1M2::connect(const Slot2& sl, T_vcmp spec) { Connection res; if(swrap1.responsible(spec)) res=swrap1.connect(sl, spec); // Overhead, i know. Will be // removed when else if(swrap2.responsible(spec)) // Expressiontemplates are used res=swrap2.connect(sl, spec); return res; } template Connection SignalWrapperStage1M2::connect(const Slot1& sl, T_vcmp spec) { Connection res; if(swrap1.responsible(spec)) res=swrap1.connect(sl, spec); else if(swrap2.responsible(spec)) res=swrap2.connect(sl, spec); return res; } template void SignalWrapperStage1M2::disconnect(Connection& con) { con.disconnect(); swrap1.cleanup(); swrap2.cleanup(); } /* ************************************************************************ * ******* SignalWrapperStage2Base ************ * ***********************************************************************/ template SignalWrapperStage2Base::~SignalWrapperStage2Base() { // Hope connections will be destroyed autom. if(_handler_id) gtk_signal_disconnect(GTK_OBJECT(_sender->ConnectingWidget()), _handler_id); } template void SignalWrapperStage2Base::cleanup(){ if(empty() && (_handler_id!=0)){ // second is (should be) irrelevant gtk_signal_disconnect(GTK_OBJECT(_sender->ConnectingWidget()), _handler_id); _handler_id=0; } } template Connection SignalWrapperStage2Base::connect(const Slot2& sl, T_vcmp spec) { Connection res; int vpos=leaf::vdk2vec(spec); if(vpos!=-1){ // we are responsible if(_handler_id==0){ // ensure gtksigc connectivity _handler_id=gtk_signal_connect(GTK_OBJECT(_sender->ConnectingWidget()), Trait::signame, GTK_SIGNAL_FUNC(&SignalWrapperStage2Base::event_handler), (gpointer) this); } res=sig_vec[vpos].connect(sl); } return res; } template Connection SignalWrapperStage2Base::connect(const Slot1& sl, T_vcmp spec) { Connection res; int vpos=leaf::vdk2vec(spec); if(vpos!=-1){ // we are responsible if(_handler_id==0){ // ensure gtksigc connectivity _handler_id=gtk_signal_connect(GTK_OBJECT(_sender->ConnectingWidget()), Trait::signame, GTK_SIGNAL_FUNC(&SignalWrapperStage2Base::event_handler), (gpointer) this); } res=sig_vec[vpos].connect(sl); } return res; } template void SignalWrapperStage2Base::event_handler(GtkObject* wid, GdkEvent* eve, gpointer obj) { int pos=leaf::eve2vec(eve); if(pos!=-1){ SignalWrapperStage2Base* s= reinterpret_cast* >(obj); s->sig_vec[pos].emit(s->_sender,T_vevent((const Trait::ge_type *) eve, s->_sender)); } } template bool SignalWrapperStage2Base::empty() const { bool e_flag=false; // read: isEmpty-Flag for(int i=0; i < sc && !e_flag ; i++){ e_flag=sig_vec[i].empty(); } return e_flag; } template bool SignalWrapperStage2Base::responsible(T_vcmp spec) const { return (leaf::vdk2vec(spec) != -1); } /* ************************************************************************** * (Partial) Specializations of above * * **************************************************************************/ /* 1 value to compare */ template int SignalWrapperStage2::eve2vec(GdkEvent* eve) { T_gcmp cmpval=W2_Trait::Field(eve); if(cmpval==W2_Trait::GN1) return 0; return -1; } template int SignalWrapperStage2::vdk2vec(T_vcmp val) { if(val==W2_Trait::EN1) return 0; return -1; } /* 2 value to compare */ template int SignalWrapperStage2::eve2vec(GdkEvent* eve) { T_gcmp cmpval=W2_Trait::Field(eve); switch(cmpval){ case W2_Trait::GN1: return 0; case W2_Trait::GN2: return 1; default: break; } return -1; } template int SignalWrapperStage2::vdk2vec(T_vcmp val) { switch(val){ case W2_Trait::EN1: return 0; case W2_Trait::EN2: return 1; default: break; } return -1; } /* 3 value to compare */ template int SignalWrapperStage2::eve2vec(GdkEvent* eve) { T_gcmp cmpval=W2_Trait::Field(eve); switch(cmpval){ case W2_Trait::GN1: return 0; case W2_Trait::GN2: return 1; case W2_Trait::GN3: return 2; default: break; } return -1; } template int SignalWrapperStage2::vdk2vec(T_vcmp val) { switch(val){ case W2_Trait::EN1: return 0; case W2_Trait::EN2: return 1; case W2_Trait::EN3: return 2; default: break; } return -1; } /////////// template VDKButtonSignal; template VDKKeySignal; template VDKKeyFocusSignal; template VDKPointerFocusSignal; template VDKPointerSignal; template VDKMapSignal; template VDKGeometrySignal; template VDKPaintSignal; vdk-2.4.0/vdk/sigc_eventtraits.cc0000644000000000000000000000504307446637272012423 #define MAKE_EVENTTRAIT_1_IMP(ID,NAME,E1,G1) \ const char* const W2_Trait::signame=NAME;\ const W2_Trait::T_vcmp W2_Trait::EN1=E1;\ const W2_Trait::T_gcmp W2_Trait::GN1=G1; #define MAKE_EVENTTRAIT_2_IMP(ID,NAME,E1,G1,E2,G2) \ const char* const W2_Trait::signame=NAME;\ const W2_Trait::T_vcmp W2_Trait::EN1=E1;\ const W2_Trait::T_gcmp W2_Trait::GN1=G1;\ const W2_Trait::T_vcmp W2_Trait::EN2=E2;\ const W2_Trait::T_gcmp W2_Trait::GN2=G2; #define MAKE_EVENTTRAIT_3_IMP(ID,NAME,E1,G1,E2,G2,E3,G3) \ const char* const W2_Trait::signame=NAME;\ const W2_Trait::T_vcmp W2_Trait::EN1=E1;\ const W2_Trait::T_gcmp W2_Trait::GN1=G1;\ const W2_Trait::T_vcmp W2_Trait::EN2=E2;\ const W2_Trait::T_gcmp W2_Trait::GN2=G2;\ const W2_Trait::T_vcmp W2_Trait::EN3=E3;\ const W2_Trait::T_gcmp W2_Trait::GN3=G3; MAKE_EVENTTRAIT_3_IMP(BUTTON_PRESS,"button_press_event",\ BE_PRESS,GDK_BUTTON_PRESS,\ BE_CLICK2, GDK_2BUTTON_PRESS,\ BE_CLICK3, GDK_3BUTTON_PRESS) MAKE_EVENTTRAIT_1_IMP(BUTTON_RELEASE,"button_release_event",\ BE_RELEASE,GDK_BUTTON_RELEASE) MAKE_EVENTTRAIT_1_IMP(FOCUS_KEY_IN,"focus_in_event",\ FE_IN, TRUE) MAKE_EVENTTRAIT_1_IMP(FOCUS_KEY_OUT,"focus_out_event",\ FE_OUT, FALSE) MAKE_EVENTTRAIT_1_IMP(FOCUS_POINTER_IN,"enter_notify_event",\ FE_IN, GDK_ENTER_NOTIFY) MAKE_EVENTTRAIT_1_IMP(FOCUS_POINTER_OUT,"leave_notify_event",\ FE_OUT, GDK_LEAVE_NOTIFY) MAKE_EVENTTRAIT_1_IMP(GEOMETRY,"configure_event",1,1) MAKE_EVENTTRAIT_1_IMP(PAINT,"expose_event",1,1) MAKE_EVENTTRAIT_1_IMP(KEY_PRESS,"key_press_event",\ KE_PRESS, GDK_KEY_PRESS) MAKE_EVENTTRAIT_1_IMP(KEY_RELEASE,"key_release_event",\ KE_RELEASE, GDK_KEY_RELEASE) MAKE_EVENTTRAIT_1_IMP(POINTER_PRESSED, "motion_notify_event",\ PE_PRESSED, true) MAKE_EVENTTRAIT_1_IMP(POINTER_MOVE,"motion_notify_event",\ PE_ALL, true) const char* const W2_Trait::signame="visibility_notify_event"; const W2_Trait::T_vcmp W2_Trait::EN1=FULLY_VISIBLE; const int W2_Trait::GN1=GDK_VISIBILITY_UNOBSCURED; const W2_Trait::T_vcmp W2_Trait::EN2=NOT_VISIBLE; const int W2_Trait::GN2=GDK_VISIBILITY_FULLY_OBSCURED; const W2_Trait::T_vcmp W2_Trait::EN3=PARTIAL_VISIBLE; const int W2_Trait::GN3=GDK_VISIBILITY_PARTIAL; inline W2_Trait::T_gcmp W2_Trait::Field(GdkEvent* eve){return reinterpret_cast(eve)->state;} vdk-2.4.0/README0000644000000000000000000000072007424257566006630 General Information =================== This is VDK version 2.0 , a C++ Wrapper over GTK+ 2.0.x library. VDK author is: Mario Motta, mmotta@guest.net VDK is distributed under LGPL. ============================== The official web site is: http://vdkbuilder.sourceforge.net Installation ============ See the file 'INSTALL' Installation notes: ================== You need GTK+ 2.0 or greater installed to use VDK. You can download it at: http://www.gtk.org vdk-2.4.0/Makefile.in0000644000000000000000000005047110052331516010000 # Makefile.in generated by automake 1.7.8 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ GNOMEDEFINE = @GNOMEDEFINE@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GNOME_VDK = @GNOME_VDK@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_VDK_AGE = @LT_VDK_AGE@ LT_VDK_CURRENT = @LT_VDK_CURRENT@ LT_VDK_RELEASE = @LT_VDK_RELEASE@ LT_VDK_REVISION = @LT_VDK_REVISION@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIGCDEFINE = @SIGCDEFINE@ SIGC_CFLAGS = @SIGC_CFLAGS@ SIGC_LIBS = @SIGC_LIBS@ STRIP = @STRIP@ TAG_SIGC = @TAG_SIGC@ TESTSIGCVDK = @TESTSIGCVDK@ TESTVDK = @TESTVDK@ VDK_RELEASE_DATE = @VDK_RELEASE_DATE@ VDK_VERSION = @VDK_VERSION@ VDK_VERSION_MAJOR = @VDK_VERSION_MAJOR@ VDK_VERSION_MICRO = @VDK_VERSION_MICRO@ VDK_VERSION_MINOR = @VDK_VERSION_MINOR@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ bin_SCRIPTS = vdk-config-2 BUILT_SOURCE = vdk-config-2 #sigcvdktest contrib doc SUBDIRS = vdk testvdk example doc sigcvdktest EXTRA_DIST = \ autogen.sh \ configure \ aclocal.m4 \ BUGS m4datadir = $(datadir)/aclocal m4data_DATA = vdk-2.m4 subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = vdk-2.m4 vdk-config-2 SCRIPTS = $(bin_SCRIPTS) DIST_SOURCES = DATA = $(m4data_DATA) RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ ps-recursive install-info-recursive uninstall-info-recursive \ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \ COPYING ChangeLog INSTALL Makefile.am NEWS TODO acconfig.h \ aclocal.m4 config.guess config.h.in config.sub configure \ configure.in depcomp install-sh ltconfig ltmain.sh missing \ mkinstalldirs vdk-2.m4.in vdk-config-2.in DIST_SUBDIRS = $(SUBDIRS) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4) $(top_srcdir)/acconfig.h cd $(top_srcdir) && $(AUTOHEADER) touch $(srcdir)/config.h.in distclean-hdr: -rm -f config.h stamp-h1 vdk-2.m4: $(top_builddir)/config.status vdk-2.m4.in cd $(top_builddir) && $(SHELL) ./config.status $@ vdk-config-2: $(top_builddir)/config.status vdk-config-2.in cd $(top_builddir) && $(SHELL) ./config.status $@ binSCRIPT_INSTALL = $(INSTALL_SCRIPT) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_SCRIPTS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f $$d$$p; then \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \ $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \ else :; fi; \ done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; for p in $$list; do \ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ rm -f $(DESTDIR)$(bindir)/$$f; \ done mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: m4dataDATA_INSTALL = $(INSTALL_DATA) install-m4dataDATA: $(m4data_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(m4datadir) @list='$(m4data_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(m4dataDATA_INSTALL) $$d$$p $(DESTDIR)$(m4datadir)/$$f"; \ $(m4dataDATA_INSTALL) $$d$$p $(DESTDIR)$(m4datadir)/$$f; \ done uninstall-m4dataDATA: @$(NORMAL_UNINSTALL) @list='$(m4data_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(m4datadir)/$$f"; \ rm -f $(DESTDIR)$(m4datadir)/$$f; \ done # 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): @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS 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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if (etags --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ else \ include_option=--include; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && \ tags="$$tags $$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; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = . distdir = $(PACKAGE)-$(VERSION) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkinstalldirs) $(distdir)/. $(distdir)/doc/doxy $(distdir)/vdk @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" \ distdir=../$(distdir)/$$subdir \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | 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 $(am__remove_distdir) GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && 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 ../.. && $(mkinstalldirs) "$$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-gzip \ && rm -f $(distdir).tar.gz \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @echo "$(distdir).tar.gz is ready for distribution" | \ sed 'h;s/./=/g;p;x;p;x' distuninstallcheck: @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 $(SCRIPTS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(m4datadir) 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_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: info: info-recursive info-am: install-data-am: install-m4dataDATA install-exec-am: install-binSCRIPTS install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-info-am \ uninstall-m4dataDATA uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ clean-generic clean-libtool clean-recursive ctags \ ctags-recursive dist dist-all dist-gzip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am dvi-recursive info info-am \ info-recursive install install-am install-binSCRIPTS \ install-data install-data-am install-data-recursive \ install-exec install-exec-am install-exec-recursive \ install-info install-info-am install-info-recursive \ install-m4dataDATA install-man install-recursive install-strip \ installcheck installcheck-am installdirs installdirs-am \ installdirs-recursive maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am \ pdf-recursive ps ps-am ps-recursive tags tags-recursive \ uninstall uninstall-am uninstall-binSCRIPTS uninstall-info-am \ uninstall-info-recursive uninstall-m4dataDATA \ uninstall-recursive vdk-config-2: vdk-config-2.in testvdk: cd testvdk make .PHONY: files release snapshot files: @files=`ls $(DISTFILES) 2> /dev/null` ; for p in $$files; do \ echo $$p; \ done @for subdir in $(SUBDIRS); do \ files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ for file in $$files; do \ echo $$subdir/$$file; \ done; \ done release: rm -rf .deps */.deps $(MAKE) distcheck snapshot: $(MAKE) dist distdir=$(PACKAGE)`date +"-cvs.%Y.%m.%d"` docs: cd doc && $(MAKE) docs # 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: vdk-2.4.0/configure0000755000000000000000000245224310052331520007642 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.57. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # 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 Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=`echo "$tagnames,CXX" | sed 's/^,//'` tagnames=`echo "$tagnames,F77" | sed 's/^,//'` # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="vdk/vdk.h" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS VDK_VERSION_MAJOR VDK_VERSION_MINOR VDK_VERSION_MICRO VDK_VERSION VDK_RELEASE_DATE LT_VDK_RELEASE LT_VDK_CURRENT LT_VDK_REVISION LT_VDK_AGE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT PKG_CONFIG GTK_CFLAGS GTK_LIBS DOXYGEN PERL TESTVDK SIGC_CFLAGS SIGC_LIBS SIGCDEFINE TESTSIGCVDK GENERATE_HTML GENERATE_LATEX GENERATE_MAN TAG_SIGC GNOMEDEFINE GNOME_LIBS GNOME_CFLAGS GNOME_VDK INCLUDES LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS # # 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 this package 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-debug=no/minimum/yes enable debug information default=no --enable-opt=OPTIMIZATION/no Compile with -Ox optimization default=2 --enable-testvdk=yes/no Compile testvdk program example default=yes --enable-doc-html=yes/no enable generation of docs in html format default=yes --enable-doc-latex=yes/no enable generation of docs in latex format default=no --enable-doc-man=yes/no enable generation of docs in latex format default=no Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 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 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$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 ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core core.* *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`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. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } 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 cflags_set=${CFLAGS+set} VDK_VERSION_MAJOR=2 VDK_VERSION_MINOR=4 VDK_VERSION_MICRO=0 VDK_RELEASE_DATE="05-22-2004" VDK_VERSION=$VDK_VERSION_MAJOR.$VDK_VERSION_MINOR.$VDK_VERSION_MICRO LT_VDK_RELEASE=$VDK_VERSION_MAJOR.$VDK_VERSION_MINOR LT_VDK_CURRENT=`expr $VDK_VERSION_MAJOR + $VDK_VERSION_MINOR` LT_VDK_REVISION=$VDK_VERSION_MICRO LT_VDK_AGE=$VDK_VERSION_MINOR VERSION=$VDK_VERSION PACKAGE=vdk am__api_version="1.7" 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 { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # 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" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$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' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # 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". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}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 $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } 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=$PACKAGE VERSION=$VERSION 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"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-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 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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 echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out 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. echo "$as_me:$LINENO: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; 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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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; } 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 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 : > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 # (even with -Werror). So we grep stderr for any message # that says an option was ignored. if grep 'ignoring option' 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 echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED fi echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin* | mingw* | pw32*) # win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='win32_libid' ;; darwin* | rhapsody*) # this will be overwritten by pass_all, but leave it in just in case lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' lt_cv_file_magic_cmd='/usr/bin/file -L' case "$host_os" in rhapsody* | darwin1.[012]) lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System` ;; *) # Darwin 1.3 on lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' ;; esac lt_cv_deplibs_check_method=pass_all ;; freebsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $host_os in irix5* | nonstopux*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" ;; esac lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) case $host_cpu in alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh* | x86_64*) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' lt_cv_file_magic_test_file=/shlib/libc.so lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_test_file=/lib/libc.so ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 3563 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac need_locks="$enable_libtool_lock" 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 echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } 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 echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f 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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* 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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF 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=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi 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 : > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 # (even with -Werror). So we grep stderr for any message # that says an option was ignored. if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fl32 af77 fort77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fl32 af77 fort77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:5060:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } # If we don't use `.F' as extension, the preprocessor is not run on the # input file. ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext G77=`test $ac_compiler_gnu = yes && echo yes` ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "$G77" = yes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "$G77" = yes; then FFLAGS="-O2" else FFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 testring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$testring" 2>/dev/null` \ = "XX$testring") >/dev/null 2>&1 && new_result=`expr "X$testring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` testring=$testring$testring done testring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris* | sysv5*) symcode='[BDRT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # # Check for any special shared library compilation flags. # lt_prog_cc_shlib= if test "$GCC" = no; then case $host_os in sco3.2v5*) lt_prog_cc_shlib='-belf' ;; esac fi if test -n "$lt_prog_cc_shlib"; then { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_prog_compiler_static" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6065: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:6069: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $CC in icc|ecc) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; ccc) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic='-Kpic' lt_prog_compiler_static='-dn' ;; solaris*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6297: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:6301: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6364: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:6368: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; linux*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds="$tmp_archive_cmds" fi else ld_shlibs=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec=' ' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=no hardcode_shlibpath_var=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no hardcode_shlibpath_var=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var " || \ test "X$hardcode_automatic"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' # Find out which ABI we are using (multilib Linux x86_64 hack). libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) echo '#line 7729 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *64-bit*) libsuff=64 ;; esac fi rm -rf conftest* ;; *) ;; esac sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which librarie types wil actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 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 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. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_CXX=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX=' ' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc_CXX=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_CXX='-flat_namespace -undefined suppress' ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='-all_load $convenience' link_all_deplibs_CXX=yes fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd12*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_CXX='+b $libdir' hardcode_libdir_separator_CXX=: ;; ia64*) hardcode_libdir_flag_spec_CXX='-L$libdir' ;; *) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes archive_cmds_need_lc_CXX=no archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sco*) archive_cmds_need_lc_CXX=no case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.0-5 | solaris2.0-5.*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) archive_cmds_need_lc_CXX=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) lt_prog_compiler_pic_CXX='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:10655: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:10659: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:10722: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:10726: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var CXX" || \ test "X$hardcode_automatic_CXX"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' # Find out which ABI we are using (multilib Linux x86_64 hack). libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) echo '#line 11293 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *64-bit*) libsuff=64 ;; esac fi rm -rf conftest* ;; *) ;; esac sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) test "$enable_shared" = yes && enable_static=no ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $CC in icc|ecc) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; ccc) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_F77='-Kpic' lt_prog_compiler_static_F77='-dn' ;; solaris*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12909: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:12913: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12976: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:12980: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; linux*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_F77="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_F77="$tmp_archive_cmds" fi else ld_shlibs_F77=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_F77=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77=' ' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi4*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc_F77=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_F77='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_F77='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='-all_load $convenience' link_all_deplibs_F77=yes fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; ia64*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; *) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; sco3.2v5*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4.2uw2*) archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_F77='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv5*) no_undefined_flag_F77=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_F77= hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var F77" || \ test "X$hardcode_automatic_F77"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' # Find out which ABI we are using (multilib Linux x86_64 hack). libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) echo '#line 14319 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *64-bit*) libsuff=64 ;; esac fi rm -rf conftest* ;; *) ;; esac sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14965: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14969: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $CC in icc|ecc) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; ccc) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_GCJ='-Kpic' lt_prog_compiler_static_GCJ='-dn' ;; solaris*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15197: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:15201: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15264: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:15268: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; linux*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_GCJ="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_GCJ="$tmp_archive_cmds" fi else ld_shlibs_GCJ=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_GCJ=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ=' ' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi4*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then archive_cmds_need_lc_GCJ=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_GCJ='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='-all_load $convenience' link_all_deplibs_GCJ=yes fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; ia64*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; *) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; sco3.2v5*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4.2uw2*) archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_GCJ='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv5*) no_undefined_flag_GCJ=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_GCJ= hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var GCJ" || \ test "X$hardcode_automatic_GCJ"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' # Find out which ABI we are using (multilib Linux x86_64 hack). libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) echo '#line 16629 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *64-bit*) libsuff=64 ;; esac fi rm -rf conftest* ;; *) ;; esac sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi; echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi 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 : > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 # (even with -Werror). So we grep stderr for any message # that says an option was ignored. if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_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 >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$PKG_CONFIG = xno ; then { { echo "$as_me:$LINENO: error: *** pkg-config not found. See http://pkgconfig.sourceforge.net" >&5 echo "$as_me: error: *** pkg-config not found. See http://pkgconfig.sourceforge.net" >&2;} { (exit 1); exit 1; }; } fi if ! pkg-config --atleast-pkgconfig-version 0.8 ; then { { echo "$as_me:$LINENO: error: *** pkg-config too old; version 0.8 or better required." >&5 echo "$as_me: error: *** pkg-config too old; version 0.8 or better required." >&2;} { (exit 1); exit 1; }; } fi echo "checking if an updated version of gtk+ is installed" if $PKG_CONFIG --atleast-version 2.4.0 gtk+-2.0 ; then GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0` GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0` GTK_DEPLIBS=$GTK_LIBS echo " gtk+ version:" `pkg-config gtk+-2.0 --modversion` else { { echo "$as_me:$LINENO: error: *** GTK+ 2.4.0 or newer is required. The latest version of GTK *** is available from http://gtk.org/ *** or get latest cvs at http://gnome.org: " >&5 echo "$as_me: error: *** GTK+ 2.4.0 or newer is required. The latest version of GTK *** is available from http://gtk.org/ *** or get latest cvs at http://gnome.org: " >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking if C++ compiler supports bool (required)" >&5 echo $ECHO_N "checking if C++ compiler supports bool (required)... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { bool b=true; bool b1=false; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_bool=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 config_error=yes { echo "$as_me:$LINENO: WARNING: bool type is not supported by your compiler" >&5 echo "$as_me: WARNING: bool type is not supported by your compiler" >&2;} fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_bool" >&5 echo "${ECHO_T}$ac_bool" >&6 echo "$as_me:$LINENO: checking if C++ compiler supports templates well enough (required)" >&5 echo $ECHO_N "checking if C++ compiler supports templates well enough (required)... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ class foo { public: int a(float,int,int,foo*,foo**) { return 0; } }; template class k { public: rettype (T::*method)(P1,P2,P3,P4,P5); }; int main () { k a; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_vdk_template_support_well=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_vdk_template_support_well=no config_error=yes { echo "$as_me:$LINENO: WARNING: your C++ compiler does not support templates well enough" >&5 echo "$as_me: WARNING: your C++ compiler does not support templates well enough" >&2;} fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_vdk_template_support_well" >&5 echo "${ECHO_T}$ac_vdk_template_support_well" >&6 echo "$as_me:$LINENO: checking if C++ environment has working auto_ptr<>" >&5 echo $ECHO_N "checking if C++ environment has working auto_ptr<>... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { std::auto_ptr a; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then vdk_autoptr_ok=yes cat >>confdefs.h <<\_ACEOF #define HAVE_AUTO_PTR 1 _ACEOF else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 vdk_autoptr_ok=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $vdk_autoptr_ok" >&5 echo "${ECHO_T}$vdk_autoptr_ok" >&6 echo "$as_me:$LINENO: checking if C++ environment has working string class (required)" >&5 echo $ECHO_N "checking if C++ environment has working string class (required)... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include using namespace std; class foo { public: void f(const string &s); }; void foo::f(const string &s) { f(s.c_str()); } int main () { foo f1; f1.f("test"); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then vdk_string_ok=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 vdk_string_ok=no config_error=yes { echo "$as_me:$LINENO: WARNING: C++ compilers string support does not work" >&5 echo "$as_me: WARNING: C++ compilers string support does not work" >&2;} fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext echo "$as_me:$LINENO: result: $vdk_string_ok" >&5 echo "${ECHO_T}$vdk_string_ok" >&6 echo "$as_me:$LINENO: checking if C++ environment provides all required features" >&5 echo $ECHO_N "checking if C++ environment provides all required features... $ECHO_C" >&6 if test "x$config_error" = xyes ; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 { { echo "$as_me:$LINENO: error: Your compiler is not powerful enough to compile VDK. If it should be, see config.log for more information of why it failed." >&5 echo "$as_me: error: Your compiler is not powerful enough to compile VDK. If it should be, see config.log for more information of why it failed." >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 # Extract the first word of "doxygen", so it can be a program name with args. set dummy doxygen; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_DOXYGEN+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $DOXYGEN in [\\/]* | ?:[\\/]*) ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi DOXYGEN=$ac_cv_path_DOXYGEN if test -n "$DOXYGEN"; then echo "$as_me:$LINENO: result: $DOXYGEN" >&5 echo "${ECHO_T}$DOXYGEN" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PERL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then echo "$as_me:$LINENO: result: $PERL" >&5 echo "${ECHO_T}$PERL" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ac_config_headers="$ac_config_headers config.h" # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" else enable_debug=no fi; # Check whether --enable-opt or --disable-opt was given. if test "${enable_opt+set}" = set; then enableval="$enable_opt" else enable_opt=2 fi; # Check whether --enable-testvdk or --disable-testvdk was given. if test "${enable_testvdk+set}" = set; then enableval="$enable_testvdk" else enable_testvdk=yes fi; #AC_ARG_ENABLE(sigc, [ --enable-sigc=[yes/no] Enable libsigc++-extension [default=no]],,enable_sigc=no) #AC_ARG_ENABLE(testsigc, [ --enable-testsigc=[yes/no] Compile testsigcvdk program [default=no]],,enable_testsigc=no) # Check whether --enable-doc-html or --disable-doc-html was given. if test "${enable_doc_html+set}" = set; then enableval="$enable_doc_html" else enable_doc_html=yes fi; # Check whether --enable-doc-latex or --disable-doc-latex was given. if test "${enable_doc_latex+set}" = set; then enableval="$enable_doc_latex" else enable_doc_latex=no fi; # Check whether --enable-doc-man or --disable-doc-man was given. if test "${enable_doc_man+set}" = set; then enableval="$enable_doc_man" else enable_doc_man=no fi; if test "x$enable_debug" = "xminimum"; then cat >>confdefs.h <<\_ACEOF #define VDKDEBUG 1 _ACEOF CXXFLAGS="-s" else if test "x$enable_debug" = "xyes"; then cat >>confdefs.h <<\_ACEOF #define VDKDEBUG 1 _ACEOF CXXFLAGS="-g" else CXXFLAGS="-s" fi fi if test "x$enable_opt" != "xno"; then CXXFLAGS="$CXXFLAGS -O$enable_opt" fi if test "x$enable_testvdk" = "xyes"; then TESTVDK="testvdk" else TESTVDK="" fi #dnl anyhow we have to add -lpthread #if test "x$enable_sigc" = "xyes" && test "$SIGC_LIBS"!=""; then #dnl earlier versions of libsigc++ might also work (>= 0.85) # AM_PATH_SIGC(1.0.0,, # AC_MSG_WARN(Couldn't find libgsigc++ VDK will be build without it)) # LIBS="$LIBS $SIGC_LIBS" # CFLAGS="$CFLAGS $SIGC_CFLAGS" # CXXFLAGS="$CXXFLAGS $SIGC_CFLAGS" # SIGCDEFINE="-DUSE_SIGCPLUSPLUS" # WITHSIGC="yes" #else # SIGCDEFINE="" # SIGC_CFLAGS="" # SIGC_LIBS="-lpthread" # WITHSIGC="no" #fi #if test "x$enable_testsigc" = "xyes" && test "$SIGCDEFINE" != ""; then # TESTSIGCVDK="testsigcvdk" # WITHTESTSIGCVDK="yes" #else # TESTSIGCVDK="" # WITHTESTSIGCVDK="no" #fi #AC_SUBST(TESTSIGCVDK) #------------------------- # to hide sigc implementation # subst all above with this LIBS="$LIBS -lpthread" SIGCDEFINE="" SIGC_CFLAGS="" SIGC_LIBS="-lpthread" WITHSIGC="no" TESTSIGCVDK="" WITHTESTSIGCVDK="no" #-------------------------- # doxygen support if test "x$enable_doc_html" = "xyes"; then GENERATE_HTML=YES # TAG_SIGC=USE_SIGCPLUSPLUS TAG_SIGC="" else GENERATE_HTML=NO TAG_SIGC="" fi if test "x$enable_devel" = "xyes"; then cflag="-g" fi if test "x$enable_doc_latex" = "xyes"; then GENERATE_LATEX=YES # TAG_SIGC=USE_SIGCPLUSPLUS else GENERATE_LATEX=NO fi if test "x$enable_doc_man" = "xyes"; then GENERATE_MAN=YES # TAG_SIGC=USE_SIGCPLUSPLUS else GENERATE_MAN=NO fi GNOMEDEFINE="" GNOME_CFLAGS="" GNOME_LIBS="" GNOME_VDK="" # just to be fully gtk2.x compliant... dnlCXXFLAGS="$CXXFLAGS -DGTK_DISABLE_DEPRECATED -Wall -Wcast-qual -Woverloaded-virtual -Wconversion -Wstrict-prototypes -Winline" CXXFLAGS="$CXXFLAGS -Wall -Wcast-qual -Woverloaded-virtual -Wconversion -Wstrict-prototypes -Winline" INCLUDES="$GTK_CFLAGS $SIGC_CFLAGS $SIGCDEFINE" ac_config_files="$ac_config_files Makefile vdk/Makefile vdk/vdkfeatures.h testvdk/Makefile sigcvdktest/Makefile example/Makefile doc/Makefile doc/doxy/Makefile doc/doxy/Doxyfile vdk-2.m4 vdk-config-2" ac_config_commands="$ac_config_commands default" 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $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} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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 # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --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_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "vdk/Makefile" ) CONFIG_FILES="$CONFIG_FILES vdk/Makefile" ;; "vdk/vdkfeatures.h" ) CONFIG_FILES="$CONFIG_FILES vdk/vdkfeatures.h" ;; "testvdk/Makefile" ) CONFIG_FILES="$CONFIG_FILES testvdk/Makefile" ;; "sigcvdktest/Makefile" ) CONFIG_FILES="$CONFIG_FILES sigcvdktest/Makefile" ;; "example/Makefile" ) CONFIG_FILES="$CONFIG_FILES example/Makefile" ;; "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/doxy/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/doxy/Makefile" ;; "doc/doxy/Doxyfile" ) CONFIG_FILES="$CONFIG_FILES doc/doxy/Doxyfile" ;; "vdk-2.m4" ) CONFIG_FILES="$CONFIG_FILES vdk-2.m4" ;; "vdk-config-2" ) CONFIG_FILES="$CONFIG_FILES vdk-config-2" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; 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 to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@VDK_VERSION_MAJOR@,$VDK_VERSION_MAJOR,;t t s,@VDK_VERSION_MINOR@,$VDK_VERSION_MINOR,;t t s,@VDK_VERSION_MICRO@,$VDK_VERSION_MICRO,;t t s,@VDK_VERSION@,$VDK_VERSION,;t t s,@VDK_RELEASE_DATE@,$VDK_RELEASE_DATE,;t t s,@LT_VDK_RELEASE@,$LT_VDK_RELEASE,;t t s,@LT_VDK_CURRENT@,$LT_VDK_CURRENT,;t t s,@LT_VDK_REVISION@,$LT_VDK_REVISION,;t t s,@LT_VDK_AGE@,$LT_VDK_AGE,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@AMTAR@,$AMTAR,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t s,@MAINT@,$MAINT,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t s,@GTK_LIBS@,$GTK_LIBS,;t t s,@DOXYGEN@,$DOXYGEN,;t t s,@PERL@,$PERL,;t t s,@TESTVDK@,$TESTVDK,;t t s,@SIGC_CFLAGS@,$SIGC_CFLAGS,;t t s,@SIGC_LIBS@,$SIGC_LIBS,;t t s,@SIGCDEFINE@,$SIGCDEFINE,;t t s,@TESTSIGCVDK@,$TESTSIGCVDK,;t t s,@GENERATE_HTML@,$GENERATE_HTML,;t t s,@GENERATE_LATEX@,$GENERATE_LATEX,;t t s,@GENERATE_MAN@,$GENERATE_MAN,;t t s,@TAG_SIGC@,$TAG_SIGC,;t t s,@GNOMEDEFINE@,$GNOMEDEFINE,;t t s,@GNOME_LIBS@,$GNOME_LIBS,;t t s,@GNOME_CFLAGS@,$GNOME_CFLAGS,;t t s,@GNOME_VDK@,$GNOME_VDK,;t t s,@INCLUDES@,$INCLUDES,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #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. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # 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. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || 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 grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # 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 -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //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=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; default ) \ chmod +x vdk-config-2 ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # 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 || { (exit 1); exit 1; } fi if test -z $DOXYGEN; then echo "*****************************************************"; echo "* doxygen was not found, i will not be able to *"; echo "* generate the docs by myself. *"; echo "* Doxygen is recommended, please check: *"; echo "* http://www.doxygen.org/download.html *"; echo "* for the latest version of doxygen. *"; echo "*****************************************************"; WITHDOCHTML="no" else WITHDOCHTML="yes" fi echo "" echo "VDK configure finished" echo "VDK configuration:" echo " - Version : $VERSION" echo " - Make static lib : $enable_static" echo " - Make vdk test program : $enable_testvdk" echo " - Libsigc++ signal extension support: $WITHSIGC" echo " - Make signal extension test program: $WITHTESTSIGCVDK" if test "x$WITHSIGC" = "xyes"; then echo "**************************************************************" echo "You have choosed to use Libsigc++ with VDK which is" echo "deprecated and will be unsupported in the near future" echo "**************************************************************" fi echo " - Gnome support : $WITHGNOME" echo " - Debug : $enable_debug" echo " - Optimization : $enable_opt" echo " - Make docs on html format : $WITHDOCHTML" echo " * Host : $host" echo " * Installation Prefix : $prefix" echo " * Compiler version :" `g++ --version` echo " * Target machine :" `c++ -dumpmachine` #echo " * CPU :" `cat /proc/cpuinfo` vdk-2.4.0/AUTHORS0000644000000000000000000000172307424257565007023 ORIGINAL AUTHOR ---------------- Mario Motta In alphabetical order: DEVELOPING TEAM (in alphabetic order) --------------- Ionut Borcoman George Boutwell Mile Lazarovski Tim Lorenz Pierre-Louis Malatray Mario Motta CONTRIBUTORS: -------------- Laurent Cooper Russell Berry Adrian Feiguin Dave Freese Qiang Fu Matias Griese Veros Kaplan Tamas Kohegyi Jonathan Hudson J. Patrick Narkinsky Raffaele Salmaso Eric T. Wienke vdk-2.4.0/COPYING0000644000000000000000000006131407206651660007000 GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! vdk-2.4.0/ChangeLog0000644000000000000000000013115310052333305007500 185/05/2004 Mario Motta * renamed version 2.4.0 * vdk 2.4.0 released 03/10/05 Mario Motta * release candidate test passed 03/29/04 Mario Motta * testvdk/testvdk.cc Added examples for VDKComboEntry 03/28/04 Mario Motta NEW * vdkcomboentry.cc/.h --- New VDKComboEntry widget that wraps GtkComboBox with entry. 03/25/04 Mario Motta NEW * entry.cc/.h --- Added word completion support to entry widget 03/23/04 Mario Motta * recompiled under gtk+ 2.4.0 NEW * vdkfilechooser.cc/.h --- new VDKFileChooser class, wraps new GtkFileChooser widget. 03/06/04 Mario Motta * versioning to 2.0.4 * this version made to mantain full compatibility with winvdk porting under windows. 02/03/04 Mario Motta BUG FIX * image.cc ------- Fixed a bug related to SetImage(NULL); * vdkdate.cc /.h MakeDate(char* s, int mode = mmddyyy) Added argument to build date both in english (mmddyyyy) or european (ddmmyyyy) format 24/02/04 Mario Motta CODE BREAK !!! -------------- * vdktypes.h/application.h/.cc Due to a name clush with Windows following symbolic constants have been redefined: old ==> new MB_ICONSTOP VDK_ICONSTOP MB_ICONWARNING VDK_ICONWARNING MB_ICONQUESTION VDK_ICONQUESTION MB_ICONINFORMATION VDK_ICONINFORMATION MB_ICONERROR VDK_ICONERROR MB_ICONMASK VDK_ICONMASK MB_OK VDK_OK MB_YESNO VDK_YESNO MB_OKCANCEL VDK_OKCANCEL MB_TYPEMASK VDK_TYPEMASK IDYES VDK_IDYES IDNO VDK_IDNO IDOK VDK_IDOK IDCANCEL VDK_IDCANCEL * also VDKApplication::MessageBox() has been redeclared as VDKApplication::VDKMessageBox() 2003-06-05 Motta Mario FIX * numentry.cc --- Fixed a bug that denied any key typing into this widget Bug reported by Michael Vogt , Debian maintainer 2003-05-19 Motta Mario *** version 2.0.3 released *** 2003-05-11 Motta Mario FIX * vdk/Makefile.am fixed a incompatibility with newest automake. --- * Entire library recompiled under Mandrake 9.1 with gcc 3.2.2 2003-02-15 Motta Mario NEW * vdktreeview.cc .h --- Enhanced VDKTreeViewIter class, now given a VDKTreeViewIter you can know parent and childs if any.. (Suggested by P. Malatray) 2003-01-23 Motta Mario * VDKTextView and VDKEditor updated with latest cvs version of gtksourceview NEW * VDKHLButton widget, (HL stands for HighLighted) it behaves like --- Mozilla buttons that highlight when mouse cursor is over NEW * VDKHLButtonBar new widget, a toolbar to accomodate a set VDKHLButtons --- Both widgets API left unchanged as in parents. NEW * VDKDataBox, restored Roland widget wrapper for gtk 2.x --- 2003-01-22 Motta Mario ** versioning to 2.0.3 2003-01-13 Motta Mario ** many fixes to compile in gcc 3.2 Huge commit on CVS 2002-05-30 Motta Mario *** version 2.0.2 released *** 2002-05-29 Motta Mario NEW * vdkeditor.cc --- VDKEditor now operates on new gtksourceview widget 2002-05-25 Motta Mario BUG FIX Minor bug fixes related to gcc version 3.1.0 ------ Bugs reported by Otmar Struwe 2002-05-13 Motta Mario BUG FIX * vdktextview.cc ------- Fixed a bug into SaveToFile() that wrote a char less than real lenght of the text buffer. 2002-05-09 Motta Mario BUG FIX * vdktextview.cc - vdkeditor.cc ------- Fixed Changed property that was buggy 2002-05-02 Motta Mario * vdktreeview.cc /.h CODE Changed VDKTreeViewModel API, many methods such as AppendBlank(), Root(), Next() BREAK now requires an iter address as first argument. ---- * vdktreeview.cc VDKTreeViewModel::Find() rewritten in a recursive way. Now works properly. * testdvdk/treeviewcompo.cc rewritten due to API changes. 2002-04-10 Motta Mario * versioning to 2.0.2 NEW * Added a VDKDockerBox widget that provides a box that can be detached from his container --- and attached (docked) into a separate form. Sources in vdkdockable.h/.cc 2002-04-04 Motta Mario * vdk-2.m4.in changed to fix a bug in aclocal. Changed all "dnl" comments to "##" see http://sources.redhat.com/ml/bug-automake/2000/msg00191.html Bug reported by Michael Vogt 2002-03-29 Motta Mario *** VDK 2.0.1 released *** 2002-03-26 Motta Mario BUG * image.cc FIX Fixed a bug that returned WrappedWidget() always NULL. --- 2002-03-19 Motta Mario Version renamed to 2.0.1 for further develop and bug fixes. 2002-03-13 Motta Mario *** VDK 2.0.0 RELEASED *** 2002-03-08 Motta Mario * written an example of VDKDrawArea usage into ./testvdk 2002-03-05 Motta Mario NEW Added new widget: VDKDrawingArea that should substitute deprecated VDKCanvas. ___ However VDKcanvas isn't really deprecated, it will continue to be supported even if not more enhanced. Simply VDKDrawingArea is a better widget, much powerfull and easy to use. VDKDrawingArea is contained into vdkdrawarea.h/.cc files. 2002-02-20 Motta Mario * canvas.cc .h Overridden VDKCanvas::SetFont() that now uses its own font (or default one if not set). This removes an old problem with canvas setting font into an expose_event response function: VDKcanvas::SetFont() used VDKObject::SetFont() that modifies widget style triggering an expose_event and an infinite loop if used into an expose_event response function. Now resolved using font explicitely without interesting widget style. 2002-02-12 Motta Mario CODE * canvas.cc .h BREAK Made an huge clean up of received events. ---- Now events on canvas must be handled with dynamic signals table. Removed some properties: - Captured - EnableDrag 2002-01-19 Motta Mario NEW * Added VDKCalendar widget, wraps GtkCalendar (vdkcalendar.cc /.h) --- Moved from builder plugins into vdk core library. 2002-01-17 Motta Mario * vdktreeview.cc/.h Improuved VDKTreeView API 2001-12-31 Motta Mario * vdk/vdktreeview.cc /.h - Added a VDKTreeViewModel iterator API - Added new properties and methods to VDKTreeView API * testvdk/treeviewcompo.cc * Changed to reflect API changes 2001-12-29 Motta Mario NEW * scrolled.cc/.h --- Added BorderShadow property to VDKScrolled class 2001-12-23 Motta Mario NEW * value_sem_list.h / dlist.h --- Added: -- decremental operator (both infix and postfix) - first(),last() operators. To VDKValueListIterator<> and VDKListIterator<> template classes 2001-12-17 Motta Mario NEW * vdktreeview.cc .h --- Added VDKTreeView class and companions. This class wraps GtkTreeView widget. (incomplete) 2001-12-07 Motta Mario CODE * vdkprops.h BREAK Changed prop value internal assignement made after have calling ----- setting function. In other words setting function finds prop value at old value when called. This avoid a subtle bug when is necessary to operate on old prop value into the setting function. *** Raw setting function calls are now deprecated. *** 2001-09-28 Motta Mario NEW * Added VDKInputChannel class --- Thanks to Jonathan Hudson . 2001-08-22 Motta Mario CODE * vdkcustom.cc BREAK SelectedForeground,Unselectedbackground,UnselectedForeground properties ----- are now of VDKRgb type to mantain consistency with others color props. 2001-08-15 Tim Lorenz * Trivial Changes to let sigc-extension work with libsigc++-1.0.3 under gcc-3.0 * configure.in: Added AC_PREREQ(2.50) 2001-08-15 Motta Mario BUG FIX * VDKCustom.cc/.h ------ Get rid of SelectedBackground property since it conflicts with VDKObject::SelectedBackground. Modified overridden SetBackGround * testvdk/testvdk.cc Modified to reflect above changes. (Bug reported by Tim) 2001-08-14 Motta Mario BUG * siglisthandle.h /evlisthandle.h FIX Got ride of VDKString in VDK dynamic signal tables. --- (probably) due to a gcc 2.96.x compiler weirdness on const we experienced obscure seg faults during signal table scan. VDKString _VDK_Signal_Unit.signal and _VDK_Event_Unit.event substituted with a plain char[]. Sigh :-( 2001-08-11 Motta Mario BUG * vdkclist.cc vdkctree.cc FIX Correctly initialized sigwid with gtk+ widget. This bug --- didn't correctly SignalConnect() under some circustances. 2001-07-27 Motta Mario NEW * Added VDKThread class, a simple wrapper on posix threads. ___ Thanks to Salmaso Raffaele that did it on 1999. 2001-07-04 Motta Mario * vdk updated to latest cvs (gtk+ 1.3.7) * forms.cc GetPosition() changed to use gdk_window_root_origin() to fix a coordinate error. 2001-05-29 Tim Lorenz The Long Story of Constness: * vdk/vdkeditor.h (VDKEditor::MakeCompletition): made arg const * vdk/vdkedtior.cc (overlap): second arg is const now * vdk/vdkclist.h (class VDKCustomList::_update_pix): consted (SelectionProp::Row): and (Selection::Col): are const methods now. (VDKCustomList::UpdateCell): arg s ist const-pointer now. * vdk/vdkcsortlist.h (VDKCustomSortedList::FindKey): (VDKCustomSortedList::RemoveKey): (VDKCustomSortedList::UpdateCellKey): (VDKCustomSortedList::UpdateKey): The key argument is declared const now (as passed to VDKString-Ctor) I did some more const changes but did not list them. Made type-converter operator of VDKRWProp a const method. 2001-05-28 Tim Lorenz Tales about const * testvdk/edcompo.cc: (ToggledSource): also operate on const pointer arg (just to be nice). Fixed mem. leak in abortive return (use of std::string would make life easier ;-) (EditorComponent::HasPage): add const qual. to local var. 'fn' * vdk/notebook.h (class VDKNotebook::AddPage): consted one arg * vdk/vdkcustombutton.h (VDKCustomButton::SetCaption): (VDKCustomButton::GetCaption): made string a const char* pointer (VDKCustomButton::Caption): 'value_type' now const char* (VDKCustomButton::VDKCustomButton()): label-arg is a const-pointer now * vdk/label.h (VDKLabel::Caption): set second tpl. arg. to const char* -> VDKRWProp (VDKLabel::VDKLabel): made label-argument const (VDKLabel::SetCaption): made argument a const pointer (VDKLabel::GetCaption): made return-value a const-pointer * vdk/notebook.h (VDKNotebook::AddPage): (VDKPage::AddPage): added const-qualifier to signatur -> AddPage(VDKObj*, const char*, * testvdk/edcompo.cc: * vdk/siglisthandle.h: add #include and thus use of namespace 2001-05-25 Tim Lorenz * several: Changed to include c++-versions of c-headers (like cstring instead of string.h). This step requires a compiler with proper handling of namespaces, gcc-2.95.3 and gcc-3.0 can handle this. Affected files: vdk/vdktextview.cc vdk/vdkdate.cc vdk/vdkcolorbrowser.cc vdk/text.cc vdk/rawobj.cc vdk/pixmaps.cc vdk/image.cc vdk/vdkprops.h vdk/vdkregex.h vdk/vdkstring.cc vdk/vdkfont.cc vdk/vdkeditor.cc vdk/vdkctree.cc vdk/vdkcsortlist.cc vdk/vdkclist.cc vdk/tooltips.cc vdk/rawpixmap.cc vdk/rawpixbuf.cc vdk/radiobtngroup.cc vdk/filedlg.cc vdk/combo.cc vdk/chart.cc vdk/FileDialog.cc vdk/messagebox.cc vdk/numentry.cc: * vdk/label.cc: * vdk/evhandle.h: added #include * testvdk/testvdk.cc: converted multi-line string to multi string lines 2001-05-25 Motta Mario * dummy commit 2001-05-22 Motta Mario * entry.cc Modified SetText() to make it utf8 compliant. 2001-05-14 Tim Lorenz CLEANUP: * vdk/vdkcustom.cc (VDKObject::make_gtksigc_connection): removed (no more needed here, see below)(affected files: several ;-) * vdk/vdkobj.cc: Removed deprecated Signals: OnKeyPress, OnKeyRelease * vdk/vdk.h: removed #include GCC-3.0: Begun to add support for gcc-3.0 * added #include to several files (needed for gcc 3.0) * configure.in: Added namespace to string and auto_ptr test (needed for gcc-3.0) * vdk/checkbutton.cc (SetForeground): added explicit cast (needed for gcc-3.0) same in vdk/spins.cc (SetForeground) and (SetBackground) * vdk/evhandle.h (ON_EVENT): removed g++-3.0 irritating prenthesis 2001-05-06 Motta Mario CODE BREAK -------- * toolbar.cc/.h VDKToolbar properties: - Relief - Spacing - SpaceStyle are now themeable properties out of programmer control. Therefore even if mantained as void properties for backward compatibility, their use is deprecated and will be completely removed in future versions. - VDKToolbar::Borderless property, even if deprecated, is mantained operative. However his setting may be overridden changing themes. * menus.cc/.h VDKMenubar::Shadow property is now themeable, so above considerations apply as well. 2001-04-25 Motta Mario CODE BREAK --------- * Removed gtkpacker widget wrapper 2001-04-10 Motta Mario * Gtk+ patched at line 2539 of gtkdnd.c: Event handler set to return always FALSE otherwise many widgets became insensitive. This gtk+ bug showed a more general and serious bug: returning TRUE from an event handler often blocks any further event propagation also in separated connections. This bug happened recently on cvs snapshot and 1.3.3 release. Previous snapshots and releases didn't show this error. Mailed a msg to gtk-list and made a report to bugzilla. * Changed all event handlers on vdk to return FALSE, this fixed many weird bugs and behaviours. 2001-03-28 Motta Mario * VDKEditor.cc Added ctrl-1 as word completion keystroke. (ctrl-tab conflicts with kde defaults) 2001-03-24 Motta Mario CODE BREAK --------- REMOVED * removed deprecated VDKLabelButton and VDKPixmapButton, ------- these widgets are substitued by VDKCustomButton 2001-03-04 Motta Mario NEW * VDKPixmap (deprecated) --- Added a bool sensitive arg to constructors (defaults to false), if true pixmap will be embedded into an event box, in a normal box otherwise. Not sensitive means that the widget won't react to any signal. Tips: - in insensitive mode an user that wants pixmap receiving signals should embedd explicitely this widget into a VDKEventBox and connect signals to this one instead pixmap directly. Tip: in insensitive mode to set a tip to a pixmap, embedd it into an event box and set the tip to the event box instead. * VDKImage Same as above. NEW * VDKCustomButton --- VDKPixmap (deprecated) substituted with a VDKImage. * VDKLabelButton and VDKPixmapButton marked as deprecated, will be cut on first vdk2 release. 2001-03-01 Motta Mario * vdkeditor Modified SaveToFile() to avoid that 0xFFFC char that is used as image placeholder. 2001-02-28 Motta Mario * combo.cc/.h Same as below for entry part of combobox widget. 2001-02-27 Motta Mario * entry.cc/.h Added a data member "buffer" as VDKString. Deprecated gtk_entry_get_text() not more used to get Text property, instead is used gtk_editable_get_chars() that loads buffer. Getting entry->Text property now returns (char*) buffer. ** WARNING ** Accessing to internal VDKString buffer violates OOP data hiding concept, user should make a copy of the returned buffer before make any modification. i.e. VDKString my_own_buffer = entry->Text; // safely modify: my_own_buffer += "tail"; entry->Text = my_own_buffer; // is safe however 2001-02-16 Motta Mario * vdkobj.cc Changed static void VDKObject::VDKEventPipe() static void VDKObject::VDKEventUnitPipe() to static int VDKObject::VDKEventPipe() static int VDKObject::VDKEventUnitPipe() as should be. 2001-02-15 Motta Mario NEW * vdk/notebook.cc,.h --- Added a Child() function member to TabPage object that accesses to the object contained into a page. Usage: notebook->Pages[x]->Child() WARNING: since this method could break data hiding concept user should avoid manipulating received address or make it at his own risk. 2001-02-14 Motta Mario * Added more examples to testvdk program. 2001-02-12 Motta Mario * VDK 2.0 NOW BASED ON GTK CVS SNAPSHOTS ---------------------------------------- To closely track gtk 2.0 developing now vdk 2.0 is based on latest glib/pango/gtk+ cvs snapshot. Actually vdk 2.0 does not compile in gtk 1.3.2 and requires latest cvs snapshot. Gnome cvs instructions: a. first download $ export CVSROOT=':pserver:anonymous@anoncvs.gnome.org:/cvs/gnome' $ cvs login (there is no password, just hit return) $ cvs -z3 checkout glib pango gtk+ b. after initial checkout: $ cvs -z3 update glib pango gtk+ 2001-02-12 Motta Mario * Added: vdk/vdkeditor.h vdk/vdkeditor.cc testvdk/tokens.db NEW Implemented a nice source editor wrapping Mike Hamerson gtksourceview 0.0.2 WIDGET (still on alpha), with syntax hilighting and other nice feautures ----- such as word completion (ctrl-tab) , parent matching, etc. See testvdk.cc CODE * VDKText widget not more supported and removed from cvs tree, BREAK VDKTextView will replace removed widget. ----- 2001-02-11 Motta Mario * vdkobj.cc VDKObject::Destroy() revisited and hopefully simplified. 2001-02-04 Motta Mario * Added: vdk/rawpixbuf.h vdk/rwapixbuf.cc vdk/image.h vdk/image.cc testvdk/vitrurian.png NEW * New widgets: WIDGET - VDKRawPixbuf, wrapper of GdkPixbuff, should substitute VDKRawPixmap now deprecated ------ (more flexible since supports several graph file formats) NEW - VDKImage, wrapper of GtkImage should substitute VDKPixmap now deprecated WIDGET (more flexible since supports several graph file formats) ------ * Changed testvdk to support VDKImage test. 2001-01-24 Motta Mario * Added: vdk/vdktextview.h vdk/vdktextview.cc (wrapper of GtkTextView) NEW Implemented VDKTextView a gtktextview wrapper that would substitute WIDGET deprecated and buggy VDKText. ----- 2001-01-02 Motta Mario BUG * gboolean window_is_iconified (GdkWindow *window) (forms.cc) FIX now work properly. --- 2000-12-24 Motta Mario * dummy commit, cvs transferred to new amd athlon machine 2000-12-09 Motta Mario NEW * VDKTimer --- Added a "TickTime" property that permits to change timer granularity on the fly. Suggested by a request from: wslu 2000-12-05 Motta Mario NEW * application.cc --- VDKApplication::MessageBox() now uses default gtk+ dialogs. Api unchanged, some features extended with new modal modes. (see application.h) * canvas.cc Modified DrawString() and DrawText() to new font (pango) stuff. * chart.cc Modified text drawing for the same reasons as above. 2000-11-29 Motta Mario BUG * forms.cc --- gboolean window_is_iconified (GdkWindow *window) disabled for now, returning always false. 2000-11-28 Tim Lorenz * sigcvdktest added directory, contains old test-programm and new one: props_test.cc (see below). NEW * vdk/vdkprops.h : Added a signal to property for notification --- of property-changes. see next entry. Fixed Value: now returns the value as type S (not T as before). Furthermore Value is const now (pointer-types are automatically casted to const, someone should prove it with gcc < 2.95.2, see test-programm). * vdk/sigc_addon.h: introduced template DualSignal#, VDKSignal# is now a specialization from this. DualSignal is intended for use with signals in VDK..Prop-Template. 2000-11-26 Tim Lorenz * vdk/vdkprops.h (class VDKReadWriteValueProp ): made name in ctor const. Did the same for class VDKReadOnlyProp. 2000-11-26 Motta Mario BUG * VDKCustom (vdkcustom.cc, .h) --- Setting AutoResize property to true sigsegv's for an unknown reason. Now AutoResize property is "false" by default. 2000-11-22 Motta Mario * VDKText (text.cc,.h) BUG POSSIBLY A BUG on gtk+ 1.3.2: --- - is difficult trap "realize" signal in a safe way using both static and dynamics tables on this widget. - a possible work around is to use a lower call to gtk_signal_connect() and connect with a static function that uses a static buffer on which file selection is stored (inelegant but works). - however i have experienced that in most cases is not necessary to connect with a realize signal provided that all font and colors setting are made before adding the widget and file loading made after. Recall that this widget is near to be declared as "deprecated" and that will be substituted with new gtk_text based on view-buffer-controller model. NEW * VDKFont (vdkfont.cc,.h) --- Changed to support new Pango rendering library, backward compatibility with GdkFont is mantained via (GdkFont*) and AsGdkFont() operators, user should gdk_font_unref() after use. ie: VDKFont* font = new VDKFont(this,"courier bold 12"); GdkFont* gdkfont = font->AsGdkFont(); //... use gdkfont gdk_font_unref(gdkfont); CODE Code breaks: BREAK ----------- ----- VDKFont::Height( char* s) instead VDKFont::Height(), computes an average string height. * VDKCustom (vdkcustom.cc,.h) NEW - SelectedBackground and SelectedForeground changed to be real --- properties instead public members as they were. - UnselectedBackground and UnselectedForeground changed to real properties, instead public members as they were, their use is deprecated however and reverts to setting colors as NormalBackground and Foreground. 2000-11-21 Motta Mario * Development of a new vdk test program begins after having ported ./example/hello and ./example/hello2 on vdk 2.0.0 (beta). 2000-11-20 Motta Mario * development of VDK 2.0.0 (beta) based on gtk+ 1.3.2 begins. Gtk+-1.3.2 is an unstable preview of what gtk+2.0 will be, porting to gtk+1.3.2 was relatively easy (still in progress), few changes was necessary to recompile vdk on new gtk+-1.3.2 with an unchanged API, so no source code breaks with an exception on VDKFont now based on pango library, old VDKFont can't remain backward compatible even if with unchanged API. Application made with vdk 1.2. series should be source compatibles with vdk 2.0 (not binary compatibles however) provided that they do not use one of the vdk components based of non-stock gtk+ widgets that unfortunately we lost. What we have lost switching to gtk+ 1.3.2: - gtkcombobutton Used on VDKCustomButton class which is now modified, with API unchanged. I plan to ask to original author if it will support gtkcombobutton on new gtk+ version. - VDKFileTreeDialog Based on an old gtkdirtree widget. We won't recover it. - VDKDatabox Based on gtkdatabox, we will recover it if Ionutz has time to make the porting after having asked to his original author. - VDKGrid Based on gtksheet, it will be recovered since A.Feiguin assured me that he will port gtksheet also on gtk+ 2.0 - VDKFileIconDialog Based on gtkiconfilesel, same as above. - VDKCoolbar and VDKCoolButton We won't recover them, was already "deprecated" on previous vdk versions - VDKPanedForm and VDKScrolledForm As above, was deprecated. - VDKColorBrowser It depends on VDKGrid, it will be recovered. - VDKLabelToggleButton and VDKPixmapToggleButton Won't be recovered, was deprecated and substituted with VDKCustomButtons. (Tim i guess you have to modify your sigc test program). ======= 2002-03-23 George Boutwell WIN32 * Development on vdkwin32 (beta) project begins. Based on gtk+ 2.0 win32 & vdk 2.0.1 (current cvs): Gtk+-2.0 win32 should be considered more or less unstable port of gtk+2.0 (*nix), porting to gtk+2.0 (win32) was fairly easy (still in progress), a few changes where necessary to recompile vdk on gtk+-2.0 (win32). Most of them had to do with the lack (or more precisely non-use) of an autoconf/automake environement. Added an lot of #ifdef HAVE_CONFIG_H...#endifs solve about 3/4 compile problems. Added an VDKWIN32 define to makefile.mingw to indicate in code vdkwin32 specifics. Currently the vdk library (both shared and static), testvdk, & testvdkstring code has been successfully compiled under win32 (WinNT 4.0) 2002-03-19 Motta Mario Version renamed to 2.0.1 for further develop and bug fixes. 2002-03-13 Motta Mario *** VDK 2.0.0 RELEASED *** 2002-03-08 Motta Mario * written an example of VDKDrawArea usage into ./testvdk 2002-03-05 Motta Mario NEW Added new widget: VDKDrawingArea that should substitute deprecated VDKCanvas. ___ However VDKcanvas isn't really deprecated, it will continue to be supported even if not more enhanced. Simply VDKDrawingArea is a better widget, much powerfull and easy to use. VDKDrawingArea is contained into vdkdrawarea.h/.cc files. 2002-02-20 Motta Mario * canvas.cc .h Overridden VDKCanvas::SetFont() that now uses its own font (or default one if not set). This removes an old problem with canvas setting font into an expose_event response function: VDKcanvas::SetFont() used VDKObject::SetFont() that modifies widget style triggering an expose_event and an infinite loop if used into an expose_event response function. Now resolved using font explicitely without interesting widget style. 2002-02-12 Motta Mario CODE * canvas.cc .h BREAK Made an huge clean up of received events. ---- Now events on canvas must be handled with dynamic signals table. Removed some properties: - Captured - EnableDrag 2002-01-19 Motta Mario NEW * Added VDKCalendar widget, wraps GtkCalendar (vdkcalendar.cc /.h) --- Moved from builder plugins into vdk core library. 2002-01-17 Motta Mario * vdktreeview.cc/.h Improuved VDKTreeView API 2001-12-31 Motta Mario * vdk/vdktreeview.cc /.h - Added a VDKTreeViewModel iterator API - Added new properties and methods to VDKTreeView API * testvdk/treeviewcompo.cc * Changed to reflect API changes 2001-12-29 Motta Mario NEW * scrolled.cc/.h --- Added BorderShadow property to VDKScrolled class 2001-12-23 Motta Mario NEW * value_sem_list.h / dlist.h --- Added: -- decremental operator (both infix and postfix) - first(),last() operators. To VDKValueListIterator<> and VDKListIterator<> template classes 2001-12-17 Motta Mario NEW * vdktreeview.cc .h --- Added VDKTreeView class and companions. This class wraps GtkTreeView widget. (incomplete) 2001-12-07 Motta Mario CODE * vdkprops.h BREAK Changed prop value internal assignement made after have calling ----- setting function. In other words setting function finds prop value at old value when called. This avoid a subtle bug when is necessary to operate on old prop value into the setting function. *** Raw setting function calls are now deprecated. *** 2001-09-28 Motta Mario NEW * Added VDKInputChannel class --- Thanks to Jonathan Hudson . 2001-08-22 Motta Mario CODE * vdkcustom.cc BREAK SelectedForeground,Unselectedbackground,UnselectedForeground properties ----- are now of VDKRgb type to mantain consistency with others color props. 2001-08-15 Tim Lorenz * Trivial Changes to let sigc-extension work with libsigc++-1.0.3 under gcc-3.0 * configure.in: Added AC_PREREQ(2.50) 2001-08-15 Motta Mario BUG FIX * VDKCustom.cc/.h ------ Get rid of SelectedBackground property since it conflicts with VDKObject::SelectedBackground. Modified overridden SetBackGround * testvdk/testvdk.cc Modified to reflect above changes. (Bug reported by Tim) 2001-08-14 Motta Mario BUG * siglisthandle.h /evlisthandle.h FIX Got ride of VDKString in VDK dynamic signal tables. --- (probably) due to a gcc 2.96.x compiler weirdness on const we experienced obscure seg faults during signal table scan. VDKString _VDK_Signal_Unit.signal and _VDK_Event_Unit.event substituted with a plain char[]. Sigh :-( 2001-08-11 Motta Mario BUG * vdkclist.cc vdkctree.cc FIX Correctly initialized sigwid with gtk+ widget. This bug --- didn't correctly SignalConnect() under some circustances. 2001-07-27 Motta Mario NEW * Added VDKThread class, a simple wrapper on posix threads. ___ Thanks to Salmaso Raffaele that did it on 1999. 2001-07-04 Motta Mario * vdk updated to latest cvs (gtk+ 1.3.7) * forms.cc GetPosition() changed to use gdk_window_root_origin() to fix a coordinate error. 2001-05-29 Tim Lorenz The Long Story of Constness: * vdk/vdkeditor.h (VDKEditor::MakeCompletition): made arg const * vdk/vdkedtior.cc (overlap): second arg is const now * vdk/vdkclist.h (class VDKCustomList::_update_pix): consted (SelectionProp::Row): and (Selection::Col): are const methods now. (VDKCustomList::UpdateCell): arg s ist const-pointer now. * vdk/vdkcsortlist.h (VDKCustomSortedList::FindKey): (VDKCustomSortedList::RemoveKey): (VDKCustomSortedList::UpdateCellKey): (VDKCustomSortedList::UpdateKey): The key argument is declared const now (as passed to VDKString-Ctor) I did some more const changes but did not list them. Made type-converter operator of VDKRWProp a const method. 2001-05-28 Tim Lorenz Tales about const * testvdk/edcompo.cc: (ToggledSource): also operate on const pointer arg (just to be nice). Fixed mem. leak in abortive return (use of std::string would make life easier ;-) (EditorComponent::HasPage): add const qual. to local var. 'fn' * vdk/notebook.h (class VDKNotebook::AddPage): consted one arg * vdk/vdkcustombutton.h (VDKCustomButton::SetCaption): (VDKCustomButton::GetCaption): made string a const char* pointer (VDKCustomButton::Caption): 'value_type' now const char* (VDKCustomButton::VDKCustomButton()): label-arg is a const-pointer now * vdk/label.h (VDKLabel::Caption): set second tpl. arg. to const char* -> VDKRWProp (VDKLabel::VDKLabel): made label-argument const (VDKLabel::SetCaption): made argument a const pointer (VDKLabel::GetCaption): made return-value a const-pointer * vdk/notebook.h (VDKNotebook::AddPage): (VDKPage::AddPage): added const-qualifier to signatur -> AddPage(VDKObj*, const char*, * testvdk/edcompo.cc: * vdk/siglisthandle.h: add #include and thus use of namespace 2001-05-25 Tim Lorenz * several: Changed to include c++-versions of c-headers (like cstring instead of string.h). This step requires a compiler with proper handling of namespaces, gcc-2.95.3 and gcc-3.0 can handle this. Affected files: vdk/vdktextview.cc vdk/vdkdate.cc vdk/vdkcolorbrowser.cc vdk/text.cc vdk/rawobj.cc vdk/pixmaps.cc vdk/image.cc vdk/vdkprops.h vdk/vdkregex.h vdk/vdkstring.cc vdk/vdkfont.cc vdk/vdkeditor.cc vdk/vdkctree.cc vdk/vdkcsortlist.cc vdk/vdkclist.cc vdk/tooltips.cc vdk/rawpixmap.cc vdk/rawpixbuf.cc vdk/radiobtngroup.cc vdk/filedlg.cc vdk/combo.cc vdk/chart.cc vdk/FileDialog.cc vdk/messagebox.cc vdk/numentry.cc: * vdk/label.cc: * vdk/evhandle.h: added #include * testvdk/testvdk.cc: converted multi-line string to multi string lines 2001-05-25 Motta Mario * dummy commit 2001-05-22 Motta Mario * entry.cc Modified SetText() to make it utf8 compliant. 2001-05-14 Tim Lorenz CLEANUP: * vdk/vdkcustom.cc (VDKObject::make_gtksigc_connection): removed (no more needed here, see below)(affected files: several ;-) * vdk/vdkobj.cc: Removed deprecated Signals: OnKeyPress, OnKeyRelease * vdk/vdk.h: removed #include GCC-3.0: Begun to add support for gcc-3.0 * added #include to several files (needed for gcc 3.0) * configure.in: Added namespace to string and auto_ptr test (needed for gcc-3.0) * vdk/checkbutton.cc (SetForeground): added explicit cast (needed for gcc-3.0) same in vdk/spins.cc (SetForeground) and (SetBackground) * vdk/evhandle.h (ON_EVENT): removed g++-3.0 irritating prenthesis 2001-05-06 Motta Mario CODE BREAK -------- * toolbar.cc/.h VDKToolbar properties: - Relief - Spacing - SpaceStyle are now themeable properties out of programmer control. Therefore even if mantained as void properties for backward compatibility, their use is deprecated and will be completely removed in future versions. - VDKToolbar::Borderless property, even if deprecated, is mantained operative. However his setting may be overridden changing themes. * menus.cc/.h VDKMenubar::Shadow property is now themeable, so above considerations apply as well. 2001-04-25 Motta Mario CODE BREAK --------- * Removed gtkpacker widget wrapper 2001-04-10 Motta Mario * Gtk+ patched at line 2539 of gtkdnd.c: Event handler set to return always FALSE otherwise many widgets became insensitive. This gtk+ bug showed a more general and serious bug: returning TRUE from an event handler often blocks any further event propagation also in separated connections. This bug happened recently on cvs snapshot and 1.3.3 release. Previous snapshots and releases didn't show this error. Mailed a msg to gtk-list and made a report to bugzilla. * Changed all event handlers on vdk to return FALSE, this fixed many weird bugs and behaviours. 2001-03-28 Motta Mario * VDKEditor.cc Added ctrl-1 as word completion keystroke. (ctrl-tab conflicts with kde defaults) 2001-03-24 Motta Mario CODE BREAK --------- REMOVED * removed deprecated VDKLabelButton and VDKPixmapButton, ------- these widgets are substitued by VDKCustomButton 2001-03-04 Motta Mario NEW * VDKPixmap (deprecated) --- Added a bool sensitive arg to constructors (defaults to false), if true pixmap will be embedded into an event box, in a normal box otherwise. Not sensitive means that the widget won't react to any signal. Tips: - in insensitive mode an user that wants pixmap receiving signals should embedd explicitely this widget into a VDKEventBox and connect signals to this one instead pixmap directly. Tip: in insensitive mode to set a tip to a pixmap, embedd it into an event box and set the tip to the event box instead. * VDKImage Same as above. NEW * VDKCustomButton --- VDKPixmap (deprecated) substituted with a VDKImage. * VDKLabelButton and VDKPixmapButton marked as deprecated, will be cut on first vdk2 release. 2001-03-01 Motta Mario * vdkeditor Modified SaveToFile() to avoid that 0xFFFC char that is used as image placeholder. 2001-02-28 Motta Mario * combo.cc/.h Same as below for entry part of combobox widget. 2001-02-27 Motta Mario * entry.cc/.h Added a data member "buffer" as VDKString. Deprecated gtk_entry_get_text() not more used to get Text property, instead is used gtk_editable_get_chars() that loads buffer. Getting entry->Text property now returns (char*) buffer. ** WARNING ** Accessing to internal VDKString buffer violates OOP data hiding concept, user should make a copy of the returned buffer before make any modification. i.e. VDKString my_own_buffer = entry->Text; // safely modify: my_own_buffer += "tail"; entry->Text = my_own_buffer; // is safe however 2001-02-16 Motta Mario * vdkobj.cc Changed static void VDKObject::VDKEventPipe() static void VDKObject::VDKEventUnitPipe() to static int VDKObject::VDKEventPipe() static int VDKObject::VDKEventUnitPipe() as should be. 2001-02-15 Motta Mario NEW * vdk/notebook.cc,.h --- Added a Child() function member to TabPage object that accesses to the object contained into a page. Usage: notebook->Pages[x]->Child() WARNING: since this method could break data hiding concept user should avoid manipulating received address or make it at his own risk. 2001-02-14 Motta Mario * Added more examples to testvdk program. 2001-02-12 Motta Mario * VDK 2.0 NOW BASED ON GTK CVS SNAPSHOTS ---------------------------------------- To closely track gtk 2.0 developing now vdk 2.0 is based on latest glib/pango/gtk+ cvs snapshot. Actually vdk 2.0 does not compile in gtk 1.3.2 and requires latest cvs snapshot. Gnome cvs instructions: a. first download $ export CVSROOT=':pserver:anonymous@anoncvs.gnome.org:/cvs/gnome' $ cvs login (there is no password, just hit return) $ cvs -z3 checkout glib pango gtk+ b. after initial checkout: $ cvs -z3 update glib pango gtk+ 2001-02-12 Motta Mario * Added: vdk/vdkeditor.h vdk/vdkeditor.cc testvdk/tokens.db NEW Implemented a nice source editor wrapping Mike Hamerson gtksourceview 0.0.2 WIDGET (still on alpha), with syntax hilighting and other nice feautures ----- such as word completion (ctrl-tab) , parent matching, etc. See testvdk.cc CODE * VDKText widget not more supported and removed from cvs tree, BREAK VDKTextView will replace removed widget. ----- 2001-02-11 Motta Mario * vdkobj.cc VDKObject::Destroy() revisited and hopefully simplified. 2001-02-04 Motta Mario * Added: vdk/rawpixbuf.h vdk/rwapixbuf.cc vdk/image.h vdk/image.cc testvdk/vitrurian.png NEW * New widgets: WIDGET - VDKRawPixbuf, wrapper of GdkPixbuff, should substitute VDKRawPixmap now deprecated ------ (more flexible since supports several graph file formats) NEW - VDKImage, wrapper of GtkImage should substitute VDKPixmap now deprecated WIDGET (more flexible since supports several graph file formats) ------ * Changed testvdk to support VDKImage test. 2001-01-24 Motta Mario * Added: vdk/vdktextview.h vdk/vdktextview.cc (wrapper of GtkTextView) NEW Implemented VDKTextView a gtktextview wrapper that would substitute WIDGET deprecated and buggy VDKText. ----- 2001-01-02 Motta Mario BUG * gboolean window_is_iconified (GdkWindow *window) (forms.cc) FIX now work properly. --- 2000-12-24 Motta Mario * dummy commit, cvs transferred to new amd athlon machine 2000-12-09 Motta Mario NEW * VDKTimer --- Added a "TickTime" property that permits to change timer granularity on the fly. Suggested by a request from: wslu 2000-12-05 Motta Mario NEW * application.cc --- VDKApplication::MessageBox() now uses default gtk+ dialogs. Api unchanged, some features extended with new modal modes. (see application.h) * canvas.cc Modified DrawString() and DrawText() to new font (pango) stuff. * chart.cc Modified text drawing for the same reasons as above. 2000-11-29 Motta Mario BUG * forms.cc --- gboolean window_is_iconified (GdkWindow *window) disabled for now, returning always false. 2000-11-28 Tim Lorenz * sigcvdktest added directory, contains old test-programm and new one: props_test.cc (see below). NEW * vdk/vdkprops.h : Added a signal to property for notification --- of property-changes. see next entry. Fixed Value: now returns the value as type S (not T as before). Furthermore Value is const now (pointer-types are automatically casted to const, someone should prove it with gcc < 2.95.2, see test-programm). * vdk/sigc_addon.h: introduced template DualSignal#, VDKSignal# is now a specialization from this. DualSignal is intended for use with signals in VDK..Prop-Template. 2000-11-26 Tim Lorenz * vdk/vdkprops.h (class VDKReadWriteValueProp ): made name in ctor const. Did the same for class VDKReadOnlyProp. 2000-11-26 Motta Mario BUG * VDKCustom (vdkcustom.cc, .h) --- Setting AutoResize property to true sigsegv's for an unknown reason. Now AutoResize property is "false" by default. 2000-11-22 Motta Mario * VDKText (text.cc,.h) BUG POSSIBLY A BUG on gtk+ 1.3.2: --- - is difficult trap "realize" signal in a safe way using both static and dynamics tables on this widget. - a possible work around is to use a lower call to gtk_signal_connect() and connect with a static function that uses a static buffer on which file selection is stored (inelegant but works). - however i have experienced that in most cases is not necessary to connect with a realize signal provided that all font and colors setting are made before adding the widget and file loading made after. Recall that this widget is near to be declared as "deprecated" and that will be substituted with new gtk_text based on view-buffer-controller model. NEW * VDKFont (vdkfont.cc,.h) --- Changed to support new Pango rendering library, backward compatibility with GdkFont is mantained via (GdkFont*) and AsGdkFont() operators, user should gdk_font_unref() after use. ie: VDKFont* font = new VDKFont(this,"courier bold 12"); GdkFont* gdkfont = font->AsGdkFont(); //... use gdkfont gdk_font_unref(gdkfont); CODE Code breaks: BREAK ----------- ----- VDKFont::Height( char* s) instead VDKFont::Height(), computes an average string height. * VDKCustom (vdkcustom.cc,.h) NEW - SelectedBackground and SelectedForeground changed to be real --- properties instead public members as they were. - UnselectedBackground and UnselectedForeground changed to real properties, instead public members as they were, their use is deprecated however and reverts to setting colors as NormalBackground and Foreground. 2000-11-21 Motta Mario * Development of a new vdk test program begins after having ported ./example/hello and ./example/hello2 on vdk 2.0.0 (beta). 2000-11-20 Motta Mario * development of VDK 2.0.0 (beta) based on gtk+ 1.3.2 begins. Gtk+-1.3.2 is an unstable preview of what gtk+2.0 will be, porting to gtk+1.3.2 was relatively easy (still in progress), few changes was necessary to recompile vdk on new gtk+-1.3.2 with an unchanged API, so no source code breaks with an exception on VDKFont now based on pango library, old VDKFont can't remain backward compatible even if with unchanged API. Application made with vdk 1.2. series should be source compatibles with vdk 2.0 (not binary compatibles however) provided that they do not use one of the vdk components based of non-stock gtk+ widgets that unfortunately we lost. What we have lost switching to gtk+ 1.3.2: - gtkcombobutton Used on VDKCustomButton class which is now modified, with API unchanged. I plan to ask to original author if it will support gtkcombobutton on new gtk+ version. - VDKFileTreeDialog Based on an old gtkdirtree widget. We won't recover it. - VDKDatabox Based on gtkdatabox, we will recover it if Ionutz has time to make the porting after having asked to his original author. - VDKGrid Based on gtksheet, it will be recovered since A.Feiguin assured me that he will port gtksheet also on gtk+ 2.0 - VDKFileIconDialog Based on gtkiconfilesel, same as above. - VDKCoolbar and VDKCoolButton We won't recover them, was already "deprecated" on previous vdk versions - VDKPanedForm and VDKScrolledForm As above, was deprecated. - VDKColorBrowser It depends on VDKGrid, it will be recovered. - VDKLabelToggleButton and VDKPixmapToggleButton Won't be recovered, was deprecated and substituted with VDKCustomButtons. (Tim i guess you have to modify your sigc test program). vdk-2.4.0/INSTALL0000644000000000000000000001114507430213573006767 ================================= VDK 2.0 INSTALLING INSTRUCTIONS ================================= please report any comment or bug to: mmotta@users.sourceforge.net ===================== PREPARING THE PACKAGE ===================== If you haven't yet untarred the file, do $ tar xvzf vdk-2.0.x.tar.gz $ cd vdk-2.0.x/ ======================= CONFIGURING THE PACKAGE ======================= $ ./configure Configure will accept several options (to see all of them do ./configure --help) Here the most used: --prefix=[DIR] where to install it [default=/usr/local] *** Note *** For RedHat,mandrake and Redhat-like distributions i suggest to use --prefix=/usr to make things simpler. *** Note for users that upgrade from VDK 1.2.x *** VDK 1.2.x and VDK-2.0.x can cohabitate provided that are installed on different prefixes, we suggest to mantaing 1.2.x series on /usr and /usr/local for VDK 2.0.x --enable-debug=[no/minimum/yes] it enable the debug system [default=no] no = it will compile with -s flag minimum = with -s -DVDKDEBUG (defined in config.h) yes = with -g -DVDKDEBUG *** Note *** We suggest to mantain default value, VDK libs with debug info are huge. --enable-shared/static=[yes/no] build shared/static library [default=yes] *** Note *** We suggest to use --enable-static=no mainly for two reasons: 1. VDK applications linked against a VDK static library remained untested 2. Recall that distributing VDK applications linked against VDK static lib reduces LGPL license since you have to distribute your applications at least under GPL license terms. --enable-opt=[OPTIMIZATION/no] build with -O$(OPTIMIZATION) compiler lever [default=2] it can be disabled with no --enable-testvdk=[yes/no] build or not testvdk program [default=yes] --enable-sigc=[yes/no] build or not vdk signal system extension [default=no] This options requires libsigc++-0.8.5 or greater already installed. You can download above library at: http://libsigc.sourceforge.net/stable.html --enable-testsigc=[yes/no] build or vdk signal system extension test program [default=no] This options requires libsigc++-0.8.5 or greater installed. You can download above library at: http://libsigc.sourceforge.net/stable.html --enable-gnome=[yes/no] build or not vdk gnome support library [default=no]. You need Gnome libs installed in order to have gnome support. Running gnome is not required however. --enable-doc-html=[yes/no] (default=yes) --enable-doc-latex=[yes/no] (default=no) --enable-doc-man=[yes/no] (default=no) Enables doc building in html, latex or man format. You need doxigen tool and Qt installed in order to build docs. You can download doxygen at: http://www.doxygen.org/download.html ================== MAKING THE PACKAGE ================== When configure finish do $ make This will produce: - core library libvdk.so.2.0.x and links - a configure script vdk-config-2 to use when compiling your vdk programs. option depending: - gnome support library libvdkgnome.so.2.0.x and links - test program in ./testvdk/testvdk - extended signal system test program in ./sigcvdktest/testsigcvdk - classes references in ./doc/doxy/html/index.html ====================== INSTALLING THE PACKAGE ====================== To install just do # make install (you may need root privilege) This will install: - core and component libraries in $(prefix)/lib - include headers in $(prefix)/include - configure script vdk-config in $(prefix)/bin ====================== BUILDING DOCUMENTATION ====================== Do: $ make docs This will produce a ./vdk-2.0.x/doc/doxy/html dir plenty of html and gif files. Just run: $ netscape ./vdk-2.0.x/doc/doxy/html/index.html& or open ./vdk-2.0.x/doc/doxy/html/index.html in your preferred browser to read VDK class reference. To make a postscript printable version you need to ./configure with ..enable-doc-latex=yes and $ cd ./vdk-2.0.x/doc/doxy/latex $ make ps this will produce a refman.ps ************************************************** * Note for Red Hat users (and most likely others)* ************************************************** If you have used the default prefix for installation - check if /etc/ld.so.conf contains this line: /usr/local/lib (if not add it to the file) - check if your PATH points to /usr/local/bin otherwise update your bash rc. Run: # /sbin/ldconfig after have modified /etc/ld.so.conf ========= CLEANING ========= $ make clean This will remove all obj's and libs from source tree $ make distclean This will remove all file created by configure (You will need autoconf/automake to rebuild all the package) Enjoy. VDKTeamvdk-2.4.0/Makefile.am0000644000000000000000000000140607347027011007766 bin_SCRIPTS = vdk-config-2 BUILT_SOURCE = vdk-config-2 vdk-config-2: vdk-config-2.in #sigcvdktest contrib doc SUBDIRS = vdk testvdk example doc sigcvdktest EXTRA_DIST = \ autogen.sh \ configure \ aclocal.m4 \ BUGS m4datadir = $(datadir)/aclocal m4data_DATA = vdk-2.m4 testvdk: cd testvdk make .PHONY: files release snapshot files: @files=`ls $(DISTFILES) 2> /dev/null` ; for p in $$files; do \ echo $$p; \ done @for subdir in $(SUBDIRS); do \ files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \ for file in $$files; do \ echo $$subdir/$$file; \ done; \ done release: rm -rf .deps */.deps $(MAKE) distcheck snapshot: $(MAKE) dist distdir=$(PACKAGE)`date +"-cvs.%Y.%m.%d"` docs: cd doc && $(MAKE) docs vdk-2.4.0/NEWS0000644000000000000000000000332307430213575006436 ========================== What's new in version 2.0 ========================== Overall library had a huge rewriting to be compatible with Gtk+ 2.0. Users upgrading from VDK 1.2.5 should suffer little code breaks since API had little or no changes. Some widgets are now deprecated even if still supported for compatibility reason. Newly written code should not use them. Deprecated widgets: ------------------ VDKCustomList VDKCustomTree VDKPixmap Widget not more supported: -------------------------- - gtkcombobutton Used on VDKCustomButton class which is now modified, with API unchanged. - VDKFileTreeDialog Based on an old gtkdirtree widget - VDKDatabox Based on gtkdatabox. - VDKGrid Based on gtksheet. - VDKFileIconDialog Based on gtkiconfilesel, same as above. - VDKCoolbar and VDKCoolButton Was already "deprecated" on previous vdk versions. - VDKPanedForm and VDKScrolledForm As above, was deprecated. - VDKColorBrowser It depends on VDKGrid - VDKLabelToggleButton and VDKPixmapToggleButton Deprecated and substituted with VDKCustomButtons. - VDKPacker - VDKText New widgets and features: ------------------------ - VDKTextView A GtkTextView wrapper that would substitute deprecated and buggy VDKText. - VDKEditor A nice source editor wrapping Mike Hamerson gtksourceview 0.0.2 (still on alpha), with syntax hilighting and other nice feautures such as word completion (ctrl-tab) , parent matching, etc. - VDKImage A GtkImage wrapper that should substitute VDKPixmap. - VDKThread A simple wrapper on posix threads. - VDKInputChannel A wrapper for gdk_input Thanks to Jonathan Hudson . - VDKTreeView A wrapper for GtkTreeView - VDKCalendar A wrapper for GtkCalendar vdk-2.4.0/TODO0000644000000000000000000000000607206651722006423 empty vdk-2.4.0/acconfig.h0000644000000000000000000000056507206651722007667 #ifndef CONFIG_H #define CONFIG_H #undef VERSION #undef PACKAGE #undef HAVE_PTHREAD #undef HAVE_GNOME #undef VDKDEBUG #undef HAVE_IMLIB #undef HAVE_LIBTIFF #undef HAVE_LIBJPEG #undef HAVE_LIBGIF #undef HAVE_LIBPNG #undef HAVE_SHAPED_EXT #undef HAVE_MEMBER_TEMPLATES #undef HAVE_AUTO_PTR #undef HAVE_MUTABLE #undef HAVE_PARTIAL_SPECIALIZATION #undef USE_SIGCPLUSPLUS #endif vdk-2.4.0/aclocal.m40000644000000000000000000072702210052331513007573 # generated automatically by aclocal 1.7.8 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 # 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. # Do all the work for Automake. -*- Autoconf -*- # 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. # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 10 AC_PREREQ([2.54]) # Autoconf 2.50 wants to disallow AM_ names. We explicitly allow # the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl # 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_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) 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 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) AM_MISSING_PROG(AMTAR, tar) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP # 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([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 ]) ]) # 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_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 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. AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.7.8])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright 2001, 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # _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], [AC_FOREACH([_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. # # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # 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 # 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)]) # -*- Autoconf -*- # Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # 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 test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # 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 ]) # AM_AUX_DIR_EXPAND # Copyright 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # 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. # Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50]) AC_DEFUN([AM_AUX_DIR_EXPAND], [ # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. # Copyright 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # AM_PROG_INSTALL_STRIP # Copyright 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # 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="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # -*- Autoconf -*- # Copyright (C) 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 1 # 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])]) # serial 5 -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # 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], 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 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 : > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in 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 ;; none) break ;; esac # 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. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} 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 # (even with -Werror). So we grep stderr for any message # that says an option was ignored. if grep 'ignoring option' 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 builds --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]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. #serial 2 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; 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. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # 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 -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //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"]) ]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # 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 done .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 # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright 1997, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 5 AC_PREREQ(2.52) # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) 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])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 47 AC_PROG_LIBTOOL # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- # If this macro is not defined by Autoconf, define it here. m4_ifdef([AC_PROVIDE_IFELSE], [], [m4_define([AC_PROVIDE_IFELSE], [m4_ifdef([AC_PROVIDE_$1], [$2], [$3])])]) # AC_PROG_LIBTOOL # --------------- AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. AC_PROVIDE_IFELSE([AC_PROG_CXX], [AC_LIBTOOL_CXX], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX ])]) dnl And a similar setup for Fortran 77 support AC_PROVIDE_IFELSE([AC_PROG_F77], [AC_LIBTOOL_F77], [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 ])]) dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [ifdef([AC_PROG_GCJ], [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([A][M_PROG_GCJ], [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([LT_AC_PROG_GCJ], [define([LT_AC_PROG_GCJ], defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) ])])# AC_PROG_LIBTOOL # _AC_PROG_LIBTOOL # ---------------- AC_DEFUN([_AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Prevent multiple expansion define([AC_PROG_LIBTOOL], []) ])# _AC_PROG_LIBTOOL # AC_LIBTOOL_SETUP # ---------------- AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.50)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! AC_REQUIRE([AC_OBJEXT])dnl AC_REQUIRE([AC_EXEEXT])dnl dnl AC_LIBTOOL_SYS_MAX_CMD_LEN AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE AC_LIBTOOL_OBJDIR AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] # Same as above, but do not quote variable references. [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" AC_CHECK_TOOL(AR, ar, false) AC_CHECK_TOOL(RANLIB, ranlib, :) AC_CHECK_TOOL(STRIP, strip, :) old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then AC_PATH_MAGIC fi ;; esac AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes AC_ARG_WITH([pic], [AC_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= AC_LIBTOOL_LANG_C_CONFIG _LT_AC_TAGCONFIG ])# AC_LIBTOOL_SETUP # _LT_AC_SYS_COMPILER # ------------------- AC_DEFUN([_LT_AC_SYS_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_AC_SYS_COMPILER # _LT_AC_SYS_LIBPATH_AIX # ---------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], [AC_LINK_IFELSE(AC_LANG_PROGRAM,[ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_AC_SYS_LIBPATH_AIX # _LT_AC_SHELL_INIT(ARG) # ---------------------- AC_DEFUN([_LT_AC_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_AC_SHELL_INIT # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [_LT_AC_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac echo=${ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(ECHO) ])])# _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_LOCK # ----------- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; ]) esac need_locks="$enable_libtool_lock" ])# _LT_AC_LOCK # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_CACHE_CHECK([$1], [$2], [$2=no ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then $2=yes fi fi $rm conftest* ]) if test x"[$]$2" = xyes; then ifelse([$5], , :, [$5]) else ifelse([$6], , :, [$6]) fi ])# AC_LIBTOOL_COMPILER_OPTION # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ------------------------------------------------------------ # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD else $2=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then ifelse([$4], , :, [$4]) else ifelse([$5], , :, [$5]) fi ])# AC_LIBTOOL_LINKER_OPTION # AC_LIBTOOL_SYS_MAX_CMD_LEN # -------------------------- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [# find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 testring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \ = "XX$testring") >/dev/null 2>&1 && new_result=`expr "X$testring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` testring=$testring$testring done testring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi ])# AC_LIBTOOL_SYS_MAX_CMD_LEN # _LT_AC_CHECK_DLFCN # -------------------- AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h)dnl ])# _LT_AC_CHECK_DLFCN # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_unknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ])# AC_LIBTOOL_DLOPEN_SELF # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm conftest* ]) ])# AC_LIBTOOL_PROG_CC_C_O # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) # ----------------------------------------- # Check to see if we can do hard links to lock some files if needed AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_REQUIRE([_LT_AC_LOCK])dnl hard_links="nottested" if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS # AC_LIBTOOL_OBJDIR # ----------------- AC_DEFUN([AC_LIBTOOL_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir ])# AC_LIBTOOL_OBJDIR # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) # ---------------------------------------------- # Check hardcoding attributes. AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_AC_TAGVAR(hardcode_action, $1)= if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then # We can hardcode non-existant directories. if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_AC_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_AC_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_AC_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH # AC_LIBTOOL_SYS_LIB_STRIP # ------------------------ AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], [striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi ])# AC_LIBTOOL_SYS_LIB_STRIP # AC_LIBTOOL_SYS_DYNAMIC_LINKER # ----------------------------- # PORTME Fill in your ld.so characteristics AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= shrext=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/lib /lib/w32api /usr/lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' # Find out which ABI we are using (multilib Linux x86_64 hack). libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *64-bit*) libsuff=64 ;; esac fi rm -rf conftest* ;; *) ;; esac sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER # _LT_AC_TAGCONFIG # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_ARG_WITH([tags], [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then AC_MSG_WARN([output file `$ofile' does not exist]) fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) else AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in "") ;; *) AC_MSG_ERROR([invalid tag name: $tagname]) ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then AC_MSG_ERROR([tag name \"$tagname\" already exists]) fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then AC_LIBTOOL_LANG_CXX_CONFIG else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then AC_LIBTOOL_LANG_F77_CONFIG else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then AC_LIBTOOL_LANG_GCJ_CONFIG else tagname="" fi ;; RC) AC_LIBTOOL_LANG_RC_CONFIG ;; *) AC_MSG_ERROR([Unsupported tag name: $tagname]) ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" AC_MSG_ERROR([unable to update list of available tagged configurations.]) fi fi ])# _LT_AC_TAGCONFIG # AC_LIBTOOL_DLOPEN # ----------------- # enable checks for dlopen support AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_DLOPEN # AC_LIBTOOL_WIN32_DLL # -------------------- # declare package support for building win32 dll's AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_WIN32_DLL # AC_ENABLE_SHARED([DEFAULT]) # --------------------------- # implement the --enable-shared flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([shared], [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]AC_ENABLE_SHARED_DEFAULT) ])# AC_ENABLE_SHARED # AC_DISABLE_SHARED # ----------------- #- set the default shared flag to --disable-shared AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no) ])# AC_DISABLE_SHARED # AC_ENABLE_STATIC([DEFAULT]) # --------------------------- # implement the --enable-static flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([static], [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]AC_ENABLE_STATIC_DEFAULT) ])# AC_ENABLE_STATIC # AC_DISABLE_STATIC # ----------------- # set the default static flag to --disable-static AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no) ])# AC_DISABLE_STATIC # AC_ENABLE_FAST_INSTALL([DEFAULT]) # --------------------------------- # implement the --enable-fast-install flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([fast-install], [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) ])# AC_ENABLE_FAST_INSTALL # AC_DISABLE_FAST_INSTALL # ----------------------- # set the default to --disable-fast-install AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no) ])# AC_DISABLE_FAST_INSTALL # AC_LIBTOOL_PICMODE([MODE]) # -------------------------- # implement the --with-pic flag # MODE is either `yes' or `no'. If omitted, it defaults to `both'. AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl pic_mode=ifelse($#,1,$1,default) ])# AC_LIBTOOL_PICMODE # AC_PROG_EGREP # ------------- # This is predefined starting with Autoconf 2.54, so this conditional # definition can be removed once we require Autoconf 2.54 or later. m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) ])]) # AC_PATH_TOOL_PREFIX # ------------------- # find a file program which can recognise shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="ifelse([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi ])# AC_PATH_TOOL_PREFIX # AC_PATH_MAGIC # ------------- # find a file program which can recognise a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# AC_PATH_MAGIC # AC_PROG_LD # ---------- # find the path to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], [AC_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no]) AC_REQUIRE([LT_AC_PROG_SED])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $host_os in irix5* | nonstopux*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1" ;; esac lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) case $host_cpu in alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh* | x86_64*) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' lt_cv_file_magic_test_file=/shlib/libc.so lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_test_file=/lib/libc.so ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown ])# AC_DEPLIBS_CHECK_METHOD # AC_PROG_NM # ---------- # find the path to a BSD-compatible name lister AC_DEFUN([AC_PROG_NM], [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) NM="$lt_cv_path_NM" ])# AC_PROG_NM # AC_CHECK_LIBM # ------------- # check for math library AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac ])# AC_CHECK_LIBM # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_CONVENIENCE # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-install to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided and an installed libltdl is not found, it is # assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single # quotes!). If your package is not flat and you're not using automake, # define top_builddir and top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, lt_dlinit, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" LTDLINCL= fi # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_INSTALLABLE # AC_LIBTOOL_CXX # -------------- # enable support for C++ libraries AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_LT_AC_LANG_CXX]) ])# AC_LIBTOOL_CXX # _LT_AC_LANG_CXX # --------------- AC_DEFUN([_LT_AC_LANG_CXX], [AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`]) ])# _LT_AC_LANG_CXX # AC_LIBTOOL_F77 # -------------- # enable support for Fortran 77 libraries AC_DEFUN([AC_LIBTOOL_F77], [AC_REQUIRE([_LT_AC_LANG_F77]) ])# AC_LIBTOOL_F77 # _LT_AC_LANG_F77 # --------------- AC_DEFUN([_LT_AC_LANG_F77], [AC_REQUIRE([AC_PROG_F77]) _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,F77" | sed 's/^,//'`]) ])# _LT_AC_LANG_F77 # AC_LIBTOOL_GCJ # -------------- # enable support for GCJ libraries AC_DEFUN([AC_LIBTOOL_GCJ], [AC_REQUIRE([_LT_AC_LANG_GCJ]) ])# AC_LIBTOOL_GCJ # _LT_AC_LANG_GCJ # --------------- AC_DEFUN([_LT_AC_LANG_GCJ], [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,GCJ" | sed 's/^,//'`]) ])# _LT_AC_LANG_GCJ # AC_LIBTOOL_RC # -------------- # enable support for Windows resource files AC_DEFUN([AC_LIBTOOL_RC], [AC_REQUIRE([LT_AC_PROG_RC]) _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,RC" | sed 's/^,//'`]) ])# AC_LIBTOOL_RC # AC_LIBTOOL_LANG_C_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) AC_DEFUN([_LT_AC_LANG_C_CONFIG], [lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' _LT_AC_SYS_COMPILER # # Check for any special shared library compilation flags. # _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= if test "$GCC" = no; then case $host_os in sco3.2v5*) _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' ;; esac fi if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then : else AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no fi fi # # Check to make sure the static flag actually works. # AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), [], [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_DLOPEN_SELF($1) # Report which librarie types wil actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_C_CONFIG # AC_LIBTOOL_LANG_CXX_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], [AC_LANG_PUSH(C++) AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_AC_TAGVAR(no_undefined_flag, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Dependencies to place before and after the object being linked: _LT_AC_TAGVAR(predep_objects, $1)= _LT_AC_TAGVAR(postdep_objects, $1)= _LT_AC_TAGVAR(predeps, $1)= _LT_AC_TAGVAR(postdeps, $1)= _LT_AC_TAGVAR(compiler_lib_search_path, $1)= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration AC_PROG_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_AC_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_AC_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; *) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; sco*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; lcc) # Lucid # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_AC_TAGVAR(GCC, $1)="$GXX" _LT_AC_TAGVAR(LD, $1)="$LD" AC_LIBTOOL_POSTDEP_PREDEP($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_DLOPEN_SELF($1) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld ])# AC_LIBTOOL_LANG_CXX_CONFIG # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) # ------------------------ # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" ifelse([$1], [], [#! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 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 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. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG], [# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_[]_LT_AC_TAGVAR(LD, $1) # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext='$shrext' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) # Commands used to build and install a shared archive. archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) # Flag that forces no undefined symbols. no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) # The commands to list exported symbols. export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) # Symbols that must always be exported. include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) ifelse([$1],[], [# ### END LIBTOOL CONFIG], [# ### END LIBTOOL TAG CONFIG: $tagname]) __EOF__ ifelse([$1],[], [ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ]) else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi ])# AC_LIBTOOL_CONFIG # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) symcode='[[ABCDGISTW]]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris* | sysv5*) symcode='[[BDRT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[[]] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) # --------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) ifelse([$1],[CXX],[ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; icpc) # Intel C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx) # Digital/Compaq C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc) # Lucid _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; newsos6) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; linux*) case $CC in icc|ecc) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; ccc) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; sco3.2v5*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' ;; solaris*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sunos4*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; uts4*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" ;; esac ]) # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ],[ runpath_var= _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)= _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_AC_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac _LT_AC_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; sunos4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; linux*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" fi else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=yes _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # see comment about different semantics on the GNU ld section _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; bsdi4*) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext=".dll" # FIXME: Setting linknames here is a bad hack. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. Also zsh mangles # `"' quotes if we put them in here... so don't! lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes fi ;; dgux*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; openbsd*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi ;; os2*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; sco3.2v5*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_AC_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_AC_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4.2uw2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv5*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' ;; uts4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_AC_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) _LT_AC_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac ])# AC_LIBTOOL_PROG_LD_SHLIBS # _LT_AC_FILE_LTDLL_C # ------------------- # Be careful that the start marker always follows a newline. AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ ])# _LT_AC_FILE_LTDLL_C # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) # --------------------------------- AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) # old names AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) # This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL]) AC_DEFUN([LT_AC_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj, no) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS) ]) AC_DEFUN([LT_AC_PROG_RC], [AC_CHECK_TOOL(RC, windres, no) ]) # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # # LT_AC_PROG_SED # -------------- # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. AC_DEFUN([LT_AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED ]) AC_MSG_RESULT([$SED]) ]) # Add --enable-maintainer-mode option to configure. # From Jim Meyering # Copyright 1996, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 AC_DEFUN([AM_MAINTAINER_MODE], [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode is disabled by default AC_ARG_ENABLE(maintainer-mode, [ --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer], USE_MAINTAINER_MODE=$enableval, USE_MAINTAINER_MODE=no) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST(MAINT)dnl ] ) AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. AC_PREREQ([2.52]) # serial 6 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) vdk-2.4.0/config.guess0000755000000000000000000012206510052331512010246 #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-06-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 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. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown ## for Red Hat Linux if test -f /etc/redhat-release ; then VENDOR=redhat ; else VENDOR= ; fi # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR:-unknown}-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-${VENDOR:-unknown}-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR:-unknown}-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR:-ibm}-linux-gnu exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-${VENDOR:-unknown}-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR:-pc}-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: vdk-2.4.0/config.h.in0000644000000000000000000000343410052331552007753 /* config.h.in. Generated from configure.in by autoheader. */ #ifndef CONFIG_H #define CONFIG_H #undef VERSION #undef PACKAGE #undef HAVE_PTHREAD #undef HAVE_GNOME #undef VDKDEBUG #undef HAVE_IMLIB #undef HAVE_LIBTIFF #undef HAVE_LIBJPEG #undef HAVE_LIBGIF #undef HAVE_LIBPNG #undef HAVE_SHAPED_EXT #undef HAVE_MEMBER_TEMPLATES #undef HAVE_AUTO_PTR #undef HAVE_MUTABLE #undef HAVE_PARTIAL_SPECIALIZATION #undef USE_SIGCPLUSPLUS #endif /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* 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 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 vdk-2.4.0/config.sub0000755000000000000000000007301510052331512007711 #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-06-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 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. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | s390 | s390x \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | s390-* | s390x-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: vdk-2.4.0/configure.in0000644000000000000000000002265610052331510010242 dnl configure.in for VDK AC_PREREQ(2.52) AC_INIT(vdk/vdk.h) cflags_set=${CFLAGS+set} VDK_VERSION_MAJOR=2 VDK_VERSION_MINOR=4 VDK_VERSION_MICRO=0 dnl put the right date here as we release a new version VDK_RELEASE_DATE="05-22-2004" VDK_VERSION=$VDK_VERSION_MAJOR.$VDK_VERSION_MINOR.$VDK_VERSION_MICRO AC_SUBST(VDK_VERSION_MAJOR) AC_SUBST(VDK_VERSION_MINOR) AC_SUBST(VDK_VERSION_MICRO) AC_SUBST(VDK_VERSION) AC_SUBST(VDK_RELEASE_DATE) dnl Libtool LT_VDK_RELEASE=$VDK_VERSION_MAJOR.$VDK_VERSION_MINOR LT_VDK_CURRENT=`expr $VDK_VERSION_MAJOR + $VDK_VERSION_MINOR` LT_VDK_REVISION=$VDK_VERSION_MICRO LT_VDK_AGE=$VDK_VERSION_MINOR AC_SUBST(LT_VDK_RELEASE) AC_SUBST(LT_VDK_CURRENT) AC_SUBST(LT_VDK_REVISION) AC_SUBST(LT_VDK_AGE) dnl For Automake VERSION=$VDK_VERSION PACKAGE=vdk dnl Initialize automake stuff AM_INIT_AUTOMAKE($PACKAGE, $VERSION) AC_CANONICAL_HOST dnl Initialize Libtool AM_PROG_LIBTOOL AM_MAINTAINER_MODE AC_PROG_CXX AC_PROG_CXXCPP AC_LANG_CPLUSPLUS AC_SUBST(LIBS) AC_SUBST(CFLAGS) AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG = xno ; then AC_MSG_ERROR([*** pkg-config not found. See http://pkgconfig.sourceforge.net]) fi if ! pkg-config --atleast-pkgconfig-version 0.8 ; then AC_MSG_ERROR([*** pkg-config too old; version 0.8 or better required.]) fi echo "checking if an updated version of gtk+ is installed" if $PKG_CONFIG --atleast-version 2.4.0 gtk+-2.0 ; then GTK_CFLAGS=`$PKG_CONFIG --cflags gtk+-2.0` GTK_LIBS=`$PKG_CONFIG --libs gtk+-2.0` GTK_DEPLIBS=$GTK_LIBS echo " gtk+ version:" `pkg-config gtk+-2.0 --modversion` else AC_MSG_ERROR([ *** GTK+ 2.4.0 or newer is required. The latest version of GTK *** is available from http://gtk.org/ *** or get latest cvs at http://gnome.org: ]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) dnl Now check C++ compiler AC_MSG_CHECKING(if C++ compiler supports bool (required)) AC_TRY_COMPILE( [ ],[ bool b=true; bool b1=false; ],[ ac_bool=yes ],[ config_error=yes AC_WARN(bool type is not supported by your compiler) ]) AC_MSG_RESULT([$ac_bool]) AC_MSG_CHECKING(if C++ compiler supports templates well enough (required)) AC_TRY_LINK( [ class foo { public: int a(float,int,int,foo*,foo**) { return 0; } }; template class k { public: rettype (T::*method)(P1,P2,P3,P4,P5); }; ],[ k a; ],[ ac_vdk_template_support_well=yes ],[ ac_vdk_template_support_well=no config_error=yes AC_WARN(your C++ compiler does not support templates well enough) ]) AC_MSG_RESULT([$ac_vdk_template_support_well]) AC_MSG_CHECKING(if C++ environment has working auto_ptr<>) AC_TRY_COMPILE( [ #include ],[ std::auto_ptr a; ],[ vdk_autoptr_ok=yes AC_DEFINE(HAVE_AUTO_PTR) ],[ vdk_autoptr_ok=no ]) AC_MSG_RESULT([$vdk_autoptr_ok]) AC_MSG_CHECKING(if C++ environment has working string class (required)) AC_TRY_LINK( [ #include using namespace std; class foo { public: void f(const string &s); }; void foo::f(const string &s) { f(s.c_str()); } ],[ foo f1; f1.f("test"); ],[ vdk_string_ok=yes ],[ vdk_string_ok=no config_error=yes AC_WARN(C++ compilers string support does not work) ]) AC_MSG_RESULT([$vdk_string_ok]) AC_MSG_CHECKING(if C++ environment provides all required features) if test "x$config_error" = xyes ; then AC_MSG_RESULT([no]) AC_MSG_ERROR([Your compiler is not powerful enough to compile VDK. If it should be, see config.log for more information of why it failed.]) fi AC_MSG_RESULT([yes]) dnl check if doxygen is installed AC_PATH_PROG(DOXYGEN, doxygen) AC_PATH_PROG(PERL, perl) dnl added by Raff dnl you must tell your programs that DOXYGEN exists AC_SUBST(DOXYGEN) AC_SUBST(PERL) dnl AM_CONFIG_HEADER(./include/vdk/vdkfeatures.h:./include/vdk/vdkfeatures.h.in) AM_CONFIG_HEADER(config.h) dnl ========================== dnl user configurable options dnl ========================== AC_ARG_ENABLE(debug, [ --enable-debug=[no/minimum/yes] enable debug information [default=no]],,enable_debug=no) AC_ARG_ENABLE(opt, [ --enable-opt=[OPTIMIZATION/no] Compile with -Ox optimization [default=2]],,enable_opt=2) AC_ARG_ENABLE(testvdk, [ --enable-testvdk=[yes/no] Compile testvdk program example [default=yes]],,enable_testvdk=yes) #AC_ARG_ENABLE(sigc, [ --enable-sigc=[yes/no] Enable libsigc++-extension [default=no]],,enable_sigc=no) #AC_ARG_ENABLE(testsigc, [ --enable-testsigc=[yes/no] Compile testsigcvdk program [default=no]],,enable_testsigc=no) dnl waiting for gnome support to gtk+2.0 dnl gnome support dnl AC_ARG_ENABLE(gnome, dnl [ --enable-gnome=[yes/no] enable use of gnome[default=no]], dnl gnome=$enableval, gnome=no) dnl doxygen options AC_ARG_ENABLE(doc-html, [ --enable-doc-html[=yes/no] enable generation of docs in html format [default=yes]],,enable_doc_html=yes) AC_ARG_ENABLE(doc-latex, [ --enable-doc-latex[=yes/no] enable generation of docs in latex format [default=no]],,enable_doc_latex=no) AC_ARG_ENABLE(doc-man, [ --enable-doc-man[=yes/no] enable generation of docs in latex format [default=no]],,enable_doc_man=no) if test "x$enable_debug" = "xminimum"; then AC_DEFINE(VDKDEBUG) CXXFLAGS="-s" else if test "x$enable_debug" = "xyes"; then AC_DEFINE(VDKDEBUG) CXXFLAGS="-g" else CXXFLAGS="-s" fi fi if test "x$enable_opt" != "xno"; then CXXFLAGS="$CXXFLAGS -O$enable_opt" fi if test "x$enable_testvdk" = "xyes"; then TESTVDK="testvdk" else TESTVDK="" fi AC_SUBST(TESTVDK) #dnl anyhow we have to add -lpthread #if test "x$enable_sigc" = "xyes" && test "$SIGC_LIBS"!=""; then #dnl earlier versions of libsigc++ might also work (>= 0.85) # AM_PATH_SIGC(1.0.0,, # AC_MSG_WARN(Couldn't find libgsigc++ VDK will be build without it)) # LIBS="$LIBS $SIGC_LIBS" # CFLAGS="$CFLAGS $SIGC_CFLAGS" # CXXFLAGS="$CXXFLAGS $SIGC_CFLAGS" # SIGCDEFINE="-DUSE_SIGCPLUSPLUS" # WITHSIGC="yes" #else # SIGCDEFINE="" # SIGC_CFLAGS="" # SIGC_LIBS="-lpthread" # WITHSIGC="no" #fi #if test "x$enable_testsigc" = "xyes" && test "$SIGCDEFINE" != ""; then # TESTSIGCVDK="testsigcvdk" # WITHTESTSIGCVDK="yes" #else # TESTSIGCVDK="" # WITHTESTSIGCVDK="no" #fi #AC_SUBST(TESTSIGCVDK) #------------------------- # to hide sigc implementation # subst all above with this LIBS="$LIBS -lpthread" SIGCDEFINE="" SIGC_CFLAGS="" SIGC_LIBS="-lpthread" WITHSIGC="no" AC_SUBST(SIGC_CFLAGS) AC_SUBST(SIGC_LIBS) AC_SUBST(SIGCDEFINE) TESTSIGCVDK="" WITHTESTSIGCVDK="no" AC_SUBST(TESTSIGCVDK) #-------------------------- # doxygen support if test "x$enable_doc_html" = "xyes"; then GENERATE_HTML=YES # TAG_SIGC=USE_SIGCPLUSPLUS TAG_SIGC="" else GENERATE_HTML=NO TAG_SIGC="" fi if test "x$enable_devel" = "xyes"; then cflag="-g" fi if test "x$enable_doc_latex" = "xyes"; then GENERATE_LATEX=YES # TAG_SIGC=USE_SIGCPLUSPLUS else GENERATE_LATEX=NO fi if test "x$enable_doc_man" = "xyes"; then GENERATE_MAN=YES # TAG_SIGC=USE_SIGCPLUSPLUS else GENERATE_MAN=NO fi AC_SUBST(GENERATE_HTML) AC_SUBST(GENERATE_LATEX) AC_SUBST(GENERATE_MAN) AC_SUBST(TAG_SIGC) GNOMEDEFINE="" GNOME_CFLAGS="" GNOME_LIBS="" GNOME_VDK="" AC_SUBST(GNOMEDEFINE) AC_SUBST(GNOME_LIBS) AC_SUBST(GNOME_CFLAGS) AC_SUBST(GNOME_VDK) # just to be fully gtk2.x compliant... dnlCXXFLAGS="$CXXFLAGS -DGTK_DISABLE_DEPRECATED -Wall -Wcast-qual -Woverloaded-virtual -Wconversion -Wstrict-prototypes -Winline" CXXFLAGS="$CXXFLAGS -Wall -Wcast-qual -Woverloaded-virtual -Wconversion -Wstrict-prototypes -Winline" AC_SUBST(CXXFLAGS) INCLUDES="$GTK_CFLAGS $SIGC_CFLAGS $SIGCDEFINE" AC_SUBST(INCLUDES) dnl contrib/Makefile dnl testvdk/pixmap/Makefile dnl sigcvdktest/Makefile dnl vdk.spec \ AC_OUTPUT([Makefile \ vdk/Makefile \ vdk/vdkfeatures.h \ testvdk/Makefile \ sigcvdktest/Makefile \ example/Makefile \ doc/Makefile \ doc/doxy/Makefile \ doc/doxy/Doxyfile \ vdk-2.m4 \ vdk-config-2], \ [chmod +x vdk-config-2]) if test -z $DOXYGEN; then echo "*****************************************************"; echo "* doxygen was not found, i will not be able to *"; echo "* generate the docs by myself. *"; echo "* Doxygen is recommended, please check: *"; echo "* http://www.doxygen.org/download.html *"; echo "* for the latest version of doxygen. *"; echo "*****************************************************"; WITHDOCHTML="no" else WITHDOCHTML="yes" fi echo "" echo "VDK configure finished" echo "VDK configuration:" echo " - Version : $VERSION" echo " - Make static lib : $enable_static" echo " - Make vdk test program : $enable_testvdk" echo " - Libsigc++ signal extension support: $WITHSIGC" echo " - Make signal extension test program: $WITHTESTSIGCVDK" if test "x$WITHSIGC" = "xyes"; then echo "**************************************************************" echo "You have choosed to use Libsigc++ with VDK which is" echo "deprecated and will be unsupported in the near future" echo "**************************************************************" fi echo " - Gnome support : $WITHGNOME" echo " - Debug : $enable_debug" echo " - Optimization : $enable_opt" echo " - Make docs on html format : $WITHDOCHTML" echo " * Host : $host" echo " * Installation Prefix : $prefix" echo " * Compiler version :" `g++ --version` echo " * Target machine :" `c++ -dumpmachine` #echo " * CPU :" `cat /proc/cpuinfo`vdk-2.4.0/depcomp0000755000000000000000000003305207740426644007325 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. 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. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a 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 $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done 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 $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$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 $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 vdk-2.4.0/install-sh0000755000000000000000000001272007206652032007740 #!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 vdk-2.4.0/ltconfig0000755000000000000000000027672007315525423007507 #! /bin/sh # ltconfig - Create a system-specific libtool. # Copyright (C) 1996-1999 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 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. # A lot of this script is taken from autoconf-2.10. # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} echo=echo if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell. exec "$SHELL" "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null`} case X$UNAME in *-DOS) PATH_SEPARATOR=';' ;; *) PATH_SEPARATOR=':' ;; esac fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string="`eval $cmd`") 2>/dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then break fi done fi if test "X`($echo '\t') 2>/dev/null`" != 'X\t' || test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for dir in $PATH /usr/ucb; do if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then echo="$dir/echo" break fi done IFS="$save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running ltconfig again with it. ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf "%s\n"' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then # Cool, printf works : elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # The name of this program. progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` # Constants: PROGRAM=ltconfig PACKAGE=libtool VERSION=1.3.5 TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)" ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' rm="rm -f" help="Try \`$progname --help' for more information." # Global variables: default_ofile=libtool can_build_shared=yes enable_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). enable_static=yes enable_fast_install=yes enable_dlopen=unknown enable_win32_dll=no ltmain= silent= srcdir= ac_config_guess= ac_config_sub= host= nonopt= ofile="$default_ofile" verify_host=yes with_gcc=no with_gnu_ld=no need_locks=yes ac_ext=c objext=o libext=a exeext= cache_file= old_AR="$AR" old_CC="$CC" old_CFLAGS="$CFLAGS" old_CPPFLAGS="$CPPFLAGS" old_LDFLAGS="$LDFLAGS" old_LD="$LD" old_LN_S="$LN_S" old_LIBS="$LIBS" old_NM="$NM" old_RANLIB="$RANLIB" old_DLLTOOL="$DLLTOOL" old_OBJDUMP="$OBJDUMP" old_AS="$AS" # Parse the command line options. args= prev= for option do case "$option" in -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then eval "$prev=\$option" prev= continue fi case "$option" in --help) cat <&2 echo "$help" 1>&2 exit 1 ;; *) if test -z "$ltmain"; then ltmain="$option" elif test -z "$host"; then # This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 # if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then # echo "$progname: warning \`$option' is not a valid host type" 1>&2 # fi host="$option" else echo "$progname: too many arguments" 1>&2 echo "$help" 1>&2 exit 1 fi ;; esac done if test -z "$ltmain"; then echo "$progname: you must specify a LTMAIN file" 1>&2 echo "$help" 1>&2 exit 1 fi if test ! -f "$ltmain"; then echo "$progname: \`$ltmain' does not exist" 1>&2 echo "$help" 1>&2 exit 1 fi # Quote any args containing shell metacharacters. ltconfig_args= for arg do case "$arg" in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ltconfig_args="$ltconfig_args '$arg'" ;; *) ltconfig_args="$ltconfig_args $arg" ;; esac done # A relevant subset of AC_INIT. # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 5 compiler messages saved in config.log # 6 checking for... messages and results if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>>./config.log # NLS nuisances. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi if test -n "$cache_file" && test -r "$cache_file"; then echo "loading cache $cache_file within ltconfig" . $cache_file fi if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi if test -z "$srcdir"; then # Assume the source directory is the same one as the path to LTMAIN. srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` test "$srcdir" = "$ltmain" && srcdir=. fi trap "$rm conftest*; exit 1" 1 2 15 if test "$verify_host" = yes; then # Check for config.guess and config.sub. ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/config.guess; then ac_aux_dir=$ac_dir break fi done if test -z "$ac_aux_dir"; then echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 echo "$help" 1>&2 exit 1 fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub # Make sure we can run config.sub. if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : else echo "$progname: cannot run $ac_config_sub" 1>&2 echo "$help" 1>&2 exit 1 fi echo $ac_n "checking host system type""... $ac_c" 1>&6 host_alias=$host case "$host_alias" in "") if host_alias=`$SHELL $ac_config_guess`; then : else echo "$progname: cannot guess host type; you must specify one" 1>&2 echo "$help" 1>&2 exit 1 fi ;; esac host=`$SHELL $ac_config_sub $host_alias` echo "$ac_t$host" 1>&6 # Make sure the host verified. test -z "$host" && exit 1 elif test -z "$host"; then echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 echo "$help" 1>&2 exit 1 else host_alias=$host fi # Transform linux* to *-*-linux-gnu*, to support old configure scripts. case "$host_os" in linux-gnu*) ;; linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` case "$host_os" in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Determine commands to create old-style static archives. old_archive_cmds='$AR cru $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= # Set a sane default for `AR'. test -z "$AR" && AR=ar # Set a sane default for `OBJDUMP'. test -z "$OBJDUMP" && OBJDUMP=objdump # If RANLIB is not set, then run the test. if test "${RANLIB+set}" != "set"; then result=no echo $ac_n "checking for ranlib... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then RANLIB="ranlib" result="ranlib" break fi done IFS="$save_ifs" echo "$ac_t$result" 1>&6 fi if test -n "$RANLIB"; then old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" fi # Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin. test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$AS" && AS=as # Check to see if we are using GCC. if test "$with_gcc" != yes || test -z "$CC"; then # If CC is not set, then try to find GCC or a usable CC. if test -z "$CC"; then echo $ac_n "checking for gcc... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then CC="gcc" break fi done IFS="$save_ifs" if test -n "$CC"; then echo "$ac_t$CC" 1>&6 else echo "$ac_t"no 1>&6 fi fi # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". if test -z "$CC"; then echo $ac_n "checking for cc... $ac_c" 1>&6 IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" cc_rejected=no for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/cc || test -f $dir/cc$ac_exeext; then if test "$dir/cc" = "/usr/ucb/cc"; then cc_rejected=yes continue fi CC="cc" break fi done IFS="$save_ifs" if test $cc_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same name, so the bogon will be chosen # first if we set CC to just the name; use the full file name. shift set dummy "$dir/cc" "$@" shift CC="$@" fi fi if test -n "$CC"; then echo "$ac_t$CC" 1>&6 else echo "$ac_t"no 1>&6 fi if test -z "$CC"; then echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 exit 1 fi fi # Now see if the compiler is really GCC. with_gcc=no echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 echo "$progname:581: checking whether we are using GNU C" >&5 $rm conftest.c cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then with_gcc=yes fi $rm conftest.c echo "$ac_t$with_gcc" 1>&6 fi # Allow CC to be a program name with arguments. set dummy $CC compiler="$2" echo $ac_n "checking for object suffix... $ac_c" 1>&6 $rm conftest* echo 'int i = 1;' > conftest.c echo "$progname:603: checking for object suffix" >& 5 if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then # Append any warnings to the config.log. cat conftest.err 1>&5 for ac_file in conftest.*; do case $ac_file in *.c) ;; *) objext=`echo $ac_file | sed -e s/conftest.//` ;; esac done else cat conftest.err 1>&5 echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi $rm conftest* echo "$ac_t$objext" 1>&6 echo $ac_n "checking for executable suffix... $ac_c" 1>&6 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_exeext="no" $rm conftest* echo 'main () { return 0; }' > conftest.c echo "$progname:629: checking for executable suffix" >& 5 if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then # Append any warnings to the config.log. cat conftest.err 1>&5 for ac_file in conftest.*; do case $ac_file in *.c | *.err | *.$objext ) ;; *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;; esac done else cat conftest.err 1>&5 echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi $rm conftest* fi if test "X$ac_cv_exeext" = Xno; then exeext="" else exeext="$ac_cv_exeext" fi echo "$ac_t$ac_cv_exeext" 1>&6 echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 pic_flag= special_shlib_compile_flags= wl= link_static_flag= no_builtin_flag= if test "$with_gcc" = yes; then wl='-Wl,' link_static_flag='-static' case "$host_os" in beos* | irix5* | irix6* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; aix*) # Below there is a dirty hack to force normal static linking with -ldl # The problem is because libdl dynamically linked with both libc and # libC (AIX C++ library), which obviously doesn't included in libraries # list by gcc. This cause undefined symbols with -static flags. # This hack allows C programs to be linked with "-static -ldl", but # we not sure about C++ programs. link_static_flag="$link_static_flag ${wl}-lC" ;; cygwin* | mingw* | os2*) # We can build DLLs from non-PIC. ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. pic_flag='-m68020 -resident32 -malways-restore-a4' ;; sysv4*MP*) if test -d /usr/nec; then pic_flag=-Kconform_pic fi ;; *) pic_flag='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case "$host_os" in aix3* | aix4*) # All AIX code is PIC. link_static_flag='-bnso -bI:/lib/syscalls.exp' ;; hpux9* | hpux10* | hpux11*) # Is there a better link_static_flag that works with the bundled CC? wl='-Wl,' link_static_flag="${wl}-a ${wl}archive" pic_flag='+Z' ;; irix5* | irix6*) wl='-Wl,' link_static_flag='-non_shared' # PIC (with -KPIC) is the default. ;; cygwin* | mingw* | os2*) # We can build DLLs from non-PIC. ;; osf3* | osf4* | osf5*) # All OSF/1 code is PIC. wl='-Wl,' link_static_flag='-non_shared' ;; sco3.2v5*) pic_flag='-Kpic' link_static_flag='-dn' special_shlib_compile_flags='-belf' ;; solaris*) pic_flag='-KPIC' link_static_flag='-Bstatic' wl='-Wl,' ;; sunos4*) pic_flag='-PIC' link_static_flag='-Bstatic' wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) pic_flag='-KPIC' link_static_flag='-Bstatic' wl='-Wl,' ;; uts4*) pic_flag='-pic' link_static_flag='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then pic_flag='-Kconform_pic' link_static_flag='-Bstatic' fi ;; *) can_build_shared=no ;; esac fi if test -n "$pic_flag"; then echo "$ac_t$pic_flag" 1>&6 # Check to make sure the pic_flag actually works. echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 $rm conftest* echo "int some_variable = 0;" > conftest.c save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $pic_flag -DPIC" echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5 if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then # Append any warnings to the config.log. cat conftest.err 1>&5 case "$host_os" in hpux9* | hpux10* | hpux11*) # On HP-UX, both CC and GCC only warn that PIC is supported... then they # create non-PIC objects. So, if there were any warnings, we assume that # PIC is not supported. if test -s conftest.err; then echo "$ac_t"no 1>&6 can_build_shared=no pic_flag= else echo "$ac_t"yes 1>&6 pic_flag=" $pic_flag" fi ;; *) echo "$ac_t"yes 1>&6 pic_flag=" $pic_flag" ;; esac else # Append any errors to the config.log. cat conftest.err 1>&5 can_build_shared=no pic_flag= echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" $rm conftest* else echo "$ac_t"none 1>&6 fi # Check to see if options -o and -c are simultaneously supported by compiler echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 $rm -r conftest 2>/dev/null mkdir conftest cd conftest $rm conftest* echo "int some_variable = 0;" > conftest.c mkdir out # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.o" echo "$progname:829: checking if $compiler supports -c -o file.o" >&5 if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then echo "$ac_t"no 1>&6 compiler_c_o=no else echo "$ac_t"yes 1>&6 compiler_c_o=yes fi else # Append any errors to the config.log. cat out/conftest.err 1>&5 compiler_c_o=no echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm -r conftest 2>/dev/null if test x"$compiler_c_o" = x"yes"; then # Check to see if we can write to a .lo echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 $rm conftest* echo "int some_variable = 0;" > conftest.c save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -c -o conftest.lo" echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5 if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then echo "$ac_t"no 1>&6 compiler_o_lo=no else echo "$ac_t"yes 1>&6 compiler_o_lo=yes fi else # Append any errors to the config.log. cat conftest.err 1>&5 compiler_o_lo=no echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" $rm conftest* else compiler_o_lo=no fi # Check to see if we can do hard links to lock some files if needed hard_links="nottested" if test "$compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$ac_t$hard_links" 1>&6 $rm conftest* if test "$hard_links" = no; then echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 need_locks=warn fi else need_locks=no fi if test "$with_gcc" = yes; then # Check to see if options -fno-rtti -fno-exceptions are supported by compiler echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 $rm conftest* echo "int some_variable = 0;" > conftest.c save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then echo "$ac_t"no 1>&6 compiler_rtti_exceptions=no else echo "$ac_t"yes 1>&6 compiler_rtti_exceptions=yes fi else # Append any errors to the config.log. cat conftest.err 1>&5 compiler_rtti_exceptions=no echo "$ac_t"no 1>&6 fi CFLAGS="$save_CFLAGS" $rm conftest* if test "$compiler_rtti_exceptions" = "yes"; then no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' else no_builtin_flag=' -fno-builtin' fi fi # Check for any special shared library compilation flags. if test -n "$special_shlib_compile_flags"; then echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : else echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 can_build_shared=no fi fi echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 $rm conftest* echo 'main(){return(0);}' > conftest.c save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $link_static_flag" echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5 if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then echo "$ac_t$link_static_flag" 1>&6 else echo "$ac_t"none 1>&6 link_static_flag= fi LDFLAGS="$save_LDFLAGS" $rm conftest* if test -z "$LN_S"; then # Check to see if we can use ln -s, or we need hard links. echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 $rm conftest.dat if ln -s X conftest.dat 2>/dev/null; then $rm conftest.dat LN_S="ln -s" else LN_S=ln fi if test "$LN_S" = "ln -s"; then echo "$ac_t"yes 1>&6 else echo "$ac_t"no 1>&6 fi fi # Make sure LD is an absolute path. if test -z "$LD"; then ac_prog=ld if test "$with_gcc" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 echo "$progname:991: checking for ld used by GCC" >&5 ac_prog=`($CC -print-prog-name=ld) 2>&5` case "$ac_prog" in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we are not using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld... $ac_c" 1>&6 echo "$progname:1015: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 echo "$progname:1018: checking for non-GNU ld" >&5 fi if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" fi if test -n "$LD"; then echo "$ac_t$LD" 1>&6 else echo "$ac_t"no 1>&6 fi if test -z "$LD"; then echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 exit 1 fi fi # Check to see if it really is or is not GNU ld. echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then with_gnu_ld=yes else with_gnu_ld=no fi echo "$ac_t$with_gnu_ld" 1>&6 # See if the linker supports building shared libraries. echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 allow_undefined_flag= no_undefined_flag= need_lib_prefix=unknown need_version=unknown # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments archive_cmds= archive_expsym_cmds= old_archive_from_new_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported runpath_var= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an egrep regular expression of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. case "$host_os" in cygwin* | mingw*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$with_gcc" != yes; then with_gnu_ld=no fi ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case "$host_os" in aix3* | aix4*) # On AIX, the GNU linker is very broken ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF ;; amigaos*) archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=yes # Extract the symbol export list from an `--export-all' def file, # then regenerate the def file from the symbol export list, so that # the compiled dll only exports the symbol export list. # Be careful not to strip the DATA tag left by newer dlltools. export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $objdir/$soname-def > $export_symbols' # If DATA tags from a recent dlltool are present, honour them! archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~ _lt_hint=1; cat $export_symbols | while read symbol; do set dummy \$symbol; case \$# in 2) echo " \$2 @ \$_lt_hint ; " >> $objdir/$soname-def;; *) echo " \$2 @ \$_lt_hint \$3 ; " >> $objdir/$soname-def;; esac; _lt_hint=`expr 1 + \$_lt_hint`; done~ test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts' old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib' # can we support soname and/or expsyms with a.out? -oliva fi ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' case $host_os in cygwin* | mingw*) # dlltool doesn't understand --whole-archive et. al. whole_archive_flag_spec= ;; *) # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi ;; esac fi else # PORTME fill in a description of your system's linker (not GNU ld) case "$host_os" in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$with_gcc" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4*) hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib' hardcode_libdir_separator=':' if test "$with_gcc" = yes; then collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi shared_flag='-shared' else shared_flag='${wl}-bM:SRE' hardcode_direct=yes fi allow_undefined_flag=' ${wl}-berok' archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}' archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}' case "$host_os" in aix4.[01]|aix4.[01].*) # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on always_export_symbols=yes ;; esac ;; amigaos*) archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; cygwin* | mingw*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs' fix_srcfile_path='`cygpath -w $srcfile`' ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9* | hpux10* | hpux11*) case "$host_os" in hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;; esac hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_minus_L=yes # Not in the search PATH, but as the default # location of the library. export_dynamic_flag_spec='${wl}-E' ;; irix5* | irix6*) if test "$with_gcc" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF fi hardcode_libdir_flag_spec='${wl}-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; openbsd*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' ;; osf3*) if test "$with_gcc" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # As osf3* with the addition of the -msym flag if test "$with_gcc" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; rhapsody*) archive_cmds='$CC -bundle -undefined suppress -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flags_spec='-L$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case "$host_os" in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $linkopts' else archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; unixware7*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$ac_t$ld_shlibs" 1>&6 test "$ld_shlibs" = no && can_build_shared=no if test -z "$NM"; then echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 case "$NM" in [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path. *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then NM="$ac_dir/nm -B" break elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then NM="$ac_dir/nm -p" break else NM=${NM="$ac_dir/nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" test -z "$NM" && NM=nm ;; esac echo "$ac_t$NM" 1>&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" # Define system-specific variables. case "$host_os" in aix*) symcode='[BCDT]' ;; cygwin* | mingw*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" ;; irix*) symcode='[BCDEGRST]' ;; solaris*) symcode='[BDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then symcode='[ABCDGISTW]' fi # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no $rm conftest* cat > conftest.c <&5 if { (eval echo $progname:1654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then # Now try to grab the symbols. nlist=conftest.nm if { echo "$progname:1657: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if egrep ' nm_test_var$' "$nlist" >/dev/null; then if egrep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.c #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' cat <> conftest.c #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c cat <<\EOF >> conftest.c {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$objext conftstm.$objext save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="conftstm.$objext" CFLAGS="$CFLAGS$no_builtin_flag" if { (eval echo $progname:1709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then pipe_works=yes else echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi LIBS="$save_LIBS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi $rm conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else global_symbol_pipe= fi done if test "$pipe_works" = yes; then echo "${ac_t}ok" 1>&6 else echo "${ac_t}failed" 1>&6 fi if test -z "$global_symbol_pipe"; then global_symbol_to_cdecl= fi # Check hardcoding attributes. echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var"; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$hardcode_shlibpath_var" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$ac_t$hardcode_action" 1>&6 reload_flag= reload_cmds='$LD$reload_flag -o $output$reload_objs' echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 # PORTME Some linkers may need a different reload flag. reload_flag='-r' echo "$ac_t$reload_flag" 1>&6 test -n "$reload_flag" && reload_flag=" $reload_flag" # PORTME Fill in your ld.so characteristics library_names_spec= libname_spec='lib$name' soname_spec= postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" file_magic_cmd= file_magic_test_file= deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [regex]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given egrep regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 case "$host_os" in aix3*) version_type=linux library_names_spec='${libname}${release}.so$versuffix $libname.a' shlibpath_var=LIBPATH # AIX has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}.so$major' ;; aix4*) version_type=linux # AIX has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. # We preserve .a as extension for shared libraries though AIX4.2 # and later linker supports .so library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' shlibpath_var=LIBPATH deplibs_check_method=pass_all ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}.so' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH deplibs_check_method=pass_all lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' file_magic_cmd=/usr/bin/file file_magic_test_file=/shlib/libc.so sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" export_dynamic_flag_spec=-rdynamic # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw*) version_type=windows need_version=no need_lib_prefix=no if test "$with_gcc" = yes; then library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a' else library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' fi dynamic_linker='Win32 ld.exe' deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' file_magic_cmd='${OBJDUMP} -f' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case "$version_type" in freebsd-elf*) deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' file_magic_cmd=/usr/bin/file file_magic_test_file=`echo /usr/lib/libc.so*` library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' need_version=no need_lib_prefix=no ;; freebsd-*) deplibs_check_method=unknown library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case "$host_os" in freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH deplibs_check_method=pass_all ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. dynamic_linker="$host_os dld.sl" version_type=sunos need_lib_prefix=no need_version=no shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' soname_spec='${libname}${release}.sl$major' # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' case "$host_os" in hpux10.20*) # TODO: Does this work for hpux-11 too? deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' file_magic_cmd=/usr/bin/file file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6*) version_type=irix need_lib_prefix=no need_version=no soname_spec='${libname}${release}.so.$major' library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so' case "$host_os" in irix5*) libsuff= shlibsuff= # this will be overridden with pass_all, but let us keep it just in case deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case "$LD" in # libtool.m4 will add one of these switches to LD *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" file_magic_cmd=/usr/bin/file file_magic_test_file=`echo /lib${libsuff}/libc.so*` deplibs_check_method='pass_all' ;; # No shared lib support for Linux oldld, aout, or coff. linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) dynamic_linker=no ;; # This must be Linux ELF. linux-gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no deplibs_check_method=pass_all if test -f /lib/ld.so.1; then dynamic_linker='GNU ld.so' else # Only the GNU ld.so supports shared libraries on MkLinux. case "$host_cpu" in powerpc*) dynamic_linker=no ;; *) dynamic_linker='Linux ld.so' ;; esac fi ;; netbsd*) version_type=sunos if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' soname_spec='${libname}${release}.so$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH ;; openbsd*) version_type=sunos if test "$with_gnu_ld" = yes; then need_lib_prefix=no need_version=no fi library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH ;; os2*) libname_spec='$name' need_lib_prefix=no library_names_spec='$libname.dll $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_version=no soname_spec='${libname}${release}.so' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' shlibpath_var=LD_LIBRARY_PATH # this will be overridden with pass_all, but let us keep it just in case deplibs_check_method='file_magic COFF format alpha shared library' file_magic_cmd=/usr/bin/file file_magic_test_file=/shlib/libc.so deplibs_check_method='pass_all' sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rhapsody*) version_type=sunos library_names_spec='${libname}.so' soname_spec='${libname}.so' shlibpath_var=DYLD_LIBRARY_PATH deplibs_check_method=pass_all ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib" file_magic_cmd=/usr/bin/file file_magic_test_file=/lib/libc.so ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH case "$host_vendor" in sequent) file_magic_cmd='/bin/file' deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; ncr) deplibs_check_method='pass_all' ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' file_magic_cmd=/usr/bin/file file_magic_test_file=`echo /usr/lib/libc.so*` ;; esac ;; uts4*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' soname_spec='$libname.so.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; *) dynamic_linker=no ;; esac echo "$ac_t$dynamic_linker" 1>&6 test "$dynamic_linker" = no && can_build_shared=no # Report the final consequences. echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 # Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in # configure.in, otherwise build static only libraries. case "$host_os" in cygwin* | mingw* | os2*) if test x$can_build_shared = xyes; then test x$enable_win32_dll = xno && can_build_shared=no echo "checking if package supports dlls... $can_build_shared" 1>&6 fi ;; esac if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then case "$deplibs_check_method" in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | egrep "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) test "$enable_shared" = yes && enable_static=no ;; esac echo "$ac_t$enable_shared" 1>&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "checking whether to build static libraries... $enable_static" 1>&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi echo $ac_n "checking for objdir... $ac_c" 1>&6 rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. objdir=_libs fi rmdir .libs 2>/dev/null echo "$ac_t$objdir" 1>&6 if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then lt_cv_dlopen=no lt_cv_dlopen_libs= echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 echo "$progname:2248: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dlopen""... $ac_c" 1>&6 echo "$progname:2288: checking for dlopen" >&5 if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen(); int main() { /* 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_dlopen) || defined (__stub___dlopen) choke me #else dlopen(); #endif ; return 0; } EOF if { (eval echo $progname:2318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_dlopen=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_dlopen=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dlopen" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 echo "$progname:2335: checking for dld_link in -ldld" >&5 ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for shl_load""... $ac_c" 1>&6 echo "$progname:2375: checking for shl_load" >&5 if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load(); int main() { /* 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_shl_load) || defined (__stub___shl_load) choke me #else shl_load(); #endif ; return 0; } EOF if { (eval echo $progname:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_shl_load=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_shl_load=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="shl_load" else echo "$ac_t""no" 1>&6 echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 echo "$progname:2423: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else echo "$ac_t""no" 1>&6 fi fi fi fi fi fi if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes fi case "$lt_cv_dlopen" in dlopen) for ac_hdr in dlfcn.h; do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "$progname:2488: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int fnord = 0; EOF ac_try="$ac_compile >/dev/null 2>conftest.out" { (eval echo $progname:2498: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 else echo "$ac_t""no" 1>&6 fi done if test "x$ac_cv_header_dlfcn_h" = xyes; then CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" fi eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" LIBS="$lt_cv_dlopen_libs $LIBS" echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 echo "$progname:2526: checking whether a program can dlopen itself" >&5 if test "${lt_cv_dlopen_self+set}" = set; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then lt_cv_dlopen_self=cross else cat > conftest.c < #endif #include #ifdef RTLD_GLOBAL # define LTDL_GLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LTDL_GLOBAL DL_GLOBAL # else # define LTDL_GLOBAL 0 # endif #endif /* We may have to define LTDL_LAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LTDL_LAZY_OR_NOW # ifdef RTLD_LAZY # define LTDL_LAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LTDL_LAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LTDL_LAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LTDL_LAZY_OR_NOW DL_NOW # else # define LTDL_LAZY_OR_NOW 0 # endif # endif # endif # endif #endif fnord() { int i=42;} main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } EOF if { (eval echo $progname:2580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then lt_cv_dlopen_self=yes else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* lt_cv_dlopen_self=no fi rm -fr conftest* fi fi echo "$ac_t""$lt_cv_dlopen_self" 1>&6 if test "$lt_cv_dlopen_self" = yes; then LDFLAGS="$LDFLAGS $link_static_flag" echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 echo "$progname:2599: checking whether a statically linked program can dlopen itself" >&5 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then lt_cv_dlopen_self_static=cross else cat > conftest.c < #endif #include #ifdef RTLD_GLOBAL # define LTDL_GLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LTDL_GLOBAL DL_GLOBAL # else # define LTDL_GLOBAL 0 # endif #endif /* We may have to define LTDL_LAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LTDL_LAZY_OR_NOW # ifdef RTLD_LAZY # define LTDL_LAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LTDL_LAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LTDL_LAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LTDL_LAZY_OR_NOW DL_NOW # else # define LTDL_LAZY_OR_NOW 0 # endif # endif # endif # endif #endif fnord() { int i=42;} main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } EOF if { (eval echo $progname:2653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then lt_cv_dlopen_self_static=yes else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* lt_cv_dlopen_self_static=no fi rm -fr conftest* fi fi echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 fi ;; esac case "$lt_cv_dlopen_self" in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case "$lt_cv_dlopen_self_static" in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Copy echo and quote the copy, instead of the original, because it is # used later. ltecho="$echo" if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then ltecho="$CONFIG_SHELL \$0 --fallback-echo" fi LTSHELL="$SHELL" LTCONFIG_VERSION="$VERSION" # Only quote variables if we're using ltmain.sh. case "$ltmain" in *.sh) # Now quote all the things that may contain metacharacters. for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \ old_LD old_LDFLAGS old_LIBS \ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \ AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ reload_flag reload_cmds wl \ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ thread_safe_flag_spec whole_archive_flag_spec libname_spec \ library_names_spec soname_spec \ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \ file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ hardcode_libdir_flag_spec hardcode_libdir_separator \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do case "$var" in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ postinstall_cmds | postuninstall_cmds | \ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case "$ltecho" in *'\$0 --fallback-echo"') ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac trap "$rm \"$ofile\"; exit 1" 1 2 15 echo "creating $ofile" $rm "$ofile" cat < "$ofile" #! $SHELL # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. # # Copyright (C) 1996-1999 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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. # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi ### BEGIN LIBTOOL CONFIG EOF cfgfile="$ofile" ;; *) # Double-quote the variables that need it (for aesthetics). for var in old_CC old_CFLAGS old_CPPFLAGS \ old_LD old_LDFLAGS old_LIBS \ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do eval "$var=\\\"\$var\\\"" done # Just create a config file. cfgfile="$ofile.cfg" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 echo "creating $cfgfile" $rm "$cfgfile" cat < "$cfgfile" # `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) EOF ;; esac cat <> "$cfgfile" # Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # # CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ # LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\ # NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\ # DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\ # $0$ltconfig_args # # Compiler and other test output produced by $progname, useful for # debugging $progname, is in ./config.log if it exists. # The version of $progname that generated this script. LTCONFIG_VERSION=$LTCONFIG_VERSION # Shell to use when invoking shell scripts. SHELL=$LTSHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$ltecho # The archiver. AR=$AR # The default C compiler. CC=$CC # The linker used to build libraries. LD=$LD # Whether we need hard or soft links. LN_S=$LN_S # A BSD-compatible nm program. NM=$NM # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$reload_flag reload_cmds=$reload_cmds # How to pass a linker flag through the compiler. wl=$wl # Object file suffix (normally "o"). objext="$objext" # Old archive suffix (normally "a"). libext="$libext" # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$pic_flag # Does compiler simultaneously support -c and -o options? compiler_c_o=$compiler_c_o # Can we write directly to a .lo ? compiler_o_lo=$compiler_o_lo # Must we lock files when doing compilation ? need_locks=$need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$link_static_flag # Compiler flag to turn off builtin functions. no_builtin_flag=$no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$library_names_spec # The coded name of the library, if different from the real name. soname_spec=$soname_spec # Commands used to build and install an old-style archive. RANLIB=$RANLIB old_archive_cmds=$old_archive_cmds old_postinstall_cmds=$old_postinstall_cmds old_postuninstall_cmds=$old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$old_archive_from_new_cmds # Commands used to build and install a shared archive. archive_cmds=$archive_cmds archive_expsym_cmds=$archive_expsym_cmds postinstall_cmds=$postinstall_cmds postuninstall_cmds=$postuninstall_cmds # Method to check whether dependent libraries are shared objects. deplibs_check_method=$deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$global_symbol_to_cdecl # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$hardcode_libdir_separator # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Compile-time system search path for libraries sys_lib_search_path_spec=$sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$exclude_expsyms # Symbols that must always be exported. include_expsyms=$include_expsyms EOF case "$ltmain" in *.sh) echo '### END LIBTOOL CONFIG' >> "$ofile" echo >> "$ofile" case "$host_os" in aix3*) cat <<\EOF >> "$ofile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # Append the ltmain.sh script. sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1) # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? chmod +x "$ofile" ;; *) # Compile the libtool program. echo "FIXME: would compile $ltmain" ;; esac test -n "$cache_file" || exit 0 # AC_CACHE_SAVE trap '' 1 2 15 cat > confcache <<\EOF # 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. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # 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. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: vdk-2.4.0/ltmain.sh0000644000000000000000000054016310052331512007551 # ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 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 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. # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # End of Shell function definitions ##################################### # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit 1 ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit 0 ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0" done exit 0 ;; --debug) $echo "$progname: enabling shell trace mode" set -x ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit 0 ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit 1 fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_output= arg_mode=normal libobj= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit 1 fi arg_mode=target continue ;; -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit 1 ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit 1 ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit 1 ;; esac # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. if test -n "$available_tags" && test -z "$tagname"; then case $base_compile in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" case "$base_compile " in "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit 1 # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit 1 fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit 1" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit 1" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$0" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" base_compile="$base_compile $arg" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit 1 fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit 1 fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit 1 else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit 1 fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit 1 fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit 1 fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit 1 fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit 1 else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base link # command doesn't match the default compiler. if test -n "$available_tags" && test -z "$tagname"; then case $base_compile in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" case $base_compile in "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) # The compiler in $compile_command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit 1 # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit 1 ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplcations in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit 1 ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do # Search the libtool library lib="$searchdir/lib${name}.la" if test -f "$lib"; then found=yes break fi done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit 1 fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit 1 fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit 1 fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit 1 fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' eval cmds=\"$extract_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' eval cmds=\"$old_archive_from_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against it, someone # is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit 1 fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi newlib_search_path="$newlib_search_path $path" path="" fi ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$deplibs $depdepl" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit 1 else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit 1 fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in [0-9]*) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $revision in [0-9]*) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $age in [0-9]*) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols eval cmds=\"$export_symbols_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval cmds=\"$module_expsym_cmds\" else eval cmds=\"$module_cmds\" fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi fi if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit 0 fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" eval cmds=\"$reload_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit 0 fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" eval cmds=\"$reload_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit 1 ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit 0 fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $0 --fallback-echo"; then case $0 in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; *) qecho="$SHELL `pwd`/$0 --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit 1" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit 1 fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit 1 fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " chmod +x $output fi exit 0 ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit 0 ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit 1 fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit 1 fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit 1 fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" eval cmds=\"$postinstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit 0 ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit 1 fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir_mktemp=`mktemp -d $tmpdir/libtool-XXXXXX 2> /dev/null` if test "$?" = 0 ; then tmpdir="$tmpdir_mktemp" unset tmpdir_mktemp else tmpdir="$tmpdir/libtool-$$" fi if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : else $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $0 --finish$current_libdirs' else exit 0 fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. eval cmds=\"$finish_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit 0 $echo "----------------------------------------------------------------------" $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit 0 ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit 1 fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit 1 fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit 1 fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit 0 fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit 1 fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. eval cmds=\"$postuninstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. eval cmds=\"$old_postuninstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit 1 ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit 1 fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit 1 fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit 0 ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit 0 # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: vdk-2.4.0/missing0000755000000000000000000001420207206652147007337 #! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # Franc,ois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`configure.in'. 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 missing on your system. You should only need it if you modified \`configure.in'. 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 missing on your system. You should only need it if you modified \`acconfig.h' or \`configure.in'. 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.in` if test -z "$files"; then files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in` test -z "$files" || files="$files.in" else files=`echo "$files" | sed -e 's/:/ /g'` fi test -z "$files" && files="config.h.in" touch $files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. 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$/touch \1.in/' \ | sh ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 vdk-2.4.0/mkinstalldirs0000755000000000000000000000134107206652151010541 #! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1.1.1 2000/11/22 05:06:49 mariomotta Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" 1>&2 mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here vdk-2.4.0/vdk-2.m4.in0000644000000000000000000001401307524534254007533 # Configure paths for VDK # Mario Motta 11-19-2000 # stolen from Frank Belew # stolen from Manish Singh # Shamelessly stolen from Owen Taylor AC_DEFUN(AM_PATH_VDK_2, [## ## Get the cflags and libraries from the vdk-config script ## AC_ARG_WITH(vdk-prefix,[ --with-vdk-prefix=PFX Prefix where VDK is installed (optional)], vdk_prefix="$withval", vdk_prefix="") AC_ARG_WITH(vdk-exec-prefix,[ --with-vdk-exec-prefix=PFX Exec prefix where VDK is installed (optional)], vdk_exec_prefix="$withval", vdk_exec_prefix="") AC_ARG_ENABLE(vdktest, [ --disable-vdktest Do not try to compile and run a test VDK program], , enable_vdktest=yes) if test x$vdk_exec_prefix != x ; then vdk_args="$vdk_args --exec-prefix=$vdk_exec_prefix" if test x${VDK_CONFIG+set} != xset ; then VDK_CONFIG=$vdk_exec_prefix/bin/vdk-config-2 fi fi if test x$vdk_prefix != x ; then vdk_args="$vdk_args --prefix=$vdk_prefix" if test x${VDK_CONFIG+set} != xset ; then VDK_CONFIG=$vdk_prefix/bin/vdk-config-2 fi fi AC_PATH_PROG(VDK_CONFIG, vdk-config-2, no) min_vdk_version=ifelse([$1], ,@VDK_VERSION@,$1) AC_MSG_CHECKING(for VDK - version >= $min_vdk_version) no_vdk="" if test "$VDK_CONFIG" = "no" ; then no_vdk=yes else AC_LANG_SAVE AC_LANG_CPLUSPLUS VDK_CFLAGS=`$VDK_CONFIG $vdkconf_args --cflags` VDK_LIBS=`$VDK_CONFIG $vdkconf_args --libs` vdk_major_version=`$VDK_CONFIG $vdk_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` vdk_minor_version=`$VDK_CONFIG $vdk_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` vdk_micro_version=`$VDK_CONFIG $vdk_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_vdktest" = "xyes" ; then ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CXXFLAGS="$CXXFLAGS $VDK_CFLAGS" LIBS="$LIBS $VDK_LIBS" ## ## Now check if the installed VDK is sufficiently new. (Also sanity ## checks the results of vdk-config to some extent ## rm -f conf.vdktest AC_TRY_RUN([ #include // #include #include extern "C" int system(const char *s); int main () { system ("touch conf.vdktest"); if (($vdk_major_version > VDK_VERSION_MAJOR) || (($vdk_major_version == VDK_VERSION_MAJOR) && ($vdk_minor_version > VDK_VERSION_MINOR)) || (($vdk_major_version == VDK_VERSION_MAJOR) && ($vdk_minor_version == VDK_VERSION_MINOR) && ($vdk_micro_version >= VDK_VERSION_MICRO))) { return 0; } else { printf("\n*** 'vdk-config-2 --version' returned %d.%d, but the minimum version\n", $vdk_major_version, $vdk_minor_version); printf("*** of VDK required is %d.%d. If vdk-config is correct, then it is\n", VDK_VERSION_MAJOR, VDK_VERSION_MINOR); printf("*** best to upgrade to the required version.\n"); printf("*** If vdk-config was wrong, set the environment variable VDK_CONFIG\n"); printf("*** to point to the correct copy of vdk-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } ],, no_vdk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_vdk" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$VDK_CONFIG" = "no" ; then echo "*** The vdk-config-2 script installed by VDK could not be found" echo "*** If VDK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the VDK_CONFIG environment variable to the" echo "*** full path to vdk-config." else if test -f conf.vdktest ; then : else echo "*** Could not run VDK test program, checking why..." CXXFLAGS="$CXXFLAGS $VDK_CFLAGS" LIBS="$LIBS $VDK_LIBS" AC_TRY_LINK([ #include #include ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding VDK or finding the wrong" echo "*** version of VDK. If it is not finding VDK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means VDK was incorrectly installed" echo "*** or that you have moved VDK since it was installed. In the latter case, you" echo "*** may want to edit the vdk-config script: $VDK_CONFIG" ]) CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi VDK_CFLAGS="" VDK_LIBS="" ifelse([$3], , :, [$3]) fi VDK_VERSION_MAJOR=@VDK_VERSION_MAJOR@ VDK_VERSION_MINOR=@VDK_VERSION_MINOR@ VDK_VERSION_MICRO=@VDK_VERSION_MICRO@ AC_SUBST(VDK_VERSION_MAJOR) AC_SUBST(VDK_VERSION_MINOR) AC_SUBST(VDK_VERSION_MICRO) AC_SUBST(VDK_CFLAGS) AC_SUBST(VDK_LIBS) rm -f conf.vdktest ]) ## FC_EXPAND_DIR(VARNAME, DIR) ## expands occurrences of ${prefix} and ${exec_prefix} in the given DIR, ## and assigns the resulting string to VARNAME ## example: FC_EXPAND_DIR(LOCALEDIR, "$datadir/locale") ## eg, then: AC_DEFINE_UNQUOTED(LOCALEDIR, "$LOCALEDIR") ## by Alexandre Oliva ## from http://www.cygnus.com/ml/automake/1998-Aug/0040.html ## AC_DEFUN(FC_EXPAND_DIR, [ ## $1=$2 ## $1=`( ## test "x$prefix" = xNONE && prefix="$ac_default_prefix" ## test "x$exec_prefix" = xNONE && exec_prefix="${prefix}" ## eval echo \""[$]$1"\" ## )` ## ]) vdk-2.4.0/vdk-config-2.in0000644000000000000000000000547007206652154010463 #!/bin/sh # this is shamelessly stolen from gnome-config prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ bindir=${exec_prefix}/bin pkglibdir=${libdir}/@PACKAGE@ transform=@program_transform_name@ CFLAGS="-I@includedir@/vdk2" LIBDIRS="-L@libdir@" vdk_libs="$LIBDIRS -lvdk @GNOME_VDK@ @GTK_LIBS@\ @SIGC_LIBS@ @GNOME_LIBS@" vdk_cflags="$CFLAGS @GTK_CFLAGS@ @SIGC_CFLAGS@\ @GNOME_CFLAGS@ @SIGCDEFINE@ @GNOMEDEFINE@" usage() { cat << EOF VDK: The Visual Development Kit C++ Library config script Version @VDK_VERSION@ released on @VDK_RELEASE_DATE@ Usage: vdk-config-2 [OPTION]... Generic options -v --version output VDK version information -h --help display this help and exit Utilities Compilation support options -c --cflags print pre-processor and compiler flags -l --libs print library linking information --libs-only-L only print the -L/-R part of --libs --libs-only-l only print the -l part of --libs -d --define add a -D_VDK_ EOF exit $1 } if test $# -eq 0; then usage 1 fi cflags=false libs_L=false libs_l=false any=no while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in -v | --version) echo @VDK_VERSION@ exit 0 ;; -h | --help) usage 0 ;; -c | --cflags) cflags=true ;; -l | --libs) libs_L=true libs_l=true ;; --libs-only-L) libs_L=true ;; --libs-only-l) libs_l=true ;; -d | --define) define="-D_VDK_" ;; *) usage 1 ;; esac shift done # default to VDK for backward compatibility # (should be removed some time in the future) if test "x$any" = xno; then the_libs="$the_libs $vdk_libs" the_flags="$the_flags $vdk_cflags" fi if $cflags; then all_flags="$the_flags" fi if $libs_L || $libs_l; then all_flags="$all_flags $the_libs" fi if (test -z "$all_flags" || test "x$all_flags" = "x ") && test "x$define" = "x"; then exit 1 fi # Straight out any possible duplicates, but be careful to # get `-lfoo -lbar -lbaz' for `-lfoo -lbaz -lbar -lbaz' other_flags= lib_L_flags= rev_libs= for i in $all_flags; do case "$i" in # a library, save it for later, in reverse order -l*) rev_libs="$i $rev_libs" ;; -L*|-R*) if $libs_L; then case " $lib_L_flags " in *\ $i\ *) ;; # already there *) lib_L_flags="$lib_L_flags $i" ;; # add it to output esac fi;; *) case " $other_flags " in *\ $i\ *) ;; # already there *) other_flags="$other_flags $i" ;; # add it to output esac ;; esac done ord_libs= if $libs_l; then for i in $rev_libs; do case " $ord_libs " in *\ $i\ *) ;; # already there *) ord_libs="$i $ord_libs" ;; # add it to output in reverse order esac done fi echo $define $other_flags $lib_L_flags $ord_libs exit 0 vdk-2.4.0/autogen.sh0000755000000000000000000000566507206652155007755 #!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` test -z "$srcdir" && srcdir=. DIE=0 PKG_NAME="VDK: The Visual Development Kit C++ Library" (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed to compile Gnome." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } (grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`libtool' installed to compile Gnome." echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed to compile Gnome." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing \`aclocal'. The version of \`automake'" echo "installed doesn't appear recent enough." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \`$0\'" command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac for coin in `find $srcdir -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" for k in $macrodirs; do if test -d $k; then aclocalinclude="$aclocalinclude -I $k" ##else ## echo "**Warning**: No such directory \`$k'. Ignored." fi done if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then echo "Running libtoolize..." libtoolize --force --copy fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --gnu $am_opt ..." automake --add-missing --gnu $am_opt echo "Running autoconf ..." autoconf ) fi done conf_flags="--enable-maintainer-mode --enable-compile-warnings" if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME else echo Skipping configure process. fi vdk-2.4.0/BUGS0000644000000000000000000000020107206652155006414 Known BUGS: =========== - none How to report bugs ================== To report a bug, send mail to: mmotta@users.sourceforge.net vdk-2.4.0/testvdk/0000777000000000000000000000000010052401036007467 5vdk-2.4.0/testvdk/Makefile.in0000644000000000000000000004774010052331516011471 # Makefile.in generated by automake 1.7.8 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ GNOMEDEFINE = @GNOMEDEFINE@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GNOME_VDK = @GNOME_VDK@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_VDK_AGE = @LT_VDK_AGE@ LT_VDK_CURRENT = @LT_VDK_CURRENT@ LT_VDK_RELEASE = @LT_VDK_RELEASE@ LT_VDK_REVISION = @LT_VDK_REVISION@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIGCDEFINE = @SIGCDEFINE@ SIGC_CFLAGS = @SIGC_CFLAGS@ SIGC_LIBS = @SIGC_LIBS@ STRIP = @STRIP@ TAG_SIGC = @TAG_SIGC@ TESTSIGCVDK = @TESTSIGCVDK@ TESTVDK = @TESTVDK@ VDK_RELEASE_DATE = @VDK_RELEASE_DATE@ VDK_VERSION = @VDK_VERSION@ VDK_VERSION_MAJOR = @VDK_VERSION_MAJOR@ VDK_VERSION_MICRO = @VDK_VERSION_MICRO@ VDK_VERSION_MINOR = @VDK_VERSION_MINOR@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ SUBDIRS = . noinst_PROGRAMS = @TESTVDK@ EXTRA_PROGRAMS = testvdk testvdkstring testvdk_LDFLAGS = $(GTK_LIBS) $(SIGC_LIBS) testvdk_LDADD = $(top_srcdir)/vdk/libvdk.la testvdk_SOURCES = \ testvdk.cc \ testvdk.h \ bookcompo.cc\ bookcompo.h\ canvascompo.cc \ canvascompo.h \ drawingcompo.cc \ drawingcompo.h \ combocompo.cc\ combocompo.h\ chartcompo.cc \ chartcompo.h \ ctreecompo.cc \ ctreecompo.h \ edcompo.cc\ edcompo.h\ progcompo.cc\ progcompo.h\ sigctest.cc \ sigctest.h \ dnd.cc \ dnd.h \ treeviewcompo.h\ treeviewcompo.cc\ pixmaps.cc testvdkstring_SOURCES = testvdkstring.cc testvdkstring_LDFLAGS = $(GTK_LIBS) $(SIGC_LIBS) testvdkstring_LDADD = $(top_srcdir)/vdk/libvdk.la EXTRA_DIST = \ loadfile.xpm \ f104.xpm \ vdklogo.xpm \ fuzzy.png\ testvdkrc\ vitrurian.png\ stop.png\ tokens.db subdir = testvdk ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = EXTRA_PROGRAMS = testvdk$(EXEEXT) testvdkstring$(EXEEXT) noinst_PROGRAMS = @TESTVDK@ PROGRAMS = $(noinst_PROGRAMS) am_testvdk_OBJECTS = testvdk.$(OBJEXT) bookcompo.$(OBJEXT) \ canvascompo.$(OBJEXT) drawingcompo.$(OBJEXT) \ combocompo.$(OBJEXT) chartcompo.$(OBJEXT) ctreecompo.$(OBJEXT) \ edcompo.$(OBJEXT) progcompo.$(OBJEXT) sigctest.$(OBJEXT) \ dnd.$(OBJEXT) treeviewcompo.$(OBJEXT) pixmaps.$(OBJEXT) testvdk_OBJECTS = $(am_testvdk_OBJECTS) testvdk_DEPENDENCIES = $(top_srcdir)/vdk/libvdk.la am_testvdkstring_OBJECTS = testvdkstring.$(OBJEXT) testvdkstring_OBJECTS = $(am_testvdkstring_OBJECTS) testvdkstring_DEPENDENCIES = $(top_srcdir)/vdk/libvdk.la DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bookcompo.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/canvascompo.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/chartcompo.Po ./$(DEPDIR)/combocompo.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ctreecompo.Po ./$(DEPDIR)/dnd.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/drawingcompo.Po ./$(DEPDIR)/edcompo.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/pixmaps.Po ./$(DEPDIR)/progcompo.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/sigctest.Po ./$(DEPDIR)/testvdk.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/testvdkstring.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/treeviewcompo.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ DIST_SOURCES = $(testvdk_SOURCES) $(testvdkstring_SOURCES) RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ ps-recursive install-info-recursive uninstall-info-recursive \ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive DIST_COMMON = $(srcdir)/Makefile.in Makefile.am DIST_SUBDIRS = $(SUBDIRS) SOURCES = $(testvdk_SOURCES) $(testvdkstring_SOURCES) all: all-recursive .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu testvdk/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done testvdk$(EXEEXT): $(testvdk_OBJECTS) $(testvdk_DEPENDENCIES) @rm -f testvdk$(EXEEXT) $(CXXLINK) $(testvdk_LDFLAGS) $(testvdk_OBJECTS) $(testvdk_LDADD) $(LIBS) testvdkstring$(EXEEXT): $(testvdkstring_OBJECTS) $(testvdkstring_DEPENDENCIES) @rm -f testvdkstring$(EXEEXT) $(CXXLINK) $(testvdkstring_LDFLAGS) $(testvdkstring_OBJECTS) $(testvdkstring_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bookcompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canvascompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chartcompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/combocompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctreecompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dnd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drawingcompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edcompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixmaps.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progcompo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigctest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testvdk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testvdkstring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/treeviewcompo.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .cc.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` .cc.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: # 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): @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS 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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if (etags --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ else \ include_option=--include; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && \ tags="$$tags $$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; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" \ distdir=../$(distdir)/$$subdir \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) 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_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS \ clean-recursive ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-recursive distclean-tags distdir dvi dvi-am \ dvi-recursive info info-am info-recursive install install-am \ install-data install-data-am install-data-recursive \ install-exec install-exec-am install-exec-recursive \ install-info install-info-am install-info-recursive install-man \ install-recursive install-strip installcheck installcheck-am \ installdirs installdirs-am installdirs-recursive \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ pdf pdf-am pdf-recursive ps ps-am ps-recursive tags \ tags-recursive uninstall uninstall-am uninstall-info-am \ uninstall-info-recursive uninstall-recursive # 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: vdk-2.4.0/testvdk/Makefile.am0000644000000000000000000000155507613771057011473 SUBDIRS = . noinst_PROGRAMS = @TESTVDK@ EXTRA_PROGRAMS = testvdk testvdkstring INCLUDES = @INCLUDES@ CXXFLAGS = @CXXFLAGS@ testvdk_LDFLAGS = $(GTK_LIBS) $(SIGC_LIBS) testvdk_LDADD = $(top_srcdir)/vdk/libvdk.la testvdk_SOURCES = \ testvdk.cc \ testvdk.h \ bookcompo.cc\ bookcompo.h\ canvascompo.cc \ canvascompo.h \ drawingcompo.cc \ drawingcompo.h \ combocompo.cc\ combocompo.h\ chartcompo.cc \ chartcompo.h \ ctreecompo.cc \ ctreecompo.h \ edcompo.cc\ edcompo.h\ progcompo.cc\ progcompo.h\ sigctest.cc \ sigctest.h \ dnd.cc \ dnd.h \ treeviewcompo.h\ treeviewcompo.cc\ pixmaps.cc testvdkstring_SOURCES = testvdkstring.cc testvdkstring_LDFLAGS = $(GTK_LIBS) $(SIGC_LIBS) testvdkstring_LDADD = $(top_srcdir)/vdk/libvdk.la EXTRA_DIST = \ loadfile.xpm \ f104.xpm \ vdklogo.xpm \ fuzzy.png\ testvdkrc\ vitrurian.png\ stop.png\ tokens.db vdk-2.4.0/testvdk/testvdk.cc0000644000000000000000000007211010047536251011413 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include "testvdk.h" #include #include #include "vdk/FileDialog.h" #include "chartcompo.h" #include "ctreecompo.h" #include "dnd.h" #include "sigctest.h" #include "canvascompo.h" #include "drawingcompo.h" #include "combocompo.h" #include "bookcompo.h" #include "progcompo.h" #include "edcompo.h" #include "treeviewcompo.h" #include static char buff[1024]; extern char * mini_cfolder_xpm[]; /* VDK test program */ int main (int argc, char *argv[]) { // makes application TestvdkApp app(&argc, argv); // parse resource file app.SetResourceFile("testvdkrc"); // runs application app.Run(); return 0; } // Testvdk MAIN FORM CLASS /* defining signal and events dynamics tables */ DEFINE_SIGNAL_LIST(TestvdkForm,VDKForm); DEFINE_EVENT_LIST(TestvdkForm,VDKForm); /* defining signal static table */ DEFINE_SIGNAL_MAP(TestvdkForm,VDKForm) ON_SIGNAL(quitMenu,activate_signal,OnquitMenuActivate), ON_SIGNAL(openMenu,activate_signal,OnopenMenuActivate), ON_SIGNAL(filechooser,activate_signal,OnfilechooserActivate), ON_SIGNAL(testlist,row_activated_signal,OnTestIt), ON_SIGNAL(testlist,click_column_signal,OnTestIt), // ON_SIGNAL(cbentry,activate_signal,OnComboEntryActivated), ON_SIGNAL(cbentry,changed_signal,OnComboEntryChanged), ON_SIGNAL(cbentry,focus_in_signal,OnComboEntryFocusIn), ON_SIGNAL(cbentry,focus_out_signal,OnComboEntryFocusOut), ON_SIGNAL(chbox,toggled_signal,OnCheckBoxToggled) END_SIGNAL_MAP /* this struct array contains mapping instructions to: - load test list with - static function to be invoked for each test - source file name to be displayed (if any) - a VDKObject address (constructed by CreateTest): it can be either a container address that it will be displayed along with his contained widget or a NULL if the test opens a child form. Each time member contains the address of the current working test container or NULL. Current working test is added to test frame. */ static int MAX_TEST = 0; struct { char *test_name; // test name VDKObject* (*CreateTest)(VDKForm*); // pointer to static creator char* source, *member; // source containing test or member name in testvdk.cc if source is NULL VDKObject* widget; // created widget bool tested; // tested } tests[] = { /* test name creator static function source/member widget tested */ {"Buttons & C.", TestvdkForm::CreateButtons ,NULL, "CreateButtons" ,NULL, false}, {"Canvas ", TestvdkForm::CreateCanvas ,"canvascompo", NULL ,NULL, false}, {"Combo box ", TestvdkForm::CreateCombo ,"combocompo", NULL ,NULL, false}, {"Chart", TestvdkForm::CreateChart ,"chartcompo", NULL ,NULL, false}, {"Drag & drop", TestvdkForm::CreateDnD ,"dnd", NULL ,NULL, false}, {"DrawingArea ", TestvdkForm::CreateDrawing ,"drawingcompo", NULL ,NULL, false}, {"Image", TestvdkForm::CreateImage ,NULL, "CreateImage" ,NULL, false}, #ifdef USE_SIGCPLUSPLUS {"Libsigc extension",TestvdkForm::CreateSigcTest ,"sigctest", NULL ,NULL, false}, #endif {"Notebook", TestvdkForm::CreateNotebook ,"bookcompo", NULL ,NULL, false}, {"Progress bar", TestvdkForm::CreateProgress ,"progcompo", NULL ,NULL, false}, {"Tree", TestvdkForm::CreateTree ,"ctreecompo", NULL ,NULL, false}, {"Scrolled", TestvdkForm::CreateScrolled ,NULL, "CreateScrolled" ,NULL, false}, {"Sorted Lists", TestvdkForm::CreateSortedLists ,NULL,"CreateSortedLists" ,NULL, false}, {"TreeView", TestvdkForm::CreateTreeView ,"treeviewcompo", NULL ,NULL, false}, {NULL, NULL,NULL,NULL} }; #ifdef USE_SIGCPLUSPLUS /* creates a child form with libsigc extension test */ VDKObject* TestvdkForm::CreateSigcTest(VDKForm* owner) { SigctestForm* child = NULL; ChildListIterator li(owner->Childs()); for(;li;li++) { if((child = dynamic_cast(li.current())) ) break; } if(!child) { child = new SigctestForm(owner); child->Setup(); child->Show(); } else child->Raise(); return NULL; } #endif /* creates a child form with a drag & drop example */ VDKObject* TestvdkForm::CreateDnD(VDKForm* owner) { // iterates on child lists to see if a DnDForm* // is already present, in this case raise child // instead construct it. DndForm* child = NULL; ChildListIterator li(owner->Childs()); for(;li;li++) { if((child = dynamic_cast(li.current())) ) break; } if(!child) { child = new DndForm(owner,NULL); child->Setup(); child->Show(); } else child->Raise(); return NULL; } /* creates a progress bar component */ VDKObject* TestvdkForm::CreateProgress(VDKForm* owner) { return new ProgressComponent(owner); } /* creates a combobox component */ VDKObject* TestvdkForm::CreateNotebook(VDKForm* owner) { return new NotebookComponent(owner); } /* creates a combobox component */ VDKObject* TestvdkForm::CreateCombo(VDKForm* owner) { return new ComboComponent(owner); } /* creates a custom canvas component */ VDKObject* TestvdkForm::CreateCanvas(VDKForm* owner) { return new CanvasComponent(owner); } /* creates a custom drawing area component */ VDKObject* TestvdkForm::CreateDrawing(VDKForm* owner) { return new DrawingComponent(owner); } /* creates a custom tree component */ VDKObject* TestvdkForm::CreateTree(VDKForm* owner) { return new TreeComponent(owner); } /* creates a treeview component */ VDKObject* TestvdkForm::CreateTreeView(VDKForm* owner) { return new TreeViewComponent(owner); } /* creates a chart component */ VDKObject* TestvdkForm::CreateChart(VDKForm* owner) { return new ChartComponent(owner); } /* creates a sorted list */ #define MAX_COL 5 #define MAX_ADDR 6 #define KEYPOS 0 // key column position // yet another address program ! typedef struct { char *items[MAX_COL]; } ynad; char *titles[MAX_COL] = { "Last name","First name","Address","City","ZIP" }; ynad address[MAX_ADDR]= { {{"Motta","Mario","via delle fonti 1","Montecolombo","98564"}}, {{"Guerra","Tonino","via Arcangelo 6","Morciano","34567"}}, {{"Plum","Adam","Strawberry street 678","Los Angeles","CA4567"}}, {{"Jim","Uncle","Sky boulevard 34", "Paris", "FR5676"}}, {{"Adelante", "Speedo","fast plaza", "Madrid","SP98767"}}, {{"Streisand","Barbara","Star hill 567","Hollywood", "XX5676"}} }; /* ========================= CREATES SORTED LISTS TEST ========================= */ VDKObject* TestvdkForm::CreateSortedLists(VDKForm* owner) { VDKBox *box1 = new VDKBox(owner); VDKBox *vbox1 = new VDKBox(owner); VDKBox *hbox2 = new VDKBox(owner,h_box); VDKLabel* label = new VDKLabel(owner, "** Yet another address program **", GTK_JUSTIFY_CENTER); label->SetForeground(VDKRgb("navy blue")); box1->Add(label,l_justify,false,false); box1->Add(new VDKSeparator(owner),l_justify,false,false); VDKCustomSortedList* list = new VDKCustomSortedList(owner,KEYPOS, MAX_COL,titles, GTK_SELECTION_EXTENDED); list->ActiveTitles(false); list->SelectedBackground = VDKRgb("navy blue"); list->SelectedForeground = VDKRgb("yellow"); list->NormalBackground = clIvory; list->Titles[0]->NormalBackground = VDKRgb(89,186,231); // set 4-th column right justified gtk_clist_set_column_justification (GTK_CLIST(list->CustomWidget()), 4, GTK_JUSTIFY_RIGHT); // load addresses int t = 0; for(;t < MAX_ADDR;t++) list->AddRow(address[t].items); vbox1->Add(list,l_justify,true,true,5); list->AutoResize = true; list->Font = new VDKFont("courier 10"); box1->Add(vbox1); VDKCustomButton* add, *addmany,*del,*reload; hbox2->Add(add = new VDKCustomButton(owner,"Add a new address")); hbox2->Add(addmany = new VDKCustomButton(owner,"Add 1000 addresses")); hbox2->Add(del = new VDKCustomButton(owner,"Delete selected addresses")); hbox2->Add(reload = new VDKCustomButton(owner,"Reload addresses")); box1->Add(hbox2,l_justify,false,false); // downcast to Testvdkform to connect dynamic tables // and assign list address to placeholder. TestvdkForm* testform = dynamic_cast(owner); if(testform) { testform->sortedlist_widget = list; // here we connect with a vdk internally handled signal so third // arg must be false. testform->SignalConnect(list,"select_row", &TestvdkForm::OnSortedListSelect, false); // here we connect with a gtk+ handled signal so third // arg must be true (default). testform->SignalConnect(add,"clicked", &TestvdkForm::OnAddClicked); testform->SignalConnect(addmany,"clicked", &TestvdkForm::OnAddManyClicked); testform->SignalConnect(del,"clicked", &TestvdkForm::OnDelClicked); testform->SignalConnect(reload,"clicked", &TestvdkForm::OnReloadClicked); } return box1; } /* answers on a double click on sorted lists */ // on pixmaps.cc extern char *mini_bball_xpm[]; bool TestvdkForm::OnSortedListSelect(VDKObject* sender) { // safely downcast here VDKCustomSortedList* list = dynamic_cast(sender); if(list) { int ndx = list->Selected.Row(); if(ndx >= 0) { if(gtk_clist_get_cell_type(GTK_CLIST(list->CustomWidget()),ndx,0) == GTK_CELL_PIXTEXT) list->UpdateRow(ndx,list->Tuples[ndx]); else // bug in gtk+-1.3.2 ? // updating with a pixmap sigsegv // list->UpdateRow(ndx,list->Tuples[ndx],mini_bball_xpm,0); ; } } return true; } bool TestvdkForm::OnAddClicked(VDKObject* sender) { if(sortedlist_widget) { ynad addr; int t,z; char p[10]; for(t = 0; t < 10;t++) p[t] = (char) 64+rand()%26; p[t] = '\0'; z = rand()%MAX_ADDR; addr.items[0] = p; for(t = 1; t AddKey(addr.items); } return true; } bool TestvdkForm::OnAddManyClicked(VDKObject* sender) { if(sortedlist_widget) { sortedlist_widget->Freeze(); for(int t = 0; t < 1000; t++) // we can call a response function also // directly. OnAddClicked(sender); sortedlist_widget->Thaw(); } return true; } bool TestvdkForm::OnDelClicked(VDKObject* sender) { if(sortedlist_widget && (sortedlist_widget->Selections().size() > 0)) { int t; // create a string array of deleting keys // StringArray is defined in vdkclist.h StringArray array(sortedlist_widget->Selections().size()); for(t = 0; t < array.size(); t++) { int row = sortedlist_widget->Selections()[t]; array[t] = sortedlist_widget-> Tuples[row][sortedlist_widget->KeyPos()]; } // deletes all key sortedlist_widget->Freeze(); for(t = 0; t < array.size(); t++) { printf("\nremoving:(%s)", (char*) array[t]); fflush(stdout); sortedlist_widget->RemoveKey(array[t]); } sortedlist_widget->Thaw(); } else if (sortedlist_widget && (sortedlist_widget->Selections().size() == 0)) { int row = sortedlist_widget->Selected.Row(); if(row >= 0) sortedlist_widget->RemoveRow(row); } return true; } bool TestvdkForm::OnReloadClicked(VDKObject* sender) { if(sortedlist_widget) { int t = 0; sortedlist_widget->Clear(); for(;t < MAX_ADDR;t++) sortedlist_widget->AddRow(address[t].items); } return true; } /* ========================= CREATES IMAGE TEST ========================= */ VDKObject* TestvdkForm::CreateImage(VDKForm* owner) { static char *tip = "This will be the new VDKBuilder 2.0 logo"; VDKBox* vbox = new VDKBox(owner); // setting last arg as true embedds pixmap into an event box so // will receive appropriate signals and can show tip // see below on CreateScrolled() another way where pixmap is // explicitely embedded into an event box VDKImage* image = new VDKImage(owner,"vitrurian.png",tip,true); vbox->Add(image); return vbox; } /* ========================= CREATES SCROLLED TEST ========================= */ VDKObject* TestvdkForm::CreateScrolled(VDKForm* owner) { static char *tip = "Believe it or not, VDK original author \ has flown more than 1500 hours on this airplane"; VDKFixed* fixed = new VDKFixed(owner); VDKScrolled* scrolled = new VDKScrolled(owner); scrolled->Usize = VDKPoint(250,200); VDKEventBox* vbox = new VDKEventBox(owner); VDKPixmap* pixmap = new VDKPixmap(owner,"f104.xpm"); vbox->SetTip(tip); vbox->Add(pixmap); scrolled->Add(vbox); fixed->Add(scrolled,l_justify,0,0); return fixed; } /* ========================= CREATES BUTTONS TEST ========================= */ static char *completion_list[] = { "vdk","vdkbuilder","vdk version 2.0.4","gtk+","gtk+ version 2.0.4", "open source model is great","open the door","gnome","gnomify",NULL }; VDKObject* TestvdkForm::CreateButtons(VDKForm* owner) { int t = 0; VDKTable* table = new VDKTable(owner,7,2,true); // attaches 9 buttons VDKObject* buttons[] = { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL }; buttons[0] = new VDKCustomButton(owner,"A _labeled button"); buttons[0]->Font = new VDKFont(owner,"courier bold 12"); buttons[0]->NormalBackground = clAirBlue; buttons[0]->Foreground = clYellow; buttons[1] = new VDKCustomButton(owner,"loadfile.xpm", "A pixmapped _button"); buttons[1]->Foreground = VDKRgb("sienna"); buttons[2] = new VDKCustomButton(owner, "A labeled button"); buttons[3] = new VDKCustomButton(owner, "A labeled toggle button", VDK_CBUTTON_TOGGLED); buttons[3]->Font = new VDKFont(owner,"sans bold 10"); buttons[3]->NormalBackground = VDKRgb("forest green"); buttons[3]->Foreground = clWhite; buttons[4] = new VDKCustomButton(owner,"loadfile.xpm", "A pixmapped button"); buttons[5] = new VDKCustomButton(owner,"loadfile.xpm", "A pixmapped toggle button", VDK_CBUTTON_TOGGLED); buttons[6] = new VDKSpinButton(owner,6.5,0,20,.5,0); buttons[6]->NormalBackground = VDKRgb("lemon chiffon"); buttons[6]->Foreground = clSiena; buttons[6]->Font = new VDKFont(owner,"helvetica bold 10"); buttons[6]->SetTip("A spin button"); buttons[7] = new VDKCheckButton(owner,"A check button"); buttons[7]->Font = new VDKFont(owner,"helvetica bold 10"); buttons[7]->ActiveBackground = VDKRgb("sienna"); buttons[7]->Foreground = "white"; buttons[8] = new VDKHLButton(owner,"stop.png","An highlighted button"); buttons[8]->SetTip("Highlights when mouse is over, grayed on click"); for(t = 0; buttons[t];t++) table->AddToCell(buttons[t],t/2,t%2,!GTK_FILL | !GTK_EXPAND,5); // VDKEntry* entry = new VDKEntry(owner); entry->NormalBackground = VDKRgb("lemon chiffon"); entry->SetCompletion(completion_list); entry->AddCompletionItem("vdk porting to win is ready"); table->AddToCell(entry,4,1,!GTK_FILL | !GTK_EXPAND,5); entry->SetTip("completion enabled, try: vdk,gtk or open"); VDKRadioButtonGroup *rbg = new VDKRadioButtonGroup(owner); VDKRadioButton* rb = new VDKRadioButton(rbg,"A radio button"); rb->SetTip("radio button group shows an exclusive-or behaviour"); rb = new VDKRadioButton(rbg,"Another radio button"); rb->SetTip("radio button group shows an exclusive-or behaviour"); rb->Foreground = clBlue; table->AddToCell(rbg,5,0,!GTK_FILL | !GTK_EXPAND,5); VDKBox* abox = new VDKBox(owner); VDKCheckButton* bt = new VDKCheckButton(owner,"A check button"); abox->Add(bt); rb = new VDKRadioButton(owner,"A stand-alone radio button"); abox->Add(rb); table->AddToCell(abox,5,1,!GTK_FILL | !GTK_EXPAND,5); abox = new VDKBox(owner); VDKLabel* label = new VDKLabel(owner,"A VDKComboEntry widget"); abox->Add(label); table->AddToCell(abox,6,0,!GTK_FILL | !GTK_EXPAND,5); TestvdkForm* form = dynamic_cast(owner); if(form) { form->chbox = new VDKCheckButton(owner,"Sorted"); abox->Add(form->chbox); StringList list; for(int t = 0; completion_list[t];t++) list.add(completion_list[t]); form->cbentry = new VDKComboEntry(form/*,completion_list*/); // form->cbentry->Font = new VDKFont(owner,"sans bold 10"); form->cbentry->Selections = &list; // form->cbentry->Editable = false; form->cbentry->Selected = 0; form->cbentry->NormalBackground = VDKRgb("skyblue2"); form->cbentry->Foreground = VDKRgb("navy blue"); form->cbentry->SetTip("Hit \"Enter\" and text will added to\ndropdown list (if not already in)"); gtk_widget_set_name (form->cbentry->Widget(), "list-combo"); table->AddToCell(form->cbentry,6,1,!GTK_FILL | !GTK_EXPAND,5); } return table; } bool TestvdkForm::OnCheckBoxToggled(VDKObject* sender) { static StringList *unsorted = NULL; //GtkListStore* store = cbentry->StoreModel; // store unsorted dropdown list for later use if(!unsorted) unsorted = cbentry->Selections; if(chbox->Checked) { // cbentry->SortingOrder = GTK_SORT_DESCENDING; cbentry->Sorted = true; } else /* since once sorted cannot revert to previous state we substitute store model with a new unsorted one */ { cbentry->Sorted = false; GtkListStore* store = gtk_list_store_new (1, G_TYPE_STRING); cbentry->StoreModel = store; cbentry->Selections = unsorted; } cbentry->Selected = 0; return true; } bool TestvdkForm::OnComboEntryActivated(VDKObject* sender) { GtkTreeIter iter; gchar *item = NULL; bool add_flag = true; char* text = (char*) cbentry->Text; printf("\nVDKComboEntry activated - text:%s",text); fflush(stdout); // gets underlying store list GtkListStore* store = cbentry->StoreModel; for(bool flag = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store),&iter); flag; flag = gtk_tree_model_iter_next(GTK_TREE_MODEL(store),&iter)) { gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, 0, &item, -1); if(!strcmp(item,text)) { add_flag = false; break; } } // add entry text if not unique in dropdown list if(add_flag) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, text, -1); printf("\nVDKComboEntry added:%s to dropdown list",text); fflush(stdout); } delete[] text; return true; } bool TestvdkForm::OnComboEntryChanged(VDKObject* sender) { VDKComboEntry* cbentry = dynamic_cast(sender); if(cbentry) { char* selected = (char*) cbentry->Text; int index = cbentry->Selected; printf("\nVDKComboEntry - index: %d - text:%s",index , selected); fflush(stdout); delete[] selected; } return true; } bool TestvdkForm::OnComboEntryFocusIn(VDKObject* sender) { /* printf("\nVDKComboEntry <%p> get focus !",sender); fflush(stdout); */ return true; } bool TestvdkForm::OnComboEntryFocusOut(VDKObject* sender) { /* printf("\nVDKComboEntry <%p> lost focus !",sender); fflush(stdout); */ return true; } //////////////////////////////////////////////////////////////////// /* main form constructor */ TestvdkForm::TestvdkForm(VDKApplication* app, char* title): VDKForm(app,title) { active = NULL; // set placeholder to null sortedlist_widget = NULL; } /* main form destructor */ TestvdkForm::~TestvdkForm() { } /* main form gui setup */ static char* introduction = "" "VDK \"The Visual Development Kit\"\nversion %d.%d.%d" "" "" "\nA LGPL'd C++ framework based on\nglib %d.%d.%d - gtk+ %d.%d.%d\n" "\n" "" "Original author:" "" " Mario Motta\n" "" "VDK team:\n" "" "" "\tMario Motta" "\tIonutz Borcoman" "\tTim Lorenz\n" "\tGeorge Boutwell" "\tPierre-Louis" "\tMile Lazarovski" ""; void TestvdkForm::GUISetup(void) { int t = 0; SetDefaultSize(VDKPoint(650,450)); Title = "VDK 2.0.x Test"; if(!GTK_WIDGET_REALIZED(Window())) gtk_widget_realize(Window()); hbox2 = new VDKBox(this,h_box); Add(hbox2,2,1,1,0); hbox2->BorderWidth(5); /* makes a new scrolled to be filled with list */ VDKScrolled *scrolled = new VDKScrolled(Owner()); testlist = new VDKTreeView(this,NULL,GTK_SELECTION_SINGLE); // makes model VDKTreeViewModel* model; GType* types = new GType[2]; types[0] = G_TYPE_STRING; types[1] = G_TYPE_BOOLEAN; testlist->Model = (model = new VDKTreeViewModel(types,2)); delete types; // add columns to tree VDKTreeViewColumn* column = NULL; column = new VDKTreeViewColumn(testlist,0,"Test it"); column = new VDKTreeViewColumn(testlist,1,"Passed"); gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column->GtkColumn()), GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column->GtkColumn()),30); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(testlist->WrappedWidget()), TRUE); // load test list model for(t=0; tests[t].test_name;t++) { GtkTreeIter iter; model->AppendBlank(&iter); model->SetCell(&iter,0,tests[t].test_name); model->SetCell(&iter,1,tests[t].tested ? "true" : "false"); } (*testlist->Columns())[0]->ActiveTitle(tests[0].CreateTest != NULL); // stores max test numbers MAX_TEST = t; // select first row GtkTreeIter iter; if(model->Root(&iter)) testlist->SelectNode(&iter); scrolled->Add(testlist,l_justify,false,false,0); hbox2->Add(scrolled); testframe = new VDKFrame(this,NULL,v_box,shadow_etched_in); testframe->Shadow = shadow_etched_in; testframe->Align = c_justify; testframe->SetSize(410,380); // We desire a white background for vdk // introduction label. Labels are transparent widgets // that do not have a window assigned, they use their // container context to draw themselves, so we // add the label to an event box and set the // box background to white. eventbox = new VDKEventBox(this); eventbox->NormalBackground = clWhite; // adding a pixmap to eventbox VDKPixmap* logo = new VDKPixmap(this,"vdklogo.xpm"); logo->NormalBackground = clWhite; eventbox->Add(logo,l_justify,false,false,5); testframe->Add(eventbox); // setting label sprintf(buff,introduction, VDK_VERSION_MAJOR, VDK_VERSION_MINOR, VDK_REVISION, glib_major_version, glib_minor_version, glib_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); // since we will use mark translation // get an empty label at first introduce_vdk = new VDKLabel(this,NULL); // mark up label string gtk_label_set_markup(GTK_LABEL(introduce_vdk->WrappedWidget()), buff); eventbox->Add(introduce_vdk,l_justify,false,false,5); testframe->BorderWidth(5); // initial contents of testframe finished hbox2->Add(testframe,0,1,1,0); // sets main menu bar menubar = new VDKMenubar(this); Add(menubar,0,0,0,0); MenuItem0 = new VDKMenuItem(this,"MenuItem0",mini_cfolder_xpm); MenuItem0->Caption = "_File..."; MenuItem0->Checked = false; MenuItem0->SetSize(59,26); menubar->Add(MenuItem0,l_justify,1,1,0); Menu0 = new VDKMenu(this); MenuItem0->Add(Menu0); openMenu = new VDKMenuItem(this,"openMenu",NULL); VDKRawPixmap *openMenu_pix = new VDKRawPixmap(this,"loadfile.xpm"); openMenu->SetPixmap(openMenu_pix); openMenu->Caption = "_View sources"; openMenu->SetSize(98,25); Menu0->Add(openMenu,l_justify,1,1,0); filechooser = new VDKMenuItem(this,"filechooser",NULL); filechooser->Caption = "File _Chooser"; Menu0->Add(filechooser,l_justify,1,1,0); Menu0->Separator(); quitMenu = new VDKMenuItem(this,"quitMenu",NULL); quitMenu->Caption = "_Quit"; Menu0->Add(quitMenu,l_justify,1,1,0); } /* main form setup */ void TestvdkForm::Setup(void) { GUISetup(); } /* */ bool TestvdkForm::CanClose(void) { bool result = Application()->VDKMessageBox( "VDK \"The Visual Development Kit\"", "Really do you want quit VDK test program ?", VDK_ICONQUESTION | VDK_YESNO,NULL,NULL,5000) == VDK_IDYES; return result; } // Testvdk APPLICATION CLASS /* application constructor */ TestvdkApp::TestvdkApp(int* argc, char** argv): VDKApplication(argc,argv) { } /* application destructor */ TestvdkApp::~TestvdkApp() { } /* application setup */ void TestvdkApp::Setup(void) { SetGarbageCollection(2000); MainForm = new TestvdkForm(this,NULL); MainForm->Setup(); MainForm->Visible = true; } /* RESPONSE METHODS */ /* answers to view sources menu menu activation */ bool TestvdkForm::OnfilechooserActivate(VDKObject* sender) { FileStringArray selections; VDKFileChooser* fc = new VDKFileChooser(this, &selections,"Apri files"); fc->MultiSelection = true; fc->AddFilterPattern("All files","*"); fc->AddFilterPattern("C sources","*.c"); fc->AddFilterPattern("CC sources","*.cc"); fc->AddFilterPattern("C/CC headers","*.h"); fc->AddMimeType("images PNG","image/png"); fc->SetDefaultFilter("All files"); fc->Action = GTK_FILE_CHOOSER_ACTION_OPEN; fc->ShowModal(); if(selections.size() == 1) { printf("\nSelected:%s",(char*) selections[0]); fflush(stdout); } else if(selections.size() > 1) { for(int t = 0; t < selections.size(); t++) printf("\nSelected:%s",(char*) selections[t]); fflush(stdout); } return true; } /* answers to view sources menu menu activation */ bool TestvdkForm::OnopenMenuActivate(VDKObject* sender) { EditorComponent *editor = NULL; // tests if editor is already running if(active) editor = dynamic_cast(active); // construct a new one id is still NULL if(!editor) { // remove introduction event box if any if(eventbox->Visible) eventbox->Visible = false; // remove active widget if any if(active) testframe->RemoveObject(active); // makes a new editor component editor = new EditorComponent(this); active = editor; testframe->Add(editor,l_justify,true,true,0); } // check whether there is a test list activation or not testlist->GetSelections(); if(testlist->Selections().size() == 1) { VDKTreeViewModel *model = testlist->Model; // get test name char* local = model->GetCell(&testlist->Selections()[0],0); // finds index into tests[] struct array int ndx = 0; for(;tests[ndx].test_name;ndx++) if(!strcmp(local,tests[ndx].test_name)) break; // if(tests[ndx].test_name) { // checks if selected test has a source file available if(tests[ndx].source) { sprintf(buff,"%s.cc",tests[ndx].source); editor->AddPage(buff); } else // open testvdk.cc as default // scrolling to member { editor->AddPage("testvdk.cc", tests[ndx].member); } } else // open testvdk.cc as default editor->AddPage("testvdk.cc"); } return true; } /* answers to quit menu activation */ bool TestvdkForm::OnquitMenuActivate(VDKObject* sender) { Close(); return true; } /* answers to a click on test list widget title */ bool TestvdkForm::OnTestIt(VDKObject* sender) { VDKTreeViewModel *model = testlist->Model; testlist->GetSelections(); if(testlist->Selections().size() == 1) { // get test name char* local = model->GetCell(&testlist->Selections()[0],0); // finds index into tests[] struct array int ndx = 0; for(;tests[ndx].test_name;ndx++) if(!strcmp(local,tests[ndx].test_name)) break; // if(tests[ndx].test_name) { // remove child widget if any if(active) { testframe->RemoveObject(active); active = NULL; } // makes new widget and stores address on active // active will be NULL if widget is a form. if(ndx >= 0) { // toggles check box column model->SetData(&testlist->Selections()[0], 1,true, -1); active = tests[ndx].widget = tests[ndx].CreateTest(this); } // hides/shows introduction label hiding his container eventbox->Visible = active ? false : true; // add it to test frame if(active) testframe->Add(active); } } return true; } void TestvdkForm::OnResize(VDKForm* form, VDKPoint& s) { // printf("\nOnResize() - %d,%d",s.x,s.y); // fflush(stdout); } vdk-2.4.0/testvdk/testvdk.h0000644000000000000000000000710610031524600011244 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _testvdk_main_form_h_ #define _testvdk_main_form_h_ #ifdef HAVE_CONFIG_H #include #endif #include // Testvdk FORM CLASS class TestvdkForm: public VDKForm { // gui object declarations private: // gui object declarations void GUISetup(void); VDKObject* active; public: // some place holders for run-time constructed widgets VDKCustomSortedList* sortedlist_widget; VDKComboEntry* cbentry; VDKCheckButton* chbox; // constructor TestvdkForm(VDKApplication* app, char* title); ~TestvdkForm(); void Setup(void); static VDKObject* CreateScrolled(VDKForm* owner); static VDKObject* CreateButtons(VDKForm* owner); static VDKObject* CreateSortedLists(VDKForm* owner); static VDKObject* CreateChart(VDKForm* owner); static VDKObject* CreateTree(VDKForm* owner); static VDKObject* CreateDnD(VDKForm* owner); static VDKObject* CreateCanvas(VDKForm* owner); static VDKObject* CreateDrawing(VDKForm* owner); static VDKObject* CreateImage(VDKForm* owner); static VDKObject* CreateCombo(VDKForm* owner); static VDKObject* CreateNotebook(VDKForm* owner); static VDKObject* CreateProgress(VDKForm* owner); static VDKObject* CreateTreeView(VDKForm* owner); #ifdef USE_SIGCPLUSPLUS static VDKObject* CreateSigcTest(VDKForm* owner); #endif protected: VDKTimer* timer; VDKBox* hbox2; VDKTreeView* testlist; VDKFrame* testframe; VDKMenubar* menubar; VDKMenuItem* MenuItem0; VDKMenu* Menu0; VDKMenuItem* openMenu,*filechooser; VDKMenuItem* MenuItem2; VDKMenuItem* quitMenu; VDKLabel* introduce_vdk; VDKEventBox* eventbox; public: DECLARE_SIGNAL_MAP(TestvdkForm); bool OnfilechooserActivate(VDKObject* sender); bool OnquitMenuActivate(VDKObject* sender); bool OnopenMenuActivate(VDKObject* sender); bool OnTestIt(VDKObject* sender); bool OnSortedListSelect(VDKObject* sender); bool OnAddClicked(VDKObject* sender); bool OnAddManyClicked(VDKObject* sender); bool OnDelClicked(VDKObject* sender); bool OnReloadClicked(VDKObject* sender); bool CanClose(); bool OnTimerTick(VDKObject* sender); void OnResize(VDKForm* form, VDKPoint& s); bool OnComboEntryActivated(VDKObject* sender); bool OnComboEntryChanged(VDKObject* sender); bool OnComboEntryFocusIn(VDKObject* sender); bool OnComboEntryFocusOut(VDKObject* sender); bool OnCheckBoxToggled(VDKObject* sender); /* declaring signal and events dynamics tables */ DECLARE_SIGNAL_LIST(TestvdkForm); DECLARE_EVENT_LIST(TestvdkForm); }; // Testvdk APPLICATION CLASS class TestvdkApp: public VDKApplication { public: TestvdkApp(int* argc, char** argv); ~TestvdkApp(); void Setup(void); }; #endif vdk-2.4.0/testvdk/bookcompo.cc0000644000000000000000000001222207242155416011720 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * february 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // yet another address program ! #include "bookcompo.h" #define MAX_ADDR 6 #define MAX_COL 5 extern char *book_open_xpm[]; extern char *book_closed_xpm[]; extern char *mini_bball_xpm[]; typedef struct { char *items[MAX_COL]; } ynad; ynad friends[MAX_ADDR]= { {{"Motta","Mario","via delle fonti 1","Montecolombo","98564"}}, {{"Guerra","Tonino","via Arcangelo 6","Morciano","34567"}}, {{"Plum","Adam","Strawberry street 678","Los Angeles","CA4567"}}, {{"Jim","Uncle","Sky boulevard 34", "Paris", "FR5676"}}, {{"Adelante", "Speedo","fast plaza", "Madrid","SP98767"}}, {{"Streisand","Barbara","Star hill 567","Hollywood", "XX5676"}} }; /* */ DEFINE_SIGNAL_MAP(NotebookComponent,VDKBox) ON_SIGNAL(next,clicked_signal,NextTab), ON_SIGNAL(prev,clicked_signal,PrevTab), ON_SIGNAL(rotate,clicked_signal,RotateTab), ON_SIGNAL(enable,clicked_signal,EnableTab), ON_SIGNAL(list,select_row_signal,ListSelection), ON_SIGNAL(list,unselect_row_signal,ListUnselection) END_SIGNAL_MAP /* */ void NotebookComponent::Setup() { VDKBox *box = new VDKBox(Owner(),v_box); book = new VDKNotebook(Owner()); box->Add(book); box->Add(new VDKSeparator(Owner())); VDKBox* buttonbox = new VDKBox(Owner(),h_box); next = new VDKCustomButton(Owner(),"next page"); prev = new VDKCustomButton(Owner(),"prev page"); rotate = new VDKCustomButton(Owner(),"rotate tabs"); enable = new VDKCustomButton(Owner(),"enable 2nd page"); buttonbox->Add(next); buttonbox->Add(prev); buttonbox->Add(rotate); buttonbox->Add(enable); box->Add(buttonbox); Add(box,l_justify,false,false); // since we plan to add pixmaps better make pages after realizing // all stuff MakePage1(); MakePage2(); // disables last page book->Pages[1]->TabLabel->Enabled = false; } /* */ void NotebookComponent::MakePage1() { char* prompts[] = { "First name", "Address", "City", "Phone number", 0 }; char* title = "Last name"; VDKBox *box = new VDKBox(Owner(),h_box); // a panel for the list VDKBox *panel = new VDKBox(Owner(),v_box); list = new VDKCustomList(Owner(),1,&title); list->ActiveTitle(0,false); list->Titles[0]->NormalBackground = clLightBlue; // load address int t = 0; for(;t < MAX_ADDR;t++) list->AddRow(friends[t].items); list->SetSize(100,130); panel->Add(list); box->Add(panel); box->Add(new VDKSeparator(Owner(),v_separator)); // a table VDKTable *table = new VDKTable(Owner(),4,2,true); for(t=0; t < 4; t++) { VDKLabel* label = (new VDKLabel(Owner(),prompts[t])); table->Add(label,0,1,t,t+1); } table->Add(firstname = new VDKEntry(Owner(),0),1,2,0,1); table->Add(address = new VDKEntry(Owner(),0),1,2,1,2); table->Add(city = new VDKEntry(Owner(),0),1,2,2,3); table->Add(phonenumber = new VDKNumericEntry(Owner(),0),1,2,3,4); box->Add(table); book->AddPage(box,"yet another..",book_closed_xpm,book_open_xpm); list->SelectRow(0,0); } /* */ void NotebookComponent::MakePage2() { VDKBox *box = new VDKBox(Owner(),h_box); box->Add(new VDKImage(Owner(),"linuxGirl.png", "By courtesy of B.Bellamy")); box->Add(new VDKImage(Owner(),"monet.png","Claude Monet")); book->AddPage(box,"Nice pictures",book_closed_xpm,book_open_xpm); } /* */ bool NotebookComponent::ListSelection(VDKObject*) { int ndx = list->Selected.Row(); if(ndx >= 0) { list->UpdateRow(ndx,list->Tuples[ndx],mini_bball_xpm,0); firstname->Text = friends[ndx].items[1]; address->Text = friends[ndx].items[2]; city->Text = friends[ndx].items[3]; phonenumber->Text = friends[ndx].items[4]; } return true; } /* */ bool NotebookComponent::ListUnselection(VDKObject*) { int ndx = list->Unselected.Row(); if(ndx >= 0) list->UpdateRow(ndx,list->Tuples[ndx]); return true; } /* */ bool NotebookComponent::NextTab(VDKObject* ) { book->ActivePage++; return true; } /* */ bool NotebookComponent::PrevTab(VDKObject* ) { book->ActivePage--; return true; } /* */ bool NotebookComponent::EnableTab(VDKObject*) { book->Pages[1]->TabLabel->Enabled = true; book->ActivePage++; return true; } /* */ bool NotebookComponent::RotateTab(VDKObject*) { static int pos = 0; book->TabPosition = ++pos; return true; } vdk-2.4.0/testvdk/bookcompo.h0000644000000000000000000000301507242154073011560 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * february 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include class NotebookComponent: public VDKBox { VDKNotebook *book; VDKCustomButton *next,*prev,*rotate,*enable; VDKCustomList *list; VDKEntry *firstname,*address,*city,*phonenumber; public: NotebookComponent(VDKForm* owner): VDKBox(owner) {} ~NotebookComponent() {} void Setup(); bool NextTab(VDKObject* ); bool PrevTab(VDKObject* ); bool RotateTab(VDKObject*); bool EnableTab(VDKObject*); void MakePage1(); void MakePage2(); bool ListSelection(VDKObject*); bool ListUnselection(VDKObject*); DECLARE_SIGNAL_MAP(NotebookComponent); }; vdk-2.4.0/testvdk/canvascompo.cc0000644000000000000000000001370007436440267012251 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "canvascompo.h" static bool draw_mode = false; /* signal maps */ DEFINE_SIGNAL_MAP(CanvasComponent,VDKBox) ON_SIGNAL(clearButton,clicked_signal,Clear) END_SIGNAL_MAP DEFINE_EVENT_LIST(CanvasComponent,VDKBox); static char buff[128]; /* */ CanvasComponent::~CanvasComponent() { for(int t = 0; shape_array[t]; t++) delete shape_array[t]; } /* */ void CanvasComponent::Setup() { VDKScrolled *scrolled = new VDKScrolled(Owner()); canvas = new VDKCanvas(Owner()); canvas->SetSize(600,600); canvas->NormalBackground = clIvory; canvas->Foreground = clSiena; canvas->Font = new VDKFont(this,"Courier bold 11"); canvas->Cursor = curCrossHair; EventConnect(canvas,"expose_event",&CanvasComponent::OnExpose); EventConnect(canvas,"motion_notify_event",&CanvasComponent::OnMotion); EventConnect(canvas,"button_press_event",&CanvasComponent::OnButtonPress); EventConnect(canvas,"button_release_event",&CanvasComponent::OnButtonRelease); scrolled->Add(canvas); Add(scrolled); Add(new VDKSeparator(Owner()),l_justify,false,false); VDKBox* hbox = new VDKBox(Owner(),h_box); label = new VDKLabel(Owner(),"Coords:000,000"); hbox->Add(label,l_justify,false,false,5); clearButton = new VDKCustomButton(Owner(), "_Clear Canvas"); hbox->Add(clearButton,false,false,5); Add(hbox,l_justify,false,false); // makes an array of shapes shape_array[0] = new CanvasRectangle(canvas,50,50,100,60,clSiena,false); shape_array[1] = new CanvasRectangle(canvas,51,51,99,59, VDKRgb("forest green"),true); shape_array[2] = new CanvasRectangle(canvas,80,80,70,30, clYellow,true); shape_array[3] = new CanvasPixmap(canvas,200,50,"loadfile.xpm"); shape_array[4] = new CanvasCircle(canvas,100,200,30,clBlack); shape_array[5] = new CanvasCircle(canvas,100,200,29,clWhite,true); shape_array[6] = new CanvasArc(canvas,200,200,60,60,0,90,clRed,true); PointArray points(4); points[0] = VDKPoint(300,250); points[1] = VDKPoint(350,200); points[2] = VDKPoint(400,250); points[3] = VDKPoint(350,300); shape_array[7] = new CanvasPolygon(canvas,points,clAirBlue,true); shape_array[8] = NULL; } /* */ bool CanvasComponent::OnButtonPress(VDKObject*, GdkEvent* ev) { canvas->Cursor = curPencil; draw_mode = true; return true; } /* */ bool CanvasComponent::OnButtonRelease(VDKObject*, GdkEvent* ev) { draw_mode = false; canvas->Cursor = curCrossHair; return true; } /* */ bool CanvasComponent::OnMotion(VDKObject*, GdkEvent* ev) { GdkEventMotion* event = reinterpret_cast(ev); if(draw_mode) { GdkRectangle brush; // avoid to overdraw figures for(int t = 0; shape_array[t]; t++) { if(shape_array[t]->bound.Contains(VDKPoint(int(event->x), int(event->y)))) return false; } brush.x = int(event->x-2); brush.y = int(event->y-2); brush.width = brush.height = 4; canvas->DrawRect(true,brush.x,brush.y,brush.width,brush.height); canvas->Redraw(); // add point to list so will be redrown during expose event plist.add(VDKPoint(brush.x,brush.y)); } sprintf(buff,"%3d,%3d - %d points stored",int(event->x),int(event->y),plist.size()); label->Caption = buff; return false; } /* */ bool CanvasComponent::OnExpose(VDKObject*, GdkEvent* ) { canvas->Clear(); // redraws shapes for(int t = 0; shape_array[t]; t++) shape_array[t]->Draw(); canvas->Foreground = clSiena; canvas->DrawString(10,20,"Drag & draw"); // redraw point list PointListIterator li(plist); GdkRectangle brush; for(;li;li++) { brush.x = int(li.current().x); brush.y = int(li.current().y); brush.width = brush.height = 4; canvas->DrawRect(true,brush.x,brush.y,brush.width,brush.height); } // shots back buffer onto screen canvas->Redraw(); return true; } bool CanvasComponent::Clear(VDKObject*) { // clear point list plist.flush(); // call expose event handler OnExpose(NULL,NULL); return true; } CanvasPolygon::CanvasPolygon(VDKCanvas *owner, PointArray& array, VDKRgb color, bool filled): CanvasShape(owner,0,0,0,0,color,filled) { int t; // compute maxX int maxX = array[0].x; for(t = 1; t < array.size(); t++) maxX = array[t].x > maxX ? array[t].x : maxX; // compute maxY int maxY = array[0].y; for(t = 1; t < array.size(); t++) maxY = array[t].y > maxY ? array[t].y : maxY; points = new GdkPoint[array.size()]; for(t = 0; t < array.size(); t++) { points[t].x = array[t].x; points[t].y = array[t].y; } // compute minX int minX = array[0].x; for(t = 1; t < array.size(); t++) minX = array[t].x < minX ? array[t].x : minX; // compute minY int minY = array[0].y; for(t = 1; t < array.size(); t++) minY = array[t].y < minY ? array[t].y : minY; points = new GdkPoint[array.size()]; for(t = 0; t < array.size(); t++) { points[t].x = array[t].x; points[t].y = array[t].y; } npoints = array.size(); bound = VDKRect(minX,minY,maxX-minX,maxY-minY); } vdk-2.4.0/testvdk/canvascompo.h0000644000000000000000000001137707436437236012125 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _canvascompo_h #define _canvascompo_h #include #define MAX_SHAPES 10 typedef VDKValueList PointList; typedef VDKValueListIterator PointListIterator; /* */ class CanvasShape; class CanvasComponent : public VDKBox { VDKCanvas *canvas; VDKLabel *label; VDKCustomButton *mlButton; VDKCustomButton *clearButton; CanvasShape* shape_array[MAX_SHAPES]; PointList plist; public: CanvasComponent(VDKForm* owner): VDKBox(owner){} ~CanvasComponent(); void Setup(); bool OnMotion(VDKObject* sender, GdkEvent* event); bool OnExpose(VDKObject*, GdkEvent* event); bool Clear(VDKObject*); bool OnButtonPress(VDKObject*, GdkEvent* ev); bool OnButtonRelease(VDKObject*, GdkEvent* ev); DECLARE_SIGNAL_MAP(CanvasComponent); DECLARE_EVENT_LIST(CanvasComponent); }; /* some shapes */ class CanvasShape { protected: VDKCanvas* canvas; VDKRgb color; bool filled; public: VDKRect bound; CanvasShape(VDKCanvas* owner, int x, int y, int w, int h, VDKRgb color, bool filled = false): canvas(owner),color(color),filled(filled),bound(x,y,w,h) {} virtual ~CanvasShape() {} virtual void Draw() = 0; }; class CanvasRectangle: public CanvasShape { public: CanvasRectangle(VDKCanvas* owner, int x, int y, int w, int h, VDKRgb color, bool filled = false): CanvasShape(owner,x,y,w,h,color,filled) {} virtual ~CanvasRectangle() {} void Draw() { canvas->Foreground = color; canvas->DrawRect(filled,bound.Origin().x, bound.Origin().y, bound.w,bound.h); } }; /* Arc constructor is probably one that needs more explanation becaues it has quite a few parameters: x,y origin of arc bounding rect w,h width and height of arc bounding rect start_angle,end_angle are a bit more complicated to explain since unlike most arc function aren't expressed in radians or degrees. The angles should be converted into degrees and multiplied by 64 (which is done by the Draw() method itself). So pass start_angle and end_angle in degrees with angle 0 at 12 o'clock and counting clockwise. */ class CanvasArc: public CanvasShape { private: int start_angle, end_angle; public: CanvasArc(VDKCanvas* owner, int x, int y, int w, int h, int start_angle, int end_angle, VDKRgb color, bool filled = false): CanvasShape(owner,x,y,w,h,color,filled), start_angle(start_angle),end_angle(end_angle) {} virtual ~CanvasArc() {} virtual void Draw() { canvas->Foreground = color; canvas->DrawArc(filled, bound.Origin().x, bound.Origin().y, bound.w,bound.h, start_angle*64,end_angle*64); } }; class CanvasCircle: public CanvasArc { public: CanvasCircle(VDKCanvas* owner, int x,int y, int radius, VDKRgb color, bool filled = false): CanvasArc(owner,x-radius,y-radius,radius*2,radius*2, 0,360*64,color,filled) {} ~CanvasCircle() {} }; class CanvasPixmap: public CanvasShape { private: char pixfile[256]; VDKRawPixmap* pixmap; public: CanvasPixmap(VDKCanvas* owner, int x, int y, char* pixfile): CanvasShape(owner,x,y,0,0,VDKRgb(-1,-1,-1)) { pixmap = new VDKRawPixmap(owner,pixfile); bound = VDKRect(bound.left,bound.top, pixmap->Width(), pixmap->Height()); } virtual ~CanvasPixmap(){ pixmap->Destroy(); } void Draw() { canvas->DrawPixmap(bound.Origin().x,bound.Origin().y,pixmap); } }; typedef VDKArray PointArray; class CanvasPolygon: public CanvasShape { private: GdkPoint *points; int npoints; public: CanvasPolygon(VDKCanvas *owner, PointArray& array, VDKRgb color, bool filled = false); virtual ~CanvasPolygon() { delete[] points; } void Draw() { canvas->Foreground = color; canvas->DrawPolygon(filled,points,npoints); } }; #endif vdk-2.4.0/testvdk/drawingcompo.cc0000644000000000000000000001607507441637725012444 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "drawingcompo.h" static bool draw_mode = false; /* signal maps */ DEFINE_SIGNAL_MAP(DrawingComponent,VDKBox) ON_SIGNAL(clearButton,clicked_signal,Clear) END_SIGNAL_MAP DEFINE_EVENT_LIST(DrawingComponent,VDKBox); static char buff[128]; /* */ DrawingComponent::~DrawingComponent() { for(int t = 0; shape_array[t]; t++) delete shape_array[t]; } /* */ void DrawingComponent::Setup() { VDKScrolled *scrolled = new VDKScrolled(Owner()); VDKBox* vbox = new VDKBox(Owner()); drawing = new VDKDrawingArea(Owner()); drawing->SetSize(600,600); drawing->NormalBackground = clIvory; //drawing->Font = new VDKFont(this,"Courier bold 11"); drawing->Cursor = curCrossHair; EventConnect(drawing,"expose_event",&DrawingComponent::OnExpose); EventConnect(drawing,"motion_notify_event",&DrawingComponent::OnMotion); EventConnect(drawing,"button_press_event",&DrawingComponent::OnButtonPress); EventConnect(drawing,"button_release_event",&DrawingComponent::OnButtonRelease); vbox->Add(drawing); scrolled->Add(vbox); Add(scrolled); Add(new VDKSeparator(Owner()),l_justify,false,false); VDKBox* hbox = new VDKBox(Owner(),h_box); label = new VDKLabel(Owner(),"Coords:000,000"); hbox->Add(label,l_justify,false,false,5); clearButton = new VDKCustomButton(Owner(), "_Clear Drawing"); hbox->Add(clearButton,false,false,5); Add(hbox,l_justify,false,false); // makes an array of shapes // rectangle not filled, not tiled shape_array[0] = new DrawingRectangle(drawing,50,50,100,100,clSiena); // rectangle filled and tiled shape_array[1] = new DrawingRectangle(drawing,250,50,60,60,VDKRgb("forest green"),true,true); // rectangle filled not tiled shape_array[2] = new DrawingRectangle(drawing,250,150,70,30, VDKRgb("indian red"),true); // a pixmap shape_array[3] = new DrawingPixmap(drawing,200,50,"loadfile.xpm"); // circle not filled, not tiled shape_array[4] = new DrawingCircle(drawing,100,200,30,clBlack); // circle filled, not tiled shape_array[5] = new DrawingCircle(drawing,100,200,29,clWhite,true); // arc filled, not tiled shape_array[6] = new DrawingArc(drawing,200,200,60,60,0,90,clRed,true); // polygon filled, not tiled PointArray points(4); points[0] = VDKPoint(300,250); points[1] = VDKPoint(350,200); points[2] = VDKPoint(400,250); points[3] = VDKPoint(350,300); shape_array[7] = new DrawingPolygon(drawing,points,clAirBlue,true); shape_array[8] = NULL; } /* */ bool DrawingComponent::OnButtonPress(VDKObject*, GdkEvent* ev) { GdkEventButton* event = reinterpret_cast(ev); for(int t = 0; shape_array[t]; t++) { if(shape_array[t]->bound.Contains(VDKPoint(int(event->x), int(event->y)))) { shape_array[t]->DrawBound(); draw_mode = false; return true; } } drawing->Cursor = curPencil; draw_mode = true; return true; } /* */ bool DrawingComponent::OnButtonRelease(VDKObject*, GdkEvent* ev) { GdkEventButton* event = reinterpret_cast(ev); if(!draw_mode) { for(int t = 0; shape_array[t]; t++) { if(shape_array[t]->bound.Contains(VDKPoint(int(event->x), int(event->y)))) { shape_array[t]->DrawBound(); return true; } } } draw_mode = false; drawing->Cursor = curCrossHair; return true; } /* */ bool DrawingComponent::OnMotion(VDKObject*, GdkEvent* ev) { GdkEventMotion* event = reinterpret_cast(ev); if(draw_mode) { // avoid to overdraw figures for(int t = 0; shape_array[t]; t++) { if(shape_array[t]->bound.Contains(VDKPoint(int(event->x), int(event->y)))) { drawing->Pen->Thickness = 1; return false; } } drawing->Pen->Thickness = 6; drawing->Pen->Color = VDKRgb("gray80"); GdkRectangle brush; brush.x = int(event->x-2); brush.y = int(event->y-2); brush.width = brush.height = drawing->Pen->Thickness; drawing->DrawRect(true,brush.x,brush.y,brush.width,brush.height); drawing->Pen->Thickness = 1; // add point to list so will be redrown during expose event plist.add(VDKPoint(brush.x,brush.y)); } sprintf(buff,"%3d,%3d - %d points stored",int(event->x),int(event->y),plist.size()); label->Caption = buff; return false; } /* */ bool DrawingComponent::OnExpose(VDKObject*, GdkEvent* ) { // redraws shapes for(int t = 0; shape_array[t]; t++) shape_array[t]->Draw(); drawing->Foreground = clSiena; drawing->Font = new VDKFont(this,"helvetica bold 12"); drawing->DrawString(10,20,"Drag & draw"); // redraw point list PointListIterator li(plist); GdkRectangle brush; drawing->Pen->Thickness = 6; for(;li;li++) { brush.x = int(li.current().x); brush.y = int(li.current().y); brush.width = brush.height = drawing->Pen->Thickness; drawing->DrawRect(true,brush.x,brush.y,brush.width,brush.height); } drawing->Pen->Thickness = 1; return true; } bool DrawingComponent::Clear(VDKObject*) { drawing->Clear(); // clear point list plist.flush(); // call expose event handler to redraw shapes OnExpose(NULL,NULL); return true; } DrawingPolygon::DrawingPolygon(VDKDrawingArea *owner, PointArray& array, VDKRgb color, bool filled): DrawingShape(owner,0,0,0,0,color,filled) { int t; // compute maxX int maxX = array[0].x; for(t = 1; t < array.size(); t++) maxX = array[t].x > maxX ? array[t].x : maxX; // compute maxY int maxY = array[0].y; for(t = 1; t < array.size(); t++) maxY = array[t].y > maxY ? array[t].y : maxY; points = new GdkPoint[array.size()]; for(t = 0; t < array.size(); t++) { points[t].x = array[t].x; points[t].y = array[t].y; } // compute minX int minX = array[0].x; for(t = 1; t < array.size(); t++) minX = array[t].x < minX ? array[t].x : minX; // compute minY int minY = array[0].y; for(t = 1; t < array.size(); t++) minY = array[t].y < minY ? array[t].y : minY; points = new GdkPoint[array.size()]; for(t = 0; t < array.size(); t++) { points[t].x = array[t].x; points[t].y = array[t].y; } npoints = array.size(); bound = VDKRect(minX,minY,maxX-minX,maxY-minY); } vdk-2.4.0/testvdk/drawingcompo.h0000644000000000000000000001337507441637726012307 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _drawingcompo_h #define _drawingcompo_h #include #define MAX_SHAPES 10 typedef VDKValueList PointList; typedef VDKValueListIterator PointListIterator; /* */ class DrawingShape; class DrawingComponent : public VDKBox { VDKDrawingArea *drawing; VDKLabel *label; VDKCustomButton *mlButton; VDKCustomButton *clearButton; DrawingShape* shape_array[MAX_SHAPES]; PointList plist; public: DrawingComponent(VDKForm* owner): VDKBox(owner){} ~DrawingComponent(); void Setup(); bool OnMotion(VDKObject* sender, GdkEvent* event); bool OnExpose(VDKObject*, GdkEvent* event); bool Clear(VDKObject*); bool OnButtonPress(VDKObject*, GdkEvent* ev); bool OnButtonRelease(VDKObject*, GdkEvent* ev); DECLARE_SIGNAL_MAP(DrawingComponent); DECLARE_EVENT_LIST(DrawingComponent); }; /* some shapes */ class DrawingShape { protected: VDKDrawingArea* drawing; VDKRgb color; bool filled; public: VDKRect bound; DrawingShape(VDKDrawingArea* owner, int x, int y, int w, int h, VDKRgb color, bool filled = false): drawing(owner),color(color),filled(filled),bound(x,y,w,h) {} virtual ~DrawingShape() {} virtual void Draw() = 0; void DrawBound() { GdkFunction function = drawing->Pen->Function; GdkLineStyle style = drawing->Pen->Style; drawing->Pen->Function = GDK_INVERT; drawing->Pen->Style = GDK_LINE_ON_OFF_DASH; drawing->DrawRect(false,bound.left,bound.top,bound.W(),bound.H()); drawing->Pen->Function = function; drawing->Pen->Style = style; } }; class DrawingRectangle: public DrawingShape { private: bool tiled; public: DrawingRectangle(VDKDrawingArea* owner, int x, int y, int w, int h, VDKRgb color, bool filled = false, bool tiled = false): DrawingShape(owner,x,y,w,h,color,filled),tiled(tiled) { } virtual ~DrawingRectangle() {} void Draw() { drawing->Pen->Color = color; drawing->Pen->Style = GDK_LINE_SOLID; if(filled) { drawing->Pen->Fill = tiled ? GDK_TILED : GDK_SOLID; if(tiled) { drawing->Pen->SetTile("fuzzy.png"); drawing->DrawRect(filled,bound.Origin().x+1, bound.Origin().y+1, bound.w-1,bound.h-1); } } drawing->Pen->Fill = GDK_SOLID; drawing->DrawRect(tiled ? false : filled, bound.Origin().x, bound.Origin().y, bound.w,bound.h); } }; /* Arc constructor is probably one that needs more explanation becaues it has quite a few parameters: x,y origin of arc bounding rect w,h width and height of arc bounding rect start_angle,end_angle are a bit more complicated to explain since unlike most arc function aren't expressed in radians or degrees. The angles should be converted into degrees and multiplied by 64 (which is done by the Draw() method itself). So pass start_angle and end_angle in degrees with angle 0 at 12 o'clock and counting clockwise. */ class DrawingArc: public DrawingShape { private: int start_angle, end_angle; public: DrawingArc(VDKDrawingArea* owner, int x, int y, int w, int h, int start_angle, int end_angle, VDKRgb color, bool filled = false): DrawingShape(owner,x,y,w,h,color,filled), start_angle(start_angle),end_angle(end_angle) {} virtual ~DrawingArc() {} virtual void Draw() { drawing->Pen->Color = color; drawing->Pen->Style = GDK_LINE_SOLID; drawing->Pen->Fill = GDK_SOLID; drawing->DrawArc(filled, bound.Origin().x, bound.Origin().y, bound.w,bound.h, start_angle*64,end_angle*64); } }; class DrawingCircle: public DrawingArc { public: DrawingCircle(VDKDrawingArea* owner, int x,int y, int radius, VDKRgb color, bool filled = false): DrawingArc(owner,x-radius,y-radius,radius*2,radius*2, 0,360*64,color,filled) {} ~DrawingCircle() {} }; class DrawingPixmap: public DrawingShape { private: char pixfile[256]; VDKPixbuf* pixbuf; public: DrawingPixmap(VDKDrawingArea* owner, int x, int y, char* pixfile): DrawingShape(owner,x,y,0,0,VDKRgb(-1,-1,-1)) { pixbuf = new VDKPixbuf(owner,pixfile); bound = VDKRect(bound.left,bound.top, pixbuf->Width(), pixbuf->Height()); } virtual ~DrawingPixmap(){ pixbuf->Destroy(); } void Draw() { drawing->DrawPixbuf(bound.Origin().x,bound.Origin().y,pixbuf); } }; typedef VDKArray PointArray; class DrawingPolygon: public DrawingShape { private: GdkPoint *points; int npoints; public: DrawingPolygon(VDKDrawingArea *owner, PointArray& array, VDKRgb color, bool filled = false); virtual ~DrawingPolygon() { delete[] points; } void Draw() { drawing->Pen->Color = color; drawing->Pen->Style = GDK_LINE_SOLID; drawing->Pen->Fill = GDK_SOLID; drawing->DrawPolygon(filled,points,npoints); } }; #endif vdk-2.4.0/testvdk/combocompo.cc0000644000000000000000000000664207242043614012072 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * february 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "combocompo.h" /* signals map */ DEFINE_SIGNAL_MAP(ComboComponent,VDKEventBox) ON_SIGNAL(combobox,selection_changed_signal,OnComboChange), ON_SIGNAL(arrows,toggled_signal,OnArrowToggle), ON_SIGNAL(buttonclear,clicked_signal,OnClearClick), ON_SIGNAL(buttonadd,clicked_signal,OnAddClick) END_SIGNAL_MAP /* set up main form */ void ComboComponent::Setup() { Usize = VDKPoint(250,150); VDKBox *frame = new VDKBox(Owner(),v_box); Add(frame,l_justify,false,false,10); VDKBox *vbox; frame->Add(vbox = new VDKBox(Owner(),v_box)); vbox->Add(combobox = new VDKCombo(Owner())); VDKBox *hbox = new VDKBox(Owner(),h_box); label = new VDKLabel(Owner(),"Current selection:",GTK_JUSTIFY_LEFT); hbox->Add(label); label2 = new VDKLabel(Owner(),"",GTK_JUSTIFY_LEFT); hbox->Add(label2); vbox->Add(hbox); VDKBox *hbox2 = new VDKBox(Owner(),h_box); VDKFrame *arrowframe = new VDKFrame(Owner(),"Arrow Keys",v_box,shadow_etched_in); arrows = new VDKRadioButtonGroup(Owner()); arrows_on = new VDKRadioButton(arrows,"enabled"); arrows_off = new VDKRadioButton(arrows,"disabled"); arrowframe->Add(arrows); hbox2->Add(arrowframe); VDKFrame *buttonframe = new VDKFrame(Owner(),"List",v_box,shadow_etched_in); VDKBox *vbox2 = new VDKBox(Owner(),v_box); buttonclear = new VDKCustomButton(Owner(),"Clear"); buttonadd = new VDKCustomButton(Owner(),"Add 5 lines"); vbox2->Add(buttonclear); vbox2->Add(buttonadd); buttonframe->Add(vbox2); hbox2->Add(buttonframe); vbox->Add(hbox2); StringList sl; VDKString s("this"); sl.add(s); s = "is"; sl.add(s); s = "a"; sl.add(s); s = "test,"; sl.add(s); s = "dude !"; sl.add(s); combobox->SetPopdownStrings(sl); } bool ComboComponent::OnComboChange(VDKObject *) { int sel = combobox->Selected; VDKString defaultText = "None"; label2->Caption = (sel == -1) ? (char*) defaultText : (char*) (combobox->GetPopdownStrings())[sel]; return true; } bool ComboComponent::OnArrowToggle(VDKObject*) { combobox->UseArrows(arrows->GetSelected() == 0); return true; } bool ComboComponent::OnClearClick(VDKObject*) { combobox->ClearList(); return true; } bool ComboComponent::OnAddClick(VDKObject*) { StringList temp = combobox->PopdownStrings; char buffer[15]; for (int i=0; i<5; i++) { sprintf(buffer, "Added line %d",i+1); VDKString s(buffer); temp.add(s); } combobox->PopdownStrings = temp; return true; } vdk-2.4.0/testvdk/combocompo.h0000644000000000000000000000313407242043167011730 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * february 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _combocompo_h #define _combocompo_h #include class ComboComponent: public VDKEventBox { VDKBox *entrybox1,*entrybox2,*entriesbox; VDKCombo *combobox; VDKLabel *label,*label2; VDKRadioButtonGroup *arrows; VDKRadioButton *arrows_on,*arrows_off; VDKCustomButton *buttonclear, *buttonadd; public: ComboComponent(VDKForm* owner): VDKEventBox(owner) {} ~ComboComponent() {} void Setup(); // response functions bool OnComboChange(VDKObject*); bool OnArrowToggle(VDKObject*); bool OnClearClick(VDKObject*); bool OnAddClick(VDKObject*); DECLARE_SIGNAL_MAP(ComboComponent); }; #endif vdk-2.4.0/testvdk/chartcompo.cc0000644000000000000000000001100207257437446012076 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "chartcompo.h" #include #define MAX_COLORS 7 struct { int red,green,blue; } colors[MAX_COLORS] = { {255,255,255}, {255,0,0}, {0,255,0}, {0,0,255}, {255,255,0}, {0,255,255}, {255,0,255} }; const int MIN = 0; const int MAX = 200; const int SIZE = 20; /////////////////////////////////////////////////// DEFINE_SIGNAL_MAP(ChartComponent,VDKBox) ON_SIGNAL(plot,clicked_signal,Plot), ON_SIGNAL(clear,clicked_signal,ClearPlot), ON_SIGNAL(combo,selection_changed_signal,OnCombo) END_SIGNAL_MAP /////////////////////////////////////////////////// /* */ bool ChartComponent::OnCombo(VDKObject*) { int sel = combo->Selected; switch(sel) { case 0: LineChart(); ClearPlot(chart); break; case 1: ScatteredChart(); ClearPlot(chart); break; case 2: BarChart(); ClearPlot(chart); } return true; } /* */ bool ChartComponent::ClearPlot(VDKObject*) { if(chart) { chart->Clear(); z = 0; } return true; } /* */ bool ChartComponent::Plot(VDKObject*) { if(!chart) return true; switch(chart->isA()) { case linechart_class: PlotSeries(true,SIZE); break; case scatteredchart_class: PlotSeries(false,SIZE); break; case barchart_class: PlotSeries(false,1); break; } return true; } /* */ void ChartComponent::PlotSeries(bool sort, int size) { int t; char buff[32]; srandom(time(NULL)); static int range = MAX-MIN; Darray x(size),y(size); for (t=0; t < size; t++) { x[t] = MIN + random()%range; y[t] = MIN + random()%range; } if(sort) { x.Heapsort(); y.Heapsort(); } sprintf(buff,"Series %d",++z); Series *s = new Series(buff); for (t=0; t < x.size(); t++) s->Add(x[t],y[t]); s->Color = VDKRgb(colors[z%MAX_COLORS].red, colors[z%MAX_COLORS].green, colors[z%MAX_COLORS].blue); chart->LabelXDigits = 1; chart->LabelYDigits = 1; chart->Title = buff; chart->LabelX = buff; chart->LabelY = buff; chart->AddSeries(s); } /* */ void ChartComponent::Setup() { char buff[64]; LineChart(); VDKBox *box1 = new VDKBox(Owner(),h_box); combo = new VDKCombo(Owner()); StringList sl = combo->PopdownStrings; sl.add("VDKLineChart"); sl.add("VDKScatteredChart"); sl.add("VDKBarChart"); combo->PopdownStrings = sl; sprintf(buff,"Plots %d randomly generated points (sorted)",SIZE); plot = new VDKCustomButton(Owner(),"Plot"); plot->SetTip(buff); clear = new VDKCustomButton(Owner(),"Clear"); box1->Add(combo,l_justify,true,true,5); box1->Add(plot,l_justify,true,true,5); box1->Add(clear,l_justify,true,true,5); Add(box1,r_justify,false,false,0); } /* */ void ChartComponent::LineChart() { if(chart) RemoveObject(chart); chart = new VDKLineChart(Owner(),400,300); chart->NormalBackground = VDKRgb("navyblue"); chart->Foreground = clYellow; chart->Font = new VDKFont(this,"helvetica 8"); chart->ChartBorder = 60; chart->Title = "VDKLineChart"; Add(chart); } /* */ void ChartComponent::ScatteredChart() { if(chart) RemoveObject(chart); chart = new VDKScatteredChart(Owner(),400,300); chart->NormalBackground = clBlack; chart->Foreground = clGreen; chart->Font = new VDKFont(this,"helvetica 8"); chart->ChartBorder = 60; chart->Title = "VDKScatteredChart"; Add(chart); } /* */ void ChartComponent::BarChart() { if(chart) RemoveObject(chart); chart = new VDKBarChart(Owner(),400,300); chart->NormalBackground = clBlack; chart->Foreground = clGreen; chart->Font = new VDKFont(this,"helvetica 8"); chart->ChartBorder = 60; chart->Title = "VDKBarChart"; Add(chart); } vdk-2.4.0/testvdk/chartcompo.h0000644000000000000000000000313107257436762011744 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _chartcompo_h #define _chartcompo_h #include #include #include #define MAX_COLORS 7 /////////////////////////////// class ChartComponent: public VDKBox { VDKChart* chart; VDKCombo* combo; VDKCustomButton *plot,*clear; VDKFrame *frame; void PlotSeries(bool, int); void LineChart(); void ScatteredChart(); void BarChart(); void Setup(); int z; public: ChartComponent(VDKForm* owner): VDKBox(owner) { chart = NULL; z = 0; } ~ChartComponent() {} bool Plot(VDKObject*); bool ClearPlot(VDKObject*); bool OnCombo(VDKObject*); DECLARE_SIGNAL_MAP(ChartComponent); }; #endif vdk-2.4.0/testvdk/ctreecompo.cc0000644000000000000000000001423707402651622012076 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include "ctreecompo.h" #include const int MAX_TITLES = 1; // in pixmap.cc extern char *mini_ofolder_xpm[]; extern char *mini_cfolder_xpm[]; // in src/pixdata.cc extern char *testo_xpm[]; static char *titles[] = {"Folders & files"}; static char buff[128]; /////////////////////////////////////////////////// DEFINE_SIGNAL_LIST(TreeComponent,VDKBox); DEFINE_EVENT_LIST(TreeComponent,VDKBox); DEFINE_SIGNAL_MAP(TreeComponent,VDKBox) ON_SIGNAL(tree,select_node_signal,ShowSelection), ON_SIGNAL(remove,clicked_signal,RemoveSelection), ON_SIGNAL(build,clicked_signal,BuildTree), ON_SIGNAL(clear,clicked_signal,ClearTree), ON_SIGNAL(expand,clicked_signal,ExpandNode) END_SIGNAL_MAP /* */ bool TreeComponent::ExpandNode(VDKObject* ) { VDKTreeNode node = tree->SelectedNode; if(node && ! tree->IsLeaf(node)) { if(tree->IsExpanded(node)) gtk_ctree_collapse_recursive(GTK_CTREE(tree->CustomWidget()),node); else gtk_ctree_expand_recursive(GTK_CTREE(tree->CustomWidget()),node); } return true; } /* */ bool TreeComponent::RemoveSelection(VDKObject* ) { VDKTreeNode node = NULL; VDKTreeNodeArray& selections = tree->Selections(); if( (selections.size() == 0) && (node = tree->SelectedNode) ) tree->RemoveNode(node); else { tree->Freeze(); for(int j = 0; j < selections.size(); j++) tree->RemoveNode(selections[j]); tree->Thaw(); } if(tree->Size() == 0) { remove->Enabled = false; build->Enabled = true; } return true; } /* */ bool TreeComponent::ClearTree(VDKObject* obj) { tree->Clear(); remove->Enabled = false; build->Enabled = true; return true; } /* */ bool TreeComponent::ShowSelection(VDKObject* obj) { VDKCustomTree* aTree = NULL; VDKTreeNode node; Tuple tuple; int t,j; // downcast from VDKObj to VDKCustomTree aTree = dynamic_cast(obj); // when called from a button surely fails aTree = aTree ? aTree : tree; VDKTreeNodeArray& selections = aTree->Selections(); if(selections.size() == 0) { node = aTree->SelectedNode; if(node && aTree->IsLeaf(node)) { tuple = (*aTree)[node]; for(t = 0; t < tuple.size(); t++) printf("\ncol:%d, text:%s",t,(char*) tuple[t]); fflush(stdout); } } else { for(j = 0; j < selections.size(); j++) { tuple = (*aTree)[selections[j]]; for(t = 0; t < tuple.size(); t++) printf("\ncol:%d, text:%s",t,(char*) tuple[t]); fflush(stdout); } } return true; } /* */ bool TreeComponent::ShowExtendedSelection(VDKObject* obj, GdkEvent*) { // downcast from VDKObj to VDKCustomTree VDKCustomTree* aTree = dynamic_cast(obj); g_return_val_if_fail(aTree != NULL,false); VDKTreeNodeArray& selections = aTree->Selections(); if(selections.size() > 1) ShowSelection(obj); printf("\nselection size:%d",selections.size()); fflush(stdout); return false; } /* */ #define RAND_RANGE 20.0 bool TreeComponent::BuildTree(VDKObject*) { VDKTreeNode node; int t = 0,siblings = 3; int depth = 2; char* text = &buff[0]; tree->Freeze(); // add a root + 3 siblings sprintf(buff,"Folder 1"); node = tree->AddNode(&text,NULL, true,false, mini_cfolder_xpm, mini_ofolder_xpm); for(t = 0; t < siblings; t++) { sprintf(buff,"File %d",t); tree->AddNode(&text,node,false,true,testo_xpm); } // add a root + depth childs + a sibling sprintf(buff,"Folder 2"); node = tree->AddNode(&text,NULL, true,false, mini_cfolder_xpm, mini_ofolder_xpm); for(t = 0; t < depth; t++) { sprintf(buff,"Folder %d",t+3); node = tree->AddNode(&text,node, true,false, mini_cfolder_xpm, mini_ofolder_xpm); } sprintf(buff,"File 1"); tree->AddNode(&text,node,false,true,testo_xpm); // add again a root + 10 siblings siblings = 10; sprintf(buff,"Folder 5"); node = tree->AddNode(&text,NULL, true,false, mini_cfolder_xpm, mini_ofolder_xpm); for(t = 0; t < siblings; t++) { sprintf(buff,"File %d",t); tree->AddNode(&text,node,false,true,testo_xpm); } tree->Thaw(); build->Enabled = false; remove->Enabled = true; // select first node tree->SelectedNode = NULL; return true; } /////////////////////////////////////////////////// void TreeComponent::Setup() { tree = new VDKCustomTree(Owner(),MAX_TITLES,titles,GTK_SELECTION_EXTENDED); // set tree properties tree->LineStyle = GTK_CTREE_LINES_DOTTED; tree->ActiveTitle(0,false); // tree->Font = new VDKFont(Owner(),"helvetica 12"); Add(tree); // VDKFrame * frame = new VDKFrame(Owner(),NULL,h_box); remove = new VDKCustomButton(Owner(),"Remove selected nodes"); build = new VDKCustomButton(Owner(),"Rebuild tree"); clear = new VDKCustomButton(Owner(),"Clear tree"); expand = new VDKCustomButton(Owner(),"Expand/Collapse"); frame->Add(remove,l_justify); frame->Add(clear,l_justify); frame->Add(build,l_justify); frame->Add(expand,l_justify); Add(frame,l_justify,false,false,false); // load tree BuildTree(NULL); // when mouse is released shows multiple selections (if any) EventConnect(tree,"button_release_event", &TreeComponent::ShowExtendedSelection); printf("\ntree size:%d",tree->Size()); fflush(stdout); } vdk-2.4.0/testvdk/ctreecompo.h0000644000000000000000000000312007257436762011743 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _customtreecompo_h #define _customtreecompo_h #include class TreeComponent: public VDKBox { VDKCustomTree *tree; VDKCustomButton *remove,*build,*clear; VDKCustomButton *expand; public: TreeComponent(VDKForm* owner): VDKBox(owner) {} ~TreeComponent() { } void Setup(); bool ShowSelection(VDKObject*); bool ShowExtendedSelection(VDKObject* obj, GdkEvent*); bool ClearTree(VDKObject* obj); bool RemoveSelection(VDKObject*); bool BuildTree(VDKObject*); bool ExpandNode(VDKObject* ); DECLARE_SIGNAL_LIST(TreeComponent); DECLARE_EVENT_LIST(TreeComponent); DECLARE_SIGNAL_MAP(TreeComponent); }; #endif vdk-2.4.0/testvdk/edcompo.cc0000644000000000000000000001775307472533470011401 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * February 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "edcompo.h" #include "testvdk.h" #include static char buff[512]; extern char* togglech_xpm[] ; extern char* mini_ofolder_xpm[]; static char* get_extension(char* s); static char* ToggledSource(const char* file); /////////////////////////////////////////////////// DEFINE_SIGNAL_LIST(EditorComponent,VDKBox); DEFINE_SIGNAL_MAP(EditorComponent,VDKBox) ON_SIGNAL(tbar,clicked_signal,OnToolbarClicked) END_SIGNAL_MAP /////////////////////////////////////////////////// /* response methods */ bool EditorComponent::OnToolbarClicked(VDKObject* sender) { TestvdkForm* ownerform = NULL; VDKToolbar* bar = dynamic_cast(sender); int ndx; if(bar) { int btn = bar->ButtonPressed; switch(btn) { case 0: // open test related source if ( (ownerform = dynamic_cast(Owner())) ) ownerform->OnopenMenuActivate(NULL); break; case 1: // toggle source<->header ndx = nbook->ActivePage; if( (ndx >= 0) && (ndx < nbook->Pages.size()) ) { char* toggledname = ToggledSource(nbook->Pages[ndx]->TabLabel->Caption); if(toggledname) { AddPage(toggledname); delete [] toggledname; } } break; } } return true; } /* constructor */ EditorComponent::EditorComponent(VDKForm* owner): VDKBox(owner) { // load tokens for editor word completion sprintf(buff,"tokens.db"); tokenlist = VDKEditor::LoadTokens(buff); } /* setup interface */ void EditorComponent::Setup() { tbar = new VDKToolbar(Owner()); tbar->AddButton(mini_ofolder_xpm,"Select a test, then open related source"); tbar->AddButton(togglech_xpm,"toggle source <-> header"); tbar->Relief = GTK_RELIEF_NONE; nbook = new VDKNotebook(Owner()); nbook->Scrollable = true; Add(tbar,l_justify,false,false,5); Add(new VDKSeparator(Owner()),l_justify,false,false,2); Add(nbook,5); } /* add a new page to notebook, if a page containing already exists, activate it. */ static char file_selection[256] = {'\0'}; void EditorComponent::AddPage(const char* filename, const char* member) { if(filename) { // check if an editor oage on that file is already opened int ndx = HasPage(filename); // makes a new editor page if(ndx < 0) { std::strcpy(file_selection, filename); VDKEditor *editor = new VDKEditor(Owner()); // editor->Font = new VDKFont(Owner(),"courier Medium 12"); // install token list for word completion if(tokenlist) editor->SetTokens(tokenlist); // NOTE: // due to a not yet discovered bug isn't possible // connect here vdkeditor with a realize signal // using dynamic tables (aka SignalConnect()) // so we use a lower level gtk+ way. gtk_signal_connect(GTK_OBJECT(editor->WrappedWidget()),"realize", GTK_SIGNAL_FUNC(EditorComponent::OnVDKEditorRealize), (gpointer) editor); // pass himself here // add a page to notebook nbook->AddPage(editor,filename); // activate this (last) page nbook->ActivePage = (nbook->Pages.size()-1); } else // activates page containing nbook->ActivePage = (ndx); if(member) ScrollTo(member); } } /* search into notebook page list to see it owns an editor with Returns ordinal position or -1 if not found. */ int EditorComponent::HasPage(const char* filename) { PageListIterator li(nbook->Pages); int ndx = 0; for(;li;li++,ndx++) { const char* fn = li.current()->TabLabel->Caption; if(!std::strcmp(fn,filename)) return ndx; } return -1; } /* makes a text widget to load a source file into. - we can't trap "realize" signal in a safe way using dynamics tables on this widget. - a possible work around is to use a lower call to gtk_signal_connect() and connect with a static function that uses a static buffer on which file selection is stored (inelegant but works). */ static char* defaultFont = "courier 11"; static char* defaultFontBold = "courier bold 11"; static char* defaultFontItalic = "courier oblique 11"; void EditorComponent::OnVDKEditorRealize(GtkWidget* , gpointer gp) { VDKEditor* text = reinterpret_cast(gp); g_return_if_fail(text != NULL); text->Font = new VDKFont(text->Owner(),defaultFont); text->NormalBackground = clIvory; // text->Foreground = clNavyBlue; // gtk_source_view_set_auto_indent(GTK_SOURCE_VIEW(text->WrappedWidget()),true); // makes some nice colors and fonts VDKColor* firebrick = new VDKColor(text,"firebrick"); VDKColor *navyblue = new VDKColor(text,"navy blue"); VDKFont* bold = new VDKFont(text,defaultFontBold); VDKFont* italic = new VDKFont(text,defaultFontItalic); VDKColor* forest_green = new VDKColor(text,"forest green"); VDKColor* blue = new VDKColor(text,"blue"); // install syntax and patterns table text->InstallSyntaxTable ( firebrick,bold, // keywords firebrick,NULL, // gtk+ names forest_green,NULL, // macros forest_green,bold, // preprocessor directives blue,NULL, // constants navyblue,italic ); // remarks if(text && *file_selection) text->LoadFromFile(file_selection); } /* scrolls to member into notebook active page */ void EditorComponent::ScrollTo(const char* member) { int ndx = nbook->ActivePage; if(ndx < 0) return; // downcasts from tabpage child to editor VDKEditor* editor = dynamic_cast(nbook->Pages[ndx]->Child()); if(editor) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(editor->Buffer()); GtkTextIter start; GtkTextIter match_start; GtkTextIter match_end; bool found = false; int start_offset = 0; // int end_offset = 0; int found_start_offset = -1; int found_end_offset = -1; // goes to the last match of do { gtk_text_buffer_get_iter_at_offset (buffer,& start, start_offset); found = gtk_text_iter_forward_search (&start,member,GTK_TEXT_SEARCH_TEXT_ONLY,&match_start,&match_end,NULL); if(found) { found_start_offset = gtk_text_iter_get_offset(&match_start); found_end_offset = gtk_text_iter_get_offset(&match_end); start_offset = found_end_offset; } } while(found); if(found_start_offset >= 0) { editor->Scroll(start_offset); editor->SelectText(found_start_offset,found_end_offset); } } } /* support functions */ // get file extension char* get_extension(char* s) { int t = std::strlen(s)-1; char* p = &s[t]; for(; (s != p) && (*p != '.') && (*p != '/'); p--) ; return ( s!= p) && (*p != '/') ? p : static_cast(0); } /* answers a toggled .cc <-> .h filename user should delete answered buffer */ char* ToggledSource(const char* file) { char* localbuff = new char[std::strlen(file)+1]; char* answer = NULL; std::strcpy(localbuff,file); char* ext = get_extension(localbuff); if(ext) { *ext = '\0'; ext++; } else { delete [] localbuff; return NULL; } sprintf(buff,"%s.%s",localbuff,!std::strcmp(ext,"cc") ? "h" : "cc"); delete [] localbuff; answer = new char[std::strlen(buff)+1]; std::strcpy(answer,buff); return answer; } vdk-2.4.0/testvdk/edcompo.h0000644000000000000000000000310507243164277011226 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * February 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _editorcompo_h #define _editorcompo_h #include class EditorComponent: public VDKBox { private: int HasPage(const char* filename); protected: VDKToolbar* tbar; VDKNotebook *nbook; static void OnVDKEditorRealize(GtkWidget*, gpointer); TokenList* tokenlist; public: EditorComponent(VDKForm* owner); ~EditorComponent() { if (tokenlist) delete tokenlist; } void Setup(); void AddPage(const char* filename, const char* member = NULL); void ScrollTo(const char* member); bool OnToolbarClicked(VDKObject* sender); DECLARE_SIGNAL_MAP(EditorComponent); DECLARE_SIGNAL_LIST(EditorComponent); }; #endif vdk-2.4.0/testvdk/progcompo.cc0000644000000000000000000000551407242300324011731 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * february 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "progcompo.h" /* */ DEFINE_SIGNAL_MAP(ProgressComponent,VDKBox) ON_SIGNAL(timer,timer_tick_signal,OnTimer), ON_SIGNAL(start,clicked_signal,Start), ON_SIGNAL(stop,clicked_signal,Stop), ON_SIGNAL(stop,realize_signal,OnRealize), ON_SIGNAL(start,realize_signal,OnRealize) END_SIGNAL_MAP const int maxTime = 20; static int timeElapsed = 0; static char buff[64]; /* */ void ProgressComponent::Setup() { timer = new VDKTimer(Owner(),1000,false); timer->Parent(this); VDKBox* vbox = new VDKBox(Owner(),v_box); vbox->Add( bar = new VDKProgressBar(Owner(),0,20)); bar->BarStyle = GTK_PROGRESS_DISCRETE; bar->BlockCount = 20; bar->NormalBackground = clWhite; bar->PrelightBackground = VDKRgb("dodger blue"); vbox->Add( label = new VDKLabel(Owner(),"")); vbox->Add(new VDKSeparator(Owner())); Add(vbox,l_justify,false,false); VDKBox* hbox = new VDKBox(Owner(),h_box); hbox->Add(start = new VDKCustomButton(Owner(),"Start")); hbox->Add(stop = new VDKCustomButton(Owner(),"Stop")); start->Parent(this); stop->Parent(this); Add(hbox,l_justify,false,false); timeElapsed = 0; } /* */ bool ProgressComponent::OnTimer(VDKObject*) { timeElapsed++; bar->Value = double(timeElapsed); sprintf(buff,"Time elapsed: %.0f - Remaining:%.0f",bar->Position(),maxTime - bar->Value); label->Caption = buff; if(timeElapsed >= maxTime) { timeElapsed = 0; timer->Stop(); bar->Value = 0.0; } return true; } /* */ bool ProgressComponent::Start(VDKObject*) { sprintf(buff,"Time elapsed: %.0f - Remaining:%.0f", bar->Position(), maxTime - bar->Value); label->Caption = buff; timer->Start(); return true; } /* */ bool ProgressComponent::Stop(VDKObject*) { timer->Stop(); return true; } /* */ bool ProgressComponent::OnRealize(VDKObject* sender) { printf("\nOnRealize"); fflush(stdout); sender->Cursor = curHandPtr; return true; } vdk-2.4.0/testvdk/progcompo.h0000644000000000000000000000254607242277565011621 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * february 2001 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include class ProgressComponent: public VDKBox { VDKProgressBar *bar; VDKCustomButton *stop,*start; VDKTimer *timer; VDKLabel *label; public: ProgressComponent(VDKForm* owner): VDKBox(owner) {} ~ ProgressComponent() {} void Setup(); bool OnTimer(VDKObject*); bool Start(VDKObject*); bool Stop(VDKObject*); bool OnRealize(VDKObject* sender); DECLARE_SIGNAL_MAP(ProgressComponent); }; vdk-2.4.0/testvdk/sigctest.cc0000644000000000000000000001440307242601174011555 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include // compiled only with libsigc extension #ifdef USE_SIGCPLUSPLUS static char buff[256]; // Sigctest MAIN FORM CLASS /* main form constructor */ SigctestForm::SigctestForm(VDKForm* owner, char* title): VDKForm(owner,title) { } /* main form destructor */ SigctestForm::~SigctestForm() { } /* main form setup */ extern char *mini_ofolder_xpm[]; void SigctestForm::GUISetup(void) { SetSize(400,300); Title = "Extended signal system test"; vbox3 = new VDKBox(this,v_box); Add(vbox3,0,1,1,0); fixed0 = new VDKFixed(this); vbox3->Add(fixed0,0,1,1,0); aButton = new VDKCustomButton(this,(char*) NULL,"A custom Button", 16,(GtkPositionType) 1); aButton->SetSize(120,32); fixed0->Add(aButton,8,8,1,0); aToggledButton = new VDKCustomButton(this,(char*) NULL, "a Custom toggled button", 32,(GtkPositionType) 1); aToggledButton->SetSize(180,32); fixed0->Add(aToggledButton,144,8,1,0); char* aCustomListTitles[] = { "Title" }; aCustomList = new VDKCustomList(this,1,aCustomListTitles, (GtkSelectionMode) 0); aCustomList->SetSize(120,190); aCustomList->AutoResize = false; aCustomList->BorderShadow = (GtkShadowType) shadow_in; fixed0->Add(aCustomList,8,57,1,0); aCheckButton = new VDKCheckButton(this,"checkbutton0"); fixed0->Add(aCheckButton,142,56,1,0); frame0 = new VDKFrame(this,NULL,v_box,shadow_etched_in); frame0->SetSize(235,47); fixed0->Add(frame0,141,78,1,0); frame0->BorderWidth(0); aToolbar = new VDKToolbar(this); aToolbar->SetSize(231,34); frame0->Add(aToolbar,144,81,1,0); aToolbar->BorderWidth(3); aToolbar->Relief = (GtkReliefStyle) 0; #include "loadfile.xpm" aToolbar->AddButton(loadfile_xpm,NULL,NULL); aToolbar->AddButton(mini_ofolder_xpm,NULL,NULL); aNotebook = new VDKNotebook(this); aNotebook->SetSize(231,113); fixed0->Add(aNotebook,144,135,1,0); notebook0_page0 = new VDKBox(this,v_box); aNotebook->AddPage(notebook0_page0,"page 1"); notebook0_page2 = new VDKBox(this,v_box); aNotebook->AddPage(notebook0_page2,"page 2"); notebook0_page3 = new VDKBox(this,v_box); aNotebook->AddPage(notebook0_page3,"page 3"); aStatusbar = new VDKStatusbar(this); aStatusbar->SetSize(398,20); Add(aStatusbar,r_justify,false,false,0); aStatusbar->Shadow = shadow_in; } void SigctestForm::Setup(void) { GUISetup(); // fills custom list with some strings aCustomList->Font = new VDKFont(this,"helvetica 12"); for (int t = 0; t < 10; t++) { char* p = buff; sprintf(p,"Item %d",t); aCustomList->AddRow(&p); } aCustomList->SelectRow(0,0); // connects with signals using extended system aButton->OnButtonClicked.connect( slot(*this,&SigctestForm::OnButtonClicked)); aCustomList->OnRowSelect.connect( slot(*this,&SigctestForm::OnCustomListSelected)); aCheckButton->OnButtonToggled.connect( slot(*this,&SigctestForm::OnCheckButtonToggled)); /* this examples show how to use a paradigm different from the signal-driven. Here we base the paradigm on widget state-change,in other words we connect with a property change rather than a signal. In this way we completely forget signals and concentrate on widget state and we want trap when the widget state changes (the underlying signal that caused widget state change remains on the background however) */ // intercepts a value changed into toggle button "Checked" property aToggledButton->Checked.OnValueChanged.connect( slot(*this,&SigctestForm::OnToggledButtonCheckedPropertyChange)); // intercepts a value changed into custom list "Unselected" property aCustomList->Unselected.OnValueChanged.connect( slot(*this,&SigctestForm::OnCustomListUnselectedPropertyChange)); // traps a value change of toolbar "ButtonPressed" property aToolbar->ButtonPressed.OnValueChanged.connect( slot(*this,&SigctestForm::OnToolbarButtonPressedPropertyChange)); // answers to a notebook page switch aNotebook->ActivePage.OnValueChanged.connect( slot(*this,&SigctestForm::OnNotebookActivePagePropertyChange)); } void SigctestForm::OnButtonClicked(VDKObject* sender) { sprintf(buff,"custom button:%p clicked",sender); aStatusbar->Push(buff); } void SigctestForm::OnCustomListSelected(VDKObject* sender, int row, int col) { sprintf(buff,"custom list[%p] selection changed - row:%d", sender, row); aStatusbar->Push(buff); } void SigctestForm::OnCheckButtonToggled(bool toggled) { sprintf(buff,"Check button toggled : %s", toggled ? "true" : "false"); aStatusbar->Push(buff); } void SigctestForm::OnNotebookActivePagePropertyChange(int page) { sprintf(buff,"Notebook property changed : %d",page); aStatusbar->Push(buff); } void SigctestForm::OnToggledButtonCheckedPropertyChange(bool checked) { sprintf(buff,"Toggled button property changed : %s", checked ? "true" : "false"); aStatusbar->Push(buff); } void SigctestForm::OnCustomListUnselectedPropertyChange (VDKCustomList* sender, VDKPoint p) { sprintf(buff,"Custom list[%p] property changed - row:%d", sender,p.x); aStatusbar->Push(buff); } void SigctestForm::OnToolbarButtonPressedPropertyChange(int button) { sprintf(buff,"Toolbar property changed:%d",button); aStatusbar->Push(buff); } // compiled only with libsigc extension #endif vdk-2.4.0/testvdk/sigctest.h0000644000000000000000000000446107242601174011422 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _sigctest_main_form_h_ #define _sigctest_main_form_h_ #ifdef HAVE_CONFIG_H #include #endif // compiled only with libsigc extension #ifdef USE_SIGCPLUSPLUS // vdk support #include // Sigctest FORM CLASS class SigctestForm: public VDKForm { // gui object declarations private: // gui object declarations void GUISetup(void); public: SigctestForm(VDKForm* owner, char* title = NULL); ~SigctestForm(); void Setup(void); void OnButtonClicked(VDKObject* sender); void OnCustomListSelected(VDKObject* sender, int row, int col); void OnCheckButtonToggled(bool toggled); void OnToggledButtonCheckedPropertyChange(bool checked); void OnCustomListUnselectedPropertyChange(VDKCustomList* sender, VDKPoint p); void OnToolbarButtonPressedPropertyChange(int button); void OnNotebookActivePagePropertyChange(int page); protected: VDKBox* vbox3; protected: VDKFixed* fixed0; protected: VDKCustomButton* aButton; protected: VDKCustomButton* aToggledButton; protected: VDKCustomList* aCustomList; protected: VDKCheckButton* aCheckButton; protected: VDKFrame* frame0; protected: VDKToolbar* aToolbar; protected: VDKNotebook* aNotebook; protected: VDKBox* notebook0_page0; protected: VDKBox* notebook0_page2; protected: VDKBox* notebook0_page3; protected: VDKStatusbar* aStatusbar; }; // compiled only with libsigc extension #endif #endif vdk-2.4.0/testvdk/dnd.cc0000644000000000000000000004757507315525445010524 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include "dnd.h" enum { TARGET_STRING, TARGET_ROOTWIN, TARGET_URL }; static GtkTargetEntry target_table[] = { { "STRING",0, TARGET_STRING }, { "TEXT", 0, TARGET_STRING }, { "URL", 0, TARGET_URL }, { "application/x-rootwin-drop", 0, TARGET_ROOTWIN } }; static guint n_targets = sizeof(target_table) / sizeof(target_table[0]); extern char *drag_icon_xpm[]; /* main form constructor */ DndForm::DndForm(VDKForm* owner, char* title): VDKForm(owner,title) { child = NULL; } /* main form destructor */ DndForm::~DndForm() { } /* */ DEFINE_SIGNAL_MAP(DndForm,VDKForm) ON_SIGNAL(button_area,dnd_dropped_signal,OnDrop), ON_SIGNAL(target_area1,dnd_dropped_signal,OnDrop), ON_SIGNAL(target_area2,dnd_dropped_signal,OnDrop), ON_SIGNAL(widget_area,dnd_dropped_signal,OnDrop) END_SIGNAL_MAP /* main form setup */ void DndForm::GUISetup(void) { SetSize(207,215); Title = "Drag & Drop test"; vbox2 = new VDKBox(this,v_box); Add(vbox2,0,1,1,0); hbox4 = new VDKBox(this,h_box); vbox2->Add(hbox4,0,1,1,0); hbox4->BorderWidth(0); button_area = new VDKBox(this,v_box); button_area->SetSize(86,131); hbox4->Add(button_area,0,1,1,0); button_area->BorderWidth(0); button1 = new VDKCustomButton(this,"button1"); button_area->Add(button1,0,1,1,0); button2 = new VDKCustomButton(this,"button2"); button_area->Add(button2,0,1,1,0); button3 = new VDKCustomButton(this,"button3"); button_area->Add(button3,0,1,1,0); button4 = new VDKCustomButton(this,"button4"); button_area->Add(button4,0,1,1,0); button6 = new VDKCustomButton(this,"button6"); button_area->Add(button6,0,1,1,0); widget_area = new VDKBox(this,v_box); widget_area->SetSize(73,134); hbox4->Add(widget_area,0,1,1,0); widget_area->BorderWidth(0); char* customlist0Titles[] = { "Title#0" }; customlist0 = new VDKCustomList(this,1, customlist0Titles,(GtkSelectionMode) 0); customlist0->SetSize(100,100); widget_area->Add(customlist0,0,1,1,0); entry0 = new VDKEntry(this,0); widget_area->Add(entry0,0,1,1,0); separator0 = new VDKSeparator(this,h_separator); vbox2->Add(separator0,0,0,0,3); hbox5 = new VDKBox(this,h_box); hbox5->SetSize(205,65); vbox2->Add(hbox5,0,1,1,0); hbox5->BorderWidth(0); target_area1 = new VDKBox(this,v_box); target_area1->SetSize(65,68); hbox5->Add(target_area1,0,1,1,0); target_area1->BorderWidth(0); separator1 = new VDKSeparator(this,h_separator); separator1->SetSize(1,39); hbox5->Add(separator1,0,0,0,3); target_area2 = new VDKBox(this,v_box); target_area2->SetSize(62,68); hbox5->Add(target_area2,0,1,1,0); target_area2->BorderWidth(0); } /* main form setup */ void DndForm::Setup(void) { GUISetup(); // makes a drag and drop object dnd = new VDKDnD(this, target_table,n_targets); // add sources to dnd from widget area dnd->AddSource(customlist0); dnd->AddSource(entry0); dnd->SetIcon(entry0,new VDKRawPixmap(this,drag_icon_xpm)); // add sources to dnd from button area dnd->AddSource(button1); dnd->AddSource(button2); dnd->AddSource(button3); dnd->AddSource(button4); dnd->AddSource(button6); // add targets to dnd dnd->AddTarget(button_area); dnd->AddTarget(target_area1); dnd->AddTarget(target_area2); dnd->AddTarget(widget_area); } /* */ bool DndForm::OnDrop(VDKObject* target) { VDKObject* source = dnd->DragSource; if(!source) return true; GtkWidget* gtksource = source ? source->Widget() : NULL; VDKObjectContainer* src_container = dynamic_cast(source->Parent()); VDKObjectContainer* tgt_container = dynamic_cast(target); if( src_container && tgt_container ) { src_container->RemoveObjectFromContainer(source); // add to target container tgt_container->Add(source,l_justify,true,true,0); // unref again or it will leak gtk_widget_unref(gtksource); // set new parent source->Parent(target); } return true; } // form event response method void DndForm::OnShow(VDKForm* sender) { child = new TrashcanForm(this,NULL); child->Setup(); gtk_window_set_transient_for(GTK_WINDOW(child->Window()), GTK_WINDOW(Window())); child->Show(GTK_WIN_POS_NONE); return ; } // form event response method void DndForm::OnMove(VDKForm* sender) { int w,h; if(!child) return; VDKPoint pos = Position; gdk_window_get_size(GTK_WIDGET(child->Window())->window, &w, &h); VDKPoint p(pos.x-w-10,pos.y); child->Position = p; return; } /* ************** TRASHCAN CLASS ************** */ DEFINE_SIGNAL_MAP(TrashcanForm,VDKForm) ON_SIGNAL(restore,clicked_signal,OnrestoreClick), ON_SIGNAL(trashcan,dnd_drag_motion_signal,OnDragMotion), ON_SIGNAL(trashcan,dnd_drag_leave_signal,OnDragLeave), ON_SIGNAL(trashcan,dnd_dropped_signal,OnDropTrash) END_SIGNAL_MAP static bool trash_open = false; extern char * trashcan_open_xpm[]; extern char * trashcan_closed_xpm[]; // Trashcan FORM CLASS /* form constructor */ TrashcanForm::TrashcanForm(VDKForm* owner, char* title): VDKForm(owner,title) { dndform = dynamic_cast(owner); } /* form destructor */ TrashcanForm::~TrashcanForm() { } /* main form setup */ void TrashcanForm::GUISetup(void) { SetSize(106,113); Title = "trashcan Form"; vbox12 = new VDKBox(this,v_box); Add(vbox12,0,1,1,0); frame1 = new VDKFrame(this,"trashcan",v_box,shadow_etched_in); frame1->Shadow = shadow_in; frame1->Align = c_justify; vbox12->Add(frame1,0,1,1,0); VBox13 = new VDKBox(this,v_box); frame1->Add(VBox13,l_justify,1,1,0); VBox13->BorderWidth(0); VDKEventBox* vbox1 = new VDKEventBox(this,v_box); VBox13->Add(vbox1,0,1,1,0); vbox1->BorderWidth(0); trashcan = new VDKPixmap(this,trashcan_closed_xpm); trashcan->SetSize(98,71); vbox1->Add(trashcan,0,1,1,0); separator0 = new VDKSeparator(this,h_separator); vbox1->Add(separator0,0,0,0,0); hbox10 = new VDKBox(this,h_box); vbox1->Add(hbox10,0,0,0,0); hbox10->BorderWidth(0); restore = new VDKCustomButton(this,(char*) NULL, "Restore",16,(GtkPositionType) 0); hbox10->Add(restore,0,1,1,0); } /* form setup */ void TrashcanForm::Setup(void) { GUISetup(); // vdkb gui setup } // form event response method void TrashcanForm::OnShow(VDKForm* sender) { int w,h; VDKPoint ownerPos = dndform->Position; gdk_window_get_size(GTK_WIDGET(Window())->window, &w, &h); VDKPoint size = VDKPoint(w,h); VDKPoint p(ownerPos.X()- w -10,ownerPos.Y()); Position = p; dndform->DnD()->AddTarget(trashcan); return; } // signal response method bool TrashcanForm::OnrestoreClick(VDKObject* sender) { // shows all dropped widgets VDKDnDIterator li(*dndform->DnD()->DnDSources()); for(;li;li++) if ( !(li.current()->Object()->Visible) ) li.current()->Object()->Visible = true; restore->Enabled = false; return true; } /* */ bool TrashcanForm::OnDragLeave(VDKObject* target) { trashcan->SetPixmap(trashcan_closed_xpm); trash_open = false; return true; } /* */ bool TrashcanForm::OnDragMotion(VDKObject* target) { if(!trash_open) { trashcan->SetPixmap(trashcan_open_xpm); trash_open = true; } return true; } /* */ bool TrashcanForm::OnDropTrash(VDKObject* target) { // hides dropped widget VDKObject* source = dndform->DnD()->DragSource; if(!source) return true; else { source->Visible = false; restore->Enabled = true; } return true; } /* XPM */ char * trashcan_closed_xpm[] = { "64 80 17 1", " c None", ". c #030304", "+ c #5A5A5C", "@ c #323231", "# c #888888", "$ c #1E1E1F", "% c #767677", "& c #494949", "* c #9E9E9C", "= c #111111", "- c #3C3C3D", "; c #6B6B6B", "> c #949494", ", c #282828", "' c #808080", ") c #545454", "! c #AEAEAC", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ==......=$$...=== ", " ..$------)+++++++++++++@$$... ", " ..=@@-------&+++++++++++++++++++-.... ", " =.$$@@@-&&)++++)-,$$$$=@@&+++++++++++++,..$ ", " .$$$$@@&+++++++&$$$@@@@-&,$,-++++++++++;;;&.. ", " $$$$,@--&++++++&$$)++++++++-,$&++++++;%%'%%;;$@ ", " .-@@-@-&++++++++-@++++++++++++,-++++++;''%;;;%*-$ ", " +------++++++++++++++++++++++++++++++;;%%%;;##*!. ", " =+----+++++++++++++++++++++++;;;;;;;;;;;;%'>>). ", " .=)&+++++++++++++++++;;;;;;;;;;;;;;%''>>#>#@. ", " =..=&++++++++++++;;;;;;;;;;;;;%###>>###+%== ", " .&....=-+++++%;;####''''''''''##'%%%)..#. ", " .+-++@....=,+%#####'%%%%%%%%%;@$-@-@*++!. ", " .+-++-+++-&-@$$=$=......$,,,@;&)+!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " =+-++-+++-+++++++++!++++!++++!+++!++!+++= ", " $.++-+++-+++++++++!++++!++++!+++!++!+.$ ", " =.++++++++++++++!++++!++++!+++!++.= ", " $..+++++++++++++++!++++++...$ ", " $$=.............=$$ ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; /* XPM */ char * trashcan_open_xpm[] = { "64 80 17 1", " c None", ". c #030304", "+ c #5A5A5C", "@ c #323231", "# c #888888", "$ c #1E1E1F", "% c #767677", "& c #494949", "* c #9E9E9C", "= c #111111", "- c #3C3C3D", "; c #6B6B6B", "> c #949494", ", c #282828", "' c #808080", ") c #545454", "! c #AEAEAC", " ", " ", " ", " ", " ", " ", " .=.==.,@ ", " ==.,@-&&&)-= ", " .$@,&++;;;%>*- ", " $,-+)+++%%;;'#+. ", " =---+++++;%%%;%##@. ", " @)++++++++;%%%%'#%$ ", " $&++++++++++;%%;%##@= ", " ,-++++)+++++++;;;'#%) ", " @+++&&--&)++++;;%'#'-. ", " ,&++-@@,,,,-)++;;;'>'+, ", " =-++&@$@&&&&-&+;;;%##%+@ ", " =,)+)-,@@&+++++;;;;%##%&@ ", " @--&&,,@&)++++++;;;;'#)@ ", " ---&)-,@)+++++++;;;%''+, ", " $--&)+&$-+++++++;;;%%'';- ", " .,-&+++-$&++++++;;;%''%&= ", " $,-&)++)-@++++++;;%''%), ", " =,@&)++++&&+++++;%'''+$@&++++++ ", " .$@-++++++++++++;'#';,........=$@&++++ ", " =$@@&)+++++++++++'##-.................=&++ ", " .$$@-&)+++++++++;%#+$.....................=)+ ", " $$,@-)+++++++++;%;@=........................,+ ", " .$$@@-++++++++)-)@=............................ ", " $,@---)++++&)@===............................,. ", " $-@---&)))-$$=..............................=)!. ", " --&-&&,,$=,==...........................=&+++!. ", " =,=$..=$+)+++++&@$=.............=$@&+++++!++!. ", " .)-++-+++++++++++++++++++++++++++!++!++!. ", " .+-++-+++++++++++++++++++++++!+++!++!++!. ", " .+-++-+++-+++++++++!+++!!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " .+-++-+++-+++++++++!++++!++++!+++!++!++!. ", " =+-++-+++-+++++++++!++++!++++!+++!++!+++= ", " $.++-+++-+++++++++!++++!++++!+++!++!+.$ ", " =.++++++++++++++!++++!++++!+++!++.= ", " $..+++++++++++++++!++++++...$ ", " $$==...........==$$ ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; /* XPM */ char* drag_icon_xpm[]={ "16 14 5 1", "a c #d9d9d9", "c c #7f7f7f", "# c #000000", ". c None", "b c #ffffff", "................", "................", "..####...####...", ".#abba#.#abba#..", "#abbbba#abbbba#.", "#bbbbbb#bbbbbb#c", "#bbbbbb#bbbbbb#c", "#b##bbb#b##bbb#c", "#a##bba#a##bba#c", ".#abba#c#abba#cc", "..####cc.####cc.", "...cccc...cccc..", "................", "................"}; vdk-2.4.0/testvdk/dnd.h0000644000000000000000000000515707257436762010364 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _dnd_main_form_h_ #define _dnd_main_form_h_ #include // Dnd FORM CLASS class TrashcanForm; class DndForm: public VDKForm { // gui object declarations private: // vdkbuilder reserved gui construction void GUISetup(void); VDKDnD *dnd; TrashcanForm* child; public: DndForm(VDKForm* owner, char* title); ~DndForm(); void Setup(void); bool OnDrop(VDKObject* object); bool OnSourceGetData(VDKObject* object); VDKDnD* DnD() { return dnd; } protected: VDKBox* vbox2; VDKBox* hbox4; VDKBox* button_area; VDKCustomButton* button1, *button2, * button3, *button4, *button6; VDKBox* widget_area; VDKCustomList* customlist0; VDKEntry* entry0; VDKSeparator* separator0; VDKBox* hbox5; VDKBox* target_area1; VDKSeparator* separator1; VDKBox* target_area2; void OnShow(VDKForm* sender); void OnMove(VDKForm* sender); public: DECLARE_SIGNAL_MAP(DndForm); }; // Trashcan FORM CLASS class TrashcanForm: public VDKForm { private: void GUISetup(void); DndForm* dndform; protected: VDKBox* vbox12; VDKFrame* frame1; VDKBox* VBox13; VDKBox* vbox1; VDKPixmap* trashcan; VDKSeparator* separator0; VDKBox* hbox10; VDKCustomButton* restore; void OnShow(VDKForm* sender); public: TrashcanForm(VDKForm* owner, char* title); ~TrashcanForm(); void Setup(void); bool OnDragLeave(VDKObject* object); bool OnDragMotion(VDKObject* object); bool OnDropTrash(VDKObject* target); DECLARE_SIGNAL_MAP(TrashcanForm); bool OnrestoreClick(VDKObject* sender); }; // Dnd APPLICATION CLASS class DndApp: public VDKApplication { public: DndApp(int* argc, char** argv); ~DndApp(); void Setup(void); }; #endif vdk-2.4.0/testvdk/treeviewcompo.h0000644000000000000000000000436507422040606012465 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #ifndef _treeviewcompo_h #define _treeviewcompo_h #include class TreeViewComponent: public VDKBox { VDKTreeView *tree; VDKTextView* textview; VDKCustomButton *remove,*view,*clear; VDKCustomButton *addrow,*addchild,*expand,*trasverse; VDKTreeView* MakeTree(VDKScrolled* scrolled); void PrintRow(GtkTreeIter* iter); void recurse(GtkTreeIter* iter); void SetData (VDKTreeViewModel* model, GtkTreeIter* iter, int t); public: TreeViewComponent(VDKForm* owner): VDKBox(owner) { } ~TreeViewComponent() { } void Setup(); bool OnTreeRealized(VDKObject* sender); bool OnColumnClicked (VDKObject* sender); bool OnRowSelected(VDKObject* sender); bool OnRemoveClicked(VDKObject* sender); bool OnViewClicked(VDKObject* sender); bool OnClearClicked(VDKObject* sender); bool OnAddrowClicked(VDKObject* sender); bool OnAddchildClicked(VDKObject* sender); bool OnExpandClicked(VDKObject* sender); bool OnTrasverseClicked(VDKObject* sender); #ifdef USE_SIGCPLUSPLUS void OnCellEdited(VDKObject* sender, GtkTreeIter* iter, int col, char* new_text); void OnCellToggled(VDKObject* sender, GtkTreeIter* iter, int col, bool toggled); #endif DECLARE_SIGNAL_LIST(TreeViewComponent); DECLARE_EVENT_LIST(TreeViewComponent); DECLARE_SIGNAL_MAP(TreeViewComponent); }; #endif vdk-2.4.0/testvdk/treeviewcompo.cc0000644000000000000000000003406710031555271012624 /* * =========================== * VDK Visual Develeopment Kit * Version 2.0.0 * november 2000 * =========================== * * Copyright (C) 1998, Mario Motta * Developed by Mario Motta * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include "treeviewcompo.h" #include #include #include #define VERBOSE 1 // in pixmap.cc extern char *mini_ofolder_xpm[]; extern char *mini_cfolder_xpm[]; // in src/pixdata.cc extern char *testo_xpm[]; static char buff[256]; enum { COLUMN_TOGGLE, COLUMN_TEXT, COLUMN_PIXBUF }; /////////////////////////////////////////////////// DEFINE_SIGNAL_LIST(TreeViewComponent,VDKBox); DEFINE_EVENT_LIST(TreeViewComponent,VDKBox); DEFINE_SIGNAL_MAP(TreeViewComponent,VDKBox) ON_SIGNAL(tree,realize_signal,OnTreeRealized), ON_SIGNAL(tree,click_column_signal,OnColumnClicked), ON_SIGNAL(tree,select_row_signal,OnRowSelected), ON_SIGNAL(tree,row_activated_signal,OnRowSelected), ON_SIGNAL(remove,clicked_signal,OnRemoveClicked), ON_SIGNAL(clear,clicked_signal,OnClearClicked), ON_SIGNAL(addrow,clicked_signal,OnAddrowClicked), ON_SIGNAL(addchild,clicked_signal,OnAddchildClicked), ON_SIGNAL(expand,clicked_signal,OnExpandClicked), ON_SIGNAL(view,clicked_signal,OnViewClicked), ON_SIGNAL(trasverse,clicked_signal,OnTrasverseClicked) END_SIGNAL_MAP // treeview model data enum { EDITABLE = 0, FIRST_NAME, LAST_NAME, DATE_OF_BIRTH, AGE, PARENT, MAX_COL }; static struct { char* title; int ordinal_number; GType gtype; bool viewable, editable; } data_structure[] = { {"Editable", EDITABLE, G_TYPE_BOOLEAN, true, false}, {"First name", FIRST_NAME, G_TYPE_STRING, true, true}, {"Last name", LAST_NAME, G_TYPE_STRING, true, true}, {"Date of birth", DATE_OF_BIRTH, G_TYPE_STRING, true, false}, {"Age", AGE, G_TYPE_STRING, true, false}, {"Parent", PARENT , G_TYPE_STRING, false,false}, {NULL,-1,0,false,false} }; static struct { char *firstname; char *lastname; char* parent; calendardate dateob; // date of birth } persons[] = { {"Tiziana", "Tonti", NULL, MakeDate("19590529")}, {"Mario", "Motta", NULL, MakeDate("19481118")}, {"Filippo", "Manzaroli", "Tiziana",MakeDate("19811105")}, {"Veronica", "Motta", "both", MakeDate("19901122")}, {"Martina", "Motta", "both", MakeDate("20000120")}, {"Pietro", "Motta", "both", MakeDate("19960303")}, {"Serena", "Motta", "Mario", MakeDate("19750618")}, {"Giacomo", "Motta", "Veronica", MakeDate("19981019")}, {"Daniele", "Manzaroli", "Tiziana",MakeDate("19780925")}, { NULL,NULL, NULL, calendardate ()} }; /* =============================================================== */ void TreeViewComponent::recurse(GtkTreeIter* iter) { VDKTreeViewModel* model = tree->Model; VDKTreeViewModelIterator ti(model,iter); for(;ti;ti++) { PrintRow(ti.current()); if(ti.HasChild()) recurse (ti.current()); } } bool TreeViewComponent::OnTrasverseClicked (VDKObject* sender) { recurse(NULL); return true; } void TreeViewComponent::PrintRow(GtkTreeIter* iter) { VDKTreeViewModel* model = tree->Model; VDKTreeViewModelTuple tuple; model->GetTuple(iter,tuple); for(int t = 0 ; t < tuple.size(); t++) { char* val = (char*) tuple[t]; sprintf(buff,"[%s]", val ? val : "invalid"); textview->TextInsert(buff); } textview->TextInsert("\n"); } bool TreeViewComponent::OnExpandClicked(VDKObject* sender) { tree->GetSelections(); if(tree->Selections().size() == 1) { tree->Expand(&(tree->Selections()[0]),true); } tree->Selections().flush(); return true; } static int count = 0; bool TreeViewComponent::OnAddrowClicked(VDKObject* sender) { int t = 0; for(;persons[t].firstname;t++) ; int rdn = rand()%t; VDKTreeViewModel* model = tree->Model; /* appends as top level sibling */ GtkTreeIter iter; model->AppendBlank(&iter); SetData(model,&iter,rdn); return true; } bool TreeViewComponent::OnAddchildClicked(VDKObject* sender) { VDKTreeViewModel* model = tree->Model; tree->GetSelections(); if(tree->Selections().size() == 1) { GtkTreeIter iter; model->AppendBlank(&iter,&(tree->Selections()[0])); int t = 0; for(;persons[t].firstname;t++) ; int rdn = rand()%t; SetData(model,&iter,rdn); tree->Expand(&(tree->Selections()[0])); } return true; } bool TreeViewComponent::OnClearClicked(VDKObject* sender) { VDKTreeViewModel* model = tree->Model; model->Clear(); tree->Selections().flush(); return true; } bool TreeViewComponent::OnViewClicked(VDKObject* sender) { tree->GetSelections(); VDKTreeViewIterListIterator li(tree->Selections()); for(;li;li++) PrintRow(&li.current()); tree->Selections().flush(); return true; } /* */ bool TreeViewComponent::OnRemoveClicked(VDKObject* sender) { tree->RemoveSelected(); return true; } bool TreeViewComponent::OnTreeRealized(VDKObject* sender) { VDKTreeView* tree = dynamic_cast(sender); // makes model VDKTreeViewModel* model; int t; GType* types = new GType[MAX_COL]; for(t=0; data_structure[t].title; t++) types[t] = data_structure[t].gtype; tree->Model = (model = new VDKTreeViewModel(types,MAX_COL)); delete[] types; // makes treeview columns VDKTreeViewColumn* column = NULL; for(t=0; data_structure[t].title; t++) { if(data_structure[t].viewable) column = new VDKTreeViewColumn( tree, data_structure[t].ordinal_number, data_structure[t].title, data_structure[t].editable, EDITABLE); } // makes date of birth column sortable and clickable (*tree->Columns())[DATE_OF_BIRTH]->ActiveTitle(); (*tree->Columns())[DATE_OF_BIRTH]->Sortable = true; // sets some column properties // (*tree->Columns())[EDITABLE]->Width = 60; gtk_tree_view_column_set_visible ((*tree->Columns())[EDITABLE]->GtkColumn(),false); (*tree->Columns())[AGE]->Width = 20; gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(tree->WrappedWidget()), TRUE); // load model t = 0; calendardate today; GtkTreeIter iter,parent_iter; for (;persons[t].firstname;t++) { if (persons[t].parent == NULL) { model->AppendBlank(&iter,NULL); SetData(model,&iter,t); } else if ( (strcmp (persons[t].parent, "both"))) { if(model->Find (&parent_iter, FIRST_NAME, persons[t].parent)) { model->AppendBlank(&iter,&parent_iter); SetData(model,&iter,t); } else continue; } else { if (model->Find (&parent_iter, FIRST_NAME, "Mario")) { model->AppendBlank(&iter,&parent_iter); SetData(model,&iter,t); } if (model->Find (&parent_iter, FIRST_NAME, "Tiziana")) { model->AppendBlank(&iter,&parent_iter); SetData(model,&iter,t); } } } /* expands tree and selects root node */ tree->Expand (); if(model->Root(&iter)) tree->SelectNode(&iter); return true; } /* */ void TreeViewComponent::SetData (VDKTreeViewModel* model, GtkTreeIter* iter, int t) { calendardate today; sprintf (buff, "%d",today.Year ()- persons[t].dateob.Year ()); model->SetData ( iter, EDITABLE, true, FIRST_NAME, persons[t].firstname, LAST_NAME, persons[t].lastname, PARENT, persons[t].parent, DATE_OF_BIRTH, persons[t].dateob.AsString(), AGE, buff, -1); } /* */ bool TreeViewComponent::OnColumnClicked(VDKObject* sender) { int sel = int(tree->SelectedColumn); printf("\nClicked column:%d", sel); fflush(stdout); return true; } bool TreeViewComponent::OnRowSelected(VDKObject* sender) { VDKTreeView* tree = dynamic_cast(sender); if(tree->Selections().size() == 0) tree->GetSelections(); if(tree->Selections().size() == 1) { VDKTreeViewModelTuple tuple; VDKTreeViewIter p_iter; VDKTreeViewIter iter = tree->Selections()[0]; VDKTreeViewModel* model = tree->Model; if(iter.Parent(&p_iter)) { model->GetTuple(&p_iter,tuple); char* val = (char*) tuple[1]; printf("\nhas parent:%s",val ? val : "invalid"); fflush(stdout); } if(iter.Child(&p_iter)) { model->GetTuple(&p_iter,tuple); char* val = (char*) tuple[1]; printf("\nhas child:%s",val ? val : "invalid"); fflush(stdout); } PrintRow(&iter); } tree->Selections().flush(); return true; } /* */ /////////////////////////////////////////////////// void TreeViewComponent::Setup() { /* make a new scrolled to be filled with tree */ VDKScrolled *scrolled = new VDKScrolled(Owner()); /* makes a tree with a void data model (will be completed on tree realize signal) */ tree = new VDKTreeView(Owner(),NULL,GTK_SELECTION_MULTIPLE); tree->SetSize(-1,200); /* add tree to scrolled and scrolled to component box */ scrolled->AddWithoutViewport(tree,l_justify,false,false,0); Add(scrolled); Add(new VDKSeparator(Owner())); /* adds a textview */ textview = new VDKTextView(Owner()); textview->SetSize(-1,100); Add(textview); /* adds buttons */ Add(new VDKSeparator(Owner()),l_justify,false,false,0); VDKBox* hbox = new VDKBox(Owner(),h_box); remove = new VDKCustomButton(Owner(),"Remove selected"); hbox->Add(remove,l_justify,TRUE,FALSE,5); view = new VDKCustomButton(Owner(),"View selected"); hbox->Add(view,l_justify,TRUE,FALSE,5); clear = new VDKCustomButton(Owner(),"Clear"); hbox->Add(clear,l_justify,TRUE,FALSE,5); addrow = new VDKCustomButton(Owner(),"Add a row"); hbox->Add(addrow,l_justify,TRUE,FALSE,5); addchild = new VDKCustomButton(Owner(),"Add a child"); hbox->Add(addchild,l_justify,TRUE,FALSE,5); expand = new VDKCustomButton(Owner(),"Expand"); hbox->Add(expand,l_justify,TRUE,FALSE,5); trasverse = new VDKCustomButton(Owner(),"Trasverse"); hbox->Add(trasverse,l_justify,TRUE,FALSE,5); Add(hbox,l_justify,false,false,0); /* connect to edited signal using libsigc extension */ #ifdef USE_SIGCPLUSPLUS tree->OnCellEdited.connect(slot(*this,&TreeViewComponent::OnCellEdited)); tree->OnCellToggled.connect(slot(*this,&TreeViewComponent::OnCellToggled)); #endif /* initialize random generator */ srand(time(NULL)); } #ifdef USE_SIGCPLUSPLUS void TreeViewComponent::OnCellEdited(VDKObject* sender, GtkTreeIter* iter, int col, char* new_text) { VDKTreeView* tree = dynamic_cast(sender); if(!sender) return; else { VDKTreeViewModel* model = tree->Model; char* old_text = model->GetCell(iter,col); printf("\nedited column:%d\n\told text:%s\n\tnew text:%s", col, old_text,new_text); fflush(stdout); model->SetCell(iter, col, new_text); } } /* */ void TreeViewComponent::OnCellToggled(VDKObject* sender, GtkTreeIter* iter, int col, bool toggled) { VDKTreeView* tree = dynamic_cast(sender); if(!sender) return; else { VDKTreeViewModel* model = tree->Model; toggled = !toggled; model->SetCell(iter, EDITABLE, toggled ? "true" : "false"); printf("\ntoggled column:%d\n\tvalue:%s", col, toggled ? "true" : "false"); fflush(stdout); } } #endif /* VDKTreeView* TreeViewComponent::MakeTree(VDKScrolled* scrolled) { int i,z; GType* types = new GType[MAX_TITLES]; GtkTreeIter iter; VDKTreeView *tree = new VDKTreeView(Owner(),NULL,GTK_SELECTION_SINGLE); types[0] = G_TYPE_STRING; types[1] = G_TYPE_BOOLEAN; types[2] = GDK_TYPE_PIXBUF; tree->Model = new VDKTreeViewModel(types,MAX_TITLES); delete types; VDKTreeViewColumn* column = NULL; column = new VDKTreeViewColumn(tree,0,"Title",true,1); column->Foreground = VDKRgb("navy blue"); VDKFont* font = new VDKFont(Owner(),"courier Medium 10"); column->Font = font; column = new VDKTreeViewColumn(tree,1,"Toggle"); column->Width = 40; column = new VDKTreeViewColumn(tree,2,"Pixbuf"); // sets columns 0 & 1 active (*tree->Columns())[0]->ActiveTitle(); (*tree->Columns())[0]->Sortable = true; (*tree->Columns())[1]->ActiveTitle(); // set a widget on 3rd column VDKBox* cbox = new VDKBox(Owner(),h_box); cbox->Add(new VDKImage(Owner(),"loadfile.xpm")); cbox->Add(new VDKLabel(Owner(),"Pixbuffed column"),l_justify,true,10,10); cbox->Visible = true; AddItem(cbox); gtk_tree_view_column_set_widget (column->GtkColumn(), cbox->WrappedWidget()); VDKPixbuf* pixbuf = new VDKPixbuf(Owner(),"loadfile.xpm"); VDKTreeViewModel* model = tree->Model; for(i = 1; i <= MAX_ROWS; i++) { sprintf(buff,"This is row %d",i); iter = *model->AppendBlank(); model->SetData(&iter, 0, buff, 1,FALSE, 2, NULL, -1); for(z = 1; z <= MAX_DEPTH; z++) { sprintf(buff,"Row %d - depth:%d",i,z); iter = *model->AppendBlank(&iter); model->SetData(&iter, 0, buff, 1, z%2 ? FALSE : TRUE, 2, pixbuf->AsGdkPixbuf(), -1); } } return tree; } */ /* dynamic signal connections, notice that since these signal are handled by VDK overriding GTK+ system it's necessary set last arg to false. SignalConnect(tree,"click_column_signal",&TreeViewComponent::OnColumnClicked,false); SignalConnect(tree,"select_row_signal",&TreeViewComponent::OnRowSelected,false); SignalConnect(tree,"row_activated_signal",&TreeViewComponent::OnRowSelected,false); */ /* g_signal_connect_data(tree->Widget(), "realize", G_CALLBACK(OnRealize),this,NULL,(GConnectFlags) 0); */ vdk-2.4.0/testvdk/pixmaps.cc0000644000000000000000000001155007242575644011425 char *mini_ofolder_xpm[] = { " 16 14 6 1", " c none", ". c black", "# c gray50", /*#808080",*/ "g c white", "h c gray85", /*#c3c3c3",*/ "j c yellow", " ##### ", " #ggggg# ", " #ghjhjhg###### ", " #gjhjhjhggggg#.", " #ghjhjhjhjhjh#.", "#############j#.", "#gggggggggg#.h#.", "#ghjhjhjhjhj.##.", " #ghjhjhjhjh#.#.", " #gjhjhjhjhjh.#.", " #gjhjhjhjhj#..", " ############..", " .............", " ", }; /* XPM */ char * mini_cfolder_xpm[] = { "16 16 6 1", " c none", ". c grey51", "X c grey76", "o c yellow1", "O c white", "+ c grey4", " ", " ..... ", " .XoXoX. ", ".XoXoXoX...... ", ".OOOOOOOOOOOO.+ ", ".OoXoXoXoXoXo.+ ", ".OXoXoXoXoXoX.+ ", ".OoXoXoXoXoXo.+ ", ".OXoXoXoXoXoX.+ ", ".OoXoXoXoXoXo.+ ", ".OXoXoXoXoXoX.+ ", ".OoXoXoXoXoXo.+ ", "..............+ ", " ++++++++++++++ ", " ", " "}; char * testo_xpm[] = { "16 16 5 1", " c none", ". c grey4", "X c grey51", "o c white", "O c grey76", " . . . . . ", " . X X X X . ", " Xo.o.o.o.o.o. ", " XooooooooooO. ", " XooooooooooO. ", " Xoo...o..ooO. ", " XooooooooooO. ", " Xoo......ooO. ", " XooooooooooO. ", " Xoo......ooO. ", " XooooooooooO. ", " Xoo......ooO. ", " XooooooooooO. ", " XooooooooooO. ", " XOOOOOOOOOOO. ", " ........... "}; char * book_xpm[] = { "16 16 8 1", " c none", ". c magenta4", "X c grey4", "o c grey51", "O c yellow1", "+ c yellow4", "@ c grey76", "# c white", " .X ", " .o.XX ", " .o....XX ", " .o.......XX ", " .o..OOO+...X ", " .o..++.OO..XX ", " .o....@OO..XoX ", ".o....O+...Xo@XX", ".XX.......Xo@@.X", ".ooXX....Xo@@.X ", ".o#ooXX.Xo@@.X ", "Xo@##ooXo@@.X ", " XXo@##o@@.X ", " XXo@#@.X ", " XXo.X ", " XX "}; char * mini_bball_xpm[] = { "16 14 4 1", " c None s None", ". c blue", "X c white", "o c gray50", " ", " ", " ", " ", " ... ", " .XX.. ", " .XX..o ", " .....o ", " ...oo ", " ooo ", " ", " ", " ", " "}; /* XPM */ char *mini_gball_xpm[] = { /* width height num_colors chars_per_pixel */ " 16 14 4 1", /* colors */ " c None s None", ". c #ffffff", "# c #c3c3c3", "a c #7d7d7d", /* pixels */ " ", " ", " ", " ", " aaa ", " a..#. ", " a..##. ", " a.###. ", " a.#.. ", " ... ", " ", " ", " ", " " }; /* " ", " ", " ", " ", " aaa ", " a..## ", " a..##a ", " a####a ", " a##aa ", " aaa ", " ", " ", " ", " " */ /* XPM */ char * mini_penguin_xpm[] = { /* width height num_colors chars_per_pixel */ "16 18 7 1", /* colors */ " s None m none c None", ". c #808080", "X s iconColor1 m black c black", "o c #c0c0c0", "O c #101010", "+ s iconColor2 m white c white", "@ c #e0a008", /* pixels */ " .XX. ", " .XXXX. ", " XoXoXX ", " XOXX+X ", " X@@@oX ", " X@@@oX. ", " X@@++XX ", " X.+++++X. ", " .X++++++.X. ", " X+++o++++XX ", " X++oo++++XX. ", " Xo++o+++++XXX ", " @o++o+++++XXX ", " @@@+++++++@XX@ ", "@@@@@+++++o@@@@@", "@@@@@+++++X@@@@@", " @@@@@++XXX@@@@ ", " @@@.XXXXX.@@ "}; char * book_open_xpm[] = { "16 16 4 1", " c None s None", ". c black", "X c #808080", "o c white", " ", " .. ", " .Xo. ... ", " .Xoo. ..oo. ", " .Xooo.Xooo... ", " .Xooo.oooo.X. ", " .Xooo.Xooo.X. ", " .Xooo.oooo.X. ", " .Xooo.Xooo.X. ", " .Xooo.oooo.X. ", " .Xoo.Xoo..X. ", " .Xo.o..ooX. ", " .X..XXXXX. ", " ..X....... ", " .. ", " "}; char * book_closed_xpm[] = { "16 16 6 1", " c None s None", ". c black", "X c red", "o c yellow", "O c #808080", "# c white", " ", " .. ", " ..XX. ", " ..XXXXX. ", " ..XXXXXXXX. ", ".ooXXXXXXXXX. ", "..ooXXXXXXXXX. ", ".X.ooXXXXXXXXX. ", ".XX.ooXXXXXX.. ", " .XX.ooXXX..#O ", " .XX.oo..##OO. ", " .XX..##OO.. ", " .X.#OO.. ", " ..O.. ", " .. ", " "}; /* XPM */ char* togglech_xpm[]={ "16 16 5 1", "c c #c0c000", "# c #000000", "a c #ffffc0", ". c None", "b c #ffffff", "......##........", "......#a###.....", ".....#ababa###..", ".....#b###baba##", "....#ab#bba###a#", "....#ab#bab#aaa#", "...#aba###a#aaa#", "...#bababab###c#", "..#bb#ab#babaa#.", ".#aab#aa#aaaaa#.", "#aaab####babaa#.", "#caab#aa#aaaac#.", ".##cb#aa#aaaa#..", "...###caaaaac#..", "......###cac#...", ".........###...."}; vdk-2.4.0/testvdk/testvdkstring.cc0000644000000000000000000001610107206652772012652 #include // for printf() #include #include #include VDKString Funt(const VDKString& s) { VDKString local(s); return local; } void test1() { VDKString A; cout << "Default Constructor: VDKString A = " << A << endl; VDKString copyofA = A; cout << "Copying a null string : copyofA = A = " << copyofA << endl; VDKString B("world"); cout << "const char* constructor: (VDKString B(world)) = " << B << endl; A = "hello"; cout << "Assignment from const char*: (A = hello) = " << A << endl; VDKString C = A ; cout << "Assignment from const VDKString: (VDKString C = A ) = " << C << endl; char c = 'x'; C = C + VDKString(c) ; cout << "char c = 'x' ; C = "<< C << endl; cout << "Appending a char: C = C + VDKString(c) = " << C << endl; cout << "Prepending a char: C = VDKString(c) + C = " ; C = VDKString(c) + C ; cout << C << endl; cout << "Appending a char to null string : A = copyofA + c = " ; cout.flush(); A = copyofA + VDKString(c) ; cout << A << endl; cout << "Prepending a char to null string : A = c + copyofA ="; cout.flush(); A = VDKString(c) + copyofA ; cout << A << endl; cout << "Test of [] operator: B = " << B << " B[0] = " << B[0] << " B[1] = " << B[1] << " B[2] = " << B[2] << " B[20] = " << B[20] << endl; cout << "B.c_str() = " ; cout.flush(); cout << B.c_str() << endl; cout << " VDKString + const char* : C = B + 'goozy' = "; cout.flush(); C = B + "goozy"; cout << C << endl; cout << " const char* + VDKString : A = 'goozy' + B = "; cout.flush(); A = "goozy" + B ; cout << A << endl; cout << " VDKString(NULL) + const char* : C = copyofA + 'goozy' = "; cout.flush(); C = copyofA + "goozy"; cout << C << endl; cout << " const char* + VDKString(NULL) : A = 'goozy' + copyofA = "; cout.flush(); A = "goozy" + copyofA ; cout << A << endl; cout << "Instantsiate a VDKString from a single character : "; VDKString E('a'); cout << "E('a') = " << E << endl; cout << "Instantsiate a VDKString from a null character : "; VDKString F('\0'); cout << "F(NULL) = " << F << endl; cout << "Assignment of a single character : "; F = 'b'; cout << "F = 'b' = " << F << endl; cout << "A = " << A << endl; cout << "B = " << B << endl; cout << "F = " << F << endl; cout << "E = " << E << endl; cout << "expression test 1: A + B + F + E = " << A + B + F + E << endl; cout << "expression test 2: A + B + \"FreakOut\" + E = " << A + B + "FreakOut" + E << endl; cout << "expression test 3: A + VDKString('%') + \"FreakOut\" + E = " << A + VDKString('%') + "FreakOut" + E << endl; A = " Hello great world "; cout << "A = '" << A << "'" << endl; // Trim test cout << "A.Trim() => A = '" << A.Trim() << "'" << endl; // DelSelection test cout << "A.DelSelection(6, 6) => A = " << A.DelSelection(6, 6) << endl; // CharCount test cout << "A.CharCount('o') = " << A.CharCount('o') << endl; // UpperCase test cout << "A.UpperCase() => A = " << A.UpperCase() << endl; // LowerCase test cout << "A.LowerCase() => A = " << A.LowerCase() << endl; // isEmpty test A = ""; cout << "A = '', A.isEmpty() = " << A.isEmpty() << endl; A = "Hello world"; cout << "A = 'Hello world', A.isEmpty() = " << A.isEmpty() << endl; // Sprintf test cout << "A = 'Hello world', A.Sprintf('%d char is left from %s', 0, 'previous string') => A = " << A.Sprintf("%d char is left from %s", 0, "previous string") << endl; // Concatf test A = "Hello"; cout << "A = 'Hello', A.Concatf(' %dth %s', 5, 'world') => A = " << A.Concatf(" %dth %s", 5, "world") << endl; // GetPart test A = "9600,8,n,1"; cout << "A = '9600,8,n,1', A.GetPart(1, ',') = " << A.GetPart(1, ',') << endl; A = "9600,8,n,1"; cout << "A = '9600,8,n,1', A.GetPart(0, ',') = " << A.GetPart(0, ',') << endl; A = "9600,8,n,1"; cout << "A = '9600,8,n,1', A.GetPart(5, ',') = " << A.GetPart(5, ',') << endl; // GetFCharPos test A = "9600,8,n,1"; cout << "A = '9600,8,n,1', A.GetFCharPos(',') = " << A.GetFCharPos(',') << endl; // GetLCharPos test A = "9600,8,n,1"; cout << "A = '9600,8,n,1', A.GetLCharPos(',') = " << A.GetLCharPos(',') << endl; // StrtoDouble test A = "375265.653"; // commented because cout round this to an integer //cout << "A = '375265.653', A.StrtoDouble() = " << A.StrtoDouble() << endl; printf("A = '375265.653', A.StrtoDouble() = %f\n", A.StrtoDouble()); // StrtoInt test A = "375"; cout << "A = '375', A.StrtoInt() = " << A.StrtoInt() << endl; // SubStr test A = "Hello great world"; cout << "A = 'Hello great world', A.SubStr(6, 5) = " << A.SubStr(6, 5) << endl; // Cut test cout << "A.Cut(3) = " << A.Cut(3) << endl; // LPad test cout << "A.LPad(8, 'o') = " << A.LPad(8, 'o') << endl; // RPad test cout << "A.RPad(13, 'o') = " << A.RPad(13, 'o') << endl; // DoubleChar test A = "Don't do that"; cout << "A.DoubleChar() => A = " << A.DoubleChar() << endl; // FormatDate test A = "12/25/2000"; cout << "A = '12/25/2000'" << endl; cout << "A.FormatDate(0, ENG_DATE, INT_DATE) => A = " << A.FormatDate(0, ENG_DATE, INT_DATE) << endl; cout << "A.FormatDate('/', INT_DATE, EUR_DATE) => A = " << A.FormatDate('/', INT_DATE, EUR_DATE) << endl; cout << "A.FormatDate(0, EUR_DATE, ENG_DATE) => A = " << A.FormatDate(0, EUR_DATE, ENG_DATE) << endl; cout << "A.FormatDate('/', ENG_DATE, ENG_DATE) => A = " << A.FormatDate('/', ENG_DATE, ENG_DATE) << endl; } vector vectortest() { cout << endl; cout << "STL Test... endl;" << endl; cout << "Making a vector of strings..." << endl; vector strings; strings.push_back(VDKString("AstringA")); strings.push_back(VDKString("BstringB")); strings.push_back(VDKString("CstringC")); strings.push_back(VDKString("DstringD")); strings.push_back(VDKString("EstringE")); strings.push_back(VDKString("FstringF")); strings.push_back(VDKString("GstringG")); cout << "Reading the vector using an iterator..." << endl; for(vector::iterator i= strings.begin(); i != strings.end(); i++) { cout << "*i = " << *i << endl; } cout << "Reading the vector using [] operator" << endl; for(unsigned int j = 0; j < strings.size(); j++) { VDKString s = strings[j]; cout << "strings[ " << j << " ] = " << s << endl; } return strings; } void DumpVDKStringVector(const vector& A) { cout << "Reading the returned vector using an const iterator..." << endl; for(vector::const_iterator i= A.begin(); i != A.end(); i++) { cout << "i->c_str() = " << i->c_str() << endl; } cout << "Reading the returned vector using [] operator" << endl; for(unsigned int j = 0; j < A.size(); j++) { VDKString s = A[j]; cout << "strings[ " << j << " ] = " << s << endl; } } void stltest() { vector A = vectortest(); DumpVDKStringVector(A); } int main() { test1(); stltest(); } /* cout << "C = " << C << endl; VDKString D = Funt(C); cout << "D = Funt(C) = " << D << endl; vector pile; pile.push_back(A); pile.push_back(B); pile.push_back(C); pile.push_back(D); pile.push_back(A); vector stack = pile; for(vector::iterator i = stack.begin(); i!= stack.end(); i++) cout << "*i = " << *i << endl; } */ vdk-2.4.0/testvdk/loadfile.xpm0000644000000000000000000000122407345314272011727 /* XPM */ static char *loadfile_xpm[] = { /* width height num_colors chars_per_pixel */ " 18 19 6 1", /* colors */ ". c #000000", "# c #000080", "a c #808080", "b c #none", "c c #ff0000", "d c #ffffff", /* pixels */ "bbbbbbbbbbbbbbbbbb", "bbbbbbbbbdddddabbb", "bbbbbbbbbd###daabb", "bbbbb.bbbddddddd.b", "bbbbb..bbd#####d.b", "ba......bddddddd.b", "b..ab..bbd#####d.b", "b..bb.bbbddddddd.b", "b..bbbbbb........b", "b..bbbbbbbbbbbbbbb", "b..bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbbbbb", "dddddddddddb.bbbbb", "dbccbbbbbbba.bbbbb", "dbbbbbbbbbba.bbbbb", "dbbbbbbbbbba.bbbbb", "baaaaaaaaaaa.bbbbb", ".............bbbbb", "bbbbbbbbbbbbbbbbbb" }; vdk-2.4.0/testvdk/f104.xpm0000644000000000000000000121372307206653166010640 /* XPM */ static char * f104_xpm[] = { "300 186 9740 3", " c None", ". c #4674A2", "+ c #4B77A3", "@ c #4F7BA5", "# c #537EA7", "$ c #5881A9", "% c #5C84AB", "& c #6087AC", "* c #658BAE", "= c #698EB0", "- c #6E91B2", "; c #7294B4", "> c #7698B6", ", c #7B9BB7", "' c #7F9EB9", ") c #83A1BB", "! c #88A5BD", "~ c #8CA8BF", "{ c #90ABC0", "] c #95AEC2", "^ c #99B1C4", "/ c #9EB5C6", "( c #A2B8C8", "_ c #A6BBC9", ": c #ABBECB", "< c #AFC2CD", "[ c #B3C5CF", "} c #B8C8D1", "| c #BCCBD2", "1 c #C0CFD4", "2 c #C5D2D6", "3 c #C8D5D7", "4 c #4573A1", "5 c #4A77A3", "6 c #4E7AA5", "7 c #527DA7", "8 c #5780A8", "9 c #5B84AA", "0 c #5F87AC", "a c #648AAE", "b c #688DB0", "c c #6D91B2", "d c #7194B3", "e c #7597B5", "f c #7A9AB7", "g c #7E9DB9", "h c #82A1BB", "i c #87A4BC", "j c #8BA7BE", "k c #90AAC0", "l c #94AEC2", "m c #98B1C4", "n c #9DB4C5", "o c #A1B7C7", "p c #A5BBC9", "q c #AABECB", "r c #AEC1CD", "s c #B2C4CE", "t c #B7C7D0", "u c #BBCBD2", "v c #C0CED4", "w c #C4D1D6", "x c #C8D4D7", "y c #4473A1", "z c #4976A3", "A c #4D79A5", "B c #517CA6", "C c #5680A8", "D c #5A83AA", "E c #5F86AC", "F c #6389AE", "G c #678DAF", "H c #6C90B1", "I c #7093B3", "J c #7496B5", "K c #799AB7", "L c #7D9DB8", "M c #82A0BA", "N c #86A3BC", "O c #8AA6BE", "P c #8FAAC0", "Q c #93ADC1", "R c #97B0C3", "S c #9CB3C5", "T c #A0B7C7", "U c #A4BAC9", "V c #A9BDCA", "W c #ADC0CC", "X c #B6C7D0", "Y c #BACAD2", "Z c #BFCDD3", "` c #C3D0D5", " . c #C7D4D7", ".. c #4372A1", "+. c #4875A2", "@. c #4C79A4", "#. c #557FA8", "$. c #5982AA", "%. c #5E85AB", "&. c #6289AD", "*. c #668CAF", "=. c #6B8FB1", "-. c #6F92B3", ";. c #7396B4", ">. c #7899B6", ",. c #7C9CB8", "'. c #819FBA", "). c #85A3BC", "!. c #89A6BD", "~. c #8EA9BF", "{. c #92ACC1", "]. c #96AFC3", "^. c #9BB3C5", "/. c #9FB6C6", "(. c #A4B9C8", "_. c #A8BCCA", ":. c #ACC0CC", "<. c #B1C3CE", "[. c #B5C6CF", "}. c #B9C9D1", "|. c #BECDD3", "1. c #C2D0D5", "2. c #C6D3D7", "3. c #4371A0", "4. c #4775A2", "5. c #4B78A4", "6. c #507BA6", "7. c #547EA7", "8. c #5882A9", "9. c #5D85AB", "0. c #6188AD", "a. c #658BAF", "b. c #6A8EB0", "c. c #6E92B2", "d. c #7395B4", "e. c #7798B6", "f. c #7B9BB8", "g. c #809FB9", "h. c #84A2BB", "i. c #8DA8BF", "j. c #91ACC1", "k. c #96AFC2", "l. c #9AB2C4", "m. c #A3B8C8", "n. c #A7BCCA", "o. c #ABBFCB", "p. c #B0C2CD", "q. c #B4C5CF", "r. c #B8C9D1", "s. c #BDCCD3", "t. c #C1CFD4", "u. c #C6D2D6", "v. c #4271A0", "w. c #4F7AA5", "x. c #5781A9", "y. c #7697B5", "z. c #7A9BB7", "A. c #88A4BD", "B. c #8CA8BE", "C. c #9DB5C6", "D. c #A2B8C7", "E. c #AFC1CD", "F. c #B8C8D0", "G. c #41709F", "H. c #4977A3", "I. c #5B83AA", "J. c #82A1BA", "K. c #94ADC2", "L. c #98B1C3", "M. c #9CB4C5", "N. c #A5BAC9", "O. c #BFCED4", "P. c #406F9F", "Q. c #4D79A4", "R. c #5E86AC", "S. c #6389AD", "T. c #678CAF", "U. c #6B90B1", "V. c #7999B6", "W. c #81A0BA", "X. c #8EAABF", "Y. c #A0B6C7", "Z. c #3F6F9F", "`. c #4372A0", " + c #4C78A4", ".+ c #507CA6", "++ c #5982A9", "@+ c #6F92B2", "#+ c #809FBA", "$+ c #85A2BC", "%+ c #8DA9BF", "&+ c #A3B9C8", "*+ c #ACBFCC", "=+ c #B0C3CE", "-+ c #BECCD3", ";+ c #3E6E9E", ">+ c #4774A2", ",+ c #7295B4", "'+ c #91ABC1", ")+ c #95AFC2", "!+ c #3D6D9E", "~+ c #4171A0", "{+ c #4674A1", "]+ c #537DA7", "^+ c #7194B4", "/+ c #87A4BD", "(+ c #8CA7BE", "_+ c #9DB4C6", ":+ c #B7C8D0", "<+ c #9DB5C5", "[+ c #B2C5CE", "}+ c #5C84AA", "|+ c #3C6D9D", "1+ c #638AAE", "2+ c #7193B3", "3+ c #054487", "4+ c #A9BDCB", "5+ c #AEC1CC", "6+ c #BBCAD2", "7+ c #C4D1D5", "8+ c #1B5490", "9+ c #306498", "0+ c #3B6C9D", "a+ c #4472A1", "b+ c #4876A3", "c+ c #7D9CB8", "d+ c #688EB0", "e+ c #225993", "f+ c #16508E", "g+ c #3A6B9C", "h+ c #A8BDCA", "i+ c #B6C6D0", "j+ c #BACAD1", "k+ c #C7D3D7", "l+ c #3A6B9D", "m+ c #6288AD", "n+ c #6A8FB1", "o+ c #7799B6", "p+ c #85A2BB", "q+ c #89A5BD", "r+ c #235A93", "s+ c #B0C3CD", "t+ c #C2CFD5", "u+ c #C6D3D6", "v+ c #396B9C", "w+ c #326599", "x+ c #A7BBC9", "y+ c #BCCCD3", "z+ c #386A9C", "A+ c #4170A0", "B+ c #7E9EB9", "C+ c #316599", "D+ c #B3C4CF", "E+ c #38699C", "F+ c #40709F", "G+ c #527DA6", "H+ c #688DAF", "I+ c #ADC1CC", "J+ c #BFCDD4", "K+ c #C3D1D5", "L+ c #37699B", "M+ c #4876A2", "N+ c #5A82AA", "O+ c #5E86AB", "P+ c #6F93B3", "Q+ c #7496B4", "R+ c #316499", "S+ c #9FB6C7", "T+ c #B5C6D0", "U+ c #36689B", "V+ c #547FA7", "W+ c #668BAF", "X+ c #9FB5C6", "Y+ c #B4C6CF", "Z+ c #35679A", "`+ c #396A9C", " @ c #4B77A4", ".@ c #306499", "+@ c #99B2C4", "@@ c #34679A", "#@ c #4574A1", "$@ c #5780A9", "%@ c #33669A", "&@ c #37699C", "*@ c #3C6C9D", "=@ c #7596B5", "-@ c #306398", ";@ c #18528F", ">@ c #215992", ",@ c #86A4BC", "'@ c #A5BAC8", ")@ c #6A8FB0", "!@ c #6187AD", "~@ c #205892", "{@ c #15508D", "]@ c #3D6E9E", "^@ c #7698B5", "/@ c #6187AC", "(@ c #2D6297", "_@ c #2F6398", ":@ c #34669A", "<@ c #3C6D9E", "[@ c #2E6398", "}@ c #7999B7", "|@ c #2E6297", "1@ c #2D6197", "2@ c #35689B", "3@ c #2C6097", "4@ c #2B6096", "5@ c #A9BECB", "6@ c #2A5F96", "7@ c #2E6298", "8@ c #567FA8", "9@ c #A4BAC8", "0@ c #295E96", "a@ c #285E95", "b@ c #2C6197", "c@ c #35679B", "d@ c #5C85AB", "e@ c #A7BBCA", "f@ c #275D95", "g@ c #2B6097", "h@ c #A1B8C7", "i@ c #265C94", "j@ c #93ADC2", "k@ c #98B0C3", "l@ c #255C94", "m@ c #92ADC1", "n@ c #245B94", "o@ c #295E95", "p@ c #3F6E9F", "q@ c #547FA8", "r@ c #84A1BB", "s@ c #91ABC0", "t@ c #B3C4CE", "u@ c #2A6096", "v@ c #8AA7BE", "w@ c #215892", "x@ c #295F96", "y@ c #8AA6BD", "z@ c #BAC9D1", "A@ c #C1CFD5", "B@ c #1F5791", "C@ c #285D95", "D@ c #1E5691", "E@ c #225A93", "F@ c #1D5691", "G@ c #1C5590", "H@ c #255B94", "I@ c #1A5490", "J@ c #19538F", "K@ c #19528F", "L@ c #18528E", "M@ c #3B6B9D", "N@ c #17518E", "O@ c #1F5792", "P@ c #245B93", "Q@ c #94AFC2", "R@ c #597992", "S@ c #688AA6", "T@ c #ADCCD7", "U@ c #1A548F", "V@ c #1E5791", "W@ c #C6D5D7", "X@ c #527E97", "Y@ c #386D8D", "Z@ c #1A5275", "`@ c #33698D", " # c #4A7C9F", ".# c #7BA6C6", "+# c #B1D4D7", "@# c #265D94", "## c #7BA8BF", "$# c #2A6585", "%# c #246990", "&# c #165F88", "*# c #1E6792", "=# c #1C5F89", "-# c #28628A", ";# c #3D6F94", "># c #6088AC", ",# c #7A9BBE", "'# c #BBD5D7", ")# c #144F8D", "!# c #1D5590", "~# c #568BAA", "{# c #32779E", "]# c #2273A0", "^# c #166C9B", "/# c #1E71A3", "(# c #1F6D9D", "_# c #246895", ":# c #24618D", "<# c #1B4E79", "[# c #07325D", "}# c #214672", "|# c #3E5B83", "1# c #8DA0BE", "2# c #134E8D", "3# c #B5D5D7", "4# c #A6C6D7", "5# c #ABCAD7", "6# c #ABC7D7", "7# c #BCD5D7", "8# c #8DB3CA", "9# c #306A8F", "0# c #2973A0", "a# c #146A9B", "b# c #0E6A9D", "c# c #0E689C", "d# c #196C9E", "e# c #1F6998", "f# c #21618F", "g# c #104976", "h# c #002E5D", "i# c #073664", "j# c #15406D", "k# c #183D69", "l# c #2F507B", "m# c #5E7EA5", "n# c #A2BED7", "o# c #124E8C", "p# c #16518E", "q# c #245A93", "r# c #92B9D7", "s# c #719FD3", "t# c #6292D0", "u# c #5385CA", "v# c #3B6FBA", "w# c #4477C6", "x# c #4777CB", "y# c #5181D5", "z# c #517FCC", "A# c #577DBC", "B# c #7599CD", "C# c #98BAD7", "D# c #C2D5D7", "E# c #54829A", "F# c #2A6A90", "G# c #206C9D", "H# c #156AA0", "I# c #076196", "J# c #0C6197", "K# c #1F6FA2", "L# c #1E6794", "M# c #165682", "N# c #013C68", "O# c #00335E", "P# c #0B416F", "Q# c #124A79", "R# c #0B447B", "S# c #1A528B", "T# c #195086", "U# c #194B7C", "V# c #3E6D97", "W# c #81ACCF", "X# c #BED5D7", "Y# c #114D8C", "Z# c #1A538F", "`# c #B7D1D7", " $ c #84A7CF", ".$ c #5E8BC2", "+$ c #4679BB", "@$ c #3B74C3", "#$ c #306EC3", "$$ c #3A7AD4", "%$ c #2D6ECC", "&$ c #2D6CCB", "*$ c #205FBC", "=$ c #2C69C6", "-$ c #2760B9", ";$ c #3B72C4", ">$ c #447AC4", ",$ c #5487C9", "'$ c #6394CE", ")$ c #7BA7D6", "!$ c #9AC2D7", "~$ c #C5D5D7", "{$ c #94B9C9", "]$ c #3C6F8C", "^$ c #33749E", "/$ c #1E6A9C", "($ c #1A6BA3", "_$ c #004179", ":$ c #00497E", "<$ c #1A6495", "[$ c #1F628D", "}$ c #14537C", "|$ c #00355D", "1$ c #00335B", "2$ c #043F67", "3$ c #074773", "4$ c #0E5488", "5$ c #084F87", "6$ c #074D81", "7$ c #135587", "8$ c #215E8B", "9$ c #29638B", "0$ c #417698", "a$ c #6491B0", "b$ c #104C8B", "c$ c #154F8D", "d$ c #9FBFD7", "e$ c #5D84BD", "f$ c #3969B1", "g$ c #2B63B8", "h$ c #1857B6", "i$ c #0B4FB2", "j$ c #0043A9", "k$ c #276FD3", "l$ c #3881D7", "m$ c #296FC5", "n$ c #094D9E", "o$ c #3B7DC7", "p$ c #65A8D7", "q$ c #599FD7", "r$ c #4A91D7", "s$ c #498DD7", "t$ c #3D7CCB", "u$ c #4C87CD", "v$ c #5285C4", "w$ c #719CD1", "x$ c #80A5D1", "y$ c #C3D5D7", "z$ c #4D7889", "A$ c #265D7B", "B$ c #246792", "C$ c #1A6396", "D$ c #226DA6", "E$ c #004079", "F$ c #226292", "G$ c #18537D", "H$ c #0C466B", "I$ c #002F51", "J$ c #00395B", "K$ c #0E4D6E", "L$ c #175B7E", "M$ c #155E87", "N$ c #226D97", "O$ c #29729B", "P$ c #2A729A", "Q$ c #387DA4", "R$ c #498DB2", "S$ c #5395B8", "T$ c #5A99BC", "U$ c #528EB0", "V$ c #629ABB", "W$ c #73AAC9", "X$ c #7BB0D0", "Y$ c #7AABCC", "Z$ c #76A7C8", "`$ c #7EACCE", " % c #8AB6D1", ".% c #9BBFCF", "+% c #9FC0C9", "@% c #9EBFC8", "#% c #9BBCC5", "$% c #99BAC3", "%% c #9ABBC4", "&% c #A5C6CF", "*% c #A6C7D0", "=% c #A9CAD3", "-% c #ABCCD5", ";% c #ACCDD6", ">% c #AACBD4", ",% c #A8CBD1", "'% c #99C1C3", ")% c #95BFBE", "!% c #97C1C0", "~% c #9DC7C6", "{% c #9DC5C5", "]% c #96BEBE", "^% c #94BABB", "/% c #98BBBD", "(% c #9ABCBE", "_% c #9CBEC0", ":% c #A1C0C3", "<% c #A5C2C6", "[% c #A6C2C6", "}% c #A5C1C5", "|% c #A3BFC3", "1% c #A2BEC2", "2% c #9BB2B8", "3% c #A1B9BD", "4% c #9FB4B9", "5% c #A3B6BA", "6% c #AEC0C4", "7% c #ADBCBF", "8% c #B4C2C3", "9% c #0F4C8B", "0% c #789FD6", "a% c #3B66AA", "b% c #2354A3", "c% c #346AC4", "d% c #2660C3", "e% c #002F96", "f% c #002A93", "g% c #003FA7", "h% c #3177D7", "i% c #3077CF", "j% c #3A7FCC", "k% c #498DD4", "l% c #6AABD7", "m% c #488CD5", "n% c #0E56AB", "o% c #0047A2", "p% c #0852AB", "q% c #0D54AC", "r% c #3478CD", "s% c #2F6EBE", "t% c #3770BD", "u% c #2C61A5", "v% c #4472AE", "w% c #769CCD", "x% c #B5D2D7", "y% c #B2D5D7", "z% c #4D7B92", "A% c #4A7F9F", "B% c #4C8AAF", "C% c #4D8EB8", "D% c #5D9DCB", "E% c #4583B2", "F% c #4D87B5", "G% c #5E95BE", "H% c #5B90B2", "I% c #689BB8", "J% c #6094AC", "K% c #659BB3", "L% c #679FB8", "M% c #66A2BC", "N% c #6AABC9", "O% c #65AAC9", "P% c #5EA5C1", "Q% c #5BA2BE", "R% c #5BA1BB", "S% c #5598B3", "T% c #5393AF", "U% c #5B98B5", "V% c #5691AF", "W% c #4D8AA9", "X% c #4483A2", "Y% c #41809F", "Z% c #3D799B", "`% c #357092", " & c #376886", ".& c #487280", "+& c #4C737A", "@& c #4C7179", "#& c #486F76", "$& c #466B73", "%& c #426970", "&& c #42676F", "*& c #395E66", "=& c #3A6168", "-& c #3E636B", ";& c #40676E", ">& c #40656D", ",& c #3D6469", "'& c #3C6869", ")& c #3A6866", "!& c #3F6B6A", "~& c #477372", "{& c #487271", "]& c #3F6968", "^& c #3A6262", "/& c #446A6B", "(& c #496C6E", "_& c #4F7173", ":& c #547678", "<& c #58777A", "[& c #577679", "}& c #577376", "|& c #60757A", "1& c #6A7D81", "2& c #6B7D81", "3& c #738587", "4& c #839295", "5& c #859394", "6& c #96A1A3", "7& c #BCC6C7", "8& c #0E4B8B", "9& c #134E8C", "0& c #97CFD7", "a& c #69AFD7", "b& c #2B69B2", "c& c #0D469D", "d& c #1E53AF", "e& c #295BBA", "f& c #1245A1", "g& c #002281", "h& c #04389B", "i& c #00308D", "j& c #094395", "k& c #003B84", "l& c #69A6D7", "m& c #5F9CD7", "n& c #154F99", "o& c #003A88", "p& c #003582", "q& c #0C4B9A", "r& c #094C9D", "s& c #1F65BA", "t& c #2973CC", "u& c #1B68C4", "v& c #1968C5", "w& c #0A59B5", "x& c #1763B9", "y& c #2F74C1", "z& c #4581C0", "A& c #72A2D3", "B& c #C0D5D7", "C& c #B8D5D7", "D& c #AFD4D7", "E& c #AED5D7", "F& c #B0D5D7", "G& c #AFD0D7", "H& c #A7C3CE", "I& c #9EB9C2", "J& c #99B8BD", "K& c #97BDBE", "L& c #8DBBBB", "M& c #8DBFBE", "N& c #7DAAAD", "O& c #7AA1A8", "P& c #6E8897", "Q& c #6A8598", "R& c #5F889C", "S& c #4B7991", "T& c #3A6889", "U& c #346283", "V& c #30627D", "W& c #2F617A", "X& c #32657A", "Y& c #36687F", "Z& c #3E6F8D", "`& c #3C6B87", " * c #36647C", ".* c #2E596A", "+* c #234D59", "@* c #1B434D", "#* c #163A4A", "$* c #11374A", "%* c #003046", "&* c #00384B", "** c #003E4D", "=* c #003D49", "-* c #033D49", ";* c #0D414E", ">* c #194454", ",* c #1E4355", "'* c #173D50", ")* c #133E51", "!* c #1E4F60", "~* c #1C505E", "{* c #1F505F", "]* c #214C5C", "^* c #365768", "/* c #3A5664", "(* c #38505A", "_* c #3C555C", ":* c #435A62", "<* c #486168", "[* c #4E656D", "}* c #4E676E", "|* c #4F666E", "1* c #566D75", "2* c #5E777E", "3* c #6C838B", "4* c #768F96", "5* c #7E959D", "6* c #819AA1", "7* c #869DA5", "8* c #88A1A6", "9* c #9AB4B5", "0* c #90AAA9", "a* c #8FA9A8", "b* c #92ACAB", "c* c #879F9F", "d* c #789090", "e* c #84999A", "f* c #9DB1B2", "g* c #B1C5C6", "h* c #BBCDCF", "i* c #C4D5D7", "j* c #0E4A8A", "k* c #124D8C", "l* c #A1CAD7", "m* c #64A8D7", "n* c #2C7BBE", "o* c #1053AA", "p* c #1955B7", "q* c #2055B5", "r* c #13429E", "s* c #063289", "t* c #012B81", "u* c #2955AE", "v* c #001B71", "w* c #0F438E", "x* c #5C93D6", "y* c #5994D0", "z* c #154F8F", "A* c #003183", "B* c #144C9F", "C* c #1E58A2", "D* c #2160A7", "E* c #1759A3", "F* c #2569BA", "G* c #206CC2", "H* c #1061BC", "I* c #1970CF", "J* c #166ECF", "K* c #0C63C0", "L* c #2D7FD3", "M* c #3C86CD", "N* c #4584BA", "O* c #6595BB", "P* c #90B4CC", "Q* c #B6BFBC", "R* c #939F9B", "S* c #7A8E85", "T* c #788F85", "U* c #7D948C", "V* c #849B93", "W* c #849B95", "X* c #7A938D", "Y* c #738E89", "Z* c #728F8B", "`* c #668482", " = c #658582", ".= c #658584", "+= c #638586", "@= c #618384", "#= c #5D8082", "$= c #5A7D7F", "%= c #587B7F", "&= c #597A83", "*= c #537881", "== c #4E7680", "-= c #4B767F", ";= c #4C7480", ">= c #4C707C", ",= c #4C6977", "'= c #486671", ")= c #3E5F66", "!= c #365F63", "~= c #2C5F60", "{= c #265E5F", "]= c #1E5155", "^= c #1E4A55", "/= c #1D3C50", "(= c #21415A", "_= c #0C3B57", ":= c #043959", "<= c #07395E", "[= c #0D3B5D", "}= c #0E3B52", "|= c #073544", "1= c #07333C", "2= c #0A3641", "3= c #083346", "4= c #083248", "5= c #0B3243", "6= c #092F3A", "7= c #072A2C", "8= c #042325", "9= c #051E25", "0= c #001C28", "a= c #0F3542", "b= c #063441", "c= c #0A3F47", "d= c #184F52", "e= c #15464A", "f= c #153E42", "g= c #16333B", "h= c #172D38", "i= c #132A38", "j= c #0E2A36", "k= c #0A3039", "l= c #174248", "m= c #5A8188", "n= c #A4C5CA", "o= c #BFD2D7", "p= c #B7C4CC", "q= c #0D4A8A", "r= c #8BBFD7", "s= c #5C98CA", "t= c #4E91D5", "u= c #1455A7", "v= c #0E46A7", "w= c #295AC0", "x= c #1B47A6", "y= c #012980", "z= c #052C7B", "A= c #133A87", "B= c #2A54A6", "C= c #0A3788", "D= c #4E80C9", "E= c #5289CC", "F= c #0A4484", "G= c #00397F", "H= c #002D84", "I= c #164FA8", "J= c #0A4A94", "K= c #1F64A7", "L= c #3A7EC5", "M= c #4F95D7", "N= c #327BC8", "O= c #115CAD", "P= c #1E6BBD", "Q= c #2270C2", "R= c #1C6BB8", "S= c #418ED4", "T= c #5E9CCB", "U= c #659ABC", "V= c #739DB3", "W= c #8CB0BC", "X= c #B2CCCD", "Y= c #BCC2C0", "Z= c #A2ADA9", "`= c #9FAEA9", " - c #9EAFA9", ".- c #A4B5AF", "+- c #A9BCB6", "@- c #AABDB9", "#- c #A3B8B3", "$- c #9FB3B1", "%- c #9EB4B1", "&- c #9AB0AE", "*- c #9AB2B2", "=- c #9DB5B5", "-- c #9EB8B9", ";- c #99B5B8", ">- c #96B2B5", ",- c #94B0B3", "'- c #9EB2BB", ")- c #9AB2BC", "!- c #98B0BA", "~- c #96AEBA", "{- c #99ACBA", "]- c #9DADBA", "^- c #A1AFBA", "/- c #A8B9C1", "(- c #A0B5BA", "_- c #9AB8BA", ":- c #91B3B5", "<- c #8EAFB8", "[- c #8FACBA", "}- c #95ABC0", "|- c #819FB9", "1- c #164968", "2- c #033F63", "3- c #00355C", "4- c #05395E", "5- c #0E3D57", "6- c #0A3949", "7- c #022E37", "8- c #002730", "9- c #001B2E", "0- c #001D30", "a- c #00202E", "b- c #002127", "c- c #001E1B", "d- c #001A16", "e- c #001416", "f- c #001219", "g- c #12323D", "h- c #345A63", "i- c #507D82", "j- c #4C7A7A", "k- c #123A3A", "l- c #022425", "m- c #001017", "n- c #00040C", "o- c #000A17", "p- c #00111C", "q- c #001921", "r- c #193C40", "s- c #0C4989", "t- c #80BCD7", "u- c #3A84B3", "v- c #3882BF", "w- c #4281CE", "x- c #0E449C", "y- c #113FA1", "z- c #1F47A9", "A- c #042981", "B- c #001967", "C- c #012468", "D- c #04296D", "E- c #00256D", "F- c #26559D", "G- c #5E90D5", "H- c #1A5192", "I- c #002666", "J- c #033E84", "K- c #0C469A", "L- c #3573C6", "M- c #488ED4", "N- c #458FCE", "O- c #539AD7", "P- c #66ADD7", "Q- c #5DA2D7", "R- c #569BD7", "S- c #64A9D7", "T- c #5EA3D7", "U- c #6EB4D7", "V- c #7FC4D7", "W- c #8BCDD7", "X- c #92D0D7", "Y- c #9DD4D7", "Z- c #9DCDD7", "`- c #95C1CE", " ; c #9ABDBF", ".; c #A5BDB0", "+; c #C5D5C6", "@; c #9DBFD7", "#; c #2E6989", "$; c #165A7F", "%; c #0A4974", "&; c #0C466C", "*; c #124560", "=; c #0C3B4D", "-; c #012C35", ";; c #00212B", ">; c #002133", ",; c #002134", "'; c #02222F", "); c #032225", "!; c #011E19", "~; c #001910", "{; c #001311", "]; c #001015", "^; c #0B262D", "/; c #3E5C64", "(; c #638688", "_; c #577B7B", ":; c #001F1C", "<; c #000B0B", "[; c #000D10", "}; c #091219", "|; c #000811", "1; c #02161D", "2; c #AAC3C7", "3; c #0B4889", "4; c #0F4B8B", "5; c #70ACC8", "6; c #2A759D", "7; c #267DB2", "8; c #2F83C3", "9; c #316AB7", "0; c #073489", "a; c #0D328B", "b; c #103387", "c; c #001A63", "d; c #001A5A", "e; c #001E57", "f; c #001850", "g; c #0C3472", "h; c #5784C5", "i; c #2F62A1", "j; c #00326F", "k; c #00336D", "l; c #104C8A", "m; c #4480C6", "n; c #60A0D7", "o; c #69B5D7", "p; c #56A5D7", "q; c #4E99D2", "r; c #4F96CE", "s; c #4F92C9", "t; c #67A6D7", "u; c #87C5D7", "v; c #86C4D7", "w; c #8BC9D7", "x; c #8ECDD7", "y; c #8DCBD7", "z; c #8FCCD7", "A; c #95CFD7", "B; c #96CED7", "C; c #93C9D5", "D; c #96C6C8", "E; c #9CC2B5", "F; c #9DBCAC", "G; c #A1BBB2", "H; c #B6C9C7", "I; c #588298", "J; c #266B8C", "K; c #1F6C96", "L; c #256998", "M; c #25628E", "N; c #1D5271", "O; c #0F3E52", "P; c #09313D", "Q; c #092D39", "R; c #032437", "S; c #052436", "T; c #082430", "U; c #072326", "V; c #07221B", "W; c #051F14", "X; c #051B18", "Y; c #061A1B", "Z; c #000A0F", "`; c #0A2226", " > c #304D4B", ".> c #526C69", "+> c #1A302D", "@> c #031310", "#> c #000403", "$> c #04080B", "%> c #03060D", "&> c #070C12", "*> c #758084", "=> c #0A4789", "-> c #8FC2D7", ";> c #36759E", ">> c #105C8E", ",> c #2379B6", "'> c #2271B4", ")> c #265CA2", "!> c #00266E", "~> c #002168", "{> c #002164", "]> c #001952", "^> c #001F50", "/> c #01224F", "(> c #052959", "_> c #4D76AC", ":> c #608EC9", "<> c #134780", "[> c #0C457A", "}> c #23608F", "|> c #5694C3", "1> c #6FADD7", "2> c #6AADD7", "3> c #62AFD7", "4> c #63B3D7", "5> c #6CB5D7", "6> c #65ABD7", "7> c #5F9FCB", "8> c #6FADD6", "9> c #8BC5D7", "0> c #91CBD7", "a> c #8CC6D7", "b> c #8EC9D7", "c> c #91CED7", "d> c #93D1D7", "e> c #93D0D7", "f> c #94CFD7", "g> c #92CED7", "h> c #94CCCD", "i> c #99C8B8", "j> c #A5CDB5", "k> c #9EC0AF", "l> c #8AA698", "m> c #839891", "n> c #9FB0AA", "o> c #2C6377", "p> c #196587", "q> c #156693", "r> c #1C6496", "s> c #1D5B8A", "t> c #144A6C", "u> c #07354C", "v> c #052A3A", "w> c #092A39", "x> c #0F2B40", "y> c #102B40", "z> c #102A37", "A> c #0E2A2E", "B> c #0E2922", "C> c #0E281F", "D> c #0F2824", "E> c #122728", "F> c #132829", "G> c #04191A", "H> c #021816", "I> c #142924", "J> c #000E09", "K> c #020D09", "L> c #040807", "M> c #0A0A0A", "N> c #0B0A0F", "O> c #404146", "P> c #094788", "Q> c #BAD5D7", "R> c #ADD5D7", "S> c #A0CCD7", "T> c #94C1D7", "U> c #8BB8D7", "V> c #77A4CE", "W> c #7EADD7", "X> c #6F9FD0", "Y> c #295E94", "Z> c #205A99", "`> c #155499", " , c #246AB2", "., c #2669AF", "+, c #1D518A", "@, c #002859", "#, c #002151", "$, c #001E49", "%, c #001D43", "&, c #002044", "*, c #001F43", "=, c #143B64", "-, c #557FAF", ";, c #29588C", ">, c #14497B", ",, c #3E79A5", "', c #5897B8", "), c #71B1CC", "!, c #5FA0B6", "~, c #5EA4BE", "{, c #66B1D7", "], c #62B0D7", "^, c #6AB3D7", "/, c #71B4D7", "(, c #7EBCD7", "_, c #8CC7D7", ":, c #8FC7D7", "<, c #8EC6D7", "[, c #93CED7", "}, c #8ECCD7", "|, c #90CED7", "1, c #90CFD7", "2, c #94CFCD", "3, c #93C5AC", "4, c #8AB693", "5, c #739B79", "6, c #5F8160", "7, c #638061", "8, c #7F987B", "9, c #98AF95", "0, c #A6B7A4", "a, c #C1D2C2", "b, c #C8D5D6", "c, c #649AA4", "d, c #236A7C", "e, c #207297", "f, c #186A9A", "g, c #145D92", "h, c #115181", "i, c #0B3F64", "j, c #04304B", "k, c #06293C", "l, c #0E2B3D", "m, c #112943", "n, c #122A44", "o, c #112B3C", "p, c #0F2A33", "q, c #0D2A28", "r, c #0C2925", "s, c #0D292A", "t, c #0E2A2D", "u, c #0C2426", "v, c #0C2220", "w, c #061A18", "x, c #00120E", "y, c #000501", "z, c #050E09", "A, c #0F110E", "B, c #0C0C0C", "C, c #26252A", "D, c #084688", "E, c #0C498A", "F, c #A7C3D7", "G, c #86A9BF", "H, c #618BA3", "I, c #51839C", "J, c #457A9A", "K, c #457CA3", "L, c #4A86B8", "M, c #508DC6", "N, c #4D8BC8", "O, c #4784C5", "P, c #3972B5", "Q, c #346AB0", "R, c #4075BB", "S, c #1B5096", "T, c #1E549C", "U, c #063E88", "V, c #1E58A1", "W, c #1D5797", "X, c #1A5380", "Y, c #0A3F61", "Z, c #0E3F5F", "`, c #083753", " ' c #09354E", ".' c #052F48", "+' c #00223F", "@' c #164265", "#' c #3B6A94", "$' c #2C618D", "%' c #27608B", "&' c #377398", "*' c #3F7F9A", "=' c #2F7181", "-' c #478A92", ";' c #438794", ">' c #4992B3", ",' c #4F98C1", "'' c #62A7CE", ")' c #71B3D6", "!' c #7EBDD7", "~' c #82BFD7", "{' c #80BBD7", "]' c #8AC5D7", "^' c #89C6D7", "/' c #86C6D7", "(' c #8CCCD7", "_' c #91D2D7", ":' c #90D0D7", "<' c #95D1D7", "[' c #97CEC9", "}' c #9FCCAD", "|' c #92B78B", "1' c #709260", "2' c #50713C", "3' c #4E6C36", "4' c #678352", "5' c #819C73", "6' c #8DA688", "7' c #8BA491", "8' c #93ADA4", "9' c #ACC1C2", "0' c #1E626D", "a' c #217388", "b' c #11668D", "c' c #126496", "d' c #155C94", "e' c #0E4C7F", "f' c #003159", "g' c #001F3D", "h' c #001E33", "i' c #0D283D", "j' c #0F2743", "k' c #102746", "l' c #112B42", "m' c #112C3D", "n' c #0F2E33", "o' c #0D2F31", "p' c #0D2F38", "q' c #0E2F38", "r' c #122E31", "s' c #102828", "t' c #0F2322", "u' c #081815", "v' c #000C08", "w' c #000401", "x' c #070B0A", "y' c #121615", "z' c #797A7E", "A' c #074588", "B' c #A2BDD0", "C' c #7094B4", "D' c #4C7A9B", "E' c #407595", "F' c #437E9E", "G' c #4988A7", "H' c #4B8EAB", "I' c #488DAE", "J' c #458DB5", "K' c #3D87B8", "L' c #357FBC", "M' c #3782C6", "N' c #3680CB", "O' c #2C73C1", "P' c #1F62B1", "Q' c #114E9E", "R' c #043D8A", "S' c #00337B", "T' c #003377", "U' c #003575", "V' c #265A96", "W' c #235B8E", "X' c #236186", "Y' c #1D5D79", "Z' c #205D72", "`' c #2C6578", " ) c #215668", ".) c #22566B", "+) c #194C67", "@) c #295E7D", "#) c #397196", "$) c #387298", "%) c #39779E", "&) c #3F7EA1", "*) c #43839E", "=) c #438595", "-) c #418288", ";) c #3B7E87", ">) c #367994", ",) c #4387AC", "') c #5B9DC0", ")) c #6FAFD2", "!) c #7ABAD7", "~) c #7EBED7", "{) c #7FBFD7", "]) c #7EC0D7", "^) c #82C6D7", "/) c #85CAD7", "() c #88CDD7", "_) c #8BCED7", ":) c #8DCED7", "<) c #8BC5D0", "[) c #90BFB9", "}) c #98B692", "|) c #98AD75", "1) c #8DA363", "2) c #809751", "3) c #718840", "4) c #607B38", "5) c #5A7741", "6) c #5A7A55", "7) c #608574", "8) c #7FA7A9", "9) c #8AB1C2", "0) c #81ABC1", "a) c #8EB9CC", "b) c #A3CFD7", "c) c #6497AA", "d) c #1E6D7E", "e) c #17718B", "f) c #166B94", "g) c #1A679B", "h) c #1C5E98", "i) c #0D467B", "j) c #093660", "k) c #001535", "l) c #011F39", "m) c #132B45", "n) c #0F2646", "o) c #10284A", "p) c #0F2A48", "q) c #0A2A41", "r) c #092D3B", "s) c #073042", "t) c #082F40", "u) c #0E3137", "v) c #102E2E", "w) c #061818", "x) c #000A0A", "y) c #040E0D", "z) c #0F1918", "A) c #121C1D", "B) c #6A7275", "C) c #064587", "D) c #7C9C9D", "E) c #809FAA", "F) c #A4BCCA", "G) c #5E829C", "H) c #5984A4", "I) c #5587AC", "J) c #508AB2", "K) c #4C8DB7", "L) c #4A91BB", "M) c #4E97C0", "N) c #4E9CC2", "O) c #4A9DBF", "P) c #4296BA", "Q) c #3C90BC", "R) c #378ABE", "S) c #3284C0", "T) c #3686CB", "U) c #3987D1", "V) c #337FCB", "W) c #3B80CD", "X) c #2E70BA", "Y) c #2160A5", "Z) c #1C5998", "`) c #144F87", " ! c #114B7D", ".! c #26618D", "+! c #1F5D86", "@! c #1F638A", "#! c #1F6686", "$! c #236680", "%! c #27687C", "&! c #226173", "*! c #2F6C81", "=! c #27637D", "-! c #2C6986", ";! c #367596", ">! c #37779A", ",! c #3B7DA0", "'! c #4385A8", ")! c #4B8CAC", "!! c #5292AD", "~! c #5695A4", "{! c #5695A6", "]! c #4C8DA9", "^! c #5797BA", "/! c #65A5C8", "(! c #72B2D5", "_! c #78BAD7", ":! c #7BBCD7", "~ c #70B7D7", ",~ c #6CB1D7", "'~ c #67ADD7", ")~ c #6FB6D7", "!~ c #61AACD", "~~ c #5FA8C8", "{~ c #65AFC8", "]~ c #5CA7C6", "^~ c #5AA7D5", "/~ c #539DCE", "(~ c #4993B8", "_~ c #3F86A6", ":~ c #317695", "<~ c #337693", "[~ c #246686", "}~ c #256787", "|~ c #2F7491", "1~ c #317896", "2~ c #357B9F", "3~ c #3A7FA8", "4~ c #4285B2", "5~ c #4B8BB7", "6~ c #5593B8", "7~ c #5998B9", "8~ c #5F9EBF", "9~ c #64A3C4", "0~ c #69A9CC", "a~ c #6EB0D3", "b~ c #6FB3D7", "c~ c #72B7D7", "d~ c #72BBD7", "e~ c #74BED7", "f~ c #73C1D7", "g~ c #75C4D7", "h~ c #79C4D7", "i~ c #7EC7D7", "j~ c #87C9D7", "k~ c #83BBC8", "l~ c #82AEB1", "m~ c #8FAB9D", "n~ c #8EA287", "o~ c #8AA079", "p~ c #8BA575", "q~ c #8BA973", "r~ c #83A874", "s~ c #7CA680", "t~ c #77A694", "u~ c #77A9B2", "v~ c #77AECC", "w~ c #63A0CD", "x~ c #5291C4", "y~ c #5699C6", "z~ c #5FA5C9", "A~ c #68AEC8", "B~ c #77B9CF", "C~ c #7EB8CE", "D~ c #88BCD2", "E~ c #A7D5D7", "F~ c #789CBC", "G~ c #2B6388", "H~ c #19678E", "I~ c #186F9C", "J~ c #146195", "K~ c #145B93", "L~ c #1C5894", "M~ c #1B4E85", "N~ c #153E6A", "O~ c #001D40", "P~ c #001732", "Q~ c #0A243F", "R~ c #132B4F", "S~ c #112D54", "T~ c #0C2C52", "U~ c #072B4D", "V~ c #042E47", "W~ c #03314B", "X~ c #033153", "Y~ c #022F4E", "Z~ c #0B3646", "`~ c #093037", " { c #08252D", ".{ c #00141B", "+{ c #000910", "@{ c #011015", "#{ c #0B1F20", "${ c #0D2024", "%{ c #2B3E42", "&{ c #044387", "*{ c #8CA8A9", "={ c #648678", "-{ c #3B665D", ";{ c #5D9091", ">{ c #69A8B1", ",{ c #5FA6B8", "'{ c #69B6C9", "){ c #63B5CB", "!{ c #61B5CD", "~{ c #62B5CF", "{{ c #63B6D0", "]{ c #65B6D2", "^{ c #69B9D4", "/{ c #6EBCD6", "({ c #6DC0D7", "_{ c #67C2D7", ":{ c #57B4D7", "<{ c #56AFD7", "[{ c #5CB3D7", "}{ c #5EAFD7", "|{ c #5EACD7", "1{ c #60AAD7", "2{ c #5FA7D7", "3{ c #61A9D7", "4{ c #5DA6D3", "5{ c #5AA5CD", "6{ c #66B4D7", "7{ c #58A8C9", "8{ c #61B2CF", "9{ c #63B7D1", "0{ c #61B4D6", "a{ c #5BAAD7", "b{ c #4F9ED7", "c{ c #56A3D1", "d{ c #62ADD5", "e{ c #67AED7", "f{ c #64ACD4", "g{ c #71BAD7", "h{ c #64AFCC", "i{ c #62AFCB", "j{ c #60AACF", "k{ c #5AA3CE", "l{ c #5499D0", "m{ c #5496D0", "n{ c #5897CC", "o{ c #5C9AC9", "p{ c #64A4CA", "q{ c #66A6CA", "r{ c #67A9CC", "s{ c #68ACD1", "t{ c #69AED5", "u{ c #6CB3D7", "v{ c #6FB9D7", "w{ c #70BED7", "x{ c #76C7D7", "y{ c #75C6D7", "z{ c #77C4D7", "A{ c #83C5D7", "B{ c #8AC8D7", "C{ c #8DC6D7", "D{ c #90C0CC", "E{ c #97BCC2", "F{ c #92B2AF", "G{ c #88AA9C", "H{ c #83A690", "I{ c #7FA88A", "J{ c #7FAC8F", "K{ c #86B7A4", "L{ c #8BC2BF", "M{ c #88C7D7", "N{ c #7BBBD7", "O{ c #6BAED7", "P{ c #6AAED7", "Q{ c #69AED7", "R{ c #67ACCB", "S{ c #6AB2CB", "T{ c #66B0CD", "U{ c #6BB5D2", "V{ c #73B6D3", "W{ c #7DB9D5", "X{ c #9ACCD7", "Y{ c #3A648A", "Z{ c #346E9C", "`{ c #176093", " ] c #18679F", ".] c #125D96", "+] c #125790", "@] c #1D5894", "#] c #1D5087", "$] c #163F6B", "%] c #002242", "&] c #001731", "*] c #0D2843", "=] c #122C4F", "-] c #102E54", ";] c #0B2D52", ">] c #052C4D", ",] c #022E49", "'] c #04314E", ")] c #043256", "!] c #043254", "~] c #053446", "{] c #08303A", "]] c #0B2732", "^] c #031722", "/] c #000911", "(] c #000E15", "_] c #071C21", ":] c #071F21", "<] c #1C3136", "[] c #114C8B", "}] c #265D95", "|] c #6F9B9E", "1] c #4D8691", "2] c #5094A9", "3] c #4B9AB8", "4] c #459DC3", "5] c #43A0CC", "6] c #47A5CE", "7] c #4CACD0", "8] c #53B2D2", "9] c #59B5D4", "0] c #5CB7D5", "a] c #5EB6D7", "b] c #59B0D7", "c] c #49A0D6", "d] c #4A9DD3", "e] c #53A3D7", "f] c #55A3D4", "g] c #529ED0", "h] c #549ECF", "i] c #5AA6D7", "j] c #4E9CCC", "k] c #4697C6", "l] c #4A9CCB", "m] c #3B8DBC", "n] c #479BC9", "o] c #4CA0CC", "p] c #50A4D3", "q] c #4E9ED7", "r] c #4997D5", "s] c #56A2D4", "t] c #5CA6D5", "u] c #61AAD7", "v] c #61A8D7", "w] c #5FA8D7", "x] c #67B4D7", "y] c #6DBED7", "z] c #6BBFD7", "A] c #6ABAD7", "B] c #63B1D7", "C] c #5EA6D7", "D] c #5A9FD7", "E] c #5EA0D7", "F] c #60A3D7", "G] c #66AAD7", "H] c #67ACD3", "I] c #68ADD4", "J] c #6AAFD6", "K] c #6BB3D7", "L] c #71BBD7", "M] c #72BFD7", "N] c #75C3D7", "O] c #74C5D7", "P] c #76C3D7", "Q] c #7BC1D7", "R] c #84C5D7", "S] c #8CCAD7", "T] c #90CAD7", "U] c #91C7D7", "V] c #90C4D7", "W] c #8EC1D2", "X] c #87BCC4", "Y] c #7CB1B5", "Z] c #74ABAE", "`] c #77B2B8", " ^ c #80BECD", ".^ c #82C2D7", "+^ c #80C2D7", "@^ c #7DC0D7", "#^ c #81C4D7", "$^ c #8ACBD7", "%^ c #88C8D7", "&^ c #7CBBD7", "*^ c #70B3D0", "=^ c #65B5D6", "-^ c #55ABCC", ";^ c #5AADCD", ">^ c #70BCD7", ",^ c #79BED7", "'^ c #78B3D3", ")^ c #89BCD7", "!^ c #A9D3D7", "~^ c #7BA0BD", "{^ c #295D85", "]^ c #28679A", "^^ c #1D63A1", "/^ c #125C9B", "(^ c #135B96", "_^ c #115691", ":^ c #1C5896", "<^ c #1C4F88", "[^ c #103D66", "}^ c #002746", "|^ c #001932", "1^ c #112F47", "2^ c #0F2C4C", "3^ c #0F2D51", "4^ c #0B2D50", "5^ c #062D4C", "6^ c #063049", "7^ c #07334E", "8^ c #083356", "9^ c #063354", "0^ c #063348", "a^ c #0B333F", "b^ c #0F2B37", "c^ c #071927", "d^ c #000914", "e^ c #000D16", "f^ c #0A1F24", "g^ c #0E262A", "h^ c #0D2529", "i^ c #0B4989", "j^ c #1D5591", "k^ c #6D9BA8", "l^ c #458295", "m^ c #39809C", "n^ c #398CAE", "o^ c #3890B8", "p^ c #3B97C6", "q^ c #409FCF", "r^ c #45A4D1", "s^ c #49A5D3", "t^ c #48A5D1", "u^ c #49A1D1", "v^ c #4FA1D7", "w^ c #4493CE", "x^ c #4491C9", "y^ c #4B98CC", "z^ c #4D99CA", "A^ c #4D9AC8", "B^ c #509ECC", "C^ c #4E9FCE", "D^ c #4C9ECE", "E^ c #4194C6", "F^ c #469CCF", "G^ c #4BA0D6", "H^ c #4294CC", "I^ c #4A9BD3", "J^ c #4897D0", "K^ c #5AA9D7", "L^ c #5AA7D7", "M^ c #438DBE", "N^ c #4890CA", "O^ c #59A0D7", "P^ c #63ADD7", "Q^ c #63B0D7", "R^ c #5DB1D5", "S^ c #5EB5D1", "T^ c #60B6D7", "U^ c #61B4D7", "V^ c #61B0D7", "W^ c #64AED7", "X^ c #6AB1D7", "Y^ c #6EB5D7", "Z^ c #67B1D7", "`^ c #67B2D7", " / c #69B2D7", "./ c #6BB4D7", "+/ c #70B9D7", "@/ c #70BBD7", "#/ c #6EBBD7", "$/ c #72C1D7", "%/ c #75C2D7", "&/ c #76C1D7", "*/ c #77C0D7", "=/ c #7DC2D7", "-/ c #83C4D7", ";/ c #83C1D7", ">/ c #89C5D7", ",/ c #86C3D7", "'/ c #7AB7D3", ")/ c #6EAEC7", "!/ c #70B2CA", "~/ c #78BBD5", "{/ c #7EC4D7", "]/ c #7EC5D7", "^/ c #81C8D7", "// c #85CCD7", "(/ c #89C9D7", "_/ c #8ECAD7", ":/ c #8ECFD7", "( c #56A9D7", ",( c #57A6D7", "'( c #5BA8D7", ")( c #5DABD7", "!( c #63B4D7", "~( c #66B5D7", "{( c #69B4D7", "]( c #6BB5D7", "^( c #6CB4D7", "/( c #6FBAD7", "(( c #72BDD7", "_( c #76BFD7", ":( c #79C0D7", "<( c #78BDD7", "[( c #79BDD7", "}( c #80BFD7", "|( c #7DBCD7", "1( c #79BAD7", "2( c #7BBFD7", "3( c #80CAD7", "4( c #7DC9D7", "5( c #76C4D7", "6( c #80CED7", "7( c #86D0D7", "8( c #87CED7", "9( c #86C7D7", "0( c #81BFD7", "a( c #86C2D7", "b( c #7DBDD7", "c( c #7FC3D7", "d( c #7DC5D7", "e( c #70BAD7", "f( c #61ADD1", "g( c #59A5C7", "h( c #5BA4C5", "i( c #64A6C6", "j( c #75AECB", "k( c #8BBDD6", "l( c #A7D0D7", "m( c #7BAABA", "n( c #24647F", "o( c #105982", "p( c #18659D", "q( c #1961A9", "r( c #155DA7", "s( c #0F5A9B", "t( c #0E5593", "u( c #175795", "v( c #144D84", "w( c #093A62", "x( c #093751", "y( c #00182B", "z( c #012437", "A( c #092B44", "B( c #0C2E4A", "C( c #0C304A", "D( c #0B2F45", "E( c #0D3346", "F( c #0D304C", "G( c #0A2F4C", "H( c #0A3347", "I( c #0A2F41", "J( c #102538", "K( c #0A1527", "L( c #020818", "M( c #060E19", "N( c #0C1D25", "O( c #0C2126", "P( c #172A2E", "Q( c #9AA9AE", "R( c #094789", "S( c #769BAB", "T( c #5D8AA1", "U( c #5085A4", "V( c #417FA4", "W( c #377CA6", "X( c #337DAC", "Y( c #3381B2", "Z( c #3485BA", "`( c #3787BC", " _ c #2B72A6", "._ c #2C72A5", "+_ c #347CAC", "@_ c #3B88B6", "#_ c #3C8DB8", "$_ c #3E93BC", "%_ c #3B97C0", "&_ c #3693BE", "*_ c #3292C2", "=_ c #2080B2", "-_ c #3590C7", ";_ c #3185C1", ">_ c #3B89CB", ",_ c #478CD1", "'_ c #5492D7", ")_ c #5796D7", "!_ c #59A1D3", "~_ c #509EC5", "{_ c #539EC5", "]_ c #3C86B3", "^_ c #4991CB", "/_ c #549BD7", "(_ c #57A0D7", "__ c #4F9BD7", ":_ c #55A6D3", "<_ c #55A9CD", "[_ c #55ABCE", "}_ c #56AACF", "|_ c #57A9D7", "1_ c #5BABD7", "2_ c #60AED7", "3_ c #62B4D7", "4_ c #65B3D7", "5_ c #66B3D7", "6_ c #6AB2D7", "7_ c #69B1D7", "8_ c #68B0D6", "9_ c #69B3D7", "0_ c #6AB5D7", "a_ c #6DB8D7", "b_ c #71BDD7", "c_ c #72BCD7", "d_ c #6FB4D7", "e_ c #6EB3D7", "f_ c #75B8D7", "g_ c #7ABDD7", "h_ c #79BCD7", "i_ c #79C2D7", "j_ c #7FCBD7", "k_ c #79C7D7", "l_ c #7ACBD7", "m_ c #7FD0D7", "n_ c #7ECAD7", "o_ c #7CC5D7", "p_ c #82C8D7", "q_ c #8BC3D7", "r_ c #93C9D7", "s_ c #8FCBD7", "t_ c #85C5D7", "u_ c #80C6D7", "v_ c #82CCD7", "w_ c #7CCAD7", "x_ c #73C3D7", "y_ c #6FBFD7", "z_ c #6BB7D7", "A_ c #65ACCC", "B_ c #65A6C4", "C_ c #6FA8C5", "D_ c #80B3CE", "E_ c #92BFD7", "F_ c #A2C6D7", "G_ c #3A6E84", "H_ c #125778", "I_ c #0E5A8B", "J_ c #0F5F9A", "K_ c #1B66AA", "L_ c #115BA2", "M_ c #0E5A98", "N_ c #155696", "O_ c #134B84", "P_ c #0B3C65", "Q_ c #123B57", "R_ c #001425", "S_ c #001A25", "T_ c #0F2C3C", "U_ c #0F2E42", "V_ c #0D3149", "W_ c #09314A", "X_ c #0A324B", "Y_ c #0B304D", "Z_ c #082D48", "`_ c #0C364E", " : c #0D3147", ".: c #122B41", "+: c #0F1E33", "@: c #0B1224", "#: c #0C1421", "$: c #0B1820", "%: c #041316", "&: c #000F0F", "*: c #768081", "=: c #7D97A8", "-: c #6589A1", ";: c #5A8BA9", ">: c #4884A6", ",: c #357DA5", "': c #3280AE", "): c #2379A8", "!: c #2174A6", "~: c #176095", "{: c #1C6198", "]: c #2E75AD", "^: c #327DB4", "/: c #3382BA", "(: c #388DC3", "_: c #348BC0", ":: c #2E8ABD", "<: c #2B86BB", "[: c #2D88BD", "}: c #348AC3", "|: c #388CC8", "1: c #3C8ACC", "2: c #418ACF", "3: c #4B8FD7", "4: c #5398D7", "5: c #4B98CE", "6: c #4596C3", "7: c #52A0CE", "8: c #3E8BB9", "9: c #4F9BCD", "0: c #549DD4", "a: c #5EA7D7", "b: c #57A0D3", "c: c #5BA5D4", "d: c #519CC6", "e: c #59A4CE", "f: c #5AA5CF", "g: c #65AFD7", "h: c #5EA7D4", "i: c #66B0D7", "j: c #62AED7", "k: c #5EAAD7", "l: c #6CB6D7", "m: c #68B2D7", "n: c #64ADD7", "o: c #63ACD7", "p: c #62ABD4", "q: c #63AED6", "r: c #6CB7D7", "s: c #5EA9D1", "t: c #60A9D4", "u: c #72B9D7", "v: c #75BCD7", "w: c #7BC0D7", "x: c #7AC3D7", "y: c #7AC5D7", "z: c #7EC9D7", "A: c #80CBD7", "B: c #7FCAD7", "C: c #83CCD7", "D: c #85C9D7", "E: c #86CAD7", "F: c #86CCD7", "G: c #84CDD7", "H: c #83CED7", "I: c #86D1D7", "J: c #81CAD7", "K: c #6FB4D5", "L: c #6AACCC", "M: c #69AACA", "N: c #6DACCD", "O: c #72ADCB", "P: c #83BACF", "Q: c #88B9CA", "R: c #ACD5D7", "S: c #98B8CD", "T: c #316187", "U: c #246094", "V: c #1C629E", "W: c #035191", "X: c #0F609F", "Y: c #11639D", "Z: c #0A558E", "`: c #145A95", " < c #1A5A9A", ".< c #0F4581", "+< c #0B3565", "@< c #0A2948", "#< c #00121E", "$< c #010F12", "%< c #081A1C", "&< c #112933", "*< c #11354F", "=< c #083457", "-< c #02325A", ";< c #04345C", ">< c #0A3557", ",< c #0C3553", "'< c #073350", ")< c #0A314E", "!< c #0F2E4B", "~< c #021732", "{< c #011025", "]< c #151E2D", "^< c #111A1F", "/< c #020B08", "(< c #080F07", "_< c #646A60", ":< c #809BAC", "<< c #557E94", "[< c #548AA6", "}< c #4385A7", "|< c #3984AB", "1< c #2D82AB", "2< c #2476A5", "3< c #0A5388", "4< c #0E538C", "5< c #2066A1", "6< c #246FA9", "7< c #2472B0", "8< c #2C7CB9", "9< c #297BB7", "0< c #277CB5", "a< c #277EB4", "b< c #2D7FB7", "c< c #3383BE", "d< c #3987C7", "e< c #3E89CC", "f< c #458DD5", "g< c #4A93D7", "h< c #3D8CC4", "i< c #1D6DA0", "j< c #2F7DAE", "k< c #4795C6", "l< c #3D89BB", "m< c #1C6598", "n< c #1E6698", "o< c #529ACC", "p< c #5FA5D7", "q< c #5399CC", "r< c #5BA1D2", "s< c #5298C9", "t< c #5CA2D3", "u< c #5AA0D1", "v< c #5BA3D5", "w< c #5AA3D6", "x< c #66AFD7", "y< c #68AFD7", "z< c #579FD1", "A< c #63ABD7", "B< c #5DA5D5", "C< c #65B0D7", "D< c #69B7D7", "E< c #5AA9D2", "F< c #4D9AC4", "G< c #529DC7", "H< c #62ADD7", "I< c #64ADD6", "J< c #61A8D2", "K< c #6BB0D7", "L< c #76BBD7", "M< c #75BBD7", "N< c #78BED7", "O< c #77C2D7", "P< c #78C3D7", "Q< c #7BC6D7", "R< c #80C9D7", "S< c #83CAD7", "T< c #82C9D7", "U< c #7FC6D7", "V< c #86CDD7", "W< c #88CFD7", "X< c #84CAD7", "Y< c #7CC2D7", "Z< c #73B9D7", "`< c #6EB2D5", " [ c #6CACC7", ".[ c #7AB6CE", "+[ c #81B7CF", "@[ c #90C0D6", "#[ c #B4D5D7", "$[ c #486F8E", "%[ c #285A8B", "&[ c #205C9A", "*[ c #12579A", "=[ c #0D5B9B", "-[ c #10629C", ";[ c #106196", ">[ c #095589", ",[ c #145992", "'[ c #185896", ")[ c #0B417F", "![ c #0A3265", "~[ c #0B2345", "{[ c #030C0B", "][ c #091312", "^[ c #0F232A", "/[ c #0C2F4B", "([ c #04315B", "_[ c #002F60", ":[ c #013463", "<[ c #0A365B", "[[ c #0D3656", "}[ c #062E51", "|[ c #0C2D4C", "1[ c #06203B", "2[ c #07192D", "3[ c #14202E", "4[ c #0F161C", "5[ c #050908", "6[ c #010400", "7[ c #494C41", "8[ c #074587", "9[ c #7CA0B0", "0[ c #59899F", "a[ c #5A96B0", "b[ c #4489A8", "c[ c #408CAE", "d[ c #25739A", "e[ c #064E80", "f[ c #044B83", "g[ c #135994", "h[ c #165E99", "i[ c #155F9E", "j[ c #1E68A7", "k[ c #206CA8", "l[ c #2571AD", "m[ c #2372AB", "n[ c #2271A9", "o[ c #2373A8", "p[ c #2A79B1", "q[ c #337FB9", "r[ c #3884C0", "s[ c #3B87C5", "t[ c #3E8AC8", "u[ c #3E8BC3", "v[ c #1F6CA2", "w[ c #2C79AF", "x[ c #4A97CD", "y[ c #327EB2", "z[ c #1B6499", "A[ c #0B5288", "B[ c #448BC1", "C[ c #1A5F96", "D[ c #165B92", "E[ c #377DB1", "F[ c #579DD1", "G[ c #60A7D7", "H[ c #549BCF", "I[ c #5CA3D7", "J[ c #58A1D6", "K[ c #60A9D7", "L[ c #5EA8D7", "M[ c #61ABD7", "N[ c #64B2D7", "O[ c #68B6D7", "P[ c #60AED5", "Q[ c #519FC6", "R[ c #3B88B2", "S[ c #307DA9", "T[ c #448FB9", "U[ c #6FB8D7", "V[ c #63AAD4", "W[ c #65AAD4", "X[ c #75BED7", "Y[ c #75C0D7", "Z[ c #7CC7D7", "`[ c #7DC6D7", " } c #83C9D7", ".} c #83C7D7", "+} c #7BBAD7", "@} c #72AED0", "#} c #72ADCD", "$} c #67A3BF", "%} c #649DB8", "&} c #78AEC6", "*} c #93C3D7", "=} c #A8D5D7", "-} c #9FC1D7", ";} c #194971", ">} c #225F96", ",} c #185D9E", "'} c #125B9F", ")} c #145FA0", "!} c #16639B", "~} c #0F5B8F", "{} c #0E5589", "]} c #185B92", "^} c #185693", "/} c #093D79", "(} c #082D61", "_} c #061E40", ":} c #000713", "<} c #00090A", "[} c #020D0F", "}} c #061C27", "|} c #062947", "1} c #012D5A", "2} c #002F62", "3} c #033364", "4} c #0C365E", "5} c #0E365A", "6} c #0C335A", "7} c #03294E", "8} c #092B47", "9} c #0A243B", "0} c #0D202F", "a} c #13212C", "b} c #09141A", "c} c #01090C", "d} c #000505", "e} c #282E2A", "f} c #064487", "g} c #93BDCB", "h} c #5C8FA2", "i} c #5895AA", "j} c #4A8DA7", "k} c #3A81A1", "l} c #0E5581", "m} c #044B7F", "n} c #0C518A", "o} c #0C518C", "p} c #0A508E", "q} c #125896", "r} c #185E9C", "s} c #2167A3", "t} c #1F65A0", "u} c #1D669D", "v} c #1E6A9E", "w} c #2470A2", "x} c #2A77AB", "y} c #2D7AB0", "z} c #2F7EB6", "A} c #3281B9", "B} c #3682BC", "C} c #236FA9", "D} c #2F7BB5", "E} c #3E89C3", "F} c #3D85BF", "G} c #468EC8", "H} c #3076B1", "I} c #488EC9", "J} c #1D629D", "K} c #003A75", "L} c #0B5089", "M} c #5198D0", "N} c #539AD2", "O} c #4A91C9", "P} c #5CA5D7", "Q} c #62ABD7", "R} c #549DD2", "S} c #59A2D7", "T} c #5BA4D7", "U} c #559FD0", "V} c #5DA7D7", "W} c #62ACD7", "X} c #63AED7", "Y} c #67B5D7", "Z} c #52A0C7", "`} c #3886AD", " | c #4A97C1", ".| c #3B86B0", "+| c #62ABD6", "@| c #6DB4D7", "#| c #68ADD7", "$| c #72B5D7", "%| c #73B6D7", "&| c #73B8D7", "*| c #70B5D7", "=| c #6DB6D7", "-| c #73BCD7", ";| c #82CBD7", ">| c #80C7D7", ",| c #85CBD7", "'| c #84C8D7", ")| c #80C0D7", "!| c #6DAECE", "~| c #5C9CB8", "{| c #5E9CB5", "]| c #77B1C7", "^| c #77AEC3", "/| c #8DBDD1", "(| c #ABD4D7", "_| c #507B9E", ":| c #286292", "<| c #1F65A1", "[| c #1260A2", "}| c #1A68AA", "|| c #0F5B99", "1| c #175E96", "2| c #0B5185", "3| c #145A8E", "4| c #1C5F94", "5| c #175590", "6| c #063A74", "7| c #062C5D", "8| c #021A3E", "9| c #000411", "0| c #000A0E", "a| c #000B10", "b| c #021826", "c| c #042649", "d| c #032D5D", "e| c #013066", "f| c #053367", "g| c #0B3460", "h| c #0E335D", "i| c #092E5B", "j| c #03264E", "k| c #0A2945", "l| c #092435", "m| c #0A202B", "n| c #112229", "o| c #09161F", "p| c #010B14", "q| c #010A13", "r| c #0C151A", "s| c #9FC5CF", "t| c #5C8D9B", "u| c #538B9A", "v| c #5896AD", "w| c #1C6085", "x| c #0A517F", "y| c #0E5185", "z| c #0D5087", "A| c #0B4B88", "B| c #0E4E8C", "C| c #0F4F8D", "D| c #165693", "E| c #175890", "F| c #175A8F", "G| c #195F92", "H| c #1D6796", "I| c #206D9B", "J| c #23719F", "K| c #2778A7", "L| c #2D7DB0", "M| c #3581BB", "N| c #1963A0", "O| c #2B75B2", "P| c #357CBA", "Q| c #3E85C3", "R| c #3278B6", "S| c #2B6FAC", "T| c #4488C5", "U| c #579BD7", "V| c #115592", "W| c #5399D5", "X| c #559BD6", "Y| c #2A72AC", "Z| c #3880BA", "`| c #4A93CA", " 1 c #55A1D5", ".1 c #54A0D4", "+1 c #529ED2", "@1 c #55A1D3", "#1 c #54A0D1", "$1 c #60ADD7", "%1 c #61AED7", "&1 c #5EABD7", "*1 c #5DAAD4", "=1 c #4492B9", "-1 c #2C7AA1", ";1 c #3C87AF", ">1 c #3A83AC", ",1 c #4992BB", "'1 c #60A7D1", ")1 c #71B6D7", "!1 c #71B9D7", "~1 c #72BAD7", "{1 c #78C1D7", "]1 c #7BC4D7", "^1 c #85CED7", "/1 c #82CAD7", "(1 c #81C6D7", "_1 c #80C3D7", ":1 c #78BBD7", "<1 c #7EC1D7", "[1 c #6AB3D6", "}1 c #559EBF", "|1 c #5198B8", "11 c #68ADCA", "21 c #66A7C3", "31 c #6BA8C4", "41 c #73ABC4", "51 c #80AFC9", "61 c #92BCD5", "71 c #ADD1D7", "81 c #A7C6D7", "91 c #225685", "01 c #2E73AE", "a1 c #1463A6", "b1 c #0B60A3", "c1 c #1768A9", "d1 c #0F5996", "e1 c #15568E", "f1 c #104F84", "g1 c #185B8F", "h1 c #1E6195", "i1 c #16538C", "j1 c #03366F", "k1 c #082C5C", "l1 c #031B3F", "m1 c #000717", "n1 c #06131B", "o1 c #000E18", "p1 c #02182D", "q1 c #05274D", "r1 c #072F62", "s1 c #06336C", "t1 c #09336D", "u1 c #0B3162", "v1 c #0A2E5E", "w1 c #0A295F", "x1 c #082755", "y1 c #0F2D47", "z1 c #06222E", "A1 c #041E1F", "B1 c #12272A", "C1 c #0E1F29", "D1 c #041424", "E1 c #000A20", "F1 c #000618", "G1 c #15508E", "H1 c #B0C8D0", "I1 c #5D888F", "J1 c #6296A4", "K1 c #387592", "L1 c #1D5E86", "M1 c #1A5A86", "N1 c #185888", "O1 c #165389", "P1 c #135089", "Q1 c #0C4982", "R1 c #0E4C85", "S1 c #0F4E83", "T1 c #0E5082", "U1 c #0F5684", "V1 c #145D88", "W1 c #19648E", "X1 c #1C6993", "Y1 c #22719C", "Z1 c #2977A7", "`1 c #307BB5", " 2 c #1B62A2", ".2 c #337ABA", "+2 c #3479BA", "@2 c #084C8D", "#2 c #1A5E9D", "$2 c #3E82C1", "%2 c #296DAC", "&2 c #0C508F", "*2 c #377DBB", "=2 c #448AC8", "-2 c #4991CC", ";2 c #236BA6", ">2 c #0F5792", ",2 c #034B85", "'2 c #2772A9", ")2 c #4A95CC", "!2 c #2D79AD", "~2 c #1B679B", "{2 c #4490C4", "]2 c #61ADD7", "^2 c #519DCF", "/2 c #58A4D5", "(2 c #59A5D6", "_2 c #5CA9D7", ":2 c #58A5D3", "<2 c #5BA8D4", "[2 c #4B98C2", "}2 c #3481AB", "|2 c #3580A8", "12 c #317AA3", "22 c #438DB4", "32 c #63ABD3", "42 c #76BED7", "52 c #77BCD7", "62 c #78BCD7", "72 c #73B7D7", "82 c #6FB7D7", "92 c #74BDD7", "02 c #7AC2D7", "a2 c #76C0D7", "b2 c #7BC5D7", "c2 c #7FC1D7", "d2 c #77B6D7", "e2 c #71ACCC", "f2 c #6FA8C6", "g2 c #75AACA", "h2 c #80B3D2", "i2 c #8CB8D3", "j2 c #B5D1D7", "k2 c #567DA6", "l2 c #246198", "m2 c #1560A1", "n2 c #0B62A7", "o2 c #0962A4", "p2 c #17629C", "q2 c #16548F", "r2 c #1B588F", "s2 c #175A8E", "t2 c #1D5F93", "u2 c #124D85", "v2 c #003169", "w2 c #051F44", "x2 c #000D21", "y2 c #10202D", "z2 c #041525", "A2 c #051D37", "B2 c #072853", "C2 c #093067", "D2 c #0A3470", "E2 c #0A326F", "F2 c #0A2F64", "G2 c #0B2C61", "H2 c #0B2862", "I2 c #0D2959", "J2 c #143048", "K2 c #052228", "L2 c #001A17", "M2 c #0E2626", "N2 c #122533", "O2 c #0D1F37", "P2 c #071635", "Q2 c #04122F", "R2 c #074688", "S2 c #7298A1", "T2 c #5C90A5", "U2 c #35718D", "V2 c #276284", "W2 c #215D82", "X2 c #1C5985", "Y2 c #195786", "Z2 c #104E7F", "`2 c #105080", " 3 c #094D7C", ".3 c #044B77", "+3 c #054C76", "@3 c #0A537C", "#3 c #105B83", "$3 c #166189", "%3 c #1A6791", "&3 c #1F6C9A", "*3 c #1A629C", "=3 c #1C62A0", "-3 c #2F75B3", ";3 c #2A6EAD", ">3 c #2D71B0", ",3 c #0A4B8B", "'3 c #2C6DAD", ")3 c #3F80C0", "!3 c #094D8C", "~3 c #2266A5", "{3 c #4B91CF", "]3 c #4187C5", "^3 c #468EC9", "/3 c #1F67A2", "(3 c #3782BC", "_3 c #246FA8", ":3 c #307BB2", "<3 c #3783B7", "[3 c #0E5B8F", "}3 c #00497D", "|3 c #1D6A9E", "13 c #519ED2", "23 c #53A0D4", "33 c #509ECF", "43 c #52A0D1", "53 c #52A0D0", "63 c #519ECC", "73 c #57A4D0", "83 c #509DC9", "93 c #327FA9", "03 c #317CA6", "a3 c #549FC7", "b3 c #87CCD7", "c3 c #8ACFD7", "d3 c #83C8D7", "e3 c #8CD0D7", "f3 c #8ED2D7", "g3 c #89CDD7", "h3 c #88CCD7", "i3 c #7EC2D7", "j3 c #7ABED7", "k3 c #76BAD7", "l3 c #66ACD0", "m3 c #6EB6D7", "n3 c #6EB7D7", "o3 c #7EC6D7", "p3 c #78C0D7", "q3 c #6DB7D7", "r3 c #64AFD6", "s3 c #6AB9D7", "t3 c #71C3D7", "u3 c #77C6D7", "v3 c #74BFD7", "w3 c #87C8D7", "x3 c #84C6D7", "y3 c #7CC0D7", "z3 c #72B8D7", "A3 c #69AFD1", "B3 c #64A9CA", "C3 c #6FB0CE", "D3 c #76B2CE", "E3 c #ABD5D7", "F3 c #ADCED7", "G3 c #2C5E91", "H3 c #05559A", "I3 c #0C65A7", "J3 c #07619F", "K3 c #175493", "L3 c #225E9A", "M3 c #1D5F91", "N3 c #104980", "O3 c #002C62", "P3 c #082A5A", "Q3 c #051E46", "R3 c #000F28", "S3 c #15273B", "T3 c #091F36", "U3 c #092442", "V3 c #092958", "W3 c #0A2E68", "X3 c #0A3270", "Y3 c #09316F", "Z3 c #0C2C65", "`3 c #082463", " 4 c #0A2457", ".4 c #112D43", "+4 c #042224", "@4 c #00150E", "#4 c #021C19", "$4 c #092030", "%4 c #0F2443", "&4 c #11234B", "*4 c #18284C", "=4 c #BDCDD7", "-4 c #7CA4B0", ";4 c #4A7A8E", ">4 c #2E6278", ",4 c #225A75", "'4 c #1D5878", ")4 c #1A587D", "!4 c #13547C", "~4 c #145980", "{4 c #095179", "]4 c #024C71", "^4 c #004970", "/4 c #044E75", "(4 c #0C557E", "_4 c #115A85", ":4 c #155E8B", "<4 c #175F91", "[4 c #1E639C", "}4 c #1F63A0", "|4 c #2064A1", "14 c #2163A0", "24 c #2A6CA9", "34 c #0C4E8B", "44 c #286AA7", "54 c #2567A4", "64 c #034582", "74 c #2F73B0", "84 c #367AB7", "94 c #347AB6", "04 c #377DB9", "a4 c #18609A", "b4 c #3E86C1", "c4 c #1F6AA3", "d4 c #3C88BC", "e4 c #428FC3", "f4 c #2976AA", "g4 c #4794C8", "h4 c #56A3D7", "i4 c #408DC1", "j4 c #4391C2", "k4 c #4492C3", "l4 c #4995C6", "m4 c #529FCD", "n4 c #4892C1", "o4 c #27719E", "p4 c #3A83B0", "q4 c #88D0D7", "r4 c #8BD1D7", "s4 c #89CFD7", "t4 c #88CED7", "u4 c #8BCFD7", "v4 c #8ACED7", "w4 c #81C5D7", "x4 c #77BBD7", "y4 c #6EB2D7", "z4 c #73BBD7", "A4 c #75BFD7", "B4 c #75C1D7", "C4 c #7ED0D7", "D4 c #79CDD7", "E4 c #7BCBD7", "F4 c #87CFD7", "G4 c #88CBD7", "H4 c #80C1D7", "I4 c #8FCED7", "J4 c #89C8D7", "K4 c #83CDD7", "L4 c #7ECCD7", "M4 c #79C9D7", "N4 c #76C6D7", "O4 c #6DAFD2", "P4 c #6DA8C8", "Q4 c #77A9C4", "R4 c #93BCD2", "S4 c #4A76A3", "T4 c #245F9B", "U4 c #1F65AA", "V4 c #0F5FA4", "W4 c #1068A7", "X4 c #015A92", "Y4 c #1B6CA4", "Z4 c #0B5690", "`4 c #115294", " 5 c #1B5B9B", ".5 c #195C93", "+5 c #1E6092", "@5 c #10477F", "#5 c #00285F", "$5 c #06275A", "%5 c #021B44", "&5 c #000D2C", "*5 c #122742", "=5 c #0C2641", "-5 c #09274B", ";5 c #08295C", ">5 c #092D69", ",5 c #092F6E", "'5 c #0A2E6A", ")5 c #0E2E69", "!5 c #061F61", "~5 c #021C4F", "{5 c #0C273C", "]5 c #022022", "^5 c #001109", "/5 c #00110D", "(5 c #001829", "_5 c #0D2446", ":5 c #0C214E", "<5 c #1C2F59", "[5 c #ACBDD7", "}5 c #87AEB5", "|5 c #446E7A", "15 c #346574", "25 c #276074", "35 c #205E77", "45 c #1B617B", "55 c #125C79", "65 c #075472", "75 c #025170", "85 c #035273", "95 c #095579", "05 c #0A517B", "a5 c #16578D", "b5 c #13558F", "c5 c #1F619B", "d5 c #054680", "e5 c #155690", "f5 c #0E4F89", "g5 c #2B6CA6", "h5 c #064781", "i5 c #13548E", "j5 c #2A6CA6", "k5 c #185A94", "l5 c #00366F", "m5 c #2368A1", "n5 c #165D95", "o5 c #4086C1", "p5 c #165F96", "q5 c #3B84B7", "r5 c #4992C5", "s5 c #438CBF", "t5 c #2F7BAD", "u5 c #2F7BAF", "v5 c #4A96CA", "w5 c #4D9ACE", "x5 c #3A87BB", "y5 c #3A86BA", "z5 c #4793C5", "A5 c #509ACB", "B5 c #3E88B7", "C5 c #236B9B", "D5 c #529BC8", "E5 c #7DC4D7", "F5 c #8BD2D7", "G5 c #8AD1D7", "H5 c #89D0D7", "I5 c #89CED7", "J5 c #7FC5D7", "K5 c #81C7D7", "L5 c #7AC9D7", "M5 c #79C8D7", "N5 c #7AC6D7", "O5 c #87C7D7", "P5 c #88C6D7", "Q5 c #83CFD7", "R5 c #7FCFD7", "S5 c #7DD0D7", "T5 c #81CFD7", "U5 c #8ED1D7", "V5 c #6FB0D7", "W5 c #66AACD", "X5 c #68AACC", "Y5 c #6CADCB", "Z5 c #73AFC9", "`5 c #90C7D7", " 6 c #467798", ".6 c #225B92", "+6 c #2367A8", "@6 c #1964A8", "#6 c #1261A3", "$6 c #10629A", "%6 c #126597", "&6 c #0F5F94", "*6 c #11579D", "=6 c #1C61A6", "-6 c #1E6094", ";6 c #0A3E77", ">6 c #00275E", ",6 c #022255", "'6 c #001845", ")6 c #041C40", "!6 c #102A4B", "~6 c #052345", "{6 c #04254E", "]6 c #0A2B60", "^6 c #0B2D6A", "/6 c #062969", "(6 c #082B6B", "_6 c #0C306C", ":6 c #0D2D68", "<6 c #122B6D", "[6 c #092356", "}6 c #0F2A3F", "|6 c #052325", "16 c #00130B", "26 c #00100E", "36 c #001529", "46 c #0B2347", "56 c #0E2453", "66 c #1D325D", "76 c #93A7C2", "86 c #B2D4D6", "96 c #4C757B", "06 c #2B5D68", "a6 c #2F6A78", "b6 c #226576", "c6 c #165F72", "d6 c #156379", "e6 c #0C5C75", "f6 c #055270", "g6 c #034D70", "h6 c #0B507A", "i6 c #105282", "j6 c #0F4C83", "k6 c #07447D", "l6 c #0F5086", "m6 c #105388", "n6 c #17588E", "o6 c #004076", "p6 c #014278", "q6 c #00346A", "r6 c #115086", "s6 c #003F75", "t6 c #205F95", "u6 c #2C6DA3", "v6 c #2F70A6", "w6 c #2669A0", "x6 c #2B6EA5", "y6 c #0F548B", "z6 c #2B70A7", "A6 c #175E92", "B6 c #3C84B6", "C6 c #367EAE", "D6 c #1B6395", "E6 c #0F598A", "F6 c #367FB2", "G6 c #4692C6", "H6 c #3B87BB", "I6 c #317DB1", "J6 c #3C85BA", "K6 c #2971A3", "L6 c #498FC2", "M6 c #84CBD7", "N6 c #8ACCD7", "O6 c #8FD0D7", "P6 c #80C8D7", "Q6 c #85C7D7", "R6 c #85C6D7", "S6 c #84C4D7", "T6 c #83C3D7", "U6 c #86C8D7", "V6 c #7FC9D7", "W6 c #80CCD7", "X6 c #80CFD7", "Y6 c #85CFD7", "Z6 c #87CAD7", "`6 c #83CBD7", " 7 c #7DC8D7", ".7 c #71BFD7", "+7 c #67ACCD", "@7 c #71AECB", "#7 c #97C1D7", "$7 c #B5D4D7", "%7 c #487997", "&7 c #34719E", "*7 c #2A6EAB", "=7 c #1861A6", "-7 c #1664A6", ";7 c #13619F", ">7 c #146495", ",7 c #176595", "'7 c #126091", ")7 c #0B5793", "!7 c #0D57A0", "~7 c #165EA8", "{7 c #18609B", "]7 c #1D5E94", "^7 c #083C75", "/7 c #002863", "(7 c #09285E", "_7 c #082253", ":7 c #0C2752", "<7 c #143258", "[7 c #072851", "}7 c #042956", "|7 c #092C64", "17 c #0C2E6D", "27 c #072A6A", "37 c #092C6C", "47 c #0A2D67", "57 c #112D6C", "67 c #0E2859", "77 c #153147", "87 c #0A272B", "97 c #00130F", "07 c #000E0F", "a7 c #00162B", "b7 c #0E264A", "c7 c #112854", "d7 c #162C55", "e7 c #8091AB", "f7 c #0D498A", "g7 c #618D8E", "h7 c #2E6367", "i7 c #347078", "j7 c #256974", "k7 c #16606D", "l7 c #105B6E", "m7 c #115B74", "n7 c #175E7E", "o7 c #135680", "p7 c #0B4A7D", "q7 c #0C4781", "r7 c #144F89", "s7 c #0C4B80", "t7 c #094B7D", "u7 c #115085", "v7 c #0D4C81", "w7 c #09487D", "x7 c #00386E", "y7 c #0A477D", "z7 c #064379", "A7 c #114E84", "B7 c #19568C", "C7 c #215E94", "D7 c #25649A", "E7 c #145389", "F7 c #27689E", "G7 c #195C90", "H7 c #3C80AF", "I7 c #357CA8", "J7 c #135A88", "K7 c #024A7A", "L7 c #4088BA", "M7 c #2F78AD", "N7 c #2C75AA", "O7 c #2D76AB", "P7 c #2E75AB", "Q7 c #4487BC", "R7 c #76B8D7", "S7 c #82C1D7", "T7 c #72B0D7", "U7 c #7AC1D7", "V7 c #7EC8D7", "W7 c #8ACDD7", "X7 c #89CBD7", "Y7 c #89CAD7", "Z7 c #82C7D7", "`7 c #8CCBD7", " 8 c #8FCAD7", ".8 c #8DCAD7", "+8 c #84C7D7", "@8 c #80C5D7", "#8 c #7DC7D7", "$8 c #84CED7", "%8 c #86CED7", "&8 c #78B7D7", "*8 c #75B0D7", "=8 c #6EA8CE", "-8 c #69A1C4", ";8 c #6DA2C1", ">8 c #7CB2CE", ",8 c #93C6D7", "'8 c #C7D5D7", ")8 c #4E7E95", "!8 c #38769F", "~8 c #175E94", "{8 c #1D68A9", "]8 c #1564A7", "^8 c #1866A4", "/8 c #17649A", "(8 c #196392", "_8 c #18628F", ":8 c #115D8F", "<8 c #0C5894", "[8 c #0C58A4", "}8 c #135FAB", "|8 c #135D9C", "18 c #13568D", "28 c #00235E", "38 c #082760", "48 c #092459", "58 c #0A2958", "68 c #0C2E5B", "78 c #072D5C", "88 c #022A5D", "98 c #072B65", "08 c #0B2F6B", "a8 c #0B2D6C", "b8 c #0C306E", "c8 c #0C336E", "d8 c #102F68", "e8 c #102C5B", "f8 c #19374F", "g8 c #0C2A34", "h8 c #001214", "i8 c #000A11", "j8 c #00122A", "k8 c #0F2648", "l8 c #192F58", "m8 c #12264B", "n8 c #697990", "o8 c #94BEBD", "p8 c #437576", "q8 c #235D61", "r8 c #2D6C75", "s8 c #206270", "t8 c #185B6E", "u8 c #175A77", "v8 c #16557E", "w8 c #0E4C7D", "x8 c #0D4882", "y8 c #104D86", "z8 c #044676", "A8 c #074679", "B8 c #104F82", "C8 c #135184", "D8 c #0F4D80", "E8 c #114D81", "F8 c #104C80", "G8 c #1E5A8E", "H8 c #1F5B8F", "I8 c #235F95", "J8 c #225E94", "K8 c #104D83", "L8 c #1B588E", "M8 c #1F5E93", "N8 c #216093", "O8 c #2D709B", "P8 c #387DA6", "Q8 c #2A6F99", "R8 c #0D5480", "S8 c #3D83B4", "T8 c #3880B2", "U8 c #22699F", "V8 c #367DB3", "W8 c #13588F", "X8 c #05487F", "Y8 c #66A7D7", "Z8 c #5794CA", "`8 c #3A76AC", " 9 c #64A2D3", ".9 c #79BFD7", "+9 c #8BCBD7", "@9 c #8DCDD7", "#9 c #8ED0D7", "$9 c #8DCFD7", "%9 c #89C4D7", "&9 c #8BC6D7", "*9 c #82C5D7", "=9 c #7ECBD7", "-9 c #7DCAD7", ";9 c #7CC9D7", ">9 c #81C3D7", ",9 c #85C4D7", "'9 c #8AC6D7", ")9 c #8ACAD7", "!9 c #84CFD7", "~9 c #7DCCD7", "{9 c #7CC8D7", "]9 c #88C9D7", "^9 c #86C5D7", "/9 c #7FBED7", "(9 c #73B4D7", "_9 c #64A7D1", ":9 c #5DA2CB", "<9 c #5CA4CC", "[9 c #66A5C6", "}9 c #83B0C7", "|9 c #9ABBCC", "19 c #4E7D91", "29 c #427D9F", "39 c #1D6094", "49 c #15619D", "59 c #1E6DAF", "69 c #1A69A2", "79 c #1A6698", "89 c #10598E", "99 c #0D5997", "09 c #0F5DA7", "a9 c #1563AD", "b9 c #1762A3", "c9 c #145692", "d9 c #023672", "e9 c #012966", "f9 c #0D2B67", "g9 c #0B2860", "h9 c #0D2E61", "i9 c #052F61", "j9 c #00295E", "k9 c #032A63", "l9 c #0C2E6B", "m9 c #0E326E", "n9 c #0E356E", "o9 c #0B3269", "p9 c #0E2F64", "q9 c #0D2C58", "r9 c #173652", "s9 c #082837", "t9 c #000F1A", "u9 c #001129", "v9 c #0C2140", "w9 c #1E3152", "x9 c #132442", "y9 c #58677A", "z9 c #134F8D", "A9 c #B4D5D5", "B9 c #5C8484", "C9 c #2B5B5F", "D9 c #295E66", "E9 c #255D6E", "F9 c #1C5872", "G9 c #195579", "H9 c #175682", "I9 c #125186", "J9 c #0B4A80", "K9 c #125184", "L9 c #0D4D7D", "M9 c #054374", "N9 c #034172", "O9 c #044072", "P9 c #0B4779", "Q9 c #0B4479", "R9 c #0F487D", "S9 c #084176", "T9 c #164F86", "U9 c #124B82", "V9 c #00366D", "W9 c #195587", "X9 c #1B5A85", "Y9 c #1D5E84", "Z9 c #23648C", "`9 c #145781", " 0 c #3276A3", ".0 c #296FA0", "+0 c #266C9F", "@0 c #165C90", "#0 c #03467D", "$0 c #417FB8", "%0 c #629FD7", "&0 c #2A659D", "*0 c #063E77", "=0 c #002760", "-0 c #225E92", ";0 c #65AFD4", ">0 c #91CFD7", ",0 c #91D0D7", "'0 c #8CCED7", ")0 c #86CBD7", "!0 c #85C2D7", "~0 c #88C3D7", "{0 c #88C5D7", "]0 c #7ECED7", "^0 c #7BCAD7", "/0 c #85C3D7", "(0 c #88C4D7", "_0 c #5EA2D1", ":0 c #72AACB", "<0 c #74A3BD", "[0 c #74A2BA", "}0 c #7EABC2", "|0 c #93BDD3", "10 c #B1D5D7", "20 c #A6D1D7", "30 c #3B7382", "40 c #3E7B98", "50 c #236691", "60 c #165E98", "70 c #1A68A6", "80 c #1161A0", "90 c #1D6FA7", "00 c #166699", "a0 c #186694", "b0 c #176490", "c0 c #145E8F", "d0 c #0F5A91", "e0 c #105C9A", "f0 c #125FA5", "g0 c #1461A7", "h0 c #1661A4", "i0 c #105493", "j0 c #043778", "k0 c #062E6C", "l0 c #0D2D6A", "m0 c #0B2965", "n0 c #0D3269", "o0 c #0A356A", "p0 c #033268", "q0 c #002A60", "r0 c #0C2F69", "s0 c #0E3169", "t0 c #0C356B", "u0 c #0A3466", "v0 c #0D3360", "w0 c #0A2D53", "x0 c #11334F", "y0 c #07263B", "z0 c #001427", "A0 c #001025", "B0 c #00142C", "C0 c #0B1F38", "D0 c #172842", "E0 c #102037", "F0 c #495764", "G0 c #739193", "H0 c #4D727A", "I0 c #2B5966", "J0 c #22566C", "K0 c #1C5777", "L0 c #13527B", "M0 c #105284", "N0 c #16598D", "O0 c #155585", "P0 c #155384", "Q0 c #094778", "R0 c #054173", "S0 c #0A4476", "T0 c #043D72", "U0 c #0E457B", "V0 c #043B71", "W0 c #063D73", "X0 c #0F437C", "Y0 c #094078", "Z0 c #1C5089", "`0 c #073E76", " a c #1B5587", ".a c #15537C", "+a c #003B5F", "@a c #024268", "#a c #11527A", "$a c #2A6D98", "%a c #246897", "&a c #25689C", "*a c #16598E", "=a c #0B4E85", "-a c #003A72", ";a c #5B98D1", ">a c #346FA9", ",a c #346CA7", "'a c #5D94CD", ")a c #3266A0", "!a c #225991", "~a c #58A1CC", "{a c #5BA6CE", "]a c #6BB6D7", "^a c #7AC0D7", "/a c #80C4D7", "(a c #90CCD7", "_a c #91CDD7", ":a c #8BCCD7", "b c #003F77", ",b c #205E97", "'b c #4884C0", ")b c #205893", "!b c #3B71AD", "~b c #6FA1D7", "{b c #3E6FAA", "]b c #1D518B", "^b c #69A8D7", "/b c #61A7D7", "(b c #60A8D7", "_b c #579FCF", ":b c #4D95C5", "c c #134C83", ",c c #0C437B", "'c c #124981", ")c c #063A73", "!c c #03386E", "~c c #11447B", "{c c #0A3F71", "]c c #074368", "^c c #0B4A6B", "/c c #0F4E71", "(c c #15537A", "_c c #185581", ":c c #165581", "d c #062249", ",d c #051C45", "'d c #102449", ")d c #112442", "!d c #15263A", "~d c #04111A", "{d c #00090B", "]d c #0A1413", "^d c #BFC8C5", "/d c #B8D0D7", "(d c #668393", "_d c #315265", ":d c #214867", "e c #063C82", ",e c #053478", "'e c #093478", ")e c #093071", "!e c #092F70", "~e c #0B3273", "{e c #0B3474", "]e c #053172", "^e c #04306F", "/e c #062F6D", "(e c #062E6B", "_e c #092D67", ":e c #0A305F", "f c #1D6B9C", ",f c #1D6D92", "'f c #0B5B7C", ")f c #0E5C83", "!f c #125F8B", "~f c #176397", "{f c #1E679A", "]f c #186291", "^f c #135D8E", "/f c #0F588D", "(f c #145C97", "_f c #1A64A5", ":f c #1A62AA", "g c #74B4D7", ",g c #7BB7D7", "'g c #7FBAD7", ")g c #89C2D5", "!g c #74ADBE", "~g c #5E97A8", "{g c #4B8BA4", "]g c #3E80A0", "^g c #3981A9", "/g c #2C78A9", "(g c #004F86", "_g c #1566A5", ":g c #1A6CA4", "h c #5CAAD1", ",h c #73BED7", "'h c #74BBD7", ")h c #77BED7", "!h c #79C3D7", "~h c #5AA2CA", "{h c #579FC7", "]h c #7DBED7", "^h c #7BBDD7", "/h c #71B5D7", "(h c #559ECB", "_h c #4490C2", ":h c #1F70A7", "i c #64B3D7", ",i c #6AB7D7", "'i c #71BCD7", ")i c #65ACD6", "!i c #69B0D7", "~i c #74BCD7", "{i c #73B1D6", "]i c #8FCDD7", "^i c #72C0D7", "/i c #65B5D7", "(i c #489ACA", "_i c #287BAD", ":i c #3588BA", "j c #6BB8D7", ",j c #71B8D7", "'j c #6BB2D7", ")j c #67B0D7", "!j c #559CC8", "~j c #7AB8D7", "{j c #4B87AC", "]j c #619FC4", "^j c #7DBBD7", "/j c #7ABCD7", "(j c #82CED7", "_j c #64B1D7", ":j c #6CB9D7", "k c #64AED1", ",k c #6AB4D7", "'k c #77B9D7", ")k c #66AAD1", "!k c #4F94BD", "~k c #3D84B0", "{k c #28719E", "]k c #186593", "^k c #13608E", "/k c #0E5C8C", "(k c #0F5D8E", "_k c #116196", ":k c #00346D", "l c #75BAD7", ",l c #68B0D7", "'l c #61AAD3", ")l c #3A84B1", "!l c #2A77A5", "~l c #176394", "{l c #0E5A8C", "]l c #0B4E82", "^l c #002D63", "/l c #04295E", "(l c #0C2B61", "_l c #08265A", ":l c #0A285C", "m c #00265A", ",m c #052357", "'m c #061F55", ")m c #071E52", "!m c #081E50", "~m c #091F51", "{m c #091E53", "]m c #072056", "^m c #07215A", "/m c #05225A", "(m c #06235B", "_m c #08255D", ":m c #0B265B", "n c #002154", ",n c #071E50", "'n c #0B1D4F", ")n c #0B1B4C", "!n c #0A1A4B", "~n c #091B4D", "{n c #081D52", "]n c #081F53", "^n c #092054", "/n c #092052", "(n c #091F50", "_n c #081D4A", ":n c #081B45", "o c #0C1F4A", ",o c #091B43", "'o c #06163A", ")o c #041133", "!o c #031030", "~o c #03132D", "{o c #0B1B34", "]o c #0B1C2E", "^o c #04121D", "/o c #030B0D", "(o c #030E0A", "_o c #011111", ":o c #00121A", "p c #0B143D", ",p c #0D163F", "'p c #0B173F", ")p c #0D1A44", "!p c #0F1E47", "~p c #122148", "{p c #112145", "]p c #0C1B3C", "^p c #071530", "/p c #07112C", "(p c #061127", "_p c #010E1F", ":p c #07111A", "

Q c #001B16", ",Q c #00170F", "'Q c #021913", ")Q c #031917", "!Q c #011A1E", "~Q c #031E29", "{Q c #082537", "]Q c #092940", "^Q c #082C46", "/Q c #0D334A", "(Q c #0A3349", "_Q c #072F48", ":Q c #052D47", "R c #152C32", ",R c #14272D", "'R c #0D1F23", ")R c #051419", "!R c #08151D", "~R c #0D2225", "{R c #002B21", "]R c #073D2F", "^R c #0E4034", "/R c #08362B", "(R c #062F27", "_R c #0D352D", ":R c #11362E", "S c #021416", ",S c #04171D", "'S c #081C25", ")S c #0F2532", "!S c #16303F", "~S c #0F2F3E", "{S c #0B2E41", "]S c #092C40", "^S c #072A40", "/S c #052943", "(S c #062945", "_S c #092B4E", ":S c #0E3055", "T c #0F2125", ",T c #092125", "'T c #012325", ")T c #133B3B", "!T c #234B4B", "~T c #1C4444", "{T c #183F3E", "]T c #19403F", "^T c #133C38", "/T c #154039", "(T c #06332C", "_T c #0A3C31", ":T c #084233", "U c #082427", ",U c #072122", "'U c #001313", ")U c #031312", "!U c #0B1A17", "~U c #000705", "{U c #071110", "]U c #010B0A", "^U c #000707", "/U c #08171C", "(U c #0E1D24", "_U c #0E202A", ":U c #0C2732", "V c #406264", ",V c #325559", "'V c #2E5155", ")V c #29484D", "!V c #254246", "~V c #2A4445", "{V c #2A4242", "]V c #203536", "^V c #112629", "/V c #07262B", "(V c #0B2A2F", "_V c #143638", ":V c #1D3F41", "W c #87B2C2", ",W c #8CB7C7", "'W c #7EA8B8", ")W c #799FAA", "!W c #8EAFB4", "~W c #8DABAD", "{W c #9AB6B9", "]W c #829EA1", "^W c #4D666A", "/W c #4F686C", "(W c #80989C", "_W c #98ADB2", ":W c #8DA2A7", "X c #221B09", ",X c #090C03", "'X c #040D0A", ")X c #151B17", "!X c #0F140E", "~X c #0D1009", "{X c #0F1209", "]X c #0B1009", "^X c #0E150E", "/X c #83928D", "(X c #A3B4AA", "_X c #9AAEA2", ":X c #98AEA2", "Y c #03142E", ",Y c #04162E", "'Y c #000B20", ")Y c #001C2E", "!Y c #1D414F", "~Y c #79A5B0", "{Y c #8CBEC7", "]Y c #84BBC0", "^Y c #8BC0C6", "/Y c #8AB4C0", "(Y c #8AAEBC", "_Y c #7094A2", ":Y c #597D8B", "Z c #09120F", ",Z c #0B120B", "'Z c #080D06", ")Z c #0A1006", "!Z c #040E03", "~Z c #061309", "{Z c #04150B", "]Z c #85998E", "^Z c #97A79A", "/Z c #94A595", "(Z c #96AB9C", "_Z c #9BB1A4", ":Z c #97B1A6", "` c #AECCD7", ",` c #B3CCD3", "'` c #7E8186", ")` c #2A2E31", "!` c #050505", "~` c #080607", "{` c #070506", "]` c #020307", "^` c #000106", "/` c #01040B", "(` c #050A10", "_` c #050E13", ":` c #011317", "<` c #05161D", "[` c #071A21", "}` c #071D2B", "|` c #081D2E", "1` c #081F31", "2` c #0C2237", "3` c #12283D", "4` c #0D2436", "5` c #051C2C", "6` c #0A2131", "7` c #102834", "8` c #0D2736", "9` c #06263D", "0` c #092C48", "a` c #0C3048", "b` c #0A2E46", "c` c #0C3046", "d` c #11374E", "e` c #113650", "f` c #043055", "g` c #06365E", "h` c #083B66", "i` c #063F6A", "j` c #05436A", "k` c #07426C", "l` c #0A3E6D", "m` c #093969", "n` c #063666", "o` c #083868", "p` c #0D3D6D", "q` c #114171", "r` c #10406E", "s` c #073765", "t` c #0A3F69", "u` c #0C416B", "v` c #0E456C", "w` c #11486F", "x` c #10476E", "y` c #144263", "z` c #0F2C3E", "A` c #000711", "B` c #03060B", "C` c #110A04", "D` c #9E875D", "E` c #C8C181", "F` c #C8C66F", "G` c #C8BE57", "H` c #C8BC4B", "I` c #C8B945", "J` c #C8AC3E", "K` c #C89B31", "L` c #BB8324", "M` c #A16C1E", "N` c #6D4410", "O` c #563512", "P` c #472F13", "Q` c #281705", "R` c #130A03", "S` c #060503", "T` c #0C0D11", "U` c #0C0D12", "V` c #0A080B", "W` c #100C0B", "X` c #0C0902", "Y` c #0E0B02", "Z` c #070900", "`` c #0B1105", " . c #1C261B", ". . c #94A295", "+ . c #94A291", "@ . c #92A18E", "# . c #94A593", "$ . c #93A897", "% . c #8EA696", "& . c #8FAA9B", "* . c #90AFA0", "= . c #8DAD9E", "- . c #88A899", "; . c #84A495", "> . c #7D9C8C", ", . c #6F8E7C", "' . c #597664", ") . c #405B48", "! . c #344D38", "~ . c #334A38", "{ . c #27392D", "] . c #15251B", "^ . c #04140A", "/ . c #112019", "( . c #0F1E19", "_ . c #000D08", ": . c #02120F", "< . c #061615", "[ . c #0D1F1F", "} . c #0C2021", "| . c #0B2023", "1 . c #071F23", "2 . c #021B20", "3 . c #042024", "4 . c #0C272E", "5 . c #0C2D32", "6 . c #042C2C", "7 . c #012D2C", "8 . c #073130", "9 . c #0F3938", "0 . c #173D3E", "a . c #16393B", "b . c #0A292C", "c . c #001B1F", "d . c #061E22", "e . c #495C60", "f . c #9DB6BA", "g . c #68878C", "h . c #41636D", "i . c #264E5A", "j . c #1D4B5A", "k . c #1C4C60", "l . c #144B60", "m . c #165068", "n . c #06435F", "o . c #0F4E6D", "p . c #044565", "q . c #0B4D6F", "r . c #0A4972", "s . c #0E4F79", "t . c #0F527C", "u . c #0A527A", "v . c #0A5479", "w . c #135D82", "x . c #206A8F", "y . c #2A7298", "z . c #397EA5", "A . c #3479A0", "B . c #4E93BA", "C . c #5A9FC6", "D . c #5CA6C9", "E . c #64B0D2", "F . c #5FAFD0", "G . c #6BBBD7", "H . c #70C1D7", "I . c #367CAF", "J . c #003A74", "K . c #074582", "L . c #134F8B", "M . c #165189", "N . c #0B4875", "O . c #165076", "P . c #1B5271", "Q . c #457893", "R . c #002742", "S . c #001D3C", "T . c #0A2749", "U . c #1D3960", "V . c #244169", "W . c #29496F", "X . c #3E6284", "Y . c #658EAC", "Z . c #81AFC9", "` . c #83B5CC", " .. c #7EB1C6", "... c #8ABBCC", "+.. c #8CBACA", "@.. c #97C1D1", "#.. c #8FB3C1", "$.. c #8BA7B5", "%.. c #928E8F", "&.. c #494546", "*.. c #141011", "=.. c #0E0A0B", "-.. c #070508", ";.. c #05080D", ">.. c #040C0F", ",.. c #020C0D", "'.. c #030F0F", ").. c #051012", "!.. c #041215", "~.. c #04131A", "{.. c #03141C", "].. c #051522", "^.. c #051725", "/.. c #0B1E2C", "(.. c #0F2230", "_.. c #081B29", ":.. c #00131E", "<.. c #051922", "[.. c #16292F", "}.. c #182F37", "|.. c #0E2E3D", "1.. c #0D3044", "2.. c #0A2D40", "3.. c #032737", "4.. c #012535", "5.. c #082B3E", "6.. c #0F3349", "7.. c #0A3150", "8.. c #032E51", "9.. c #07345B", "0.. c #0D3E66", "a.. c #0A446A", "b.. c #09456A", "c.. c #023E63", "d.. c #063966", "e.. c #01315F", "f.. c #053462", "g.. c #123E6B", "h.. c #14406D", "i.. c #0E3F68", "j.. c #0D426A", "k.. c #0F476C", "l.. c #0D476C", "m.. c #124363", "n.. c #133247", "o.. c #000F1F", "p.. c #000917", "q.. c #02070D", "r.. c #0B0803", "s.. c #79663E", "t.. c #C8C082", "u.. c #C8BB69", "v.. c #C8AE4D", "w.. c #C8A63C", "x.. c #C8A237", "y.. c #C89B33", "z.. c #C08E2D", "A.. c #AE7820", "B.. c #94621D", "C.. c #6B4117", "D.. c #5E3C23", "E.. c #513623", "F.. c #2A1409", "G.. c #251313", "H.. c #170B0F", "I.. c #170A14", "J.. c #190C15", "K.. c #1C0D14", "L.. c #1D0D0E", "M.. c #160704", "N.. c #0B0300", "O.. c #130F03", "P.. c #404235", "Q.. c #999F91", "R.. c #96A28E", "S.. c #93A28B", "T.. c #96A892", "U.. c #95A892", "V.. c #8CA48E", "W.. c #8AA690", "X.. c #8FAC96", "Y.. c #8DAD96", "Z.. c #8CAE96", "`.. c #86A890", " +. c #88A891", ".+. c #90B098", "++. c #8EAC92", "@+. c #819E82", "#+. c #769377", "$+. c #789078", "%+. c #798778", "&+. c #838D82", "*+. c #717B72", "=+. c #6A746B", "-+. c #576159", ";+. c #37403B", ">+. c #313C38", ",+. c #2E3837", "'+. c #2F393B", ")+. c #212C30", "!+. c #17242A", "~+. c #18272E", "{+. c #1C2D35", "]+. c #24373E", "^+. c #22343E", "/+. c #102930", "(+. c #012227", "_+. c #002528", ":+. c #002427", "<+. c #05282C", "[+. c #08272C", "}+. c #072428", "|+. c #243D42", "1+. c #6C8184", "2+. c #A0AFB4", "3+. c #9FAAAC", "4+. c #B0B8BB", "5+. c #C6CACD", "6+. c #A0BDC3", "7+. c #5A7C85", "8+. c #436976", "9+. c #305A6A", "0+. c #245164", "a+. c #1D4D63", "b+. c #1D5167", "c+. c #11475F", "d+. c #134C67", "e+. c #0B4A69", "f+. c #0F5171", "g+. c #0F5473", "h+. c #09506E", "i+. c #024B6B", "j+. c #044D6D", "k+. c #0C5274", "l+. c #125679", "m+. c #0C4E71", "n+. c #04446A", "o+. c #25658B", "p+. c #36769C", "q+. c #3C80A7", "r+. c #509ABF", "s+. c #5EAED1", "t+. c #3D7EB4", "u+. c #003577", "v+. c #07387B", "w+. c #174986", "x+. c #12457C", "y+. c #164B77", "z+. c #083E62", "A+. c #447C97", "B+. c #397188", "C+. c #498095", "D+. c #6DA1B6", "E+. c #7DB0CD", "F+. c #89BBD7", "G+. c #91C4D7", "H+. c #92C8D7", "I+. c #8DC1D6", "J+. c #8FC2D5", "K+. c #9AC9D7", "L+. c #8CB6C4", "M+. c #B0D4D7", "N+. c #A29E9D", "O+. c #4F4D4E", "P+. c #1E1E20", "Q+. c #0D0E10", "R+. c #03070A", "S+. c #040A08", "T+. c #010B0C", "U+. c #000B0F", "V+. c #000D13", "W+. c #03111A", "X+. c #071820", "Y+. c #0B1C24", "Z+. c #000C13", "`+. c #000F16", " @. c #06181C", ".@. c #0D1F21", "+@. c #05212C", "@@. c #092936", "#@. c #0F2F3A", "$@. c #11313C", "%@. c #0E2E39", "&@. c #0C2C39", "*@. c #08293A", "=@. c #05283C", "-@. c #0E314D", ";@. c #052C4B", ">@. c #093456", ",@. c #103E62", "'@. c #0A3C5F", ")@. c #083E60", "!@. c #0A4263", "~@. c #063E5F", "{@. c #0B4167", "]@. c #093D65", "^@. c #063760", "/@. c #03325C", "(@. c #03305A", "_@. c #09335D", ":@. c #0B355F", "<@. c #0D3862", "[@. c #0E3B64", "}@. c #0B3D62", "|@. c #0C4065", "1@. c #0D4568", "2@. c #0B4668", "3@. c #104161", "4@. c #18384F", "5@. c #00101F", "6@. c #000710", "7@. c #010300", "8@. c #090300", "9@. c #4F421F", "0@. c #C4B179", "a@. c #C8B167", "b@. c #BD9F49", "c@. c #B08D2F", "d@. c #A67F20", "e@. c #9A7119", "f@. c #906312", "g@. c #82520A", "h@. c #6F4008", "i@. c #4F2306", "j@. c #3E1909", "k@. c #3B1910", "l@. c #2E0F0D", "m@. c #32151A", "n@. c #371B27", "o@. c #331725", "p@. c #3B1D29", "q@. c #351520", "r@. c #301116", "s@. c #290B0B", "t@. c #260A06", "u@. c #1D0900", "v@. c #29190C", "w@. c #6E6556", "x@. c #9C9B89", "y@. c #97A189", "z@. c #92A288", "A@. c #96A88E", "B@. c #95AC90", "C@. c #8EA78A", "D@. c #8BA88C", "E@. c #8DAB8F", "F@. c #89AA8D", "G@. c #8AAD8F", "H@. c #84A787", "I@. c #82A585", "J@. c #85A786", "K@. c #86A887", "L@. c #83A280", "M@. c #7F9E7C", "N@. c #839C7F", "O@. c #ADBAA9", "P@. c #C8D2D7", "Q@. c #A6B7BF", "R@. c #0F282F", "S@. c #06252A", "T@. c #022126", "U@. c #002025", "V@. c #001F24", "W@. c #012025", "X@. c #0A292E", "Y@. c #163236", "Z@. c #324B50", "`@. c #9CBAC4", " #. c #698994", ".#. c #436775", "+#. c #2C5161", "@#. c #1C4354", "##. c #184656", "$#. c #125067", "%#. c #125369", "&#. c #12546A", "*#. c #0E506A", "=#. c #074864", "-#. c #003F5E", ";#. c #00274C", ">#. c #084268", ",#. c #114C74", "'#. c #12517A", ")#. c #22668D", "!#. c #296E97", "~#. c #3B86AD", "{#. c #3989AC", "]#. c #3E8EB3", "^#. c #5BA4D1", "/#. c #68A9D7", "(#. c #386FAF", "_#. c #0B3C7F", ":#. c #00266A", "<#. c #113E7F", "[#. c #16457D", "}#. c #114473", "|#. c #063E63", "1#. c #5F9BB7", "2#. c #88C8D4", "3#. c #8DC4D7", "4#. c #8FC4D6", "5#. c #8EBDCD", "6#. c #95C0D0", "7#. c #A7CDD7", "8#. c #B9BABC", "9#. c #686C6D", "0#. c #25292C", "a#. c #05090A", "b#. c #060805", "c#. c #040903", "d#. c #030804", "e#. c #020B10", "f#. c #051218", "g#. c #08171E", "h#. c #000C11", "i#. c #001010", "j#. c #031718", "k#. c #061F26", "l#. c #05222A", "m#. c #0A272D", "n#. c #0F2C32", "o#. c #102D33", "p#. c #0F2C34", "q#. c #102C37", "r#. c #112E3E", "s#. c #1A3A4F", "t#. c #092B46", "u#. c #0C3958", "v#. c #103F5B", "w#. c #12445F", "x#. c #093C59", "y#. c #083A5B", "z#. c #093B5E", "A#. c #0B3B5F", "B#. c #0B395D", "C#. c #093359", "D#. c #093057", "E#. c #082E55", "F#. c #082E53", "G#. c #0A3057", "H#. c #0B3357", "I#. c #0B3659", "J#. c #0B395B", "K#. c #0C3E5F", "L#. c #0E4362", "M#. c #0D4463", "N#. c #0F415C", "O#. c #1F4258", "P#. c #001120", "Q#. c #010A09", "R#. c #0B0C00", "S#. c #272003", "T#. c #908454", "U#. c #B4A264", "V#. c #A79148", "W#. c #997E31", "X#. c #8A6A1D", "Y#. c #78560F", "Z#. c #6E4809", "`#. c #673E08", " $. c #593209", ".$. c #4C2812", "+$. c #2F0E05", "@$. c #2A0B06", "#$. c #321414", "$$. c #2B0D15", "%$. c #3A1C28", "&$. c #31111E", "*$. c #361621", "=$. c #3C1B22", "-$. c #361619", ";$. c #321311", ">$. c #331811", ",$. c #321C0F", "'$. c #3E2E1E", ")$. c #948977", "!$. c #A4A28D", "~$. c #98A58B", "{$. c #90A488", "]$. c #93A78B", "^$. c #90A98B", "/$. c #89A485", "($. c #84A280", "_$. c #80A27F", ":$. c #7A9E7A", "<$. c #7DA17D", "[$. c #82A682", "}$. c #85A985", "|$. c #82A680", "1$. c #7EA07B", "2$. c #82A27D", "3$. c #87A082", "4$. c #B0BDAC", "5$. c #21343B", "6$. c #0F262C", "7$. c #061F24", "8$. c #0C252A", "9$. c #0C282C", "0$. c #0A262A", "a$. c #122E32", "b$. c #223B40", "c$. c #3A5256", "d$. c #A6BDC3", "e$. c #667D85", "f$. c #34505B", "g$. c #214955", "h$. c #194957", "i$. c #1C4D5C", "j$. c #1D5061", "k$. c #174F60", "l$. c #164D61", "m$. c #154B63", "n$. c #0F4561", "o$. c #093E5D", "p$. c #002C4E", "q$. c #00365C", "r$. c #0E486E", "s$. c #003D63", "t$. c #004168", "u$. c #145C84", "v$. c #145F86", "w$. c #267699", "x$. c #247499", "y$. c #357EA9", "z$. c #4A8CC0", "A$. c #5991CC", "B$. c #3467A6", "C$. c #001D5D", "D$. c #002B66", "E$. c #073A71", "F$. c #0D4371", "G$. c #043E63", "H$. c #518EAA", "I$. c #85C8D1", "J$. c #8ACBD1", "K$. c #88C5CA", "L$. c #85BEC5", "M$. c #8BBDC4", "N$. c #9ECBD1", "O$. c #BFD5D7", "P$. c #83847F", "Q$. c #30312B", "R$. c #0F100B", "S$. c #000100", "T$. c #060A0B", "U$. c #04090C", "V$. c #051016", "W$. c #031016", "X$. c #031018", "Y$. c #020F15", "Z$. c #001115", "`$. c #071B22", " %. c #021921", ".%. c #041B21", "+%. c #0B2325", "@%. c #081F25", "#%. c #0C242E", "$%. c #112E40", "%%. c #143348", "&%. c #0E3147", "*%. c #0F334B", "=%. c #153E54", "-%. c #164056", ";%. c #103D54", ">%. c #033250", ",%. c #0F3C5B", "'%. c #093454", ")%. c #0D3455", "!%. c #15395B", "~%. c #05274A", "{%. c #113454", "]%. c #022B49", "^%. c #0D3A57", "/%. c #0E405B", "(%. c #16445C", "_%. c #193C52", ":%. c #122D40", "<%. c #001222", "[%. c #000A0C", "}%. c #000500", "|%. c #181800", "1%. c #48421E", "2%. c #A29769", "3%. c #A1925B", "4%. c #8E7B41", "5%. c #6B541E", "6%. c #4F3405", "7%. c #462A02", "8%. c #4B2C0D", "9%. c #4D3119", "0%. c #240E00", "a%. c #1C0A00", "b%. c #1E0D06", "c%. c #271513", "d%. c #281517", "e%. c #230E15", "f%. c #260F17", "g%. c #2E171D", "h%. c #371E21", "i%. c #2D1513", "j%. c #2D1912", "k%. c #2E1E11", "l%. c #261B09", "m%. c #645F49", "n%. c #9A9A82", "o%. c #999F85", "p%. c #93A386", "q%. c #8CA585", "r%. c #8CAA88", "s%. c #89A886", "t%. c #83A580", "u%. c #7DA17B", "v%. c #7BA17A", "w%. c #7DA37C", "x%. c #82A881", "y%. c #7CA27B", "z%. c #7AA077", "A%. c #83A87F", "B%. c #81A67D", "C%. c #7C9F77", "D%. c #839E7F", "E%. c #18252B", "F%. c #1A2930", "G%. c #15262D", "H%. c #0C1D24", "I%. c #0E2127", "J%. c #2C4146", "K%. c #62777A", "L%. c #8FA2A6", "M%. c #BBD2D7", "N%. c #809DA5", "O%. c #41626B", "P%. c #1E434C", "Q%. c #18404C", "R%. c #1F4959", "S%. c #1D485B", "T%. c #1A4862", "U%. c #02314F", "V%. c #07395A", "W%. c #0C4467", "X%. c #104F72", "Y%. c #267095", "Z%. c #3C88AC", "`%. c #58A4C6", " &. c #60ACCE", ".&. c #61A9D1", "+&. c #599CC9", "@&. c #5D99CD", "#&. c #649DD4", "$&. c #3C73A9", "%&. c #00305F", "&&. c #064068", "*&. c #0B4666", "=&. c #28617C", "-&. c #8EC7D7", ";&. c #86BECB", ">&. c #94CAD4", ",&. c #86B9BD", "'&. c #A2CED1", ")&. c #929491", "!&. c #010302", "~&. c #030B0E", "{&. c #081116", "]&. c #071218", "^&. c #06131C", "/&. c #020F18", "(&. c #010F1A", "_&. c #00141F", ":&. c #001117", "<&. c #081C1D", "[&. c #132527", "}&. c #0E2223", "|&. c #02151B", "1&. c #0B1F28", "2&. c #0D2330", "3&. c #081F2F", "4&. c #0A2536", "5&. c #173446", "6&. c #143345", "7&. c #0A2B3A", "8&. c #0C3141", "9&. c #073044", "0&. c #0C314B", "a&. c #092D47", "b&. c #0B2D48", "c&. c #12314D", "d&. c #13314D", "e&. c #0F2D49", "f&. c #0A2844", "g&. c #112F4B", "h&. c #082A43", "i&. c #03273F", "j&. c #0A3047", "k&. c #0D364C", "l&. c #0D374D", "m&. c #143D51", "n&. c #193A4D", "o&. c #153242", "p&. c #011B28", "q&. c #000E17", "r&. c #000F12", "s&. c #000701", "t&. c #000300", "u&. c #141400", "v&. c #524E2B", "w&. c #514922", "x&. c #463A14", "y&. c #352704", "z&. c #2C1B00", "A&. c #2B1903", "B&. c #2B1508", "C&. c #241208", "D&. c #0A0300", "E&. c #0F0504", "F&. c #120809", "G&. c #15090B", "H&. c #180A0A", "I&. c #150704", "J&. c #251B12", "K&. c #1F170A", "L&. c #211B0B", "M&. c #3E402A", "N&. c #858B71", "O&. c #9DA78C", "P&. c #94A386", "Q&. c #91A989", "R&. c #8CA788", "S&. c #87A485", "T&. c #85A482", "U&. c #82A481", "V&. c #80A47E", "W&. c #81A77E", "X&. c #82A87F", "Y&. c #80A67D", "Z&. c #82A77E", "`&. c #7EA27C", " *. c #769873", ".*. c #789A75", "+*. c #83A37E", "@*. c #8BA389", "#*. c #323A3D", "$*. c #4E575C", "%*. c #80898E", "&*. c #B6C1C5", "**. c #A5B9C2", "=*. c #67828D", "-*. c #3A5765", ";*. c #1B3C4D", ">*. c #1A445C", ",*. c #22516B", "'*. c #457D98", ")*. c #5A9AB6", "!*. c #79C6D7", "~*. c #80CDD7", "{*. c #79BBD7", "]*. c #72B3D7", "^*. c #6BACD2", "/*. c #63A5C7", "(*. c #3E7D9C", "_*. c #0B445F", ":*. c #164A60", "<*. c #75A0B1", "[*. c #A6CAD7", "}*. c #494A4C", "|*. c #0E1317", "1*. c #00050B", "2*. c #101922", "3*. c #0E1822", "4*. c #0C1826", "5*. c #0D1929", "6*. c #0A1728", "7*. c #081526", "8*. c #071425", "9*. c #061326", "0*. c #041326", "a*. c #000B1F", "b*. c #000F21", "c*. c #021422", "d*. c #02131B", "e*. c #000E0E", "f*. c #031111", "g*. c #091717", "h*. c #011013", "i*. c #0C1B20", "j*. c #14252D", "k*. c #0C2029", "l*. c #031924", "m*. c #0D252F", "n*. c #142F38", "o*. c #0D2934", "p*. c #072736", "q*. c #0B2C3D", "r*. c #133244", "s*. c #143143", "t*. c #0E293C", "u*. c #0C2539", "v*. c #0A2337", "w*. c #0B2639", "x*. c #042133", "y*. c #0A2B3C", "z*. c #123241", "A*. c #17333F", "B*. c #07222D", "C*. c #000F0C", "D*. c #0B0D00", "E*. c #0E0C00", "F*. c #0D0800", "G*. c #0D0500", "H*. c #100702", "I*. c #0E0403", "J*. c #050000", "K*. c #040500", "L*. c #090E07", "M*. c #10130C", "N*. c #0D0E09", "O*. c #090804", "P*. c #0A0603", "Q*. c #070400", "R*. c #0B0D02", "S*. c #090D00", "T*. c #343D2A", "U*. c #67755E", "V*. c #91A389", "W*. c #91A589", "X*. c #8BA486", "Y*. c #8FAC8E", "Z*. c #8EAD8E", "`*. c #8DAE8F", " =. c #8FB190", ".=. c #8CB08C", "+=. c #87AB85", "@=. c #84A882", "#=. c #83A781", "$=. c #7FA37D", "%=. c #7C9E79", "&=. c #87A986", "*=. c #8DAC8C", "==. c #789777", "-=. c #8CA98B", ";=. c #C8D5D0", ">=. c #93AFBD", ",=. c #3C5D6E", "'=. c #4E7789", ")=. c #7AAABE", "!=. c #7EB7CB", "~=. c #7AC3D4", "{=. c #71B8CC", "]=. c #7DB9D1", "^=. c #85BDD6", "/=. c #6FA8C3", "(=. c #639FB9", "_=. c #64A1BD", ":=. c #4E90AA", "<=. c #377A94", "[=. c #398096", "}=. c #1B5F74", "|=. c #1B596E", "1=. c #043B4F", "2=. c #154353", "3=. c #587988", "4=. c #979B9E", "5=. c #0A0F15", "6=. c #08111A", "7=. c #0B1521", "8=. c #0E1A2A", "9=. c #0E1B2E", "0=. c #0F1B31", "a=. c #0D1C33", "b=. c #0A1833", "c=. c #091732", "d=. c #081734", "e=. c #0C1B3A", "f=. c #071633", "g=. c #0C1C2B", "h=. c #07130F", "i=. c #0C1615", "j=. c #020E0E", "k=. c #020D11", "l=. c #08151B", "m=. c #06151C", "n=. c #011923", "o=. c #041C28", "p=. c #001521", "q=. c #0B232F", "r=. c #0E2632", "s=. c #051B28", "t=. c #0E2431", "u=. c #081E2B", "v=. c #0A202D", "w=. c #031B27", "x=. c #051D29", "y=. c #09212D", "z=. c #0D262D", "A=. c #00131A", "B=. c #000C10", "C=. c #020901", "D=. c #050600", "E=. c #040402", "F=. c #08070D", "G=. c #000302", "H=. c #000702", "I=. c #040601", "J=. c #080A05", "K=. c #091008", "L=. c #000400", "M=. c #1A2819", "N=. c #697C69", "O=. c #7F9580", "P=. c #88A088", "Q=. c #88A287", "R=. c #86A387", "S=. c #8BAC91", "T=. c #87A98E", "U=. c #84A789", "V=. c #83A685", "W=. c #83A783", "X=. c #88AA87", "Y=. c #8CAE8B", "Z=. c #90B28F", "`=. c #8BAA88", " -. c #8AA788", ".-. c #839D80", "+-. c #7E987D", "@-. c #A2BAA2", "#-. c #C8D5D4", "$-. c #819DA9", "%-. c #5E848F", "&-. c #77A6B0", "*-. c #77ADB7", "=-. c #7BB7BF", "--. c #749FB0", ";-. c #466C81", ">-. c #113A4C", ",-. c #002838", "'-. c #003341", ")-. c #144C59", "!-. c #00343F", "~-. c #003842", "{-. c #003F48", "]-. c #06404B", "^-. c #1B4B55", "/-. c #173D46", "(-. c #405862", "_-. c #141B25", ":-. c #121C28", "<-. c #0A1832", "[-. c #0A1936", "}-. c #0A193A", "|-. c #09173A", "1-. c #08183C", "2-. c #09183F", "3-. c #071941", "4-. c #051642", "5-. c #0A1A3B", "6-. c #0D1B28", "7-. c #0D1B1E", "8-. c #07120C", "9-. c #060F0A", "0-. c #050E0D", "a-. c #040E10", "b-. c #00060C", "c-. c #000D11", "d-. c #00090D", "e-. c #001216", "f-. c #011418", "g-. c #000E12", "h-. c #001319", "i-. c #011219", "j-. c #07161D", "k-. c #01161B", "l-. c #051D21", "m-. c #091E23", "n-. c #07191D", "o-. c #031215", "p-. c #000C0C", "q-. c #040D08", "r-. c #040B04", "s-. c #050B07", "t-. c #020806", "u-. c #000609", "v-. c #00080F", "w-. c #000907", "x-. c #070D09", "y-. c #030905", "z-. c #16251E", "A-. c #566A5F", "B-. c #8BA396", "C-. c #829D8E", "D-. c #85A08F", "E-. c #89A491", "F-. c #87A48E", "G-. c #85A78F", "H-. c #87A991", "I-. c #8BAD94", "J-. c #8FB196", "K-. c #90B194", "L-. c #8EAF90", "M-. c #90AF90", "N-. c #94B192", "O-. c #829F81", "P-. c #99B396", "Q-. c #92A98F", "R-. c #C3D4C2", "S-. c #B2C9CF", "T-. c #8BAAAD", "U-. c #9DC3C6", "V-. c #90BCBD", "W-. c #7BA2A7", "X-. c #6B8592", "Y-. c #3F5465", "Z-. c #354F5C", "`-. c #2C4A54", " ;. c #00181E", ".;. c #184447", "+;. c #0D3D3F", "@;. c #053839", "#;. c #0F4545", "$;. c #043637", "%;. c #0C3839", "&;. c #204244", "*;. c #34494C", "=;. c #464E59", "-;. c #030F1F", ";;. c #051127", ">;. c #0A1938", ",;. c #0A1A3C", "';. c #081944", ");. c #0A1C4E", "!;. c #15265C", "~;. c #0E1F53", "{;. c #10214C", "];. c #162745", "^;. c #0D1D2D", "/;. c #202B25", "(;. c #0E180F", "_;. c #060C0A", ":;. c #000104", "<;. c #0F171A", "[;. c #000709", "};. c #000506", "|;. c #021010", "1;. c #000D0D", "2;. c #000B0A", "3;. c #000E0D", "4;. c #000F0E", "5;. c #030E10", "6;. c #000B0D", "7;. c #000D0E", "8;. c #020B0A", "9;. c #00070D", "0;. c #000C0A", "a;. c #030F0B", "b;. c #0E1D18", "c;. c #324541", "d;. c #627B75", "e;. c #7B968F", "f;. c #83A29A", "g;. c #83A398", "h;. c #87A79A", "i;. c #7F9F90", "j;. c #8AAB9A", "k;. c #81A490", "l;. c #88AA92", "m;. c #8DAD95", "n;. c #8DAE93", "o;. c #8CAA8E", "p;. c #8DAA8E", "q;. c #92AC91", "r;. c #9DB59D", "s;. c #9FB29C", "t;. c #BECFBC", "u;. c #B6C3C9", "v;. c #112325", "w;. c #18312E", "x;. c #1B3834", "y;. c #11342E", "z;. c #082F2A", "A;. c #1D443F", "B;. c #1B3F3B", "C;. c #32514C", "D;. c #4D6360", "E;. c #949DAC", "F;. c #121F32", "G;. c #111F39", "H;. c #0E1D3C", "I;. c #0D1D41", "J;. c #0B1D45", "K;. c #091B49", "L;. c #081A4C", "M;. c #0A1B4F", "N;. c #0C1D55", "O;. c #061A59", "P;. c #0D215E", "Q;. c #0F2153", "R;. c #001034", "S;. c #000B22", "T;. c #2D3E46", "U;. c #9EACAC", "V;. c #929C93", "W;. c #2D342C", "X;. c #080D09", "Y;. c #030708", "Z;. c #000508", "`;. c #070C10", " >. c #080A09", ".>. c #10120F", "+>. c #050A06", "@>. c #080E0A", "#>. c #020B06", "$>. c #08150E", "%>. c #05140D", "&>. c #000D06", "*>. c #05100C", "=>. c #0C1512", "->. c #080808", ";>. c #010504", ">>. c #01100D", ",>. c #041212", "'>. c #020C0B", ")>. c #040D0C", "!>. c #030D0C", "~>. c #000B09", "{>. c #000C0B", "]>. c #000E0C", "^>. c #02171A", "/>. c #001213", "(>. c #00100C", "_>. c #192C26", ":>. c #405550", "<>. c #5A736D", "[>. c #7C9994", "}>. c #8AADA7", "|>. c #7CA09C", "1>. c #77A098", "2>. c #7DA69E", "3>. c #83ADA3", "4>. c #78A095", "5>. c #84AA9D", "6>. c #89AB9B", "7>. c #86A796", "8>. c #83A290", "9>. c #82A28D", "0>. c #88A58F", "a>. c #94B099", "b>. c #A8C0AA", "c>. c #B7CDB6", "d>. c #5D6363", "e>. c #3E4945", "f>. c #4D5C57", "g>. c #7D908A", "h>. c #8CA39D", "i>. c #AEC7C1", "j>. c #243141", "k>. c #16253A", "l>. c #0E1F3B", "m>. c #0C1F40", "n>. c #081E45", "o>. c #051C48", "p>. c #031B4B", "q>. c #041B4F", "r>. c #071D56", "s>. c #0A1F56", "t>. c #0A1B51", "u>. c #132152", "v>. c #07143E", "w>. c #0E1C39", "x>. c #626F80", "y>. c #6D726C", "z>. c #020703", "A>. c #0A0E0F", "B>. c #0F1012", "C>. c #6B6B69", "D>. c #8F908B", "E>. c #5D5F5C", "F>. c #292E28", "G>. c #101612", "H>. c #1D271F", "I>. c #424D47", "J>. c #212C24", "K>. c #040F09", "L>. c #0F1813", "M>. c #171D19", "N>. c #0D0F0C", "O>. c #080806", "P>. c #0A0A08", "Q>. c #000603", "R>. c #273130", "S>. c #323C3B", "T>. c #2F3938", "U>. c #313A39", "V>. c #384140", "W>. c #394241", "X>. c #444D4C", "Y>. c #46504F", "Z>. c #45514F", "`>. c #3D4947", " ,. c #31403D", ".,. c #2D3D3A", "+,. c #374744", "@,. c #415452", "#,. c #516566", "$,. c #4B5E62", "%,. c #415355", "&,. c #405252", "*,. c #5A6A69", "=,. c #7A8D89", "-,. c #8CA19C", ";,. c #8BA19E", ">,. c #819B98", ",,. c #84A39E", "',. c #84A4A1", "),. c #83A6A2", "!,. c #779A94", "~,. c #88ABA5", "{,. c #89ACA5", "],. c #82A199", "^,. c #9BB7AB", "/,. c #A7BFB2", "(,. c #B7CFC1", "_,. c #A0AAB3", ":,. c #3F4F5C", "<,. c #445768", "[,. c #2E475D", "},. c #17324F", "|,. c #072750", "1,. c #001D4A", "2,. c #062858", "3,. c #011D45", "4,. c #0D1933", "5,. c #080E1E", "6,. c #414453", "7,. c #B3B7C2", "8,. c #C8CCCB", "9,. c #3A3A3A", "0,. c #070709", "a,. c #131514", "b,. c #B2BBB8", "c,. c #8D9691", "d,. c #58615E", "e,. c #353E3B", "f,. c #383E3C", "g,. c #616765", "h,. c #2E3231", "i,. c #111514", "j,. c #262C2A", "k,. c #424B48", "l,. c #C8D1CE", "m,. c #C6CFCC", "n,. c #C5D0CC", "o,. c #C7D2CE", "p,. c #C8D3D2", "q,. c #C8D3D4", "r,. c #C8D4D2", "s,. c #C5D1D1", "t,. c #BBCDD7", "u,. c #869DAB", "v,. c #557085", "w,. c #54728C", "x,. c #6281A0", "y,. c #587A9F", "z,. c #375A82", "A,. c #15304E", "B,. c #111924", "C,. c #7C7C7C", "D,. c #949494", "E,. c #393939", "F,. c #858786", "G,. c #C5CBC9", "H,. c #B8BEBC", "I,. c #B2B8B6", "J,. c #BFC5C3", "K,. c #9EB4CC", "L,. c #6F87A3", "M,. c #47607E", "N,. c #45576F", "O,. c #C1C8D0", ". + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "4 5 6 7 8 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 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "y z A B C D E F G H I J K L M N O P Q R S T U V W s X Y Z ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", ".. +. @. B #. $. %. &. *. =. -. ;. >. ,. '. ). !. ~. {. ]. ^. /. (. _. :. <. [. }. |. 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "3. 4. 5. 6. 7. 8. 9. 0. a. b. c. d. e. f. g. h. ! i. j. k. l. / m. n. o. p. q. r. s. t. u. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "v. . 5 w. # x. % & * = c ; y. z. ' ) A. B. { ] ^ C. D. _ q E. [ F. | v 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "G. 4 H. 6 7 8 I. 0 a b H d e K g J. i j P K. L. M. o N. q r s t u O. w x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "P. y z Q. B C D R. S. T. U. I J V. L W. N O X. Q R S Y. U V W <. X Y |. ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "Z. `. +. + .+ #. ++ 9. &. *. =. @+ d. >. ,. #+ $+ !. %+ {. ]. ^. /. &+ _. *+ =+ [. }. -+ 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", ";+ v. >+ 5. @ 7. $ 9. 0. * b. c. ,+ e. f. ' h. ! i. '+ )+ l. / ( n. o. p. q. } s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "!+ ~+ {+ 5 w. ]+ x. % & a = c ^+ y. z. ' ) /+ (+ { l ^ _+ D. _ q E. [ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i d <+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 [+ i }+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 [+ {+ }+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 <+ i }+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "|+ G. 4 z 6 7 C I. 0 1+ b H 2+ e K g M 9 3+ 3+ 3+ 3+ 3+ 3+ 3+ 4+ 5+ s X 6+ O. 7+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ 3+ 3+ 3 3 3 3 3 3 3 3 d {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 d }+ 3 3 3 3 3 3 3 <+ {+ 3+ 3+ {+ <+ 3 3 3 3 3 3 3 3 3 8+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 [+ }+ 8+ 3+ 3+ {+ <+ {+ d 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 9+ 3+ 3+ 8+ d 3 3 8+ 3+ 3+ }+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 {+ 3+ 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "0+ P. a+ b+ Q. B #. D R. S. T. U. I J >. c+ W. d+ e+ 3+ 3+ 3+ 3+ f+ g+ h+ W <. i+ j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 [+ d 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i {+ 3+ 3+ 3+ 3 3 3 3 3 3 3 3 d 8+ 3+ 3+ 3+ 8+ {+ {+ {+ 9+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i }+ 8+ 3+ {+ 3 3 3 3 3 3 i 3+ 8+ i d 3+ 3+ i 3 3 3 3 3 3 3 d 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 <+ 3+ 3+ d i i 9+ 3+ 3+ {+ 3 3 3 3 3 i [+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ {+ }+ 3+ 3+ <+ 3 3+ 3+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 <+ {+ 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3 3 <+ <+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "l+ Z. `. 4. + 6. #. ++ 9. m+ *. n+ @+ d. o+ ,. #+ p+ q+ r+ 3+ 3+ 3+ ~. &+ n. *+ s+ [. }. s. t+ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 [+ 3+ 3+ 3+ {+ 3 3 3 3 d 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 {+ 9+ 3+ 3+ {+ 3 3 3 3 3 [+ 3+ 3+ d 3 3 }+ 3+ 8+ 3 3 3 3 3 3 [+ 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 9+ 3+ {+ 3 3 3 3 {+ 3+ {+ 3 3 3 3 i 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 9+ 3+ 3+ i <+ 3+ 3+ <+ 3 i 3+ 8+ [+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3 3 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "v+ ;+ v. >+ 5. @ 7. $ % 0. * = - ,+ e. , ' h. ! w+ 3+ 3+ 3+ / ( x+ o. < q. } y+ t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ {+ 3 3 3 3 3 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 3 }+ 3+ 3+ 3 3 3 i 3+ 3+ d 3 3 3 3 3 }+ 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ <+ 3 3 3 3 3+ {+ 3 3 3 3 }+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 <+ <+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3 <+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "z+ !+ A+ {+ 5 6 ]+ x. 9 & a = c d y. f B+ ) i C+ 3+ 3+ 3+ n o _ q r D+ :+ | v w 3 3 i i i [+ 3 3 3 3 3 3 3 3 <+ i i <+ 3 3 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 <+ i i [+ 3 3 3 3 3 3 3 [+ i i <+ 3 3 3 3 3 3 [+ }+ {+ }+ <+ i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ {+ 3 3 <+ d 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 3 3+ 3+ 8+ 3 3 3 [+ 3+ 3+ {+ 3 3 3 3 <+ 3+ 8+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ 3+ 9+ <+ 3 3 3 3 3 3 [+ }+ 3+ 3+ i 3 3 3 3 3 3 <+ i i i 3 3 3 3 3 3 3 3 3 [+ 3 [+ i [+ 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 3 3 <+ <+ 3 3 3 3 3 i {+ {+ {+ i 3 d {+ [+ 3 i 3+ 3+ 3+ 3 3 <+ i <+ 3 3 3 3 3 d 8+ 3+ {+ 3 3 3 3 3 3 3 <+ i i [+ 3 3 3 3 3 3 3 3 [+ 3 <+ i 3 3 3 3 3 3 3 3 3 3 3 ", "E+ |+ F+ 4 z A G+ C I. E 1+ H+ H I e K L M N C+ 3+ 3+ 3+ M. T N. 4+ I+ s X 6+ J+ K+ }+ 3+ 3+ 3+ 3+ 3+ 9+ <+ 3 3 3 3 i 8+ 3+ 3+ 3+ 3+ 8+ i 3 3 3 3+ 3+ 3+ i 3 {+ 3+ 3+ 3+ 3+ {+ 3 3 3 i 8+ 3+ 3+ 3+ 3+ 9+ [+ 3 3 3 [+ 9+ 3+ 3+ 3+ 3+ 8+ i 3 3 3 i 3+ 3+ 3+ 3+ 3+ 8+ 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ {+ 3 3 {+ {+ 3 3 3 {+ {+ {+ {+ {+ {+ {+ {+ {+ {+ 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 <+ 3+ 3+ {+ 3 3 3 3 3+ 3+ 3+ 3 3 3 3 9+ }+ {+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 }+ 3+ 3+ 3+ 3+ 3+ 8+ d 3 3 3 i 3+ 3+ 3+ 3+ 3+ 3+ i 3 3 }+ 3+ 3+ 3+ 3+ 3+ 3+ i 3 3 3 d 9+ 3+ 3+ 3+ d 3+ 3+ 3+ [+ {+ 3+ 3+ 3+ 3+ 3+ 3+ i 3 3 3+ 3+ 3+ 3+ {+ 3 3 3 [+ 8+ 3+ 8+ {+ 3+ 3+ 3+ 3+ 3+ {+ 3 i 3+ 3+ 3+ <+ 8+ 3+ 3+ 3+ 8+ [+ 3 3 3+ 3+ 3+ 3+ 3+ 3+ {+ 3 3 3 i 8+ 3+ 3+ 3+ 3+ 9+ [+ 3 3 {+ 8+ 3+ 3+ 9+ {+ 3+ 3+ 9+ 3 3 3 3 3 3 3 3 3 3 ", "L+ 0+ Z. a+ M+ Q. B #. N+ O+ &. T. =. P+ Q+ >. c+ W. ). R+ 3+ 3+ 3+ ^. S+ (. h+ W <. T+ j+ |. a+ 3+ 3+ {+ 3 [+ 8+ 3+ 3+ i 3 3 i 3+ 3+ 8+ [+ 3 {+ 3+ 8+ 3 3 3 3+ 3+ 3+ i 3 <+ 8+ 3+ 3+ d <+ 3 3 i 3+ 3+ 9+ 3 [+ 8+ 3+ 8+ 3 3 [+ 8+ 3+ 3+ [+ 3 {+ 3+ 3+ <+ 3 3 8+ 3+ 3+ {+ 3 <+ 8+ 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ 3+ 3+ 3+ 3+ {+ 3 3 3 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 3+ 3+ 3+ 3 3 3 d 8+ [+ {+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 [+ 9+ 3+ 3+ 3+ 3+ 3+ 3+ 9+ [+ 3 [+ i 3+ 3+ 3+ }+ i [+ 3 <+ 3+ 3+ {+ 3 [+ 3+ 3+ 3+ [+ 3 3 i 8+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ <+ <+ i 3+ 3+ 3+ }+ i [+ 3 3 i 8+ 3+ 3+ {+ 3 3 3 8+ 3+ 3+ <+ 3 {+ 3+ 3+ d }+ i 3 i 3+ 3+ 3+ 3+ 9+ {+ 3+ 3+ 3+ }+ 3 3 i 9+ 3+ 3+ 9+ i <+ 3 3 i 3+ 3+ 9+ 3 [+ 8+ 3+ 8+ 3 3 }+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 8+ 3 3 3 3 3 3 3 3 3 3 ", "U+ l+ ;+ `. 4. + 6. V+ ++ 9. 0. W+ n+ @+ d. e. ,. #+ h. R+ 3+ 3+ 3+ l. X+ &+ n. *+ p. Y+ }. l 3+ 3+ 3+ [+ 3 3 }+ 3+ 3+ 8+ 3 3 3+ 3+ 3+ d 3 3 d 3+ 8+ 3 3 3 3+ 3+ 3+ i [+ 9+ 3+ 9+ [+ 3 3 3 3 3+ 3+ 3+ i 3 3 {+ 3+ 3+ i 3 {+ 3+ 3+ {+ 3 3 i 3+ 3+ {+ 3 i 3+ 3+ 3+ [+ 3 3 d 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ 9+ i i 8+ {+ 3 3 3 i i i i i i i i i i 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 3+ 3+ 3+ 3 3 [+ 8+ d 3 {+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 3 3 3 d 8+ 3+ 3+ 3+ 3+ 3+ 9+ 3 3 3 3+ 3+ 3+ i 3 3 3 [+ 9+ 8+ [+ 3 3 3+ 3+ 3+ i 3 3 3 i 3+ 3+ 3+ [+ [+ {+ }+ 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 {+ 3+ 3+ {+ 3 3 <+ 3+ 3+ 3+ 3 3 i 3+ 3+ {+ 3 3 3 i 3+ 3+ 3+ d 3 3 {+ 3+ 3+ {+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 3 3+ 3+ 3+ i 3 3 {+ 3+ 3+ i 3 3 {+ 3+ 3+ 9+ 3 i {+ i 3 3 3 3 3 3 3 3 3 3 ", "Z+ `+ ;+ v. . @ @ # $ % 0. * = - ; > , ' ) .@ 3+ 3+ 3+ +@ / ( _ : < [ } v. 3+ 3+ 3+ 3 3 3 i 3+ 3+ 3+ i i 3+ 3+ 3+ i 3 3 3 [+ 3 3 3 3 3+ 3+ 3+ {+ 3+ 3+ 3+ {+ 3 3 3 3 i 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ {+ 3 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3 {+ 3+ 3+ 3+ 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ {+ 3 3 i {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 <+ 3+ 3+ {+ 3 3 3 3 3+ 3+ 3+ 3 3 }+ 9+ 3 3 {+ 3+ 3+ i 3 }+ 3 3 3 3 3 3 3 3 3 3 3 3 d 9+ 3+ 3+ 3+ 3+ <+ 3 3 3+ 3+ 3+ i 3 3 3 3 3 <+ d {+ 3+ 3+ 3+ 3+ i 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 {+ 3+ 3+ {+ 3 3 [+ 3+ 3+ 3+ 3 3 d 3+ 3+ {+ 3 3 3 i 3+ 3+ 3+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 i 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ {+ 3 3 {+ 3+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "@@ z+ !+ A+ #@ 5 6 7 $@ 9 & a b c d e f B+ ) 9+ 3+ 3+ 3+ m n o p q r * H+ ~+ 3+ 3+ 3+ 3 3 3 i 3+ 3+ 3+ i i 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3+ 3+ 3+ 3+ 9+ 3+ 3+ 3+ d 3 3 3 i 3+ 3+ 3+ }+ i i i i i <+ 3 3+ 3+ 3+ 9+ i i i i i i 3 {+ 3+ 3+ 3+ 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ {+ 3 3 [+ <+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 3 3+ 3+ 8+ 3 3 3 3 3+ 3+ {+ 3 <+ 3+ 9+ {+ {+ 8+ 3+ 3+ 9+ 9+ 8+ 3 3 3 3 3 3 3 <+ }+ 3 3 3 3 3 d 3+ 3+ 3+ i 3 3 3+ 3+ 3+ i 3 3 3 [+ 9+ 3+ 3+ 9+ d 3+ 3+ 3+ i 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 {+ 3+ 3+ {+ 3 3 3 {+ 3+ 3+ d [+ 8+ 3+ 3+ <+ 3 3 3 i 3+ 3+ 3+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 i 3+ 3+ 3+ }+ i i i i i <+ 3 3 {+ 3+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "%@ &@ *@ F+ y z A G+ C D E F G H I =@ K L M -@ 3+ 3+ 3+ R S T N. V W ;@ P. #. 3+ 3+ 3+ 3 3 3 i 3+ 3+ 3+ <+ <+ 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 9+ 3+ 3+ 3+ [+ 3 3 <+ 3+ 3+ 3+ i 3 3 3 3 3 3 3 8+ 3+ 3+ {+ 3 3 3 3 3 3 3 }+ 3+ 3+ 3+ 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 3 3+ 3+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i 3+ 3+ {+ 3 3 3 3 3 }+ 3+ 3+ 3 3 3 i 3+ 3+ d 3 <+ {+ {+ {+ {+ 8+ 3+ 3+ 9+ {+ d 3 3 3 3 3 3 3 i 3+ <+ 3 3 3 3 3 9+ 3+ 3+ i 3 3 3+ 3+ 3+ i 3 3 3 }+ 3+ 3+ {+ 3 3 3+ 3+ 3+ i 3 3 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 {+ 3+ 3+ {+ 3 3 3 3 {+ 3+ 3+ 3+ 8+ {+ [+ 3 3 3 3 i 3+ 3+ 3+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 <+ 3+ 3+ 3+ i 3 3 3 3 3 3 3 3 {+ 3+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "w+ U+ 0+ Z. a+ +. @. B #. $. O+ &. T. =. -. Q+ >. ,. '. >@ 3+ 3+ 3+ ,@ ^. /. (. _. @ 3+ T. '@ 3+ 3+ 3+ <+ 3 3 {+ 3+ 3+ 9+ 3 3 8+ 3+ 3+ }+ 3 3 3 d 8+ <+ 3 3 3+ 3+ 3+ i 3 [+ 8+ 3+ 3+ 8+ 3 3 3 8+ 3+ 3+ 9+ 3 3 3 i 3+ <+ 3 }+ 3+ 3+ 3+ [+ 3 3 [+ 8+ }+ 3 <+ 3+ 3+ 3+ <+ 3 3 }+ 3+ 3+ 3+ 3 3 3 3 3 3 3 3 3 [+ 3+ 3+ 3+ 9+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 d 3+ 3+ {+ 3 3 3 3 3 [+ 3+ 3+ d 3 3 }+ 3+ 8+ 3 3 3 3 3 3 3 {+ 3+ 3+ i 3 3 3 3 3 3 3 3 3 i 3+ 8+ [+ 3 3 3 3 9+ 3+ 8+ 3 3 3 3+ 3+ 3+ i [+ 9+ [+ {+ 3+ 3+ d 3 [+ 3+ 3+ 3+ i d d 3 i 3+ 3+ 3+ 3 3 3 3 3 3 3 3+ 3+ 3+ i 3 3 3 3 3 {+ 3+ 3+ {+ 3 3 3 }+ 3+ 9+ [+ 3 3 3 3 3 3 3 3 i 3+ 3+ 3+ 3 3 3 {+ 3+ 3+ {+ 3 3 3 {+ 3+ 3+ {+ 3 {+ i 3 8+ 3+ 3+ 9+ 3 3 3 i 3+ <+ 3 3 {+ 3+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "C+ U+ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. W+ )@ c. d. e. !@ ~@ 3+ 3+ 3+ 3+ {@ U+ E+ v+ 3+ 3+ 3+ K }. ' 3+ 3+ 8+ i d 3+ 3+ 8+ [+ 3 3 <+ 3+ 3+ 3+ d i d 3+ {+ 3 <+ 9+ 3+ 3+ 3+ 9+ <+ d 8+ 3+ 3+ 3+ 9+ <+ 3 <+ 3+ 3+ 3+ 9+ i {+ 3+ {+ 3 3 3 8+ 3+ 3+ 8+ d }+ 8+ 8+ [+ 3 3 {+ 3+ 3+ 8+ i }+ 3+ 3+ 3+ 3+ 9+ d 3 3 3 3 3 3 d 8+ 3+ 3+ 3+ 3+ 9+ d 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 <+ {+ 8+ 3+ 3+ 3+ {+ <+ 3 3 3 3 i 3+ 8+ <+ <+ 8+ 8+ [+ 3 3 3 3 3 3 {+ 3+ 3+ 3+ 8+ d 3 3 3 3 3 3 3 3 i 3+ 3+ 3+ }+ <+ <+ d 3+ 3+ i 3 3 3 9+ 3+ 3+ {+ 9+ 8+ 3 {+ 3+ 3+ 3+ {+ 8+ 3+ 3+ 3+ }+ 8+ i d 8+ 3+ 3+ 3+ 9+ d 3 3 3 d 9+ 3+ 3+ 3+ 8+ {+ 3 3 3 {+ 8+ 3+ 3+ 3+ {+ <+ 3 3+ 3+ 3+ 3+ 3+ 3+ {+ d [+ 3 3 d 8+ 3+ 3+ 3+ 9+ <+ d 3+ 3+ 3+ 3+ {+ 3 3 d 3+ 3+ 8+ }+ 3+ <+ 3 <+ 3+ 3+ 3+ 9+ i {+ 3+ {+ 3 3 {+ 3+ 3+ 3+ 3+ {+ <+ 3 3 3 3 3 3 3 3 3 3 3 3 ", ".@ Z+ `+ ]@ v. . 5 w. # $ % & * = c ; ^@ /@ (@ _@ .@ w+ %@ Z+ U+ &@ `+ l+ *@ ]@ ~ } | ]. 4 3+ 3+ 3+ 8+ }+ [+ 3 3 3 3 [+ {+ 3+ 3+ 3+ 8+ }+ 3 3 <+ {+ {+ {+ {+ {+ <+ d {+ {+ {+ {+ {+ <+ 3 3 [+ {+ 3+ 3+ 3+ 8+ d 3 3 3 3 3 }+ 8+ 3+ 3+ 3+ }+ [+ 3 3 3 3 }+ 3+ 3+ 3+ 9+ i 9+ {+ {+ {+ d 3 3 3 3 3 3 d {+ {+ {+ {+ {+ {+ d 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 <+ {+ {+ {+ {+ {+ {+ <+ 3 3 3 3 3 [+ }+ 8+ 8+ }+ [+ 3 3 3 3 3 3 3 {+ {+ {+ {+ {+ d 3 3 3 3 3 3 3 3 <+ {+ [+ }+ 8+ 3+ 3+ 3+ {+ <+ 3 3 3 3 [+ 9+ 3+ 3+ 9+ [+ 3 [+ 9+ 3+ 3+ 8+ i [+ 9+ 3+ 3+ }+ 3 d {+ {+ {+ {+ {+ d 3 3 3 d {+ {+ {+ {+ {+ {+ <+ 3 3 {+ {+ {+ {+ {+ {+ <+ 3 {+ 3+ 3+ 3+ 3+ 3+ 3+ 3+ 8+ [+ 3 d {+ {+ {+ {+ {+ <+ d {+ {+ {+ {+ {+ 3 3 3 }+ 3+ 3+ 8+ i 3 3 3 [+ {+ 3+ 3+ 3+ 8+ d 3 3 3 {+ {+ {+ {+ {+ {+ <+ 3 3 3 3 3 3 3 3 3 3 3 3 ", "_@ :@ z+ <@ G. 4 5 6 7 8 9 0 a b H d e f g J. i j P l m n o N. q r s t u O. w x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 <+ }+ {+ {+ 3+ 3+ 3+ 3+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "[@ %@ L+ *@ P. y z Q. B C D R. S. G H I J }@ L W. N O P Q R S T U V W <. X Y Z ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 d 3+ 3+ 3 3 3 3 <+ 8+ 3+ {+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "|@ w+ U+ 0+ Z. `. +. + .+ #. $. %. &. *. =. -. ;. >. ,. #+ $+ !. ~. {. ]. ^. /. &+ _. :. <. [. }. -+ 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 {+ 3+ 3+ [+ 3 3 3 3 9+ 3+ <+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "1@ R+ 2@ g+ ;+ v. 4. 5. 6. 7. $ 9. 0. a. b. c. ,+ e. f. g. h. ! i. '+ )+ l. / m. n. o. p. q. r. s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 [+ 8+ 3+ 8+ d i d 9+ 3+ }+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "3@ .@ @@ `+ !+ v. . 5 w. # x. % & a = c ; y. z. ' ) /+ B. { ] ^ _+ D. _ q E. [ :+ | v 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i {+ {+ {+ {+ d [+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "4@ _@ :@ z+ <@ G. 4 z 6 7 C I. 0 a b H d e K g M ,@ j P K. L. M. o N. 5@ 5+ s t 6+ O. 7+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "6@ 7@ %@ L+ 0+ P. y b+ Q. B 8@ D R. S. T. U. I J >. L W. N O ~. Q R ^. Y. 9@ V W <. X j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "0@ (@ w+ U+ l+ Z. `. +. + .+ #. ++ 9. m+ *. n+ @+ d. >. ,. #+ p+ !. %+ {. ]. l. /. &+ _. *+ =+ [. }. s. 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "a@ b@ R+ c@ g+ ;+ v. >+ 5. @ 7. $ d@ 0. * b. - ,+ e. , ' h. ! ~ '+ )+ l. / ( e@ o. < q. } s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "f@ g@ 9+ @@ `+ !+ ~+ {+ 5 6 ]+ x. }+ & a = c d y. f B+ ) /+ (+ { l ^ _+ h@ _ q E. D+ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "i@ 4@ _@ %@ E+ |+ F+ 4 z 6 G+ C I. E 1+ b H I e K g M ,@ j P j@ k@ M. T N. 4+ 5+ s X 6+ O. K+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "l@ 6@ 7@ w+ L+ 0+ P. a+ M+ Q. B #. D R. &. T. =. I J >. c+ W. ). O ~. m@ R ^. Y. (. h+ W <. T+ j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "n@ o@ (@ C+ U+ l+ p@ `. 4. + 6. q@ ++ 9. m+ *. n+ @+ d. e. ,. #+ h. q+ %+ {. ]. l. /. &+ n. *+ p. Y+ }. s. t+ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "r+ a@ b@ R+ c@ v+ ;+ v. . @ @ 7. $ % 0. * = - ,+ > , ' r@ ! ~ s@ ] +@ / ( _ o. < q. } | t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "r+ f@ g@ -@ @@ z+ !+ A+ #@ 5 6 ]+ x. 9 & a b c d y. f B+ ) i j { l m n o _ q r t@ :+ u v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "e+ i@ u@ _@ %@ &@ *@ F+ 4 z A G+ C D E 1+ H+ H I =@ K L M N v@ P Q k@ M. T N. V W s X Y J+ K+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "w@ l@ x@ 7@ w+ L+ 0+ Z. a+ +. @. B #. N+ O+ &. T. =. P+ Q+ >. ,. '. ). y@ ~. {. R ^. S+ (. h+ :. <. T+ z@ |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "~@ n@ o@ 1@ C+ U+ l+ ;+ `. 4. 5. 6. 7. ++ 9. 0. W+ )@ c. d. e. ,. g. h. q+ i. j. ]. l. / &+ n. *+ p. Y+ }. s. A@ u. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "B@ r+ C@ b@ .@ Z+ `+ ]@ v. . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "D@ E@ f@ 4@ _@ @@ z+ !+ G. 4 5 6 7 8 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 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "F@ >@ i@ 6@ _@ %@ L+ *@ F+ y z A B C D E F G H I J K L M N O P Q R S T U V W s X Y Z ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "G@ w@ H@ x@ |@ w+ U+ 0+ Z. .. +. @. B #. $. %. &. *. =. -. ;. >. ,. '. ). !. ~. {. ]. ^. /. (. _. :. <. [. }. |. 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "8+ ~@ n@ a@ 1@ R+ 2@ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. a. b. c. d. e. f. g. h. ! i. j. k. l. / m. n. o. p. q. r. s. t. u. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "I@ B@ r+ f@ b@ .@ Z+ `+ !+ v. . 5 w. # x. % & * = c ; y. z. ' ) A. B. { ] ^ C. D. _ q E. [ F. | v 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "J@ D@ e+ f@ 4@ _@ :@ z+ <@ G. 4 H. 6 7 8 I. 0 a b H d e K g J. i j P K. L. M. o N. q r s t u O. w x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "K@ F@ >@ i@ 6@ 7@ %@ L+ 0+ P. y z Q. B C D R. S. T. U. I J V. L W. N O X. Q R S Y. U V W <. X Y |. ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "L@ G@ ~@ H@ x@ (@ w+ U+ M@ Z. `. +. + .+ #. ++ 9. &. *. =. @+ d. >. ,. #+ $+ !. %+ {. ]. ^. /. &+ _. *+ =+ [. }. -+ 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "N@ 8+ O@ P@ a@ 1@ R+ 2@ g+ ;+ v. >+ 5. @ 7. $ 9. 0. * b. c. ,+ e. f. ' h. ! i. '+ )+ l. / ( n. o. p. q. } s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Q@ R@ S@ T@ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "f+ U@ V@ r+ f@ 3@ 9+ @@ `+ !+ ~+ {+ 5 w. ]+ x. % & a = c ^+ y. z. ' ) /+ (+ { l ^ _+ D. _ q E. [ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 W@ X@ Y@ Z@ `@ # .# +# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "{@ J@ D@ e+ @# 4@ _@ %@ E+ |+ G. 4 z 6 7 C I. 0 1+ b H 2+ e K g M ,@ j P j@ L. M. o N. 4+ 5+ s X 6+ O. 7+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ## $# %# &# *# =# -# ;# ># ,# '# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", ")# ;@ !# >@ l@ 6@ 7@ %@ L+ 0+ P. a+ b+ Q. B #. D R. S. T. U. I J >. c+ W. ). O ~. Q R ^. Y. 9@ h+ W <. i+ j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ~# {# ]# ^# /# (# _# :# <# [# }# |# 1# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "2# N@ G@ ~@ n@ 0@ (@ w+ U+ l+ Z. `. 4. + 6. #. ++ 9. m+ *. n+ @+ d. o+ ,. #+ p+ q+ %+ {. ]. l. /. &+ n. *+ s+ [. }. s. t+ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3# 4# 5# 6# 7# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 8# 9# 0# a# b# c# d# e# f# g# h# i# j# k# l# m# n# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "o# p# 8+ O@ q# a@ b@ R+ c@ v+ ;+ v. >+ 5. @ 7. $ % 0. * = - ,+ e. , ' h. ! ~ s@ ] +@ / ( x+ o. < q. } y+ t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 '# r# s# t# u# v# w# x# y# z# A# B# C# D# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 E# F# G# H# I# J# K# L# M# N# O# P# Q# R# S# T# U# V# W# X# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "Y# f+ Z# V@ r+ f@ g@ 9+ @@ z+ !+ A+ {+ 5 6 ]+ x. 9 & a = c d y. f B+ ) i j { l ^ n o _ q r D+ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 `# $ .$ +$ @$ #$ $$ %$ &$ *$ =$ -$ ;$ >$ ,$ '$ )$ !$ ~$ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 {$ ]$ ^$ /$ ($ _$ :$ <$ [$ }$ |$ 1$ 2$ 3$ 4$ 5$ 6$ 7$ 8$ 9$ 0$ a$ !$ X# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "b$ c$ J@ F@ e+ i@ u@ _@ %@ E+ |+ F+ 4 z A G+ C I. E 1+ H+ H I e K L M N j P j@ k@ M. T N. 4+ I+ s X 6+ J+ K+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 d$ e$ f$ g$ h$ i$ j$ k$ l$ m$ n$ o$ p$ q$ r$ s$ t$ u$ v$ w$ x$ y$ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 z$ A$ B$ C$ D$ E$ 4$ F$ G$ H$ I$ J$ K$ L$ M$ N$ O$ P$ Q$ R$ S$ T$ U$ V$ W$ X$ Y$ Z$ `$ % .% +% +% @% #% $% $% %% &% *% =% -% ;% -% >% ,% '% )% !% ~% {% ]% ^% /% (% _% :% <% [% }% |% 1% 2% 3% 4% 5% 6% 7% 8% 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "9% )# ;@ G@ w@ l@ 6@ 7@ w+ L+ 0+ Z. a+ M+ Q. B #. N+ O+ &. T. =. P+ Q+ >. c+ W. ). O ~. {. R ^. S+ (. h+ W <. T+ j+ |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3# 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% 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 y% z% A% B% C% D% E% F% G% H% I% J% K% L% M% N% O% P% Q% R% S% T% U% V% W% X% Y% Z% `% `@ & .& +& @& #& $& %& && %& *& =& -& ;& && ;& >& ,& '& )& !& ~& {& ]& ^& ^& /& (& _& :& <& <& [& }& |& 1& 2& 3& 4& 5& 6& 7& 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "8& 9& N@ G@ ~@ n@ o@ 1@ C+ U+ l+ ;+ `. 4. + 6. V+ ++ 9. 0. W+ n+ @+ d. e. ,. #+ h. q+ %+ j. ]. l. X+ &+ n. *+ p. Y+ }. s. A@ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 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& '# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 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& `& * .* +* @* #* $* %* &* ** =* -* ;* >* ,* '* )* !* ~* {* ]* ^* /* (* _* :* <* [* }* |* }* 1* 2* 3* 4* 5* 6* 7* 8* 9* 0* a* b* c* d* e* f* g* h* i* 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "j* k* p# 8+ B@ r+ a@ b@ .@ Z+ `+ ;+ v. . @ @ # $ % 0. * = - ; > , ' ) ! ~ s@ ] +@ / ( _ : < [ } | t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 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* ~$ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Q* R* S* T* U* V* W* X* Y* Z* `* = .= += @= #= $= %= &= *= == -= ;= >= ,= '= )= != ~= {= ]= ^= /= (= _= := <= [= }= |= 1= 2= 3= 4= 5= 6= 7= 8= 9= 0= a= b= c= d= e= f= g= h= i= j= k= l= m= n= o= p= 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "q= Y# {@ Z# D@ E@ f@ 4@ -@ @@ z+ !+ A+ #@ 5 6 7 $@ 9 & a b c d e f B+ ) i j k l m n o p q r t@ :+ u v w x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 r= s= t= u= v= w= x= y= z= A= B= C= D= E= F= G= H= I= J= K= L= M= N= O= P= Q= R= S= q$ T= U= V= W= X= 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Y= Z= `= - .- +- @- #- $- %- &- *- =- -- -- ;- >- ,- '- '- )- !- ~- {- ]- ^- /- (- _- :- <- [- }- |- 1- 2- 3- 4- 5- 6- 7- 8- 9- 0- a- b- c- d- e- f- g- h- i- j- k- l- m- n- o- p- q- r- 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "s- b$ )# J@ F@ e+ i@ 6@ _@ %@ &@ *@ F+ y z A G+ C D E F G H I =@ K L M N v@ P Q R S T N. V W s X Y Z K+ . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 t- u- v- w- x- y- z- A- B- C- D- E- F- G- H- I- J- K- L- M- N- O- P- Q- R- S- T- U- V- W- X- Y- Z- `- ; .; +; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 @; #; $; %; &; *; =; -; ;; >; ,; '; ); !; ~; {; ]; ^; /; (; _; :; <; [; }; |; |; 1; 2; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "3; 4; )# ;@ G@ w@ l@ x@ 7@ w+ U+ 0+ Z. a+ +. @. B #. $. O+ &. T. =. -. Q+ >. ,. '. ). !. ~. {. R ^. /. (. _. :. <. [. }. |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5; 6; 7; 8; 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; 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 I; J; K; L; M; N; O; P; Q; R; S; T; U; V; W; X; Y; Z; `; > .> +> @> #> $> %> &> *> 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "=> 8& 9& N@ 8+ ~@ n@ a@ 1@ C+ U+ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. W+ )@ c. d. e. f. g. h. q+ i. j. k. l. / &+ n. o. p. q. }. s. A@ u. 3 3 3 3 3 3 3 3 3 3 3 3 3 -> ;> >> ,> '> )> !> ~> {> ]> ^> /> (> _> :> <> [> }> |> 1> 2> 3> 4> 5> 6> 7> 8> 9> 0> a> b> c> d> e> f> g> h> i> j> k> l> m> n> 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 y% 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> 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "P> q= k* f+ I@ B@ r+ C@ b@ .@ Z+ `+ ]@ v. . 5 w. # $ % & * = c ; ^@ , ' ) A. B. { ] ^ C. ( _ : < [ } | v 2 3 3 3 3 3 Q> R> S> T> U> V> W> X> Y> Z> `> , ., +, @, #, $, %, &, *, =, -, ;, >, ,, ', ), !, ~, {, ], ^, /, (, _, :, <, [, b> }, |, 1, X- d> 2, 3, 4, 5, 6, 7, 8, 9, 0, a, b, 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 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, 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "D, E, Y# {@ Z# D@ E@ f@ 4@ _@ :@ z+ <@ G. 4 5 6 7 8 9 0 a b H d e f g J. i j P l m n o N. q r s t u O. w F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, `, ' .' +' @' #' $' %' &' *' =' -' ;' >' ,' '' )' !' ~' {' ]' ^' /' (' _' 1, :' <' [' }' |' 1' 2' 3' 4' 5' 6' 7' 8' 9' 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 7# 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' 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "A' s- b$ )# K@ F@ >@ i@ 6@ [@ %@ L+ *@ P. y z Q. B C D R. S. G H I J }@ L W. N O P Q R S T U V W <. 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' `' ) .) +) @) #) $) %) &) *) =) -) ;) >) ,) ') )) !) ~) {) ]) ^) /) () _) :) }, <) [) }) |) 1) 2) 3) 4) 5) 6) 7) 8) 9) 0) a) b) B& 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 c) d) e) f) g) h) i) j) k) l) m) n) o) p) q) r) P; s) t) u) v) s' w) x) y) z) A) B) 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "C) 3; 4; 2# L@ G@ ~@ H@ x@ |@ w+ U+ 0+ Z. `. +. + .+ #. $. %. &. *. =. -. ;. >. D) E) $+ !. ~. {. ]. ^. /. &+ F) G) H) I) J) K) L) M) N) O) P) Q) R) S) T) U) V) W) X) Y) Z) `) ! .! +! @! #! $! %! &! *! =! -! ;! >! ,! '! )! !! ~! {! ]! ^! /! (! _! :! N! o# N@ 8+ O! P@ a@ 1@ R+ 2@ g+ ;+ v. 4. 5. 6. 7. $ 9. 0. a. b. c. ,+ e. f. g. P! Q! R! S! T! l. U! V! W! X! Y! Z! `! ~ .~ +~ @~ #~ $~ %~ &~ *~ =~ -~ ;~ >~ ,~ '~ )~ !~ ~~ {~ ]~ ^~ /~ (~ _~ :~ <~ [~ }~ |~ 1~ 2~ 3~ 4~ 5~ 6~ 7~ 8~ 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~ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 F~ G~ H~ I~ J~ K~ L~ M~ N~ O~ P~ Q~ R~ S~ T~ U~ V~ W~ X~ Y~ Z~ `~ { .{ +{ @{ #{ ${ %{ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ P> q= Y# f+ U@ B@ r+ f@ 3@ .@ @@ `+ !+ v. . 5 w. # x. % & a = c ; y. z. ' ) /+ *{ ={ -{ ;{ >{ ,{ '{ ){ !{ ~{ {{ ]{ ^{ /{ ({ _{ :{ <{ [{ }{ |{ 1{ 2{ 3{ 4{ 5{ 6{ 7{ 8{ 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{ R{ S{ T{ U{ V{ W{ X{ D# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Y{ Z{ `{ ] .] +] @] #] $] %] &] *] =] -] ;] >] ,] '] )] !] ~] {] ]] ^] /] (] _] :] <] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ D, E, [] {@ J@ D@ e+ }] 4@ _@ :@ z+ <@ G. 4 z 6 7 C I. 0 a b H d e K g M ,@ j P K. |] 1] 2] 3] 4] 5] 6] 7] 8] 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] R] S] T] U] V] W] X] Y] Z] `] ^ .^ +^ @^ #^ $^ %^ &^ *^ =^ -^ ;^ >^ ,^ '^ )^ !^ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ~^ {^ ]^ ^^ /^ (^ _^ :^ <^ [^ }^ |^ 1^ 2^ 3^ 4^ 5^ 6^ 7^ 8^ 9^ 0^ a^ b^ c^ d^ e^ f^ g^ h^ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ A' i^ b$ )# ;@ j^ >@ i@ 6@ 7@ %@ L+ 0+ P. y b+ Q. B 8@ D R. S. T. U. I J >. L W. N O ~. Q R 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^ J^ K^ L^ i] M^ N^ O^ P^ Q^ R^ S^ T^ U^ V^ W^ X^ Y^ Z^ `^ / ./ Y^ >~ +/ @/ #/ $/ %/ &/ */ =/ -/ R] {) ;/ >/ ,/ '/ )/ !/ ~/ {/ ]/ ^/ // 3! (/ _/ :/ . ,. #+ p+ !. %+ {. ]. l. D/ E/ F/ 2~ G/ H/ I/ J/ K/ L/ M/ N/ O/ P/ Q/ R/ S/ T/ U/ V/ W/ X/ Y/ Z/ `/ ( .( +( @( #( $( %( 2{ &( *( =( -( ;( >( ,( '( )( !( !( ~( {( ]( ^( K] K] ]( /( (( (( e~ _( :( <( [( :! ~) }( |( 1( 2( 3( 4( N] 5( 6( 7( 8( 9( 0( g> a( b( c( d( e( f( g( h( i( j( k( l( ~$ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 m( n( o( p( q( r( s( t( u( v( w( x( y( z( A( B( C( D( 5= E( F( G( H( I( J( K( L( M( N( O( P( Q( 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ 3+ R( j* o# N@ 8+ O@ P@ a@ b@ R+ c@ g+ ;+ v. >+ 5. @ 7. $ d@ 0. * b. - ,+ e. , ' h. ! ~ '+ )+ l. / S( T( U( V( W( X( Y( Z( `( _ ._ +_ @_ #_ $_ %_ &_ *_ =_ -_ ;_ >_ ,_ '_ )_ !_ ~_ {_ ]_ ^_ /_ (_ __ :_ <_ [_ }_ |_ 1_ 2_ ], 3_ 3_ 4_ 5_ ^, 6_ 7_ 8_ Z^ 9_ {( 0_ a_ b_ c_ g{ d~ 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_ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 G_ H_ I_ J_ K_ L_ M_ t( N_ O_ P_ Q_ R_ S_ T_ U_ V_ W_ W_ X_ Y_ Z_ `_ : .: +: @: #: $: %: &: *: 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ P> q= Y# f+ Z# V@ r+ f@ g@ 9+ @@ `+ !+ ~+ {+ 5 6 ]+ x. }+ & a = c d y. f B+ ) /+ (+ { l ^ _+ h@ =: -: ;: >: ,: ': ): !: ~: {: ]: ^: /: (: _: :: <: [: }: |: 1: 2: 3: 4: 5: 6: 7: 8: 9: 0: a: b: c: d: e: f: t] g: h: i: j: k: l: m: 5> n: ./ o: ./ p: q: -~ `^ {, 0_ r: -~ s: t: ./ u: v: w: < ,< '< )< !< ~< {< ]< ^< /< (< _< 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ D, E, b$ {@ J@ F@ e+ i@ 4@ _@ %@ E+ |+ F+ 4 z 6 G+ C I. E 1+ b H I e K g M ,@ j P j@ k@ M. T N. :< << [< }< |< 1< 2< 3< 4< 5< 6< 7< 8< 9< 0< a< a< b< c< d< e< f< g< h< i< j< k< l< m< n< o< p< q< r< s< t< u< 6> v< w< x< y< z< A< B< A< 5> n: o: C< `^ {, {( D< 4_ E< F< G< H< I< J< K< L< L< M< N< x: x: O< P< Q< R< R< J: J: S< T< T< ^/ U< T< V< W< X< Y< Z< `< *^ [ .[ +[ @[ #[ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 $[ %[ &[ *[ =[ -[ ;[ >[ ,[ '[ )[ ![ ~[ w/ {[ ][ ^[ /[ ([ _[ :[ <[ [[ >< }[ |[ 1[ 2[ 3[ 4[ 5[ 6[ 7[ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ 8[ 3; 9% )# ;@ !# >@ l@ 6@ 7@ w+ L+ 0+ P. a+ M+ Q. B #. D R. &. T. =. I J >. c+ W. ). O ~. m@ R ^. Y. (. h+ 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[ H[ J[ .( K[ L[ 9_ M[ 1{ W^ M[ -~ 0_ C< N[ O[ P[ Q[ R[ S[ T[ `^ U[ V[ W[ d_ 2> K< d_ d~ X[ Y[ P< Z[ `[ `[ i~ 1! 1! 1! 1! 1! S< S< } } } p_ p_ .} +} @} #} $} %} &} *} =} i* 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -} ;} >} ,} '} )} !} ~} {} ]} ^} /} (} _} :} <} [} }} |} 1} 2} 3} 4} 5} 6} 7} 8} 9} 0} a} b} c} d} e} 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ f} B/ 4; 9& N@ G@ ~@ n@ o@ (@ C+ U+ l+ p@ `. 4. + 6. q@ ++ 9. m+ *. n+ @+ d. e. ,. #+ h. q+ %+ {. ]. l. /. &+ n. *+ 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} M} O} P} Q} R} S} K[ T} U} V} W} 1{ 9_ m: X} 5_ Y} Z} `} | .| T[ +| @| P- #| d_ $| %| &| c~ *| =| +/ -| */ i_ x: `[ 1! R< J: ;| >| ^/ p_ X< ,| ,| X< '| :' ;/ v; )| !| ~| {| ]| ^| /| (| W@ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 _| :| <| [| }| || 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| a| b| c| d| e| f| g| h| i| j| k| l| m| n| o| p| q| r| 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ 3+ P> j* k* p# 8+ B@ r+ a@ b@ R+ c@ v+ ;+ v. . @ @ 7. $ % 0. * = - ,+ > , ' r@ ! ~ s@ ] +@ / ( _ o. < s| t| u| v| w| x| y| z| A| B| C| D| E| F| G| H| I| J| K| L| M| N| O| P| Q| R| S| T| U| V| V: W| X| N^ Y| Z| `| 1 .1 +1 .1 @1 #1 $1 ^~ %1 &1 *1 x] $1 =1 -1 ;1 >1 ,1 '1 e{ #| 2> O{ /, $| /, e_ ,~ e_ )1 !1 ~1 -| X[ {1 ]1 `[ i~ 1! ;| J: ;| C: ^1 G: /1 (1 _1 :1 <1 w: [1 }1 |1 11 21 31 41 51 61 71 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 81 91 01 a1 b1 c1 d1 e1 f1 g1 h1 i1 j1 k1 l1 m1 n1 o1 p1 q1 r1 s1 t1 u1 v1 w1 x1 y1 z1 A1 B1 C1 D1 E1 F1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ D, q= Y# G1 Z# V@ r+ f@ g@ -@ @@ z+ !+ A+ #@ 5 6 ]+ x. 9 & a b c d y. f B+ ) i j { l m n o _ q r t@ H1 I1 J1 K1 L1 M1 N1 O1 P1 Q1 R1 S1 T1 U1 V1 W1 X1 Y1 Z1 `1 2 .2 +2 +2 @2 #2 $2 %2 &2 *2 =2 -2 ;2 >2 ,2 '2 )2 !2 ~2 {2 ]2 ^2 /2 (2 _2 :2 <2 &1 [2 }2 |2 12 22 32 42 ,^ 52 g_ 62 %| 72 $| b~ e_ )1 c~ )1 *| 82 +/ d~ 92 X[ _( */ 1! `[ o_ `[ `[ `[ 02 a2 _( o_ C: o_ b2 |! }! ^1 p_ c2 d2 e2 f2 g2 h2 i2 j2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 k2 l2 m2 n2 o2 X: p2 q2 r2 s2 t2 u2 v2 k1 w2 x2 y2 z2 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 K2 L2 M2 N2 O2 P2 Q2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ R2 E, b$ c$ J@ F@ e+ i@ u@ _@ %@ &@ *@ F+ 4 z A G+ C D E 1+ H+ H I =@ K L M N v@ P Q k@ M. T N. V W s X Y S2 T2 U2 V2 W2 X2 Y2 Z2 `2 3 .3 +3 @3 #3 $3 %3 &3 *3 =3 -3 ;3 >3 ,3 '3 )3 !3 ~3 {3 ]3 ^3 /3 (3 _3 :3 <3 [3 }3 |3 13 23 33 43 53 63 73 83 93 03 a3 c_ [! b3 c3 d3 2! e3 f3 g3 h3 '| i3 j3 k3 b~ l3 e_ d_ m3 +/ d~ -| 92 X[ n3 g{ */ o_ o3 p3 q3 r3 s3 t3 u3 v3 o_ /1 =/ E: w3 w3 w3 x3 y3 z3 A3 B3 C3 D3 )^ E3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 F3 G3 %2 H3 I3 J3 Y: p2 K3 L3 s2 M3 N3 O3 P3 Q3 R3 S3 T3 U3 V3 W3 X3 Y3 W3 Z3 `3 4 .4 +4 @4 #4 $4 %4 &4 *4 =4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ 8[ 3; 4; )# ;@ G@ w@ l@ x@ 7@ w+ L+ 0+ Z. a+ +. @. B #. N+ O+ &. T. =. P+ Q+ >. ,. '. ). y@ ~. {. R ^. S+ (. h+ :. <. T+ z@ |. -4 ;4 >4 ,4 '4 )4 !4 ~4 {4 ]4 ^4 /4 (4 _4 :4 <4 [4 }4 |4 14 24 34 44 54 64 74 84 94 04 a4 b4 c4 {2 <3 d4 e4 f4 g4 h4 i4 j4 k4 l4 m4 n4 o4 p4 ]1 q4 J: F: r4 s4 t4 g3 '| g3 u4 u4 v4 v4 g3 w4 x4 y4 d_ )1 d~ 92 */ {1 i_ o_ _( U[ =| 82 z4 A4 B4 C4 D4 E4 Z[ F4 G4 H4 I4 J4 M{ D: /) K4 L4 M4 N4 O[ K] O4 P4 Q4 R4 '# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 S4 T4 U4 V4 W4 X4 Y4 Z4 `4 5 .5 +5 @5 #5 $5 %5 &5 *5 =5 -5 ;5 >5 ,5 ,5 '5 )5 !5 ~5 {5 ]5 ^5 /5 (5 _5 :5 <5 [5 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ f} B/ 8& 9& N@ 8+ ~@ n@ o@ 1@ C+ U+ l+ ;+ `. 4. 5. 6. 7. ++ 9. 0. W+ )@ c. d. e. ,. g. h. q+ i. j. ]. l. / &+ n. *+ p. Y+ }. s. A@ }5 |5 15 25 35 45 55 65 75 85 95 05 3 T1 a5 z| b5 c5 d5 e5 f5 g5 h5 i5 j5 k5 l5 m5 n5 o5 p5 q5 r5 s5 t5 u5 v5 w5 x5 y5 z5 A5 B5 C5 D5 E5 >| } F5 V< S< G5 H5 S< W< 8( 8( () () I5 I5 W- h3 i3 c( i3 Q] Y< J5 K5 u_ o_ x: */ i_ o_ i~ o3 b2 L5 M5 N5 `[ .} O5 P5 u; P5 (/ h3 ^1 Q5 R5 S5 T5 U5 M{ :! V5 W5 X5 Y5 Z5 `5 E& 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 D# 6 .6 +6 @6 #6 $6 %6 &6 Z4 *6 =6 d' -6 ;6 >6 ,6 '6 )6 !6 ~6 {6 ]6 ^6 /6 (6 _6 :6 <6 [6 }6 |6 16 26 36 46 56 66 76 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ 3+ P> q= k* p# 8+ B@ r+ C@ b@ .@ Z+ `+ ]@ v. . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 86 96 06 a6 b6 c6 d6 e6 f6 g6 h6 i6 j6 k6 l6 m6 n6 o6 p6 q6 r6 s6 t6 u6 v6 w6 x6 y6 z6 A6 B6 C6 D6 E6 F6 G6 H6 I6 I6 J6 F6 K6 L6 y3 A{ h_ {/ T< ]/ ]/ V< M6 >| // M6 // () I5 c3 c3 W- N6 O6 f3 e3 h3 E: ,| X< p_ } i~ o_ o_ 1! J: P6 1! V< // 2! d3 Q6 R6 S6 T6 /' U6 } J: V6 W6 X6 Y6 h3 $^ Z6 `6 7 5( .7 e( +7 @7 D_ #7 $7 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 %7 &7 *7 =7 -7 ;7 >7 ,7 '7 )7 !7 ~7 {7 ]7 ^7 /7 (7 _7 :7 <7 [7 }7 |7 17 27 37 _6 47 57 67 77 87 97 07 a7 b7 c7 d7 e7 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ D, f7 Y# {@ Z# D@ E@ f@ 4@ _@ @@ z+ !+ G. 4 5 6 7 8 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 3 g7 h7 i7 j7 k7 l7 m7 n7 o7 p7 q7 r7 s7 t7 u7 v7 w7 x7 y7 z7 A7 B7 C7 D7 E7 a5 F7 G7 H7 I7 J7 K7 L7 s5 M7 N7 O7 P7 9/ Q7 R7 S7 T7 .^ j3 U7 */ ]1 R< ]1 a2 b2 V7 3( M6 8( I5 () W7 X7 j~ Y7 Y7 j~ U6 /) 2! Z7 /) T< >| >| p_ } R< ^) `7 8 .8 M{ +8 @8 U< #8 1! i~ `[ {/ c( ^) 3! g3 Y6 Q5 $8 Y6 F4 %8 2! R] &8 *8 =8 -8 ;8 >8 ,8 =} 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 '8 )8 !8 ~8 {8 ]8 ^8 /8 (8 _8 :8 <8 [8 }8 |8 18 k; 28 38 48 58 68 78 88 98 08 a8 b8 c8 W3 d8 e8 f8 g8 h8 i8 j8 k8 l8 m8 n8 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ R2 s- b$ )# K@ F@ >@ i@ 6@ _@ %@ L+ *@ F+ y z A B C D E F G H I J K L M N O P Q R S T U V W s X Y Z ` . 3 3 o8 p8 q8 r8 s8 t8 u8 v8 w8 x8 y8 p7 z8 A8 B8 C8 D8 E8 F8 G8 H8 I8 J8 K8 L8 M8 N8 O8 P8 Q8 R8 S8 T8 _ U8 V8 W8 X8 Y8 d2 Z8 `8 9 j3 .9 x: `[ x: g{ U[ v3 i_ ]1 `[ ^/ d3 d3 U6 U6 /' (/ +9 N6 @9 #9 $9 I5 b3 /) d3 ^/ p_ p_ p_ Z7 %9 C{ &9 O5 *9 U< 4( =9 -9 ;9 Z[ ]/ >9 ,9 '9 )9 !9 ~9 {9 `[ K5 D: ]9 J4 M{ ^9 /9 (9 _9 :9 <9 [9 }9 |9 $7 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 i* 19 29 39 49 59 X: 69 79 _8 :4 89 99 09 a9 b9 c9 d9 e9 f9 g9 h9 u1 i9 j9 k9 '5 l9 m9 n9 o9 p9 q9 r9 s9 t9 o- u9 v9 w9 x9 y9 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ C) 3; 4; z9 L@ G@ w@ H@ x@ |@ w+ U+ 0+ Z. .. +. @. B #. $. %. &. *. =. -. ;. >. ,. '. ). !. ~. {. ]. ^. /. (. _. :. <. [. }. |. 1. 2. 3 3 3 A9 B9 C9 D9 E9 F9 G9 H9 I9 J9 K9 L9 M9 N9 O9 P9 Q9 R9 Q9 S9 v( T9 U9 V9 q6 W9 X9 Y9 Z9 `9 0 .0 +0 @0 9/ #0 $0 %0 &0 *0 =0 -0 g_ 42 p3 42 ]( ;0 l: B4 e~ a2 i_ x: Y< E5 (1 Q6 }, >0 X- :' ,0 _' O6 _) '0 I5 b3 )0 /) M6 X< /) !0 ~0 {0 R6 @8 V7 =9 ]0 ^0 -9 B: ^/ A{ /0 (0 u; ^) i~ K5 p_ 2! Z7 V- w: ^) c( =/ E5 d( A4 x< _0 :0 <0 [0 }0 |0 10 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 20 30 40 50 60 70 80 90 00 a0 b0 c0 d0 e0 f0 g0 h0 i0 j0 k0 l0 m0 n0 o0 p0 q0 /7 '5 r0 s0 t0 u0 v0 w0 x0 y0 z0 A0 B0 C0 D0 E0 F0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ 3+ => N! 9& N@ 8+ ~@ n@ a@ 1@ R+ 2@ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. a. b. c. d. e. f. g. h. ! i. j. k. l. / m. n. o. p. q. r. s. t. u. 3 3 3 3 3 G0 H0 I0 J0 K0 L0 M0 N0 M0 O0 P0 Q0 R0 S0 T0 U0 V0 W0 X0 Y0 Z0 Y0 `0 a .a +a @a #a $a %a &a *a =a -a ;a >a ,a 'a )a !a 3/ Y^ @| n: ~a {a ]a Y[ a_ >^ e~ */ ^a Y< /a Q6 w; (a _a x; I4 1, I4 :a :) _) X7 )0 /) /) X< /) x3 x3 Z7 Z7 >| i~ z: B: 7 z: J: } ^) A{ S6 S6 x3 .} '| d3 >| E5 U7 N< Q] i_ 02 E5 U< q= k* f+ I@ B@ r+ f@ b@ .@ Z+ `+ !+ v. . 5 w. # x. % & * = c ; y. z. ' ) A. B. { ] ^ C. D. _ q E. [ F. | v 2 3 3 3 3 3 3 Ka La Ma Na Oa Pa Qa Ra Sa Ta Ua Va Wa Xa Ya <> Za `a b .b +b @b #b $b %b &b *b =b -b ;b ]7 >b ,b 'b )b !b ~b {b ]b ^b /b (b _b :b 1b 2b 3b 4b _) 5b G4 /) 2! /) ;| j_ 6b {9 Z[ `[ J5 /a c( >9 7b ^) ^) u_ `[ `[ `[ U6 8b Z7 ]/ {1 A4 9b x: d~ 0b w: ab |( bb >/ y; /) cb V7 _( A_ S% db eb fb gb hb #[ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ib jb kb lb mb nb ob pb qb rb sb tb ub vb wb e0 xb yb zb Ab Bb Cb Db Eb Fb Gb Hb Ib Jb Kb Lb Mb Nb Ob Pb Qb Rb Sb Tb Ub Vb Wb Xb Yb Zb `b 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ D, E, Y# {@ J@ D@ e+ f@ 4@ _@ :@ z+ <@ G. 4 H. 6 7 8 I. 0 a b H d e K g J. i j P K. L. M. o N. q r s t u O. w x 3 3 3 3 3 3 3 c .c +c @c #c $c %c &c *c =c -c ;c >c ,c `0 `0 'c )c !c ~c {c ]c ^c /c (c _c :c d ,d 'd )d !d ~d {d ]d ^d 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ A' i^ b$ )# K@ F@ >@ i@ 6@ 7@ %@ L+ 0+ P. y z Q. B C D R. S. T. U. I J V. L W. N O X. Q R S Y. U V W <. X Y |. ` . 3 3 3 3 3 3 3 3 /d (d _d :d c }d |d 1d a5 2d 3d w7 A8 4d 5d 6d 7d 8d 9d 0d ad bd cd dd ed fd h# gd hd id jd kd ld md nd od pd qd rd sd td ud vd wd xd yd A4 42 <( ^) zd +^ ]) Ad Bd A{ X7 W- j~ )0 b3 b3 )0 /) /) // J: i~ x: Y< Cd V- Dd @^ Cd <( e ,e 'e )e !e ~e {e ]e ^e /e (e _e Mb &d :e . ,. #+ $+ !. %+ {. ]. ^. /. &+ _. *+ =+ [. }. -+ 1. 2. 3 3 3 3 3 3 3 3 3 3 9e 0e ae be ce de ee fe ge he ie je ke le me ne g# oe pe ad qe re se te ue ve we xe {c ye ze Ae Be Ce De Ee Fe Ge He Ie Je Ke Le Me Ne ~( @/ Oe ~1 42 ~1 N< ,^ Pe Z< Qe 62 ,^ (1 2! b3 () () )0 )0 )0 /) .} w4 /a V- Cd f ,f 'f )f !f Mc ~f @e {f <$ ]f ^f /f (f _f :f j* o# N@ 8+ O@ P@ a@ 1@ R+ 2@ g+ ;+ v. >+ 5. @ 7. $ 9. 0. * b. c. ,+ e. f. ' h. ! i. '+ )+ l. / ( n. o. p. q. } s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 mf nf of pf qf rf sf tf uf vf wf xf yf h, w8 zf Af Bf Cf Df Ef ve Ff Gf Hf If Jf Kf Lf Mf Nf Of Pf Qf Rf Sf Tf Uf Vf Wf Xf Yf Zf `f ~( g -~ {, ]( z4 dc }b .g n3 U- +g .9 nc ^/ // b3 b3 b3 b3 /) 2! p_ p_ (1 Cd <( &| u: Re @g [! c_ Oe }! }! 02 g ,g 'g Nd 9> )g !g ~g eb {g ]g ^g /g (g _g :g q= Y# f+ U@ V@ r+ f@ 3@ 9+ @@ `+ !+ ~+ {+ 5 w. ]+ x. % & a = c ^+ y. z. ' ) /+ (+ { l ^ _+ D. _ q E. [ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 yg zg Ag Bg Cg Dg Eg bd Fg Gg Hg Ig Jg Kg M0 Lg Mg Ng Og Pg Qg Rg Sg Tg Ug Vg Wg Xg Yg Zg `g h .h +h @h #h qd $h $h %h &h *h =h -h V^ ;h >h {( /( ,h Oe L] e( v{ n3 g{ Id Y< >| d3 /) b3 () 2! 2! } } p_ V- ~ )~ ~h {h rc ]1 _( ]1 x: x: x: mc | } w: @8 .} ^) x3 Q6 t_ +^ /h e{ (h _h :h i [b ,i r: a_ @/ 'i e( Oe _( {1 x: {/ >| S< // // M6 } p_ K5 V- 02 p3 @g Re u: >~ n3 92 {1 d~ >~ )i !i ~i rc }b 02 */ ]1 i_ {1 x: @ l@ 6@ 7@ %@ L+ 0+ P. a+ b+ Q. B #. D R. S. T. U. I J >. c+ W. ). O ~. Q R ^. Y. 9@ h+ W <. i+ j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Ai Bi Ci Di Ei Fi !4 Gi Hi Ii Ji D8 Ki Li Mi Oh Ni Oi Pi Qi Ri Si Ti Ui Vi Wi Xi P9 Yi Zi `i j .j +j @j #j Qf qd $j %j &j *j &h =j -j >i ;j x] >j 'i 'i 9b 9b 02 x: Y< Te J5 ^/ // M6 } K5 J5 Te 02 [! @g ,j @| 'j ./ d~ d~ )j !j X^ Re Re nc m3 o3 82 [! {1 */ i_ 02 [! }b Qe ~j |b {j ]j {i ^j ~) .^ /j c2 ec d3 T< ]/ V< Y6 7 ;9 =9 (j (j Q< (( q3 x] ;j %1 _j :j ^i N] i >j +k v3 Y[ }! }! p3 i_ x: ]1 i~ i~ i~ `[ o_ ]1 mc 02 [! z4 >~ @| @| ,j @| @k o: )j ^, d~ g{ #k +/ 3( e~ a2 }! a2 e~ c_ c_ Pe $k %k Eh &k *k =k -k !) c2 >9 | E5 T< U< /1 ^1 q4 Hd A4 ;k >k ,k !1 [! X< E5 =/ +8 Dd 8b x3 _! 'k )k !k ~k {k |g ]k ^k /k (k 8i _k Jc K~ :k + 5. @ 7. $ % 0. * = - ,+ e. , ' h. ! ~ s@ ] +@ / ( x+ o. < q. } y+ t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 hk ik jk kk lk mk nk ok pk qk rk sk tk uk vk wk xk yk Ch zk Ak Bk Ck Dk Ek Fk Gk Hk Ik Jk Kk Lk Mk Nk Ok Pk Qk #j Rk Sk Tk Uk Vk Wk Xk 5_ :j r: Yk Oe A4 dc p3 [! x: */ i_ ]1 o_ o_ o_ ~ u: 'j Zk `k U[ -| n3 )j x: n3 d~ g{ A4 9b A4 v{ q3 L] ,^ l .l +l @l #l )) /' $l R7 Cd 2( 9 62 >l ,l 'l T[ )l !l &3 4j ~l {l ]l ^l /l hj (l _l :l L] a2 }! dc 42 y: Y[ ,h &/ !h !h }! a2 b2 |! 02 p3 v: >~ X^ e{ ^, / Sl ^, =| +/ +/ +/ 5> d~ -| Tl l: e( e( *| Ul Vl Wl Xl Yl N{ Zl a~ `l zd 2( Id } X< i_ Te $^ Fd m .m +m K5 M6 @g c~ @m #m $m ]' %m &m *m j! w3 Fd _! Cd } u_ ~ y< =m -m ;m >m ,m 'm )m !m ~m {m ]m ^m /m (m _m :m 5> ./ g{ d~ n3 / ./ e( +/ ^( `l Tm Um Vm Wm Xm (9 k3 k3 L< ec =/ ,^ n ,n !m 'n )n )n !n ~n {n ]n ^n /n (n _n :n . c+ W. ). O ~. {. R ^. S+ (. h+ W <. T+ j+ |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 an b^ bn cn dn en fn gn hn in jn jl om kn ln mn nn on pn qn rn &; sn tn pf un vn wn xn yn Wh Pj zn ue An Bn Cn Dn En Fn Gn Hn In Jn Kn Ln 'l 'l p: x< ./ U[ d~ Oe c_ Mn B4 Nn }! e~ e~ a2 !h !h mc ~ u{ #k H< H< On i: Z^ i: i: v{ l: i: X} -~ @/ /( ./ Pn j3 [a Qn y4 K< J] >l o ,o 'o )o !o ~o {o ]o ^o /o (o _o :o no Ak oo po qo ro so to uo ;< vo wo xo yo Em zo Ao Bo Co Do Eo Fo Go Ho Io Jo 'l )j ^, ./ ^, {( 0_ Yk Ko a2 A4 A4 a2 e~ a2 02 d( d( [! Re n3 Sl On Lo Mo No M[ W^ g: i: W^ 1{ 1{ Z^ /( v{ r: ^( 82 ^( Oo u: >~ 5> -| -| d~ )h )h 0b E5 0b h: 1{ Po Qo %/ O[ Ro So To Uo Vo Wo Xo Yo @g /a (1 x3 *9 Zo Z6 8b 8b Q6 S7 `o p .p +p @p #p $p %p &p *p =p -p ;p >p ,p 'p )p !p ~p {p ]p ^p /p (p _p o- if :p

j* k* p# 8+ B@ r+ a@ b@ .@ Z+ `+ ;+ v. . @ @ # $ % 0. * = - ; > , ' ) ! ~ s@ ] +@ / ( _ : < [ } | t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5p 6p 7p 8p 9p 0p ap bp cp dp ep fp gp hp ip jp kp lp mp np op pp qp rp sp tp up vp wp xp [[ yp zp Ap Bp Cp h# Dp Ep Fp Gp Hp Ip Jp Kp Lp Mp Np Op ~h J< )i x< x< On q: {, a_ Pp q ,q 'q )q !q ~q {q ]q ^q /q (q _q :q i >i Qq >i _j ;j x] x] l: l: c_ !1 Rq Sq m: ,h r: {( m: Kq 6_ Tq M< Uq &| 0b 0b e~ Vq Wq Xq Yq Zq =/ =/ /j S6 B{ `q r .r +r @r #r $r %r &r *r =r -r ;r >r ,r 'r )r !r ~r {r ]r ^r /r (r _r :r v{ Ir 0_ r: /( b_ Ko B4 7 y: */ X[ 92 X[ }b e~ Ko Jr D< Kr Lr Mr Nr Or @1 Pr Qr k: Rr k: Rr %1 Sr Tr Ur Vr Sr ], 4_ 4_ B] Wr Xr z_ a: Yr Zr .g 'j #| Q{ O{ `r s .s +s @s w~ #s $s L< Id %s dc +m )1 Q] ^) Q6 +9 &s *s =s -s ;s >s ,s 's )s !s ~s {s ]s ^s /s (s _s :s . ,. '. ). !. ~. {. R ^. /. (. _. :. <. [. }. |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 es fs gs hs is js ks ls ms ns os Ea ps qs rs ss ts us vs ws xs rr ys zs As Bs Cs Ds Es Fs Gs Hs Is <, Js Js Ks S6 w3 4b Ls X7 Q6 E: e3 E: ,| E: )0 b3 )0 2! >| {1 X[ d~ e( Tl Tl L] a2 &/ O< i_ i_ */ -| Oo 7_ A4 Pp 'i ]a Ms 9c Ns Os Ps 33 Qs Rs &( Ss Ts Vk Us Us Vs Ws Xs Ys Zs `s 0c t .t +t @t #t n: ,l !i $t %t &t *t =t -t ;t >t ,t 't d2 m 52 'h Oe A4 Oo c~ y3 ,9 )t !t ~t {t ]t ^t /t (t _t :t 8& 9& N@ 8+ ~@ n@ a@ 1@ C+ U+ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. W+ )@ c. d. e. f. g. h. q+ i. j. k. l. / &+ n. o. p. q. }. s. A@ u. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 pt qt rt st tt ut E0 vt wt xt yt zt At Bt Ct Dt Et Ft Gt Ht It Jt Kt pp Lt Mt Nt Ot Pt Qt gc $m M{ `7 Ls (' X7 U6 Q6 U6 3! X7 N6 j~ .} x3 '| Ve h3 E: ^) '| K5 J5 {/ x: */ -| /( Tl !h Ed A4 ~i dc L< *| n3 d~ A4 X[ q3 |{ Rt D^ (i St Tt Ut Vt Wt Xt Yt Zt `t Zt u .u +u @u #u $u %u $1 Nr K' 1{ P^ P^ Jo &u 'l *u 3{ P- /b =u -u ;u >u %| >l z4 e~ ,u 'u )u 82 !u ~u {u ]u ^u /u (u _u :u q= k* f+ I@ B@ r+ C@ b@ .@ Z+ `+ ]@ v. . 5 w. # $ % & * = c ; ^@ , ' ) A. B. { ] ^ C. ( _ : < [ } | v 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 wu xu yu zu Au Bu C0 Cu Du Eu Fu Gu Hu Iu Ju Ku Lu Mu Nu Ou Pu Qu Ru +^ '0 >9 U6 j~ x3 7b w3 :a '0 3! U6 Q6 Q6 U6 j~ j~ U6 7b x3 U6 X7 W- N6 3! j~ Q6 x3 ^) ^) p_ K5 `[ ]1 a2 ]( e( 1! mc e_ *| Y< .} .9 c~ )~ v{ Su Ss Tu Uu Vu Wu Vf Vf Xu Yu Vt Zu `u v .v +v @v rd @u #v Nm $v %v &v ~ n3 :j @~ ;v >v [! +} ,v 'v )v !v ~v {v {v ]v ^v /v (v _v :v *w P- !i {( 5_ ~( =w -w ;w @g >w ,w 'w )w !w ~w ~w {w ]w ^w /w (w _w :w @ i@ 6@ [@ %@ L+ *@ P. y z xw B C D R. S. G H I J }@ L yw N zw Aw Bw Cw Dw Ew Fw Gw W <. X Y Z ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Hw Iw Jw Kw Lw Mw Nw Ow Pw Qw Rw Sw Tw |b |b Uw T6 Q6 .} () D: /) '| d3 .} /) D: D: '| .} ^) .} '| '| .} ^) .} .} (1 @8 @8 (1 d3 /) D: '| .} ^) J5 Te {1 _( 92 {/ N< 62 D: j~ )| 7b c2 @8 ^) @8 zd 0b Vw 7_ n: Ww Xw Yw Zw `w x s5 Ol .x Uf +x @x R/ #x Xv Zv Nm %i .w $x %x &x | *x =x Nm -x ;x >x ,x 2{ 4{ h: t: H< %1 V^ Tr !( 'x Ir )x !x ~x {x ]x ^x /x /x (x _x :x y ,y N/ 'y )y !y ~y {y ]y ~y #_ ^y qd /y (y _y :y N! o# N@ 8+ O! P@ a@ 1@ R+ 2@ g+ ;+ v. 4. 5. V& $z %z &z *z =z -z ;z >z ,z 'z )z !z ~z {z ]z ^z /z (z _z :z | @8 b3 X7 9z :! 0z >: az M{ 5b s4 b3 (1 V- ^) ^) Te +m =| ;0 bz cz dz ez fz Y( gz hz iz ': jz iz kz lz `j Nc ^y k mz nz oz pz Pl Pv P/ qz rz sz tz uz vz wz bc xz yz zz Az Q^ Bz Cz Dz Ez Fz Gz Hz Iz Jz Kz Lz Mz Nz Oz Pz Qz Rz Sz Tz Uz Vz Wz Xz Yz Zz `z A .A +A @A #A $A %A &A *A =A <} <} bv -A ;A >A ,A 'A )A !A ~A {A ]A ^A /A (A _A :A q= Y# f+ U@ B@ r+ f@ 3@ .@ @@ `+ !+ v. . 5 aA bA cA dA eA fA gA hA iA jA kA lA mA nA oA pA qA rA sA tA uA vA wA `m xA yA zA Xx AA 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 BA CA DA ^' O6 Cd i_ #8 K4 E: R] R] .} ^) 2! 2! V- J: i~ o_ `[ `[ o_ 1! ,| D: .} ^) w4 ^) .} 2! 2! b3 )0 /) 2! 2! (1 =/ ,^ c2 +^ @8 d3 )0 () () N6 Bd 3b $^ ,0 s_ EA FA GA HA ^) IA 9z $^ 9( +8 Zo p3 A4 (( JA KA #_ LA MA NA OA PA QA RA SA TA SA UA VA WA XA #i S[ YA ZA `A B .B +B @B #B !k $B %B d: &B *B o] =B -B ;B i] >B ,B 'B )B !B ~B {B ]B ^B /B (B _B :B C ,C 'C )C !C ~C D# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 {C ]C ^C q_ (0 O5 4b V- Te Y6 A: o_ Z7 '| '| c( ec 2! b3 ec F: R< o_ o_ ]1 x: 1! /C D: D: '| /) E: )0 /) 2! /) 2! Z7 V- Cd @8 2! b3 3! X7 () c3 (C Hr _C :C O6 :/ 8z D ,D 'D )D !D ~D {D ]D ^D /D (D _D :D @ i@ 6@ 7@ %@ L+ 0+ P. y b+ Q. B aD bD cD dD eD fD Eo gD hD iD jD kD lD mD nD oD pD qD rD sD tD uD vD wD xD yD q zD AD BD CD 3# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 C& DD ED FD GD T6 Y7 <1 ic R6 .^ ^9 %g t_ *n @^ =/ i3 c( .} D: w4 2( .} K5 K5 } ,| X< 1! Te '| U6 j~ j~ j~ Q6 x3 A{ U6 j~ Q6 #^ *n W7 U5 HD W7 W7 N6 _) '0 U5 HD ID JD :) KD z; b> LD MD ND 6o yr =; Ma OD PD QD RD SD TD >0 _) UD n_ VD Zj WD XD YD ZD `D E .E +E @E #E $E 39 i %E &E *E RA =E -E ;E >E ,E 'E )E !E ~E Fe $h {E ]E ^E /E M^ (E _E :E F ,F 'F )F !F ~F {F ]F ^F /F (F _F :F G e^ x) ,G 'G )G !G ~G {G ]G ^G /G (G _G :G + 5. @ 7. CG DG EG FG GG HG IG JG KG LG MG NG OG PG QG RG SG TG UG VG WG XG YG ZG `G H =| d~ g{ .H Fo +H :! @H #H F& 3 3 3 3 3 3 3 3 i* $H %H &H *H =H -H &n ;H >H ,H 92 R< // =/ /) 7b -/ 'H ab #^ ^) .} R6 R] R] 9( 9( x3 t_ j~ 3! /) (1 V- V- (1 x3 9( Y7 :a 4b :a $^ Y7 %g R6 ]9 N6 :) _C 3b )H :C :C :C :C U5 HD HD ID 9z N6 :' !H ~H {H ]H ^H /H (H _H :H I ,I 'I )I !I ~I {I ]I ^I /I (I _I :I q= Y# f+ Z# V@ r+ f@ g@ 9+ @@ `+ !+ ~+ {+ 5 6 ]+ x. iI jI kI lI @c mI nI oI pI [3 9i qI rI sI tI uI vI wI xI ;^ yI zI AI BI CI .g 82 i: $1 >i DI Z[ Pt EI FI GI HI '8 3 3 7/ II JI KI LI MI NI OI .p PI QI RI mk SI TI UI VI 2! (1 E5 Y< */ Ed `6 u_ ^) -/ c2 ~) !u /0 ^9 qc %g -/ A{ 7b *9 +8 Zo Y7 :a :/ JD _' _C O6 $9 :) :C _C )H )H )H _C :C )H _C _C _C _C HD HD HD $9 #9 WI XI ;y ~H {H f YI ZI `I J vy .J +J @J [} _o #J $J %J &J *J =J -J ;J >J ,J 'J )J !J ~J Bl {J ]J ^J /J (J Dl _J E8 ! :J K ,K 'K )K 3 3 3 3 3 !K xG ~K {K ]K ^K /K (K 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, b$ {@ J@ F@ e+ i@ 4@ _@ %@ E+ |+ F+ 4 z 6 G+ C I. E _K :K L ,L 'L )L !L ~L {L ]L ^L g1 {: /L (L _L :L M 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 8[ 3; 9% )# ;@ !# >@ l@ 6@ 7@ w+ L+ 0+ P. a+ M+ Q. B #. D R. &. ,M 'M )M !M ~M {M ]M ^M ie /M (M _M :M X^ 5M /j <1 Fd b( /9 {0 z; 6M .8 a( 7M 8M 9M 0M aM EI .p bM cM dM eM jm fM gM ]) 7b Y< 0b v3 ;w Mn .9 c2 )| !' hM t- }C @q b> iM _, jM c> WI :' $9 -k :' WI EK WI :' -k Ls :' O6 JD 3b FK FK FK Gr 3b FK FK 3b aF _C f3 kM hc HD JD 3b lM ,0 I4 [C mM nM oM pM qM rM sM tM uM vM wM xM yM zM AM BM CM Qb DM Oj EM <[ FM GM HM IM JM KM LM LM MM NM OM PM QM RM SM TM UM VM U~ WM XM YM ZD ZM `M f5 N .N +N @N #N $N %N &N *N =N -N ;N >N ,N 'N )N T3 !N ~N {N uE ]N ^N /N (N _N :N !i @| z4 p3 |! y: h~ P< v3 z: >O I5 +8 Dd ~) ^j 8M /0 J4 ,O 'O )O !O ~O {O ]O ^O /O (O _O Tq [( c2 9( `7 x; (a 8 7z :O P ,P nE gB 'P )P !P ~P {P ]P ^P 2s /P (P _P :P

j* k* p# 8+ B@ r+ a@ b@ R+ c@ v+ ;+ v. . @ @ 7. $ % 0. * = - wP xP yP zP AP BP CP DP EP FP GP HP IP JP KP LP MP NP OP PP QP Vf =x RP SP TP UP VP r3 Y} A] ({ [/ WP XP k_ Ed mc V- Zo O5 %g w3 .} w3 YP ZP `P rn Q .Q +Q Js @Q ~' ]h !u U6 Y7 $^ Y7 w3 w3 :a :) '0 %^ (' #Q cF d> X- d> 1O d> WI WI WI WI 1O 1O 3O >0 |, d> ;y GK 4O 2O ;y Gr IA $Q $Q IA bF aF aF #9 JD :' (/ P5 c> HK %Q /' &Q Q ,Q 'Q )Q !Q ~Q {Q ]Q ^Q /Q (Q _Q :Q m/ R ,R 'R )R !R ~R {R ]R ^R /R (R _R :R X- VR WR WR XR <' 6M )H _C )H YR )H KD Gr Gr d> {H ZR `R S .S +S @S #S $S %S &S *S =S -S x, lB ;S &: >S ,S 'S )S !S ~S {S ]S ^S /S (S _S ;] :S T ,T 'T )T !T ~T {T ]T ^T /T (T _T ]R :T O6 ]9 5b bF aF v4 v4 JT KT LT 1, MT Qt NT a> g> c> OT OT }O A; PT QT RT ST ST TT UT VT WT XT YT ZT `T U .U +U @U #U $U %U &U *U =U -U ;U >U ,U 'U jx )U !U ~U {U ]U ^U aw $< /U (U _U :U V ,V ,V 'V )V !V ~V {V ]V ^V A> /V (V _V :V . ,. '. ). gV hV iV jV kV lV mV nV oV pV qV rV sV tV uV vV wV xV yV zV AV BV CV DV %j EV FV N[ 9_ z4 <( <( mc |! B4 Nn 7( $8 c3 G] GV HV IV JV KV LV MV 8z NV lK OV PV QV RV SV TV UV VV WV XV YV ZV `V W .W +W KD ;y @W #W $W %W .f $W &W *W =W -W ;W >W ,W >W 'W )W !W ~W {W ]W ^W /W (W _W :W S 7W 8W -A 9W 0W aW bW _r cW dW eW fW 9= gW hW l| iW jW kW lW mW mW @< nW oW pW qW k| rW sW tW uW vW wW xW yW zW AW BW CW DW EW xU FW GW HW rU PM IW JW KW LW MW NW yU OW PW QW RW SW TW UW VW WW XW YW ZW `W X .X +X @X #X $X %X &X *X =X -X ;X >X ,X 'X bv )X !X ~X {X ]X ^X PN /X (X _X :X 8' Y ,Y 'Y )Y !Y ~Y {Y ]Y ^Y /Y (Y _Y :Y Z ,Z 'Z )Z !Z ~Z {Z ]Z ^Z /Z (Z _Z :Z q= k* p# 8+ B@ r+ C@ b@ .@ Z+ `+ ]@ v. . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / rZ sZ tZ uZ vZ wZ IL xZ yZ zZ AZ BZ CZ DZ EZ FZ vf GZ HZ IZ JZ KZ Go LZ MZ ;0 NZ HR ;v WP )u Q5 Nv u< D[ OZ PZ QZ RZ SZ TZ UZ VZ WZ XZ YZ ZZ `Z ` ~6 .` +` @` #` $` %` &` *` =` -` ;` >` ,` 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 x '` )` Hy !` ~` Fy {` 7w ]` ^` /` (` _` $< :` <` [` Bt }` |` 1` 2` 3` 4` 5` 6` 7` 6P 8` 9` 0` a` b` c` d` e` )< }[ f` g` h` NW i` j` k` l` m` n` o` p` q` q` r` s` h` t` u` v` w` x` y` z` 7t A` B` C` )G D` E` F` G` H` I` J` K` L` M` N` O` P` Q` R` S` T` U` V` W` X` Y` Z` `` .. .+ .@ .# .$ .% .& .* .= .- .; .> ., .' .) .! .~ .{ .] .^ ./ .( ._ .: .< .[ .} .| .1 .2 .3 .4 .5 .6 .7 .8 .9 .0 .a .b .c .d .e .3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, f7 Y# {@ Z# D@ E@ f@ 4@ _@ @@ z+ !+ G. 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p 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 .X6 X[ I .J .K .L .M .N .O .P .Q .R .v! S .T .U .V .W .X .Y .Z .` . .....+..@..#..$..3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 %..&..*..=..-..#D fx xS ;..>..,..'..)..!..~..{..]..^../..(.._..:..<..^[ [..}..|..1..2..3..4..5..6..e` 7..8..9..0..zU a..b..c..t` d..Ff e..f..Rg g..h..Pj Ck i..AU j..k..l..m..n..o..p..q..r..TQ s..t..u..v..w..x..y..z..A..B..C..D..E..F..G..H..I..J..K..L..M..cE N..O..P..Q..R..S..T..U..V..W..X..Y..Z..`.. +..+.++.@+.#+.$+.%+.&+.*+.=+.-+.;+.>+.,+.'+.)+.!+.~+.{+.]+.^+./+.(+._+._+.:+._+.<+.[+.}+.|+.1+.2+.3+.4+.5+.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ R2 s- b$ )# K@ F@ >@ i@ 6@ _@ %@ L+ *@ F+ y z A B C D E F G H I J K L M N O P Q R S T U V W s 6+.7+.8+.9+.0+.a+.b+.c+.d+.e+.f+.g+.h+.i+.j+.k+.l+.m+.n+.o+.p+.q+.B .r+.f( s+./i o: t+.+N u+.v+.w+.x+.y+.z+.A+.B+.C+.D+.D~ E+.F+.G+.H+.NV *m I+.J+.K+.L+.M+.7/ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 N+.O+.P+.Q+.}r R+.cw S+./< {[ T+.U+.V+.6v W+.X+.Y+.fW Z+.`+. @..@.B1 +@.@@.#@.$@.%@.&@.*@.=@.-@.;@.>@.,@.'@.)@.!@.~@.{@.]@.^@./@.(@.. ,. '. ). !. ~. {. ]. ^. /. (. _. :. <. [. }. |. `@. #..#.+#.@#.##.l .$#.%#.&#.cG *#.=#.-#.J$ ;#.>#.,#.'#.)#.!#.~#.{#.]#.^#./#.(#._#.:#.<#.[#.}#.|#.1#.y; `7 -k 2#.j! Qt a> 3#.4#.5#.6#.7#.y$ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 8#.9#.0#.a#.b#.c#.d#.OH ak {d e#.eN f#.g#.wE h#.h#.[; i#.j#.k#.l#.m#.n#.o#.p#.q#.r#.s#.t#.uY xp u#.v#.w#.x#.y#.z#.A#.B#.C#.D#.E#.F#.G#.H#.I#.J#.K#.L#.M#.N#.O#.0r P#.6@.Q#.R#.S#.T#.U#.V#.W#.X#.Y#.Z#.`#. $..$.+$.@$.#$.$$.%$.&$.*$.=$.-$.;$.>$.,$.'$.)$.!$.~$.{$.]$.^$./$.($._$.:$.<$.[$.}$.|$.1$.1$.2$.3$.4$.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5$.6$.7$.8$.9$.0$.a$.b$.c$.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ => N! 9& N@ 8+ ~@ n@ a@ 1@ R+ 2@ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. a. b. c. d. e. f. g. h. ! i. j. k. l. / m. n. o. p. q. r. s. t. u. 3 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$.2b $9 I$.J$.K$.L$.M$.N$.O$.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 P$.Q$.R$.S$.T$.U$.c} VW V$.W$.X$.Y$.V+.V+.$< Z$.`$. %..%.`; +%.1 .@%.#%.iY $%.%%.&%.*%.=%.-%.;%.vp >%.,%.'%.)%.!%.~%.k/ 3U {%.5^ ]%.^%.up /%.(%._%.:%.<%.A` [%.}%.|%.1%.2%.3%.4%.5%.6%.7%.8%.9%.0%.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%.A%.B%.C%.D%.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 E%.F%.G%.H%.I%.J%.K%.L%.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ P> q= k* f+ I@ B@ r+ f@ b@ .@ Z+ `+ !+ v. . 5 w. # x. % & * = c ; y. z. ' ) A. B. { ] ^ C. D. _ q E. [ F. | v 2 3 3 3 3 M%.N%.O%.P%.Q%.R%.S%.}= T%.U%.V%.W%.X%.w| Y%.Z%.`%. &..&.+&.@&.#&.$&.eQ %&.&&.*&.=&.-&.;&.>&.,&.'&.'# 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 )&.!&.0t ~&.{&.]&.n1 ^&.~d /&.w/ w/ (&.6q _&.Iu :&.<&.[&.}&.|&.1&.2&.3&.4&.5&.6&.7&.8&.9&.X_ 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&.dL oJ D&.N..E&.F&.G&.H&.I&.J&.K&.L&.M&.N&.O&.P&.Q&.R&.S&.T&.U&.V&.V&.W&.X&.Y&.Z&.`&. *..*.+*.@*.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 #*.$*.%*.&*.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, Y# {@ J@ D@ e+ f@ 4@ _@ :@ z+ <@ G. 4 H. 6 7 8 I. 0 a b H d e K g J. i j P K. L. M. o N. q r s t u O. w x 3 3 3 3 3 3 3 **.=*.-*.;*.c` >*.,*.'*.)*.uc !*.~*.nc +^ {*.^h YP ]*.Xm ^*./*.(*._*.:*.<*.[*.W@ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 }*.|*.1*.2*.3*.4*.5*.6*.7*.8*.9*.0*.a*.b*.c*.d*.5n e*.f*.g*.h*.i*.j*.k*.l*.m*.n*.o*.p*.q*.5o r*.s*.hs t*.u*.v*.t*.w*.x*.S; bn y*.1P z*.A*.B*.!N Z$.C*.4m |G D*.E*.F*.bx G*.H*.I*.J*.K*.L*.M*.N*.O*.O*.P*.Q*.ZQ R*.S*.T*.U*.V*.W*.X*.Y*.Z*.`*. =..=.+=.@=.#=.$=.$=.%=.&=.*=.==.-=.;=.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ A' i^ b$ )# K@ F@ >@ i@ 6@ 7@ %@ L+ 0+ P. y z Q. B C D R. S. T. U. I J V. L W. N O X. Q R S Y. U V W <. X Y |. ` . 3 3 3 3 3 3 3 3 3 3 3 >=.,=.'=.)=.!=.R6 ~=.{=.]=.^=./=.(=._=.:=.<=.[=.}=.|=.1=.2=.3=.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4=.5=.6=.7=.8=.9=.0=.a=.Du b=.c=.d=.e=.f=.cr g=.2W as uM h=.i=.j=.k=.l=.m=.Iu |&.`$.n=.o=.p=.q=.r=.s=.)S t=.u=.v=.u=.w=.w=.x=.y=.:U :U n*.z=.A=.B=.6r ct C=.}%.|G Z` D=.E=.7w F=.xS G=.ct H=.t&.0W I=.J=.'Z K=.L=.M=.N=.O=.P=.Q=.R=.S=.T=.U=.H@.V=.W=.X=.Y=.Z=.`=. -..-.+-.@-.#-.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) B/ 4; 2# L@ G@ ~@ H@ x@ (@ w+ U+ M@ Z. `. +. + .+ #. ++ 9. &. *. =. @+ d. >. ,. #+ $+ !. %+ {. ]. ^. /. &+ _. *+ =+ [. }. -+ 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 $-.%-.&-.*-.=-.5! --.;-.>-.,-.'-.)-.!-.~-.{-.]-.^-./-.(-.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 _-.:-.Fu Ev <-.[-.}-.|-.1-.2-.3-.4-.3-.5-.ti 6-.7-.:r 8-.t&.9-.0-.2n a-.0| b-.Y$.NH Z$.c-.6W d-.e-.f-.g-.,S fY h-.i-.Iu ~..j-.<` k-.l-.m-.n-.o-.p-.=A q-.6e r-.s-.t-.ak u-.5B v-.[} w-.%D /< x-.y-.L=.t&.}%.z-.A-.B-.C-.D-.E-.F-.G-.H-.I-.J-.K-.L-.M-.N-.O-.P-.Q-.U..R-.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ => j* o# N@ 8+ O@ P@ a@ 1@ R+ 2@ g+ ;+ v. >+ 5. @ 7. $ 9. 0. * b. c. ,+ e. f. ' h. ! i. '+ )+ l. / ( n. o. p. q. } s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 S-.T-.U-.V-.W-.X-.Y-.Z-.`-. ;..;.+;.@;.#;.$;.%;.&;.*;.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 =;.-;.;;.b=.>;.,;.2w ';.6x !n );.!;.~;.{;.];.^;.(] :r /;.(;.t&.t&._;.:;.8Y <;.cw [;.};.<} '..|;.1;.2;.3;.4;.x) 7W 5;.2G

..[%.r&.6;.<; e*.7;.6r %D bv 8;.=A %D x) 6;.[; UW 9;.bY iB <; 0;.;A ct a;.b;.c;.d;.e;.f;.g;.h;.i;.j;.k;.H{ l;.m;.n;.o;.p;.q;.r;.s;.t;.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ P> q= Y# f+ U@ V@ r+ f@ 3@ 9+ @@ `+ !+ ~+ {+ 5 w. ]+ x. % & a = c ^+ y. z. ' ) /+ (+ { l ^ _+ D. _ q E. [ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 u;.v;.w;.x;.y;.z;.A;.B;.C;.D;.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 E;.F;.G;.H;.I;.J;.K;.L;.M;.N;.1w O;.P;.Q;.R;.S;.T;.U;.3 V;.W;.t&.X;.Y;.Z;.`;.:;. >..>.+>.@>.#>.}%.$>.%>.&>.;A *>.=>.0Y dv ->.;>.{U >>.,>.;Z j=.bv '>.)>.!>.]U ~>.;S 2;.{>.]>.4;.^>.^>./>.x) (>._>.:>.<>.[>.}>.|>.1>.2>.3>.4>.5>.6>.7>.8>.9>.0>.a>.b>.c>.b, 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, b$ {@ J@ D@ e+ @# 4@ _@ %@ E+ |+ G. 4 z 6 7 C I. 0 1+ b H 2+ e K g M ,@ j P j@ L. M. o N. 4+ 5+ s X 6+ O. 7+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 d>.e>.f>.g>.h>.i>.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 j>.k>.l>.m>.n>.o>.p>.q>.r>.s>.t>.u>.v>.w>.x>.3 3 3 3 3 y>.z>.dv A>.@D B>.C>.D>.E>.F>.G>.H>.I>.J>.K>.+D L>.M>.N>.O>.P>.b#.Q>.sP R>.S>.T>.U>.V>.W>.X>.Y>.Z>.`>. ,..,.+,.@,.#,.$,.%,.&,.*,.=,.-,.;,.>,.,,.',.),.!,.~,.{,.],.^,./,.(,.#-.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 8[ 3; b$ )# ;@ !# >@ l@ 6@ 7@ %@ L+ 0+ P. a+ b+ Q. B #. D R. S. T. U. I J >. c+ W. ). O ~. Q R ^. Y. 9@ h+ W <. i+ j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 _,.:,.<,.[,.},.RM |,.1,.2,.3,.4,.5,.6,.7,.3 3 3 3 3 3 3 8,.9,. >.0,.a,.3 3 3 3 3 3 b,.c,.d,.e,.f,.g,.h,.y' L> i,.j,.k,.3 3 3 #-.3 3 3 3 #-.l,.m,.n,.o,.p,.q,.q,.q,.q,.p,.p,.p,.r,.s,.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) B/ 4; 2# N@ G@ ~@ n@ 0@ (@ w+ U+ l+ Z. `. 4. + 6. #. ++ 9. m+ *. n+ @+ d. o+ ,. #+ p+ q+ %+ {. ]. l. /. &+ n. *+ s+ [. }. s. t+ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 t,.u,.v,.w,.x,.y,.z,.A,.B,.C,.3 3 3 3 3 3 3 3 3 3 3 D,.E,.F,.3 3 3 3 3 3 3 3 3 3 3 3 b, G,.H,.I,.Y= J,.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ R( j* o# p# 8+ O@ q# a@ b@ R+ c@ v+ ;+ v. >+ 5. @ 7. $ % 0. * = - ,+ e. , ' h. ! ~ s@ ] +@ / ( x+ o. < q. } y+ t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 '8 K,.L,.M,.N,.O,.3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, q= Y# f+ Z# V@ r+ f@ g@ 9+ @@ z+ !+ A+ {+ 5 6 ]+ x. 9 & a = c d y. f B+ ) i j { l ^ n o _ q r D+ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, b$ c$ J@ F@ e+ i@ u@ _@ %@ E+ |+ F+ 4 z A G+ C I. E 1+ H+ H I e K L M N j P j@ k@ M. T N. 4+ I+ s X 6+ J+ K+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 8[ 3; 9% )# ;@ G@ w@ l@ 6@ 7@ w+ L+ 0+ Z. a+ M+ Q. B #. N+ O+ &. T. =. P+ Q+ >. c+ W. ). O ~. {. R ^. S+ (. h+ W <. T+ j+ |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ f} B/ 8& 9& N@ G@ ~@ n@ o@ 1@ C+ U+ l+ ;+ `. 4. + 6. V+ ++ 9. 0. W+ n+ @+ d. e. ,. #+ h. q+ %+ j. ]. l. X+ &+ n. *+ p. Y+ }. s. A@ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ P> j* k* p# 8+ B@ r+ a@ b@ .@ Z+ `+ ;+ v. . @ @ # $ % 0. * = - ; > , ' ) ! ~ s@ ] +@ / ( _ : < [ } | t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, q= Y# {@ Z# D@ E@ f@ 4@ -@ @@ z+ !+ A+ #@ 5 6 7 $@ 9 & a b c d e f B+ ) i j k l m n o p q r t@ :+ u v w x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ R2 s- b$ )# J@ F@ e+ i@ 6@ _@ %@ &@ *@ F+ y z A G+ C D E F G H I =@ K L M N v@ P Q R S T N. V W s X Y Z K+ . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) 3; 4; )# ;@ G@ w@ l@ x@ 7@ w+ U+ 0+ Z. a+ +. @. B #. $. O+ &. T. =. -. Q+ >. ,. '. ). !. ~. {. R ^. /. (. _. :. <. [. }. |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ f} => 8& 9& N@ 8+ ~@ n@ a@ 1@ C+ U+ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. W+ )@ c. d. e. f. g. h. q+ i. j. k. l. / &+ n. o. p. q. }. s. A@ u. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ P> q= k* f+ I@ B@ r+ C@ b@ .@ Z+ `+ ]@ v. . 5 w. # $ % & * = c ; ^@ , ' ) A. B. { ] ^ C. ( _ : < [ } | v 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, Y# {@ Z# D@ E@ f@ 4@ _@ :@ z+ <@ G. 4 5 6 7 8 9 0 a b H d e f g J. i j P l m n o N. q r s t u O. w x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ A' s- b$ )# K@ F@ >@ i@ 6@ [@ %@ L+ *@ P. y z Q. B C D R. S. G H I J }@ L W. N O P Q R S T U V W <. X Y Z ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) 3; 4; 2# L@ G@ ~@ H@ x@ |@ w+ U+ 0+ Z. `. +. + .+ #. $. %. &. *. =. -. ;. >. ,. #+ $+ !. ~. {. ]. ^. /. &+ _. :. <. [. }. -+ 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ => N! o# N@ 8+ O! P@ a@ 1@ R+ 2@ g+ ;+ v. 4. 5. 6. 7. $ 9. 0. a. b. c. ,+ e. f. g. h. ! i. '+ )+ l. / m. n. o. p. q. r. s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ P> q= Y# f+ U@ B@ r+ f@ 3@ .@ @@ `+ !+ v. . 5 w. # x. % & a = c ; y. z. ' ) /+ B. { ] ^ _+ D. _ q E. [ :+ | v 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, [] {@ J@ D@ e+ }] 4@ _@ :@ z+ <@ G. 4 z 6 7 C I. 0 a b H d e K g M ,@ j P K. L. M. o N. 5@ 5+ s t 6+ O. 7+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ A' i^ b$ )# ;@ j^ >@ i@ 6@ 7@ %@ L+ 0+ P. y b+ Q. B 8@ D R. S. T. U. I J >. L W. N O ~. Q R ^. Y. 9@ V W <. X j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) B/ 4; 2# C/ G@ ~@ H@ 0@ (@ w+ U+ l+ Z. `. +. + .+ #. ++ 9. m+ *. n+ @+ d. >. ,. #+ p+ !. %+ {. ]. l. /. &+ _. *+ =+ [. }. s. 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ R( j* o# N@ 8+ O@ P@ a@ b@ R+ c@ g+ ;+ v. >+ 5. @ 7. $ d@ 0. * b. - ,+ e. , ' h. ! ~ '+ )+ l. / ( e@ o. < q. } s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ P> q= Y# f+ Z# V@ r+ f@ g@ 9+ @@ `+ !+ ~+ {+ 5 6 ]+ x. }+ & a = c d y. f B+ ) /+ (+ { l ^ _+ h@ _ q E. D+ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, b$ {@ J@ F@ e+ i@ 4@ _@ %@ E+ |+ F+ 4 z 6 G+ C I. E 1+ b H I e K g M ,@ j P j@ k@ M. T N. 4+ 5+ s X 6+ O. K+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 8[ 3; 9% )# ;@ !# >@ l@ 6@ 7@ w+ L+ 0+ P. a+ M+ Q. B #. D R. &. T. =. I J >. c+ W. ). O ~. m@ R ^. Y. (. h+ W <. T+ j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ f} B/ 4; 9& N@ G@ ~@ n@ o@ (@ C+ U+ l+ p@ `. 4. + 6. q@ ++ 9. m+ *. n+ @+ d. e. ,. #+ h. q+ %+ {. ]. l. /. &+ n. *+ p. Y+ }. s. t+ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ P> j* k* p# 8+ B@ r+ a@ b@ R+ c@ v+ ;+ v. . @ @ 7. $ % 0. * = - ,+ > , ' r@ ! ~ s@ ] +@ / ( _ o. < q. } | t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, q= Y# G1 Z# V@ r+ f@ g@ -@ @@ z+ !+ A+ #@ 5 6 ]+ x. 9 & a b c d y. f B+ ) i j { l m n o _ q r t@ :+ u v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ R2 E, b$ c$ J@ F@ e+ i@ u@ _@ %@ &@ *@ F+ 4 z A G+ C D E 1+ H+ H I =@ K L M N v@ P Q k@ M. T N. V W s X Y J+ K+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 8[ 3; 4; )# ;@ G@ w@ l@ x@ 7@ w+ L+ 0+ Z. a+ +. @. B #. N+ O+ &. T. =. P+ Q+ >. ,. '. ). y@ ~. {. R ^. S+ (. h+ :. <. T+ z@ |. 1. k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ f} B/ 8& 9& N@ 8+ ~@ n@ o@ 1@ C+ U+ l+ ;+ `. 4. 5. 6. 7. ++ 9. 0. W+ )@ c. d. e. ,. g. h. q+ i. j. ]. l. / &+ n. *+ p. Y+ }. s. A@ u. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ P> q= k* p# 8+ B@ r+ C@ b@ .@ Z+ `+ ]@ v. . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, f7 Y# {@ Z# D@ E@ f@ 4@ _@ @@ z+ !+ G. 4 5 6 7 8 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 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ R2 s- b$ )# K@ F@ >@ i@ 6@ _@ %@ L+ *@ F+ y z A B C D E F G H I J K L M N O P Q R S T U V W s X Y Z ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) 3; 4; z9 L@ G@ w@ H@ x@ |@ w+ U+ 0+ Z. .. +. @. B #. $. %. &. *. =. -. ;. >. ,. '. ). !. ~. {. ]. ^. /. (. _. :. <. [. }. |. 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ => N! 9& N@ 8+ ~@ n@ a@ 1@ R+ 2@ l+ ;+ 3. 4. 5. 6. 7. 8. 9. 0. a. b. c. d. e. f. g. h. ! i. j. k. l. / m. n. o. p. q. r. s. t. u. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ P> q= k* f+ I@ B@ r+ f@ b@ .@ Z+ `+ !+ v. . 5 w. # x. % & * = c ; y. z. ' ) A. B. { ] ^ C. D. _ q E. [ F. | v 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, Y# {@ J@ D@ e+ f@ 4@ _@ :@ z+ <@ G. 4 H. 6 7 8 I. 0 a b H d e K g J. i j P K. L. M. o N. q r s t u O. w x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ A' i^ b$ )# K@ F@ >@ i@ 6@ 7@ %@ L+ 0+ P. y z Q. B C D R. S. T. U. I J V. L W. N O X. Q R S Y. U V W <. X Y |. ` . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) B/ 4; 2# L@ G@ ~@ H@ x@ (@ w+ U+ M@ Z. `. +. + .+ #. ++ 9. &. *. =. @+ d. >. ,. #+ $+ !. %+ {. ]. ^. /. &+ _. *+ =+ [. }. -+ 1. 2. 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 3+ => j* o# N@ 8+ O@ P@ a@ 1@ R+ 2@ g+ ;+ v. >+ 5. @ 7. $ 9. 0. * b. c. ,+ e. f. ' h. ! i. '+ )+ l. / ( n. o. p. q. } s. t. 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ P> q= Y# f+ U@ V@ r+ f@ 3@ 9+ @@ `+ !+ ~+ {+ 5 w. # x. % & a = c ^+ y. z. ' ) /+ (+ { l ^ _+ D. _ q E. [ :+ | v w 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ D, E, b$ {@ J@ D@ e+ @# 4@ _@ %@ E+ |+ G. 4 z 6 7 C I. 0 1+ b H 2+ e K g M ,@ j P j@ L. M. o N. 4+ 5+ s X 6+ O. 7+ x 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ 8[ 3; b$ )# ;@ !# >@ l@ 6@ 7@ %@ L+ 0+ P. a+ b+ Q. B #. D R. S. T. U. I J >. c+ W. ). O ~. Q R ^. Y. 9@ h+ W <. i+ j+ |. ` k+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ", "&{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ &{ C) B/ 4; 2# N@ G@ ~@ n@ 0@ (@ w+ U+ l+ Z. `. 4. + 6. #. ++ 9. m+ *. n+ @+ d. o+ ,. #+ p+ q+ %+ {. ]. l. /. &+ n. *+ s+ [. }. s. t+ u+ 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 "}; vdk-2.4.0/testvdk/vdklogo.xpm0000644000000000000000000033150407210246737011625 /* XPM */ static char *vdklogo[] = { /* width height num_colors chars_per_pixel */ " 306 174 256 2", /* colors */ ".. c #0f0e0e", ".# c #4d86a3", ".a c #87133b", ".b c #91c8d3", ".c c #114775", ".d c #b08671", ".e c #864937", ".f c #aaa765", ".g c #4a0d10", ".h c #c55f33", ".i c #534722", ".j c #886b69", ".k c #472b23", ".l c #cdc68c", ".m c #dfa68a", ".n c #e0885e", ".o c #e3e4e6", ".p c #6d692e", ".q c #0c2661", ".r c #72a4b7", ".s c #482e70", ".t c #cfcacf", ".u c #9a4d6e", ".v c #8a6c85", ".w c #c21e4c", ".x c #ad89a9", ".y c #d8a8cc", ".z c #2d678e", ".A c #928b4e", ".B c #f2c9d9", ".C c #6b0b33", ".D c #6b291d", ".E c #4d4b7f", ".F c #843218", ".G c #aba8a8", ".H c #292729", ".I c #db8bb0", ".J c #506992", ".K c #a94f2a", ".L c #c86d44", ".M c #444445", ".N c #2c060c", ".O c #a9999c", ".P c #450664", ".Q c #848384", ".R c #afb6c2", ".S c #d5bbbd", ".T c #706e6f", ".U c #a66a4b", ".V c #973b60", ".W c #d2d5dd", ".X c #ab6990", ".Y c #48371e", ".Z c #fae7c8", ".0 c #c97191", ".1 c #754734", ".2 c #7c98b2", ".3 c #252a65", ".4 c #fcfdfc", ".5 c #a94c6d", ".6 c #885958", ".7 c #481a28", ".8 c #dcb7a2", ".9 c #d995b3", "#. c #f6d9c5", "## c #325885", "#a c #693638", "#b c #3c0642", "#c c #d69781", "#d c #50789b", "#e c #c0999c", "#f c #a59b63", "#g c #ab2953", "#h c #281a19", "#i c #ac7c7c", "#j c #5796ad", "#k c #f2b8c6", "#l c #62572c", "#m c #6e495f", "#n c #10376b", "#o c #c4a9aa", "#p c #060a51", "#q c #1c567f", "#r c #6e287b", "#s c #c689b1", "#t c #3e7796", "#u c #f1e8eb", "#v c #865d85", "#w c #c0b6b2", "#x c #e2c8d9", "#y c #873b25", "#z c #a75940", "#A c #847c43", "#B c #8fa6bc", "#C c #f3dae8", "#D c #884c48", "#E c #462936", "#F c #26386f", "#G c #a7e4e6", "#H c #720f50", "#I c #ce7a5c", "#J c #b37765", "#K c #ae0b44", "#L c #f4d5b2", "#M c #efa9cc", "#N c #9b9394", "#O c #0a1859", "#P c #c73662", "#Q c #560e26", "#R c #f098a8", "#S c #483637", "#T c #ec6c95", "#U c #c589c1", "#V c #e0d8df", "#W c #f1b796", "#X c #683b55", "#Y c #6289a7", "#Z c #cc4c75", "#0 c #35060d", "#1 c #91898a", "#2 c #c797c1", "#3 c #4e4a4b", "#4 c #642a48", "#5 c #f3c9a6", "#6 c #416890", "#7 c #4b1466", "#8 c #dab8d4", "#9 c #983d1c", "a. c #79743a", "a# c #c0c378", "aa c #b12b5f", "ab c #c4a98d", "ac c #d45984", "ad c #c1c4cc", "ae c #ac5c78", "af c #e33866", "ag c #505885", "ah c #c479b4", "ai c #a43e1c", "aj c #725965", "ak c #493779", "al c #393838", "am c #c39684", "an c #6e5a48", "ao c #c9876d", "ap c #85b7c6", "aq c #8a7b81", "ar c #9b945e", "as c #f589b9", "at c #eb4b76", "au c #ab1b47", "av c #641b0f", "aw c #641b74", "ax c #1b1919", "ay c #ee7aa5", "az c #797979", "aA c #6e655f", "aB c #922b52", "aC c #d86e70", "aD c #34487b", "aE c #ac7065", "aF c #b2a888", "aG c #c4b781", "aH c #eca87e", "aI c #b878b1", "aJ c #927672", "aK c #961d46", "aL c #28185c", "aM c #d48e74", "aN c #8c478e", "aO c #843c8c", "aP c #a967a8", "aQ c #aa5f4f", "aR c #763684", "aS c #bce6ec", "aT c #99d3da", "aU c #77afc4", "aV c #dd7c54", "aW c #cb2855", "aX c #976ba5", "aY c #5f6891", "aZ c #540b68", "a0 c #415886", "a1 c #7c3a3b", "a2 c #e89774", "a3 c #995799", "a4 c #57166d", "a5 c #5e5c63", "a6 c #eb5b87", "a7 c #a45ca1", "a8 c #cecba5", "a9 c #94886f", "b. c #d999c4", "b# c #a89789", "ba c #5a5450", "bb c #c9a4c6", "bc c #bebbc1", "bd c #929ab5", "be c #f598c6", "bf c #7c5694", "bg c #9b6a63", "bh c #644265", "bi c #392722", "bj c #58396e", "bk c #591816", "bl c #d87a98", "bm c #957c85", "bn c #791838", "bo c #771848", "bp c #c7406b", "bq c #b33662", "br c #954832", "bs c #5d4a28", "bt c #182966", "bu c #a45244", "bv c #af98bd", "bw c #b6684a", "bx c #734e4a", "by c #392667", "bz c #955c54", "bA c #f3b9d9", "bB c #744788", "bC c #964f46", "bD c #353a72", "bE c #b4b172", "bF c #c4cfdc", "bG c #224878", "bH c #57261e", "bI c #5b2671", "bJ c #762d1e", "bK c #b77199", "bL c #563e1e", "bM c #d66c91", "bN c #6079a0", "bO c #b85c35", "bP c #572843", "bQ c #563842", "bR c #5f484b", "bS c #7b2a40", "bT c #ec897f", "bU c #954d99", "bV c #b56dac", "bW c #b66056", "bX c #b08986", "bY c #a6aac2", "bZ c #7d88a8", "b0 c #8c8dac", "b1 c #961544", "b2 c #780f37", "b3 c #9c2a34", "b4 c #6d6e97", "b5 c #371b1f", "b6 c #ba7991", "b7 c #717a9f", "b8 c #6695af", "b9 c #843f3d", /* pixels */ ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u#u#u#u.4#u.4#u.4.4#u.4.4#u.4.4.4#u.4#u#u#u#u#u.4#u#u#u#u#u#u#u#u#u#u#u#u.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#u.o#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4#u.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4bF.R.RbFadadbFbFbF.W.W.W.o.W.o.W.W.WbFbFbFbFad.R.R.R.R.R.R.R.R.Rbcadadad.tbF.W.W#V.W.o#V.o#V.o.o.o.o.o.o#u.o#u.o.o.o#V.o#V#V.W#V.W.W.WbFbF.tbF.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#C#C#x#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4#u.4.4#u.4.4.4.4#u.4.4.4#u.4.4.4#u.4.4bY.R.b.R.R.badadbFbF.W.W.W.W.W.WbFbFadad.R.R.R.RbY.R#BbYbY#BbYbY.RbY.R.RadadbF.tbF.W.W.W.W.W.W#V.o#V.o.o.o.o.o#V.o.W#V.W.W.W.W.t.t.tadadadbcbc.W.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u#u#V.t#8.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#BapbYapbY.RbY.R.RadbFbFbFbFbFbFadadad.R.R.RbYbY#B#BbY#B#B#B#B#B#BbYbYbY.R.RadadadbFadbFbF.WbF.W.W.W.W#V.W.W.W.W.W.W.W.tbFbFadadadbcbcbcbc.RbYbY.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u#C.Wbbbc.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4#u.2bd#B#BbYap#B.Rap.bbcadadadadad.R.bbY.R#BbY#B#Bbd#Bbdbdbdbdbdbd#B#B#BbYbY.R.R.R.RbcadadbcadadadbFbFbF.WbF.W.WbFbFadadadbcbcbcbc.RbYbYbYbYbvbY#BbY#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#u.4.4.4.4.4#u#x#8bvbvbb.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4bZ.2.r#B.2#B#BapbY.RbY.b.R.b.R.RbYbY#B#B#B#Bbd.2bd.2b0bZ.2b0b0.2b0b0.2bd#B#BbYbYbYbYbYbY.R.R.R.Rbcbcadad.tadadadadbc.Rbc.R.R.RbYbvbYbYbvbdbdbdbdb0b0#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u#x#8bvbv.x#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4#u.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4#u.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4#u.4#u.4.4.4.4.4.4.4.R#Y#Y.2.2.2.2.2#B#B.RapbYbYbYapbY#B#B#Bbd.2.2.2.2bZbZbZbZbZ#YbZbZbZbZbZb0b0bdbdbd#BbY#BbYbvbYbYbYbYbY.R.R.Rbc.R.R.R.RbYbYbvbvbdbvbdbdb0b0b0b0b0bZbmbZbZbc.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C#u.4.4.4.4.4.4.B#8#8.xaXb0aX.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4#u.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4#u#6#6#db7#Yb8b8.2.2.2#B.r#B#B#B#Bbd.2bZbZ#Yb7#Yb7bNbNbNbNb4bNb4b4bNaYbNb7bNbNb7b7b7bZbZbZbZbZbZb0b0.2b0bdbdbdbdbvbdbdbdb0b0b0bZbZbZb7b7aXb4b4b4b4b4b4b4b4b4b4#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4#C#u.4.4.4.4.4.4.4#x.ybba3bfbfbfbf.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4#u.4.4#u.4#u.4.4.4.4#u.4#u.4.4.4.4#u.4.4.4#u.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4a0#6#6#Y#Y#Y#Y#YbZ.2.2.2bd.2.2.2.2bZ#Y#Yb7bNbNaYbN#daY.J.J.J.J.JaY.JaY.JaYb4bNbNbNbNb4bNb7b4b7b7b7b7bZbZbZb0b0b0bZb0bZb7bZb7b4b7b4b4b4aYaYb4aYaYagaYagbfagagag.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.B#C#u.4.4.4.4.4.4.4#x.y#2a3bfbBbBbB.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4#u.4#u.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4##.za0#d#db8#Yb8b8b8.2.2.2.2.2.2bZ#Y#Yb7bNbN#d.J.J.J.J.J.J.J.J#6ag.Ja0.J.J.J.JaYagaY.JaY.JaYaYaYbNb4b4b7b7b7b7b7b7b7b7b4b4b4aYb4aYaYagbfagagagagagag.Eagag.E.Ebv.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4#C.B#u.4.4.4.4.4.4.4#u#x.y#UbfaNaRaRbjaR.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4bG##.z#d#d#Y#Y#Y#Yb8b8b8.2b8bZb8b8#YbNbN#d.J#d.J.J#6ag.J#6aga0a0#6a0a0a0a0aga0aga0agaga0aga0.Jagagag.JaYb4bNb4b4aYb4aYaYaYaYagagag.Eagagag.E.E.E.E.E.E.Eak.E.EbDb4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4bA#C#u.4.4.4.4.4.4.4#V#8.yaIaNbBaRbIbj#raX.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.o.o.o.o.o.o.o.o.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4bG#qa0#6#d#Y#Y#Y#Yb8bZb8#YbZb8#Yb7bN#d#d#d.J.J#6ag#6.Ja0#6a0#6a0a0a0a0a0aDa0aDa0aDa0aDaDaD.EaDa0a0agagagagagaYagaYagagag.E.Eag.E.E.E.EakaD.EakaDbDakbDaDbDbDbDbDbybD.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.B#C.4.4.4.4.4.4.4.4#C#xbbaIaNaRbIbIbIbIbI.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4#w#w#obcb5#E#E#E#E#E#E#E#w#w.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.caD###6#t#d.#b8#Y#Y#jbZb8#Y#Y#Y#Y.#bN#d.J#t.J#6.J#6#6#6#6a0#6a0a0a0##aD##aDaDaDaDaDaDaDaDbDaDaDaDaDaDa0a0.Ea0aga0.E.EaD.E.EbD.EbDbDaDbDbDbD#F.sbDbD#F.sbDby#F.3.3.3bc.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C.B#u.4.4.4.4.4.4.4.4#u#8bbaIbUaRbIa4a4a4bI.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#1b5b5b5b5b5#Eb5#Eb5#Eb5bib5b5bm.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4#nbG.c#6#t#d.#b8#Yb8#Y#Y#Yb8b8b7.#bN#d#d.J#d.J#6#6a0#6a0a0a0#6####aDaDa0aDbGaDbDbG#F#F#F#F#F#FbD#FbDaDaDbDaD.EaDaDbDbDaDbDbDbDbD#FbDbybDbD.3by#F.3by#F.3.3.3.3.3aL#OaLbZ.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#8#M#C#u.4.4.4.4.4.4.4#u#V#xb.aIbUaRawa4#7#7#7.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.4.4#u.4.4.4#u.4.4.4.4#u.4#u.4.4.4#u.4.4.4#V#E.N#hb5bib5b5.7#Eb5#S#S#E#E#Ebi.7b5b5b5b5#E.o.o.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4aD#F.c##.z#t#d.##Yb8#j#Yb8#Y#Y#j#Y#YbN#d#d#d#t.J.J#6#6.J#6a0#6#6###########qaD#FbGbD#F#F#n#n#F.q#nbtbt#F#F#F#F#F#F#F#F.3.3.3.3.3.3.3.3bt.3aLbtaL.qaL.qaL.qaL.qaL#OaL#O#p#p#OaL.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4#U.ybA.4.4.4.4.4.4.4.4.4.4.o#8.yaIaNaRawaw#7.P#7a4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#w#h.Nb5#0#b#E.7#E#S#E#S#E#S#S#Sbibi#Ebibib5#hb5b5b5#w.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n.c#q#q#6#t#d.#.#b8.rb8b8#jb8#Y#Y#YbN.##dbN#d#t#t#t#6#6#6#6#6##a0a0a0##aD####aDaDbG.cbDbGbt#F#F#n#Fbt#Fbtbtbtbt#F.3btbtbtbtbtbtbtaL.qaL.qbtaL.qaL#O#OaL#OaL#O#O#O#O#p#O#p#p#p.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C.9bA.B.4.4.4.4.4.4.4.4.4.4#u#8b.aIbU#r#raZ.PaZ.P.PaZ.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4bm#0.N.N#hb5b5#E#SbibQ#S#S#S#S.YbQ#S#S.kbibi.kb5b5b5b5b5#1.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#nbG#q.z#t#t.##Y#j.r.rb8b8b8#j#Y#Y.##Y.##d#d#d#d.J#t#t#6.J#6.Jag.za0a0#####qbGaDbGaDbG#F#F#F#F#n#Fbt#nbtbt#Fbtbt.qbtbtbtaL.q.q#ObtaL.q#O#O#O#O#O#O#O#O#O#O#paL#p#p#p#p#p#p#pbZ.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.I#MbA#C.4.4.4.4.4.4.4.4.4.4#V#8#UahbU#rawaZaZ.P.P#7.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.N#h#b#h#b#Ebi.Y#S#S#S#3bQbQbQ#abQ.ibL#S.k.Ybi.k.kbib5bib5ajaj.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n.cbG#q.z#6#t#d#j#Y.r.rb8.rb8b8b8#j#Y.##Y.#.#.##d#d.J#d#t.J.z.J#6#6#6#6##a0a0bG##bGaDbGbGbG#F#F#F#F#n#F#F#F.qbtbtbtaL#O.q.q#O.qaL#O#O#OaL#O#OaL#O#paL#O#paL#p#paL#p#p#p#p#p#p#p.E.4.4.4.4.4.4.4.4.4.4.4.4.4.4b.b.bA.B#u.4.4.4.4.4.4.4.4.4.4#V.y#UaIaNaR#raw.P.P.P.P.PaN.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.o#h#b#h#0bi.3.kbQbQbQbQbQbR#lbsbs.ibQ#lbQ.ibL.Y.Y.Y.k.k.kbibib5.k#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.q.c.c#q#6.z#d.#.##jb8#j.r.r.rb8b8b8b8b8.##Y#YbN.##d.##d#d#d#d#6#6.J#6##a0.z####aD##aDbGaDbGbG#F#F#F#F#Fbtbt#F#nbtbt.q.q#O#O#O#O.q#p#p#O#O#p#O#p#O#O#p#p#p#p#O#p#p#p#p#p#p#p#p#p#paL.o.4.4.4.4.4.4.4.4.4.4.4#u.IbAbA#C#u.4.4.4.4.4.4.4.4.4.4#C#8#UaIbUaO#ra4aZ.P.P.P.P.P#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.N.N#h#bb5bi#E.kbQ#SbQbQbRbabRanbRba#lbR#lbabs.i.Y.i.YbL.Ybi.Ybibibib5.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n.caD#q.z#t#d.#.#.rb8aUaU.r.r.r.r.r#jb8b8#j#Y.##Y#Y#d.##d#d#d#d#d#6#t#6.J#6a0a0a0####a0bGaDbGbGbG#FbG#F#F#n#Fbt#Fbtbtbtbt#Obt#O#O#O#O#O#O#O#O#p#p#p#O#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.4.4.4.4.4.4.4.4.4.4.4#sb.bA.B#C.4.4.4.4.4.4.4.4.4.4.4#V#8#2aIbUaRaRaw.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4a5.N#0bi#S#b#S.kbQ#3#XbRanajanaAajaAa.aAa.an.paAanan#lbR#l#l.i.i.YbL.Y.Y.YbiaAaA.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n.cbG#q.z#6#t.#.#b8.raUaUaUaU.raUaU.r.r.r.rb8b8b8b8#Y#jb8.##Y.#bN#d#d#t#d#d.J#6#6#6a0#6a0a0####aD##aDbGbGbDbG#F#F#F#F#Fbtbtbtbtbt#O#O#O#O#O#p#O#p#p#O#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.E.4.4.4.4.4.4.4.4.I.ybA.B#C.4.4.4.4.4.4.4.4.4.4.4#C#8bb#UahaOaO#rawaZ.P.P.P#b.P.Pbf.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.N.N#hb5bi#S#SbQ#Sbxa5ajajajaAaAaJ.j.j.j.j#AaA.j.pa.aA.p#l.p#l#l#l.i.i.i.YbL.k.YbQ#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#nbG#q#6#t#t.##Y#j.raU.baUapapaU.raU.r.r.r.r.r.rb8b8b8#j#YbNb8.##YbN#d#d#d#d#t.J#t#6a0#6a0a0##a0##aD##bGaDaD#FbGbG#F#Fbt#Fbtbtbtbtbt.qaL.q#O#O#O#p#p#p#p#O#p#p#p#p#p#p#p#p#p#p#p#p#p#p#paL.4.4.4.4.4.4.4.I#MbA#C.4.4.4.4.4.4.4.4.4.4.4.4.o#8.y#UahbUaR#rawaZaZ.P.P.P.P.P.P#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.N.N#bbi.k#SbQbQ#3bRajajajaA.jaAazaq#Jaqa9aJ.j#A#A.j#A#AaA.p#l#l#l#l#l.i.ibL.i.Y.Y.Y.Yad.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#nbGbG.z#6#d#d.#b8b8.rap.b.baU.bapaUaUaUaUaU.r.r.r.rb8b8b8b8b8bNb8.#.#bN#d#d#d#d.J#d#6#6#6#6a0a0a0##a0aD##bGaDaDbGaDaD#F#F#F#F.3.3btbt.q#O#OaL#O#O#O#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#pbc.4.4.4.4.4#C#M.B.B#C.4.4.4.4.4.4.4.4.4.4.4.4#u#8.y#2aIaNaOaO#ra4.P.P.P.P.P#b.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.N..#hbi.k#SbQbQbRa5ajajaj.T.jaqaJ.Aa9.Aara9ara9.A#A.A#A#A#A#Aa..p.p.p.p#l.i.i.i.i.Y.Y.Y#N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4bd#n.cbG##.z#6#d.##Y#j.raU.bap.b.bapapapapaUaUaUaU.r.r.rb8.r.rb8b8#jb8bNb8#Y.#bN#d#d#d#d#d#d.J#6#6#6#6a0a0a0a0##aDaDaDaDbG#FbD#F#F#F#F.3btbt.3.qbt#O#O#O#O#O#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p#p.4.4.4.4.4#U#MbA#C.4.4.4.4.4.4.4.4.4.4.4.4.4#C#8.y#UahaNaOaO#raZaZ.P.P#b.P.P.P.P.x.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.N.Nb5bi.7.kbQ#3ajajaAaAaq.Taqaq#1a9#Nar#N#N.farara9ar.A#f#A#A#A#A.pa..p.p.p#lbs.i.i.ibL.Y.j.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#F.cbG###6#t.#.##j#j.raU.b.b.b.b.b.bap.bapapapaUaU.r.raU.r.r.r.r.2b8#Yb8b8#Y#Y#YbN#YbN#d#d#d.J#d.J.J.Ja0a0a0a0a0####aDaDaDaDbGbDbG#F#F#F#Fbt#F.3bt.3#O.3#O#O#O#O#p#p#p#p#p#p#p#p#p#p#p#p#p#p#pag.4.4.4#M.9bA#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.o#8.y#UaIbUaOaO#ra4aZ.P.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.N.N#b.k#E.kbRbRbaajaAaAaqaJaqaq#1#1b#b#.f#NaFb#aFar#f#fa9.far.A.A#A#A#Aa.a..p.p.p.p.pbL.i.i#lbR#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#n.cbG#q.z#d#t.#b8.r.raU.b.baTaT.b.b.baU.b.bap.baUap.raU.raU.2.r.r.r.rb8b8b8b8.##Y.##YbNbNbN#d#d#d#d.J.J.J#6.Ja0a0a0a0aD##aDaDaDaDaDbD#F#F#Fbt#F.3.3btbt#O.3#OaL#O#O#p#p#p#p#p#p#p#p#p#p#p#p#p#p.3#u.4aI#MbA#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.o#8bbb.#Ua3bUaR#rawa4aZ.P.P.P#b.P.P#b.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.N#hbi.k#S.ibRanaA.j.jaqaqaq#1#Nb##NaF.OabaFaFaFbEaF.f.f#f#f#f.Aar.A.A.A#A#Aa..p.p.p#l.p.i.i.i.i.Y.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#nbG#q##.z#d#t#Y.##Y.raUaU.b.baTaTaTaT.b.b.b.bap.bapapapapapaU.r.r.r.r.r.2b8b8.2b8#Yb8#Y#Y.#bNbN#d#d#d#d.J.J#6.J#6.Ja0a0a0a0aD##aDaDbGaDaDbDbD#F#F#F.3.3.3.3.3.q#OaL#O#O#O#p#p#p#p#p#p#p#p#p#p#p#p#pah.ybA#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4#x#8.y#2#UbUbUaO#r#rawaZ.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#hb5bi#S.ibRan.jaza9aq#1#1#N.O.G.G.G.Ga8#o.la8.l.l.laGa#bEbEa#bE.f.f.f#Aa..p.p.p.p.p#l.p#l.p#l#l#l.iaJ.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#F.cbG##.z#d.#.##j#j.raUap.baTaT#G#GaTaTaTaTaTaT.b.b.b.b.bapapapapaUapaU.r.r.r.2.r.2.rb8#Yb8#YbNb8bN#YbN#dbN#d#d.J#dag.J.Ja0.Ja0a0a0a0##aDaDaDaDaDaDbD#F#F#F#F.3.3btaLbtbt#ObtaL#O#p#p#p#p#p#p#p#pbK#M#MbA#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#x#8.yb.#Ua7bUaOaR#rawa4.P.P.P.P.P#b.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4#0b5b5#S#l#lba.ja9a9a9#1b#b##oaF.G#wa8.Ga8a8a8a8a8a8.l.l.la#a#a#.f.A.p.p.p.p.p.p.p.p#l.p.p.p.p.p.pbs.i.pan.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#nbG#q#q.z#d#t#Yb8.r.r.bap.baT#G#G#G#G#GaTaTaTaTaT.baT.b.b.b.bap.bapapapaU#B.r#B.r.r.r.2.r.2b8b8b8bNb8bNbNbNbNbN#dbNbN.J.J.J.J.Ja0a0a0a0a0##aD##bDaDaDaDbD#FbD#F#Fbtbt.3.3btaL#O.3#OaL#p#p#p#p#pa3.9#MbA.B#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C#8#8bb#Ua7a3aNaO#rawaw.P.P.P.P.P.P.P.P#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4bQb5bi.YbQbsbx.p.Taqbmb#b#b#.G.G#o#w.Sa8#waFb#aFabaF.OaF.f#f.A#Aa.#l#l.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.pbsbs.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#nbGbG###6#t#d.##j#j.raU.b.baT#G#G#G#G#G#G#GaT#G#GaTaT.b.b.baT.bap.baU.bapaUap#BaU#B.r#B.rb8#Bb8b8.2b8bNb8bN.##YbNbN#d#dbN.J.J.J.J.Ja0a0a0a0a0a0a0aDaDaDbDaDbD#F#FbD#F#F.3.3bt.3#OaL#OaL#paL#pby#sb.#MbA.B.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#x#x.y#2#Ua7bUaNaO#rawaw.P.P.P#b.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4aJbib5.Y#3.p.1bRbx#lajbxaAaA.j.jbN.j.vaz.N.N.N.N.N.N#0#0.N.N.N.N.N.N.Y.ibLbLbL.YbL.Y.ibL.YbL.YbL.p.p.p.p#l.iaF.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.q#n.c#q##.z#d#d#Y#Y.rb8aU.b.baTaT#G#G#G#G#GaS#G#G#G#GaT#GaTaTaTaT.b.b.bap.bapapapapaU#BaU.r#Bb8#B.rbZ.rb8#j#Y#Yb8bN#YbNbNbN#dbN.J.J.J.J.Jag#6a0a0a0aka0aDaDbDaD#FbD#FbDbt.3.3btaLbt#ObtaL#O#O#pbl.9#MbA.B#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#x#8.y#2#Ua7bUaOaO#rawawaZ.P.P.P.P.P.P.P.P.x.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.j.gb5bkbH.k#0#0#0#0#0#0#0#0.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.Nbi.kbi.k.kb5.7.6aj.6aj.6aj.6.6.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#nbGbG###6#t#t#Y#j#j.rapap.baT#G#G#G#GaS#G#G#G#G#G#G#GaT#GaTaTaTaT.baT.b.bap.baUapaUap#BaU.r.r.2.rb8.2b8b8bNb8bNbN#YbNbN#d.JbN.J#da0.Ja0a0a0bBa0a0akaDaDaDaDbDbDbDbtbD.3bt.3.3bt#OaL#O#paL#pbB.I#M#M.B.B#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#x#x.yb.#Ua7bUaNaO#r#rawaZ.P.P.P.P#b.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4b9#ab9#a#a#a.g.g.g#0.g.g#0#0#0.g.N#0.g#0#0.N.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N#0.N.N.NbPbPbHbPbP.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4#n#n.cbG###6#d#d.#b8b8.rap.b.baTaT#G#G.o#G#G#G#GaS#G#G#GaT#GaTaTaTaT.bapbb.bapapapap#B.rap.r.r#Bb8.2b8b8b8b0bNb8bN#YbNbN#dbN.J.J.J.J.Ja0a0.Ja0.Ea0aDaDaDaD#FbD#FaD.3#F.3.3.3bt#O#p.3#O#O#p#paL.9.9#MbA.B.B#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#x#8#2#UaPa3aOaO#r#rawaZ.P.P.P.P.P.P#b.P.P#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4#x#V#x#x.Dbkbkbk.gbk.g.g.g.g.N.g#0.g.g#0#0.N#0.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N#0.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N#0.N#0.t.S.S.t.4.4.4.4.4.4.4.4.q#nbGbG####.J#t.#.##j.r.raU.b.baT#G#GaS#G#GaSaS#G#G#GaT#GaTaTaTaTaT.b.b.bapap.bapap.rap.r#B.2.rb8b8b8b8b8aX#Yb8bNbNbNbNbNbN.J.J.J.Ja0.Ja0a0a0a0aDaDaD#FaDbGbDbD#F#F#F.3btbtaL.3.3aL#paL#OaL#p#p.9#M#MbA#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#8#8#2#Ua7a7a7aOaR#r#ra4.P.P.P.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.8.Ubz#D.ebJ#a.Davav.gavbk.g.g.g.g.g.g#0#0.g#0.g#0#0.N.g.N#0.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.jaj.j.jbt#nbGbG##a0.J#t.##Yb8.raUaU.b.b#G#G#G#GaS#GaS#G#G#G#G#GaTaTaT.baTap.bapapapap#B#B#B.r.rb8.rb8#Y.r#Y#Y#Y#Y#YbN#YbN#dbN#d.J.J.J#6#6a0a0a0a0aDa0aDaDbDaDbD#FbD#F#F#F.3.3.3.qaL#OaL#O#OaL#p#p#p#pbl#MbAbA#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#8#8b.#UbVa7bUaNaO#r#raZaZ.P.P.P.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4#u#obXbgbzbC.1.1bJ.Dav.D.gav.g.g.g.g.g.g.g#0.g#0.N#0.N.g#0#0.N.N#0.N#0.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N#0.N..#h.N#hbG.z#d#dbN#jb8.raU.b.b.baTaT#G#G#G#G#G#G#GaTaTaT.baTaTap.b.bap.bapapaUapap.r#B.r.r.rb8b8#Y#Yb8bNbNbNbNbN#dbN.J.J.J#6#6.Ja0a0a0a0a0aDaDaDaDaD#FbD#FbDbt.3bt.3bt#Obt#O#O#O#O#O#p#p#p#pa7.9#MbA.B#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.o#x#8#2#2bVa7a3aNaO#r#ra4aZaZ.P.P.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u#u#o#oam.dbgbz#D.e.1bJbJavbH.gav.gav.g.g.g#0.g.g#0.g#0.g#0#0#0.N#0.g.N#0.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N#0.N.N.N.N#0##.J.##j#j.r.raU.b.baT#G#GaS#G#G#G#GaT#GaTaT.b.b.b.b.bapap#BaUap.r#B.r.r.rb8b8.2b8b8#Yb8bN#YbNb8#dbN.J#d.J#d#ta0.Ja0a0a0a0a0aDaDa0#FaDbGbD#F#F#F#Fbt.3bt#O.3#OaL#OaL#O#p#p#p#paL#UbebA.B.B#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#8.y#2ahaPaPbUaNaO#r#rawaZ.P.P.P#b.P.P.P#b.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u#x.8.8#eam.d.Ubz#D.ebJ#y.Davbkav.gav.g.g.g.g.g.g#0.g.g#0#0#0#0#0.N.g.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#3agag.r.rapaU.baTaT#G#G#G#G#GaTaTaTaT.b.b.b.b#B.bapapaUap#BaU.rb8.r.2.r#Yb8#Y#Y#Y#Y#Y#YbNbN#d#d#d.J#6.J#6#6a0a0a0a0aDaDa0aDaDaD#FbD#F#F#Fbt.3bt.3bt#O#O#O#O#O#p#p#p#p#p#pbl.9#MbA.B#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#x.ybbahbVa7bUaNaRaR#rawa4aZ.P.P.P.P#b.P.P.P#b.Pbv.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#.a8.Sab#eam.dbg.6bC.1a1#a.D.Davbkbkbkbk.gbk.g.g#0.g#0#0.g#0#0#0#0#0.N#0.N#0.N#0.N#0.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.M.Mapap.b.baTaT#G#G#GaTaTaTaT.b.b.bap.bapapapap#BaUaU#B.rb8.r.r#Yb8b8b8bN#YbN#YbN#d#d#d.J.J#6.J.Ja0a0a0a0##aD##aDaD#FaD#F#F#F#F#F.3bt.3.qbt#O#O#OaL#p#p#p#p#p#p#pbB.9b.#MbA#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#xb.#2#UbVa7bUaNaO#raRawaZaZ.P.P.P.P.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#x#x.8#oabbX.d.U.6.e.ea1bJ.Dav.Dav.g.gav.g.g.g.gbk#0.g#0#0.N.g#0#0.g.N.N#0.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N#0.N.N.N#0.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N#0.N.N.N.N.N.N.N.Nbiap.b.b.b#G#GaTaTaTaT.baT.b.b.bap.bapapapap.raU.r.r.r.rb8b8b8b8#Y#YbN#Y#YbN#dbN.J.J#t.J#6#6#6a0a0a0##aDaDaDaDaDaD#F#F#F#F#Fbtbtbtbt#ObtaL#paL#O#O#p#p#p#p#p#pah.9#MbA#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#8.y#2ahaPa7bUbUaO#r#rawawaZaZ.P.P#b.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4#C#L.S.S#oamam#i.U.6.e.e#abJbJbHav.Dbkbkav.g.g.g.g.g.g.g#0.N.N.g.N.g#0.N.N#0.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#YaTaTaTaT.baT.b.bapaUapaUapaUaUaU.r.rb8.rb8b8b8#Yb8bN#Y#Y.#bN#d#t.J#d#d.J#6#6#6a0a0a0a0aDaD##aDaDbG#F#F#F#F#Fbtbtbtbtbt.q#O#O#O#O#O#p#p#p#p#p#p#p.s.I.9#MbA.B#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#C#8.y#2#2#UaPaPbUbUaOaO#r#ra4aZaZ.P.P.P.P.P.P.P.P.P.Pbv.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.o.W#x.8ababbX.d.Ubz#D#y.1a1.Dav.Dav.gbkbk.g.g.g.g.g.g.N.g.g#0#0#0#0#0.N#0#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#6aT.baT.b.b.b.baUaUapapaUaUaU.r.r.r.rb8b8#Y#Y#Yb8b8.#bNbN.#bN.J#d.J#6#6#6a0a0#6a0######aDaDbDbGbG#F#F#F#F.qbt#Fbtbt#O.q#O#O#O#O#p#p#p#p#p#p#p#pah.9.y#MbA.B#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V.t#8b.#2ahbVa7bUbUaOaOaR#rawawaZ.P.P.P#b.P.P.P.P#b.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4#.#L.S.8#w#cam.dbg.U.1bz#ybJ#a.Davavavbkbkbk.g.g.g.g.g.g#0#0#0.g#0#0#0#0.N#0.N.N#0.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.NaTaT.b.baU.baUaUaUapaUaUaUaU.r.r.rb8.rb8b8b8bN#jbNbN#d#d#d#d#d.J#d#6.Ja0#6a0##a0####bGaDaDbGaD#F#F#F.q#nbtbt.q.q.q#OaL#O#O#O#p#O#p#O#p#p#p#pa3.9#M#MbAbA#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#x.ybb#2#UbVa7a7bUaOaOaOawawawaZaZ.P.P.P.P.P#b.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.o#.#..S.8#eam.d.Ubz.6.ea1.1bJ.D.DbHbkav.gavbk.g.g.g.g.g#0#0#0#0.N.g.N#0.N#0.N#0.N#0.N.N#0.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N...baU.baTaU.baUaUaUaUaU.r.r.rb8b8#jb8#Yb8#Y.#bNbN#d.#bN#d#6#6.J#6###6a0##a0###qaDaDaDaDbGbG#F#F#Fbt#nbtbtbt.qbt#O#O#O#O#p#O#p#p#p#p#O#p#p#pah.9.y#MbA#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#x#8.y#2ahbVaPbUbUaOaOaR#rawawaZaZ.P.P.P.P.P.P.P.P.P.P.P.4.4.4.4.4.4.4#V.B#V.B#V.B.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4#u#C#V#L#5.8ambXaE.j#zbC.1#ya1.D.Davavbkbk.gbk.g.g.g.g#0.g#0#0.g.N#0#0#0#0#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.b.baUapap.baUaUaUaU.r.r.r.rb8.r#Yb8#j#Y.##Y#d.##d#d#t#6.J#t#6#6#6##a0####aD##aDaDbGbG#F#F#F#n#nbtbtbtbt.q.q#O#O#p#O#O#O#p#O#p#p#p#p#p#p#pb.be#MbA.B#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#C#8#8bb#2#UbVaPa3bUbUaOaR#rawaZaZaZ.P.P.P.P.P.P.P.P.P.P.P#2.4.4.4.4bbbbb2b2.C.C.C.C#e#2#o#e#2.4.4.4.4.4.4.4#u.4#u.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#.#L.B#L#x.8.m#ibzbz.6.e.e.1.D.D.DavbH.gav.g.g.g.g.g.g#0#0.g#0#0#0.g.N.N#0.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.NapaU.baUapaUaU.raU.r.r.r#j.rb8#j#Yb8#Y#YbN#d.##d#d#d.J#d#6#6#6a0#6a0.zaD####aDaDbGbG#F#F#n#Fbt#Fbtbt.q.q.q.q#O#O#O#O#p#O#O#p#p#O#p#p#p#pbh.y#MbAbA.B#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.o#x#8b..y#UahaPbUbUaNaOaO#r#rawa4aZ.P.P.P.P#b.P.P#b.P#b.P.P.4.4b6bKb2b2b2.C.C.C.C.C#Q.C#Q#b#Q.v.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#.#.#V#5#5#L#5#Jbg.U#D.e.1#y#a.Dav.Dbkav.g.gav.g.g.g.g.g.g.g#0.g.N#0.N.N#0#0.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N#0.N.N#0.N#0.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#YaU.baU.baUaUaUaU.r.r.r.r#j.rb8#j#Y.##Y#d#Y#d#d#d#d#t.J#6#6###6##########aDaDbGaDbG#F#n#F#F#nbtbt.q.qbt#O#O#O#O#O#O#O#O#O#p#O#p#p#O#p#p#p#sbe#8bA.B#C#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#x#8#8bbb.#2ahbVbUbUbUaOaO#r#ra4aZaZaZ.P.P.P.P.P.P.P.P.P.P.P.u.5.a.a.a.a.ab2b2b2b2.C.C.C#b.C.g#bbh.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#.#.#V#5.B#L#L#.#L#L#L#L#L#L.Ubg.DavavbH.gbk.g.g.gbk.g#0.g.g#0.N.g.N#0#0#0.N#0.N#0.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.NaUaUapaUaUaU.r#j.r#j.r#j#j#jb8#Y.##Y.##d#d.##d#6#t.J.z#6##a0#######q##bGaDbGbG#F.c#F#n#nbtbt.q.q.q#O.q#O#O#O#O#O#O#O#O#O#p#p#p#p#p#p#pby#s.9#MbA.B#C#C#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#8#8.ybb#UahaPa7a7bUaNaOaR#rawa4aZaZ.P.P.P.P.P#b.P.PaZb1b1b1b1.aaub1b2.ab1.ab2b2.C.C.C#Q.C#Q.C#b#Q.7bb.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#.#V#L#.#5#x#5#.#L#L#.#.#.#..Z.ZbX#fbXavbkav.g.g.g.g.g.g#0#0#0.g#0.g#0#0#0#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.Na5aUaUaUaUaU.r.raUaU#j#j#j#j#j#j.##Y.##d.##d#d#t#6#t#6#6#6#6##########aDbGbGbGbG#F#F#F#F#n#nbt.qbt.q#O#O#O#O#O#O#O#O#O#p#O#p#p#O#p#p#p#pah.I.ybA.B.B#C#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#x#8.yb.#2aha7a7bUbUbUaOaR#r#rawaZaZ.P.P.P.P.P.P.P.Pb1aub1.a#K.ab1b1b1b1b2.a.a.ab2.C.C.C#Q.C#b#Q#Q#7.7#1.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#V#L#x#L#x#5#L#.#.#.#L#L.Z.Z.Z#.#u.Z#ua8.S#w.l.S.g.g.g.g#0.g.g#0.g#0#0.g#0#0#0.N#0.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.NapaUaUaUaU.r#jaU#j#j.r#j#j#j#j.#.#.#.#bN#t#d#t#6#t#6#6#6#########q##bGaDbGbGbG#F#F#n#F#nbt.q.q.q.q#O#O#O.q#O.q#O#O#O#p#O#p#O#p#p#O#p#p#v.I.9bebA.B#C#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C#x#x#8.y#2#2aIbVa3a7bUaNaO#r#raw#raZa4aZ.P#b.P.P.P.P#Hb1auaub1b1b1au.ab1.ab1.ab2.a.a.C.C.C.C.C#Q#Q#Q#QbPbP#v.4.4#u.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#.#V#L.B#5#L#V#.#L#L#L#.#L#L.Z.Z#u#u.4.4.4.4.4.4#u#u.Z#ubHbH.k.D.7.D.N.N#0#0.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N#0.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.raU.raU.r#jaU#jaU#j#j.r#j#j#j.##d.##d#t.##t#6#6#6#6###6.z.za0#q##aDbGbGbGbG#F#n#n#F#nbt.qbt.q.q.q#O#O#O.q#O#O#O#O#p#O#O#p#p#O#p#p#paLahb.b.bAbA.B.B#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#x#x#8.yb.#2ahbVa7a7bUbUaOaO#r#rawawaZaZ.P.P.P#b.Pb1b1auaKb1#KaKaub1.a#K.a.a.a.ab2.Cb2.C.C.C.C.C#Q#b.7#QbPbPbh.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#V#L#x#L#5#x#5#L#L#L#L#L.Z#.#..Z.Z#u.4.Z.4.4.4.4#u.4.4.4.4.4.4.4.4.4ajbx.6bxbxbxbxbx.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.NaUaU.r.r#j.r#j.r#j#j#j#j.##j.#.##d#d#t#d#t.J#6.z#6#6.z######aD#qaDaD#qbG.c#F#n#nbt#n.q.q.q.q.q#O#O#O.q#O#O#O#O#O#O#O#O#p#p#O#p#p#p#paI.Ib.#M#M.B#C#C#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#x#8.ybb#2aIa7bVbUa7bUaN#r#r#rawawaZaZ.P.P.P.Pb1auauau#Kauauaub1aub1b1b1.ab1b2.ab2b2.C.C.C#Q.C.C#Q#Qa4bPbP#X.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#V#L#x#5#x#5#5#5#L#L#5#L#L#L#..Z#u.Z.4.4.4.4.Z.4.4.4.4.4.4.4.4.4.4.4.4#u.4#u#u#u.Z#uaJaJbgaJaJbgaJbgbg.N.N.N.N.N#0.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N#0#0#0#0.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.Na5.raUaU#jaU#j.r#j#j#j#j#j#j.#.#.##d#t#d#t#6#6#6#6.z##a0#######qaDbGbGbGbG#F#n#n#n#n#n.q.q.q#O.q.q#O.q#O#O#O#O#O#p#O#p#O#p#O#p#p#p#pbh#s.9.ybAbA.B#C#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#V#V#8#8.yb.#2ahbVbVa7bUbUaNaOaR#r#rawa4aZ.P.P.P#Hauauauau#Kauauauauauau.a#Kb2#K.a.a.ab2b2.C.C.C#Q#b#Q#Qbk.7#4bQ#m.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#x#L#5#x#5#5#x#W#.#L#5#L#L#.#.#u.Z.4.4.Z.4.Z.4.4.4.Z.4.Z.4.4.4.4.4.4.4.Z#u.4#u#u.Z.Z#..Z#.#.#.#.#L#L#5am.d.dao#J#JaE.UaE.UaQbz#DbC.6br.e#y#y#ya1bJa1bJbJ.D.Dav.DavbkbH.gbk#0bk.g#0.g.g#0.g#0#0.g#0.g#0.N#0.N#0.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.raU.r#j#j#j.r#j#j#j#j#j.#.#.##d#t#t#d#t#6#6#t.z#6#########qaDbG.cbGbG.c#F.cbt#n#F.q.q.q#O.q.q.q#O.q#O#O#O.q#O#O#O#O#O#p#O#p#O#p#O#paI.9b.#M#kbA.B#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#C#x#8.ybb#2bVaPaPa7a7bUaNaO#r#r#rawawaZ.P.P.aauauau.wauauauauauaub1au.aau.ab1.a.ab2b2.Cb2.C.C.C#Q.C.7a4bPbP#4#m#1.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#x#5#5#5.8#5#W.B#L#5#L#.#L#.#..Z.Z.4.o.4.4.4.4#u.4.Z#u.4#u.4#u.4.4#u.4#u.4.Z#u.Z#u.Z.Z#.#.#.#.#L#k#L#5#5#W#kaG#W#c#c#c#caobX#I#Jbw#J.5bw.u#z#DbCbr.ebS#D.F.1.F.D.D.YbJav.gav.gbk.g#0.g.g#0.g#0.g.N#0.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.Nalb8.r.r#j#j.r#j#j#j#j#t#j#t#t.##t#t#6#6.z#6.z#6a0###q###q##bGaDbGbG#F#n#n#n#n.q#n.q.q.q.q#O.q#O.q#O#O#O.q#O#p#O#O#O#O#O#p#p#O#p#p#paIb.#M#MbA.B.B#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C#V#8#8.y.y#UaIbVbVa7a7bUbUaOaR#r#rawawaZ.P#K.w.wau.w.wau.wau.w#gauauauau.aaub1.ab1.ab2b2b2.C.C.C.C#Q#Qbo.7bPbPbhbx#v.t.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.Z.S.8.8.8#k#W#L#L#5#5#L#L.Z.Z.Z.Z.4.Z.4.4#u.4.4#u.4#u#u#u.4.Z.4.4.4.4#u.4#u#u.Z.Z.Z#..Z.Z#.#.#L#5#5#L#k#W#W#W#W#c#c#c#c.daM#I#J#JbwbW.UaQbubCbCbCbrbr.1bJbS.D#abJ.D.Cav.gav.gbk.g.g.g.g#0.g#0#0.g#0#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.r#j#j#j#j#j#j#j#j#j.#.#.#.##t#t#t#t#t.z#6.z.z#######q##aDbGbGbG.c#n#n#F#n#n.q.q.q#n.q.q.q.q.q.q#O.q#O#O#O#O#O#O#O#O#O#O#O#p#p#p#p#p.I.9#M#MbAbA.B#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#V#x#8.ybb#2ahaPbVa7a7bUbUaOaR#r#rawa4a4.a.w.wau.w.wau.w.w#gau.wauauauauaKaub1b1.a.a.ab2b2.C.C.C.C#Q#Q.7#QbPbP#X#maj#v.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.8#5#W#5.8#W#5#5#5#5#5.Z.Z#..Z.o.4.Z.4.4.Z.4.o.4.4.4.4.4.4#u.4.4.4#u.4.4.Z#u.Z.4.Z#.#.#.#.#L#L#L#5#5#5#W#W#W#cab.m#caMaoao#J#J#Jbwbwbg#zbC#zbrbC#ybx#y.1bJbR.DbJ#abHbk.kav.g.7bk.g.g.g.g#0.g#0#0#0#0.N.N.N.N.N.N#0.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N#j.r#j#j#j#j#j#j.#.##j.##t#t.##t#t#6.z#6#6.za0##.z#q#qbGbG#qbGbG#n#F#n#n#n#n#n.q.q.q.q.q.q.q.q.q#O#O#O#O#O#O#O#O#O#O#p#p#p#p#p#O#p#p#2bebAbAbA.B#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#C#x#8.y#2#2aIaPbVa7a7bUbUaOaO#r#rawawaZau.w.w.w#gaW.w#gaWaW.wbqauaWaub1aub1aub1b1b2.ab2.a.C.C.C.C.C#bbo#QbPa4#X#maj#v.O.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.8.8.8.8.m#W#5#W#5#5.Z#5.Z.Z.Z.Z.Z.Z.4.4.4.4.4.4#u.Z.4#u#u.4#u#u#u.4.4.4#u#u.Z.Z.Z#.#.#.#.#L#L#L#5#k#W#W.8#W#W.maM#cam#caoaobw#J#J.UaQbzbC#DbCbCbr.e#y#ybS#y.D.D.Dav.Cbkbk.g.gavb5.g#0.g.g#0.g.N#0.N#0#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#h.r#j#j#j#j#j#j.##j.#.#.##t#t#t#t.z#6#6.z.z####.z#qbGaDbGbGbG.c#F#n#n#n#n#n.q#n.q.q.q.q.q#O.q#O.q#O.q#O.q#O#O#O#O#O#p#O#O#p#O#p#p#paP.9#M#8bAbA.B#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#x#x#8.ybb#UahaPbVaPa7bUbUaOaR#r#r#rawaw.w.w.w.waW.w.waWbqaWbqaWbqaW#g#gauaKau.ab1.ab2.a.Cb2.Cb2.C.C#Q#Qa4.7bH#XbhbxaA.v#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#x.m.8#W.m#5#W#5#5#5#5#5#L#..Z.Z.Z.4.4#u.4#u.4.Z.4.4.4#u.4#u.4.4.4.Z.o.4.o.Z.4.Z#.#..Z#.#.#L#L#5#5#5#5#W#W#WaH#c#c#caMaobK#I#J#Jbw.5.U#zbCbubC.ea1brbxbSbJ.D#abHbn.Dbkbk.k.g#Q.g.g.g.g#0.g#0.g#0.N#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#0.N#j#j#j#j#j#j.#.#.#.##t#t#t.##t#t.z#6.z.z#########q###qbGbGbG.c#F#n#n#n#n.q.q#n.q#n.q.q.q.q.q#O.q#O.q#O#O#O#O#O#p#O#p#O#O#O#p#p#p#pby#s#M#M#kbA.B#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#x#8.y#2#2ahbVaPa7a7bUbUaOaOaR#r#r#r#H.w.waW.waWaWbq#P#P#PaW#P#Pbq#g#g#gaKauau.a.a.a.a.ab2.C.C.C#Q#Q#Q#Q#QbPbQ#X#m#v.vbm.4#u.4.4.4.4.4#u.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4#o.m.m#WaH#W#W#W#5#5#5#L.Z#..Z.4.Z#u.4.4.4.4.4.4.o.o.4.4.4#u.Z.4.4#u.4.Z#u.Z.Z.Z#.#.#.#.#L#5#k#5#5#5#k#W.m.I#c#c#caM#Iao#I#JbwbwaQ.UaQbCbubCbr#D#ya1#y.D.1.DbJ.DbHbHbk.gbk.gbk.7.g.g.g#0.g#0#0#0#0.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#j#j#j#j#j#j.#.#.#.##t.##t#t#6.z.z.z.z####.z#q#q#qbGbG.cbG#n#n#n#n#n#n#n.q#n.q.q.q.q.q.q.q.q.q#O.q#O#O#O#O#O#O#O#O#O#p#O#p#p#p#O#pahb..ybAbA.B.B#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#x#x#8.y#2#UbVahbVa7a7bUbUaOaOaR#r#raw.waW.waW.w#PaWafaWafbpaf#P#P#PaW#gauauaKb1au.a.a.ab2b2.C.C.C.C#QaZ#Q#QbP#4#X#maj.v.v.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.8#c.m.m#W#W#W#W#5#5#L#L.Z#L.Z.Z.4.Z#u.4.4.4.4.Z.4.o.4.4#u#u.4.4#u.4#u.Z.Z.Z.Z#.#.#.#L#L#L#5#L#W#5#W#W#W#c#c#c#caMaMao#Jbw#J.U#z#zbCbCbCbCbrbxbr#y#a#ybJbJ.kbJbkav.kbk.g.g.gav.g.g#0.g.g#0#0#0.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.##j#j#j#t#j.##t.##t.##t#t.z.z#6.z.z.z##.z###qbG#qbG.c.c#F#n.c#n#n#n#n#n.q#n.q.q#O#n#O.q.q.q#O#O.q#O#O#O#O.q#O#O#p#O#p#p#p#p#O#p#Oah.9.ybAbA.B.B#C#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#x#8#8bbb.#2ahbVbVaPa7bUbUaNaOaO#raw.w.waWaWaWaWafafatafafacat#Z#P#Zbqbq#g#g#g#gaBb1.a.a.ab2b2.C.C.C#Q#Q#Q#Q.7bP#X#maj.jaX#1.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4#u.4.4#u.4.4.8.m#c.maHaHaH#W#W#5#5#5#L#L.Z.Z#u.4.Z.Z#u.Z.4.4.4.4.Z.4.4.4.4.Z.4.o.4.Z#u.Z#.#.#.#.#L#5#5#k#W#L#W#W#W#c.m#ca2#cao#Ib##J#JbWaebwa.#zbCbrbC.e#yb9bSbsbJ#4.DbJ.DbHbkav.gbk.g.g.g.g#0.g#0#0.g.N.N#0#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.##j.#.#.#.#.##t#t.##t#t#t.z#t.z.z#####qbG#qbGbGbG#qbG#n#n#F#n#n#n#n.q#n.q.q#n.q.q.q.q.q.q.q.q#O#O#O#O.q#O#O#O#O#O#O#O#O#O#p#p#pbK.9b.be#kbA.B#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#x#8.ybb#2#UaIbVbVa7a7a7bUaOaO#r#r.w.waW.waWafafatatafacatatat#Z#Z#Z#P#Pbqbq#g#g#gaK.a.ab2b2b2.C.C.C.C#b#Q#7bPbP#X#maj#vbm.x.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.m.m.maH#W#WaHaH#5#5#5#5#L.Z.Z.Z.Z.Z.4.Z.4#u.Z.Z.4.4.o.Z.4.Z#u.4.Z.Z#u.Z.Z#.#.#.#L#.#L#k#5#5#W#k#W#W.m.m#c#cao#c#J#Ibw#Jbwbwbz#z#zbC#Dbu#y.ea1.1bS#ybJbJ.D.DbH#Qav.g.gbH.g.g.g#0.g.g#0#0#0#0.N.N.N#0.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N#0al#t#j.#.#.#.##t.##t#t#t.z.z.z.z.z.z#q###q#q#qbG.c.c#F#n.c#n#n#n#n#n.q#n.q#n.q.q#n.q.q.q.q#O.q#O.q#O.q#O#O#O#O#O#p#O#p#O#p#p#p#pbj#s.9.y#MbA.B.B#C#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#x#8.y.y#2#UaIbVaPaPa7a7bUaOaOaOaR.w.waWaWafaWafatatatata6a6aca6acac#Zbpaa#Pbq#g#gaKb1.a.ab2b2.C.C#Q#Q.C#Qbk.CbP#Xbhaj.vbm#1.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4#u.o#caHa2aH#WaH#W#W#5#5#5#5#L#L.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.4.4#u.4.Z.Z.Z.Z.Z.Z#.#.#.#L#.#L#k#L#W#5#W#W#W#W.mab#c#caoaMao.d#J#Jbwbwbz#z#zbCbCbCbr.1#y#y.F.DbL#abH#aav.kav.7.gbk.g.g.g.g#0.g#0.g.N#0#0.N#0.N.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N#t.#.#.#.#.##t#t#t#t#t.z#t#t.z.z##.z#q#q##bGbG.cbG.c.c#n#n#n#n#n.q#n.q#n.q#n.q.q.q.q.q.q.q.q.q.q#O.q#O#O.q#O#O#O#O#O#p#O#O#p#O#paP.9.9be#MbA.B#C#C#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#C#x#8#8bbb.#2ahahbVa7a7bUbUaNaOaO#raWaWaWafafafatatata6#Ta6#T#TbMbMbM#Z#Zbpbqbqaa#gau.a.ab2b2b2.C.C.C#Q.C#Q#7bk#4bjbxaj#vbm.x.t.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.m#caH#caH#WaHaH#W#5#W#L#L.Z.Z.Z.Z.Z.Z.Z#u.Z.Z#u.Z.Z.Z.Z.Z.Z#u.Z#u#..Z.Z#.#L#.#5#L#5#W#W#k#W#5#WaH#c#c#cao#caoaM#J#J#JbwaQ.U#zbCbCbrbC#ybrbS#ybJa1bJ.DbJ.Cbkav.gav.g.g.g.g.g#0.g#0.N.g#0.N#0.N.N.N.N.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N#t.#.#.#.#.##t#t#t#t#t.z.z.z.z.z#q#q#q#q#q.c#q.c.c.c#n#n#n#n#n#n#n.q.q#n.q.q.q#n.q#n#O.q.q.q#O.q.q#O#O#O#O#O#O#O#O#p#O#O#p#p#pa3#s.9b.#MbA.B.B#C#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#x#8#8bbb.#2ahahbVbVaPbUbUaOaOaO.w.w.w.waWafafa6a6a6#T#TaybTayaybMbMac#Zbq#Pbqbq#gaKb1.a.a.ab2.C.C.C.C#Q#7#Q#Q#4#X#m.6.vbmb##o.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u.4.4.4.m#c.maHa2aH#WaH#W#5#W#L#5#L#L.Z.Z.Z.Z.Z.Z.Z.4.Z.4.Z.Z.4.Z.Z.Z.Z.Z#.#.#.#L#.#5#L#5#5#W#W#5#W#Wa2#W.m.m#caMaoaoao#J#JbWbWbwbubzbubCbC.ebx#y#yb9#y#a.D#a.D.D.k.gbk.g.gbk.gbi.g#0.g#0.g.N#0.N#0.N.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N#h#t.##t#t#t#t#t#t.z.z.z.z.z.z###q#q###q#qbGbG.c#n#n#n#n.c#n#n.q#n#n#n#n.q.q.q.q.q.q.q.q.q.q.q.q#O#O#O.q#O.q#O#O#O#O#O#p#O#p#paLaI.I.9.y#MbA.B#C#C#C.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#8#8.y.y#2#2ahaIbVaPa7a7bUaOaOaR.w.waWafafatatat#T#Tayayayas.I.Iay#Tac#Z#Zbpbqbq#gaBau.a.ab2.a.C.C#Q#Q.C#Q#QbPbP#X#m#v.vbm.x#o#u.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#ca2#caHa2#WaHaH#5#W#5#5#L#L.Z#L.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.o.Z.Z#..Z#L.Z#L#L#5#5#5#5#W#W#W#W#W.m#RaH#caMaoaM#I#I.L#JbwaQbu#zbgbubCbrbr#y#ya1.1.D#a.D.DbJbHbkavbkbkavb5.g.g.g#0.g.g#0#0#0#0.N#0.N.N#0.N#0.N.N.N.N#0.N.N.N.N.N.N.N.z#t#t.##t#t#t#t#t.z#t.z.z.z#q#q#q#q#qbG.cbG.c.c#n.c#n#n#n#n#n#n#n#n#n.q.q#n.q#n.q.q.q.q.q.q.q#O#O.q#O#O#O#O#O#O#p#O#O#O#p#p#pbV#s.I.yb.#MbA.B#C#C#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#x#x#8#8.yb.#2#UaIbVaPa7a7bUaNaOaO.w.waWaWafatat#TayayayasasbeasasaybMac#Z#Zbpbpbqbq.VaKb1.ab2.ab2#H.C#Q#H#Q#HbP#4#Xajaj.vbm#N#wad.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4#u.4.4.4.4.4#u.4am#caMaH#ca2#W#WaHaH#5aH#5#W#5#L#L#5.Z#L#5#L#L.Z.Z.Z#..Z.Z.Z#L#L#L#L#5#5#5#5#W#5#5#WaH#W#Wa2.ma2a2#caoao#I#I#I#JbW.Ubw#z#z#zbCbrbrbrbSa1#ybJbJ.DbJav.D.kavavb5.gav.g.g.g.g#0.g#0.g.N#0#0.N.N.N.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N#q.z#t#t#t#t#t#t.z.z.z.z.z#q#q#q#q#q.cbG.c.c#n#n#n#n#n.c#n#n#n.q#n.q.q#n.q#n#n.q.q.q.q.q.q.q#O#O.q#O.q#O#O#O#O#O#p#O#O#p#O#p#O#p.I#Ub.b.#M.ybA.B#C#u.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.o#x#x#8#8.y#2#2ahahbVbVaPbUa3aOaO.waWaWaWaWatat#Tayasasbebe#M#Mbe.9#R.I.Iacatbpbpbqbp#g#gaB.a.a.ab2b2.C#b#H#Q#Qbk#Xbh#m.j.v#1.x.Sad.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4aMaMaMa2a2a2aHaHaHaH#5#W#5#5#L#L#L#L#L#L.Z#L.Z#L#L.Z#.#L#L.Z#L#5#L#5#5#5#5#W#W#W#W#WaHaH#RaH.ma2bTao#I#I#JaE.LbwbW#z#zbC#z.ebr.e#ybr#y.D#y.DbJ#a.Davbkavbkav.g.g.g.g.g#0.g.N.g.N#0.g.N#0.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N#q#q.z#t#t#t#t.z.z.z.z.z#q#q.z#q#q#q.cbG.c.c.c#n#n#n.c#n#n#n#n#n#n#n#n#n#n#n.q.q.q#n.q.q.q.q.q.q.q#O.q#O.q#O#O#O#O#O#O#p#p#O#p#paP#s.Ib..ybe#M#8#C#C#u#u#u.4#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#u#V#8#8#8bbbb#2#UaIbVaPa7a7a7bUaN.w.waWafafata6#Tasbe#M#M#MbAbA#M#Mbe.9bMbMbM#Z#Zbpbq#gaBau.ab2.a.C.C.C#Q#Q#Qa4bPbQ#Xaj#vaq.x.O#w.t#x.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.laMaMaoa2a2a2aHaHaH#W#W#5#L#5#L#5#L#L#L#L#L#L#L#L#L#L.Z#5#L#L#5#L#5#W#5#W#W#WaH#WaH#RaHbTa2a2aoaoao#I#IaCbwaEaQ#z#z#zbCbCbr#ybr#ya1a1.F#a#a.DbHavbJbkav.gbk.gav.g.g.g#0.g#0#0#0#0.N#0.N.N#0.N.N#0.N#0.N.N.N.N.N#0.N.Nax#q#q.z.z#t#t.z#t.z#t.z#q.z#q#q#q#q.cbG.c.c.c#n.c#n#n#n.c#n#n#n#n#n.q#n.q#n#n.q#n.q.q.q.q.q#O.q.q.q#O.q#O#O#O#O#O#O#O#O#O#O#p#p.sbV#U.9b..y#M#8#8#V#C#u#u#u#u.o#u#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#u#V#x#8#8b..y#U#UaIaPbVaPa7bUaNaN.waWaWaWafat#Tasas#MbA#MbAbA.BbA#k#Mb..IbMa6ac#ZbpbpbqaBaB.abob2b2.C#b.C#Q#Q#Q.7bQbhbx#vbmbm.O#w.t#x.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4aoao.naoa2.na2aHaHaHaH#W#5#W#5#L#5#5#5#5#L#L#L#L#L#L#L#5#L#5#L#5#W#W#5#W#W#W#W#WaH#RaHaHa2a2aM.n#I#J#I#J.Lbwbwbu#zbCbCbr.e#y#y#ya1#ybJ#abJ.D.DbkbHavavavbk.gbk.g.g.g.g#0.g#0.g#0#0#0.N#0.N.N.N.N.N.N.N#0.N.N.N.N.N.N.c.c#q.z.z#t#t.z.z.z.z#q.z#q#q#q#q.c.c.c.c.c.c#n.c.c#n#n#n#n#n.q#n#n#n#n.q#n.q.q.q.q#n.q.q.q.q.q#O#O.q#O#O#O#O.q#O#O#O#O#p#p#O#pa3#s#U.9b..y#M#8.B#V#V#C#u#u#u.4#u#u#u.4#u.4#u#u.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.o#x#x#8#8bbbbb.ahahbVbVa7a7a7bUaN.waWaWafat#TayasbebAbAbAbA.B.B.BbA#k#M.Iayacacacbpbp#gaBaK.a.Cb2.C.g.C#b#Q#Qa4bP#4bhaj#vaqbm.Obc#u#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.Zaoaoao.na2.na2a2aHaHaH.l#5#W#5#W#5#W#5#5#5#L.l.Z#5#5#L#5#5#5#5#5#W#W#W#W#WaHa2a2aHa2a2a2bTaoac#I#Ibw#Jbwbw#z#z#z#z.ebCbr.e#ybS#y.D#ybJ.DbJav.Davav.k.gbk.g.g.g.g.g.g#0.g#0#0.N#0#0.N.N#0.N.N#0.N.N.N.N.N.N.N.N#0#V.c#q#q#q.z#t.z.z.z.z.z#q#q#q#q#qbG.c.c.c.c.c.c#n.c#n#n#n.c#n#n#n#n.q#n#n.q#n.q#n.q#n.q.q.q.q.q.q#O.q#O.q#O.q#O#O#O#O#O#O#O#p#OaNaPah.Ib.b.b..y#8bA#C#V#C.o#C.o#u#u#u#u.o.4#u.4.4#u.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4#u#u.o#x#x#8#8.ybb#2ahaIbVbVaPa7bUbU.w.waWafafata6ayasasbAbA.B.B#C.B#C.B#x#M.IayaCa6#Z#ZbqaBaK.C.a.C.C.C#Q#b#Q#b#Q.7.7bQbhbx#vaJ.xbv#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4am#I#Iao.n.n.n.naHaGaH#WaH#5#W#5#5#W#W#5#W#5#5#5#5#5#5#5#5#5#W#5#W#WaHaH#WaHaHa2a2a2a2.naM.nao#I#I#I#JbWbwaQbz#zbr.Kbr.e#y#y#y#ya1.D#a.D#a.CbJbkavbk.g.gav.g.g.g.g#0.g#0#0.g.N#0#0.N.N.N#0.N.N#0.N.N.N.N.N.N.N.4.4.4.c#q#q.z.z.z.z.z#q.z.z#q#q.c.c.c.c.c.c#n.c#n.c#n#n.c#n#n#n#n#n#n#n#n.q.q#n.q.q.q.q.q.q.q#O.q#O.q#O#O#O#O#O#O#O#p#O#O#O#O#p#pa3ah#s.9b..9.y#M#8#x#x#x#C#V#V#C#V#u#u#u#u.o#u.o.o.4#u.4#C.4.4.4#u.4#u.4#u.4.4#u.4.4.4.4#C#V#x#8#8bb#2#2ahahaIaPaPa7a7bU.w.waWafafat#Tasas#M.B.B#C#C#C#C#u#C#.#M.IbMac#Zbpbq.VaK.a#H.C.C.C#Q.g#b#Q#Q#b.7.7bQ#Xajbm.O.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4aG.L#IaV.n.n.n.na2a2aHaHaHaH#W#W#W#W#W#5#W#5#W#5#5#W#5#W#W#W#W#W#WaHaHa2a2aH#Ra2a2a2bTaMaC#I#I.L#J.LbW.U#zbubu.ebCbrbrb9#yb9bJbJ.FbJbJ.Dav.D.k.Cbkbk.gbk.g.g.g#0.g#0.g#0.N#0#0#0.N#0.N.N.N#0.N.N.N.N.N.N.N.j.4.4.4.c#q#q.z.z.z.z#q#q#q#q#q.c.c#q.c.c#n.c.c.c#n#n.c#n#n.c#n#n#n#n.q#n#n.q#n.q.q#n.q.q.q.q#O.q.q.q#O.q#O.q#O.q#O#O#O#O#O#O#p#pakaP.0ah#Ub.b..y#8#8#8.B#x.B#x#x#V#x#C#V.o#C#u#C#u#u.o#u#u#u.o#u.o#u.o#u#u#u#u#u#u.4#u#u#u#V#x#8#8b.bb#2#UbVaIaPbVa7a7bUaN.waWaWafafatayaybebA#C#C#C#C#C.4#u#C#8.8blac#Z#Zbqbq#gbob2.C.C.C#b.C#b#Q.g#b#Q.7#E#4.O.O.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.Z.U.L#I.L.naV.n.nbTa2a2aHaHaHaHaH#WaH#W#WaH#W#W#W#W#W#WaH#WaHa2aHa2a2a2a2a2bTa2aoao#I.n#JaE.LbwbWbO#z.K.Kbrbr.ebr#y#y#ybs.F#a.FbJ.DbJavavav.k.g.g.g.g.g.g.g.g.g.g#0.N.g#0.N#0.N.N.N#0.N#0.N.N#0.N.N.N.N.4.4.4.4.4.c#q.z.z#q.z#q#q#q.c.c.c.c.c.c.c.c.c#n.c#n#n#n#n.c#n#n#n#n.q#n#n#n.q.q.q.q#n.q.q.q.q.q#O.q#O.q#O#O#O.q#O#O#p#O#O#p#p#O#paPahbK#s#U#2.ybb.y#8#8#8#8#x#x#x#xbA#x#C#x#V#V#C#V#V#C#V#V.o.o#C.o.o.o.o#u.o.o.o#u#u.o.o#V#x#8.ybb#2#U#UaIaIbVbVaPa7bUbUaO.waWaWafafa6ayas#M.B.4#u.4#u#C.B#x#w.9.0bp.Vbq.V.VaBaK.C.C#Q.C#b#Q#b#b#0.g.W#V#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#J.L.L.L.LaV.LaV.n.na2a2a2aHaHaHaHaHaHa2#WaH#WaH#WaHaHaHa2aHa2a2a2a2a2a2.n.naV.n#I#I#IbwbWbwaQ#z#z#zbC.ebCbrbr#y#y#y.F#ya1.DbJ.Dav.Dav.kavbkavbkbk.g.g.g.g#0.N.g#0.N.N#0.N.N#0#0.N#0.N#0.N.N.N.N.N.N.4.4.4.4.4.4#q#q.z#q#q#q#q#q#q.c#q.c.c.c.c.c.c#n.c#n.c.c.c#n#n#n#n#n#n#n#n.q.q#n.q#n.q.q.q.q#n#O.q.q#O.q#O.q#O#O#O#O#O#OaDaDaDaDbDaDakbKaIah.I.I#2b..y.y.y#8#8#8#8#8#x#x#x#x#x#x#x#x#x#x#V#x#C#V.B#V#x.B#V#C#x#V#C#V#V#V#V#C#x#8.ybb#2#Uah#UbVaPaPa7a7a7bUaNaO.waWaWafatatayasbA#C#u#C#C#8.t.y#o.IbV.X#gbqaB#gaK.ab2#b.C.C.g.g#bbS#X.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4bO.L.L.L.LaVaVaV.naVa2a2bTa2a2a2aHa2aHaHaHaHaHaHa2aHa2a2a2a2a2.na2.n.n.n.n#I#I#I#Iac.Lbwbw#z#z#zbubrbC#9#ybrb9#y#ybJ.D.F.D.DbJ.Dbkavavbkbkbkbk.g.g.g.g.g#0#0#0#0#0#0#0.N#0#0.N.N#0.N#0.N.N.N.N.N.j.4.4.4.4.4.4b8#q#q#q#q#q#q#q.c.c.c.c.c.c.c.c.c.c#n.c#n#n#n#n#n#n#n#n#n#n#n.q.q#n.q.q#n.q.q.q.q.q.qb7#Yb7bNb7bNb7b4bNb7b4.4.4.4.4.4.4.4#8ahaI#s#2b.b.bbbb#M#M#8#8#8#8#8.S#8#8#x#x#8#x#x#x#x#x#x#x#x#x#x#V#x#x#V#x#x#x#x#V#x#x.t#8bbbb#U#2aIbVbVbVaPaPbUa7bUaNaO.waWaWafata6as#M#k#C.B#V#8.y#o#2#2b6ae.5aBaBbSaKbSbo.C.C#b#0#b.v.v.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.K#zbO.h.h.L.LaVaV.n.naVa2.na2bTa2a2a2aHa2aHa2aHaHa2a2a2bTa2bT.n.naC.nao#Iao#I.L#IbWbwaQaQ#z#z.Kbubrbu#9br.e#y#ybJ#y#a.F.D.D.D.Dbkavavbk.gbk.g.g.7.g.g#0.gbk#0#0#0#0#0#0#0#0.N#0.N#0.N.N.N.N#0.O.4.4.4.4.4.4.4.4.c#q#q#q#q#q.c#q#q.c.c.c.c.c.c#n.c#n.c#n.c#n#n#n#n#n#n#n#n.q#n#n#B.Rap#BbY#BbY#BbY#B.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.0#s#s#s#2.9#2bb.y.8.y.y#8#M#8#8#8#8#8#8#x#8#x#x#x#x#x#x#x.t#x#8#x#x#x#x#x#V#8#x.t#8.tbb#2#2.xaIaIaPbVaPaPa7bUa3bUaOaO#KaWaWaWata6asbe#k#8.S.Sbb.9.Ob6b6.X.u.VaB.abo.a#H.C.C#Q#b#b#e.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#..K.K.hbO.L.h.LaVaVaV.n.naV.na2.na2bTa2bTaHa2a2a2a2a2a2.na2.na6.naV.n.n#I#I#I.L.LbwbOaQbO#zaQbr#zbC#y.ebr#y#y#ya1bJ.DbJ.DavbJav.Dav.kbkav.g.g.g.g.g.g.g.g#0.g.N.g#0.N.g.N.N#0.N#0.N.N.N#0.N.N.4.4.4.4.4.4.4.4.4#q#q#q#q#q#q.c#q#q.c.c.c.c.c.c.c#n.c#n.c#n#nbFaS.W.WbF.W.WbF.W.W.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#uaI#s#s.I#2.9.9.9.ybb#M.y.y#8.y#8#8.S#8#8#8#8#8#8#8#8#x#8#8.t#x#x.t#x#x.t#x.t.t#8#x#8.y#2#U#UbVaPbVaPaPa7a7a3bUbUaOaO.waWafafata6ay.I#w#o#s#e#s.0b6.Xae.u.V.a.abob2.C.C.g#b.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4bw.K.K.h.haV.haVaVaVaV.n.naV.n.n.na2.nbTa2a2.na2.n.naV.naV.naoaV#I#I#I.L.L#I.U.L#zbO#z.K.KbCbr#9br#y#y#y.Fa1bJ.D#abJ.DbJavav.kavbk.gav.g.g.g.g.g.g#0.g#0#0#0#0.N.N.N#0.N.N#0.N#0.N.N.NbQ.4.4.4.4.4.4.4.4.4.4.4#t#t#t#t.z.z#t.z#t#t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#U#s#s#U.9#2#2b.bb.ybb.y.y#w.y#8.y#8.y#8#8.y.S#8#8#8#w#8#8.y.t.y#8#8#8.y#8#8#8#8bbbb.xaIaIaPbVaPaPaPa7a7bUaNaNaN#r.waW.wafatatbM#s#s.IbX#s.X.5.u.V.V.Vb2b2.C#Q#b#b.P.P.P.PaR.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.8#9.K.K.h.h.h.h.L.LaVaVaVaVaVaV.n.n.na2.n.n.naV#I#IaV#I.L#I#Ibw.L.LbwbwbwaQ#z#zbu#z.ebrbr#9#y#y#y.FbJ#y.FbJ.DbJ.Dav.Dbkavav.7av.gbk.g.g.g.g.g#0.g.g.N.g.N.N.g.N#0.N#0.N#0.N.N.N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.B#s#s#U.I.9.9#2.9.9#2.9b.bbb.bb.ybb.y.y#o.ybbbb.ybb.ybbbb#8bbbbbbbbbbbbbb#2.x#UbVaPaPaPaPa7a7a7a7a7bUaNaOaO#r.w.wauaWbqbp.5aeaeae.u.V.VbSbn#Q#Q#b#b#b.P.P.P.P.P.P.P.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4#u.4.4#u.4.4.4.4.4.4aiai.K.h.K.h.h.L.h.h.L.L.LaVaVaVaVaVaVaVaV#IaV.L#I.L#I.L.Lbw.U.LaQbw.h#z#z#z.Kbu.KbrbCbr#yb9#y#y#y.FbJbJ.DbJ.D.D.Davavav.gavav.g.g.g.g.g.g.g.N.g#0.N#0.g.N#0.N#0.N#0.N.N.N.N.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C#s#s#s#s#s#s.9#2.9.9#2bb.9bb.9bbb.b.#2bbb.#2bbb.b.#obbbbbb#2bb#ebb#2bb.x#2.xaPaPaPa7a7a7a7bUa7bUbUaNaOaR#rauau.wbqbq#g.V.5.V.VaBbS.a#b#QaZ.P#b.P.P.P#b.P.P.P.P.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.U#9aibO.KbO.h.haV.haV.h.L.L.L.L.L#IaV.LaV.L.L.Lbw.Lbwbwbw.hbWbOaQ#zaQbO.KbC.K.ebr#9.e#y#y#y.FbS.F#a.D.DavbJavavav.kav.gav.gbk.g.gbk.g.g#0.g#0.g#0.N#0.N#0.g.N#0.N.N.N.NbH.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4bb#s#s#s#s#s#U#s#2.I#2.9#s#2.9#e#2bb#2#2bb#2#2#2#2#2#2#ebb#2#2#2bv#s.xaIaPa7aPa7a7a7a7a3a7bUbUaNaNaOaR#raKaub1#g#gaB.VaKbSb2b2b2#b.P.P.P.P.P.P.P#b.P#rbj.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4ai#9aibOaibO.KbO.h.h.h.L.h.h.L.L.L.L.Lbw.Lbw.LbObwbObObObO#zbO#z.K#z.Kbrbrbrbr#9#y#y#y.F#ybJ#y.D.F.DbJ.D.D.Davavavbkav.gbk.g.g.g.g.g.g#0.g.g#0#0#0#0#0.N.N#0.N.N.N#0aA.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#8#8ah#s#s#s#s#s#s#s.I#2#s#s#s#s#s#s#s#e#s#s#2#2#s#2#U.x.x#s.x#U.xaIbVaPa3aPa7a3a3a3bUa3bUaNaOaO#raR#rb1auaKaKb1.C#Q.C#b#ba4aZaZ.P.P.P.P#b.P.P#v.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4aGbrai#9.K.K.KbObObO.hbw.h.h.h.L.h.h.L.hbwbObwbObO#zbO#z#z#z#z#z#z.Kbrbrai.e#9#y#9#ya1.F#y.FbJ.F.DbJ.D.Davavbkavav.gbkbk.g.g.g.g.g.g#0.g#0.g#0#0.g#0#0#0#0#0.N.N.NbX.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#x.B#xah#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s#s.x#s.x#s.x#saI.xaIbVaXa7a7a7a3bUa3bUbUbUaNaOaNaO#raR#r.ab1.a.a#Q#7aZ#7a4a4aZaZ.P.PaZ#b.P.P.Pbv.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4#L#Laibrai.K.KbO.K.KbObO.K#zbOaQbObObwbObO#zbO#zbO#z.K.K#z.KbC.Kbrbr#9br#y#y#y#y#y#ybJbJbJ.D.DbJbJav.DavavbHavavbkbk.g.gav.g.g.g#0.g#0.g#0.g.N#0#0#0.N#0.N.N.S.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#C#uaIaIahaIaIaIah#saI#saIaI#s#s#saI.xaIaIaIaIaIaIaI.xaPaPa7a7a3a7bUa3a3a3aNaNaNaNaO#raOaR#r.a#Q#Qawawawaw#7a4aZa4.PaZ.PaZ.P.P.t.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4bO.U#9#9.K.KbO.K.K#z.K.K.h#zbO.K#z#z.K.K#z.K.K.K.Kbr.Kbr.K.K#9.e#9#y#y.F#y.F.Fa1.D.FbJ.D.Dav.Davavavavav.g.gbk.g.gbk.g.g.g.g.g#0.g#0#0#0.g.N.N#0.N.k.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#2#s#2.9b6aIaIaI.xaIaIaIbKaIaIbKaIaIbKaXbVaIaPa7a7a3bUa3bUbUbUbUaNaNaNaOaOaBaR#r#r#r#r#rbI#rawa4awaZa4aR#r#r.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4abbr#9.K#9#z.K.K.Kai#zai#z.K.K.KbC.K#9.Kbrai#ybr#9#y#9br#y.F#y.F#ybJ#ybJbJ.D.D.D.D.a.Davavavavav.g.gav.gbk.g.g.g.g#0#0.g#0#0#0#0#0.N#0.NbXb#.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#8#8#8.t#8#8#8aPaP.X.Xa7a7a7bUa3a3a3.ubUbUaNaNaNaNaNaOaOaRaRaR#raR#2#2bbbvbb#e.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4a8#L#yaiai#9aiaibr.Kaibraibrai#y.Kaibr#9ai#y#9br#9#y#y#y#y.F.F.F.FbJbJ.F.D.DbJav.Davavavavbkbkbk.g.gav.g.g.g.g#0.g.g#0.g.g#0#0#0.N.N.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#V#V#C#V#C#V#V#V#C#V#V#x#x#C#V#x#C#V#x#x.B#x#x#x.B#x.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#z#zbrbr#9braibr#9#9brai#9#9#y#9#y#y#9#y#y#y#9.F.F#ybJ#y.DbJ.D.D.DavbJavbJav.Davavbkavbk.g.gav.g.g.g.g.g#0.g#0.g.N.N.gbH#E#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#J#9#9#y#9#9#y#9#9#9#9#y#9#y#9#9.F#9#y.F#y.F.F.F.D.F.D.FavbJavbJav.Davavavavbkav.gavbkbkbk.g.g.gbk.g.g.N.g.N.g#0an.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4ab#9.F#9.F#9#9#9.F#9#9.F#9.F.F.F.F.F#9bJ.F.F.D.F.D.FbJbJ.DbJavbJavavavavbkbkavbk.gbk.g.g.g.g.g.g.g.g#0#0#0.N#1.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u#x#wbb#e#ebXbXbXbX#i#i#i#e#u.4.4.4.4.4.4.4#u#o#i#i#i#i#i#i#i#i#i#J#o#5.F#9.F.F#ya1.F#ya1.Fa1a1#ybJ#y#y.Fa1#ybJbJ.FavbJavavavbJavavavavavav.gav.gbk.g.gbkavbJ.D.D.D.D.D.Dbgbz#iam.4.4.4.4.4.4.S#i#i#i#i#i#i#i#i#i#i.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.S#oambX#ibgbzbz.u.e#Db9b9b9.6#C.4.4.4.4.4#u#Db9a1a1a1a1a1a1a1a1a1a1a1#i#u#u#z#ya1b9a1a1a1b9a1#ya1b9a1a1a1#ya1#yb9a1#y.FbJbJavavavavavavbkav.gav.gav.gbka1a1a1a1a1a1a1a1a1b9b9a1a1#i.4.4.4.4#ia1a1a1a1a1a1a1a1a1a1b9a1#i.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#x#w#o#eb#bXbgbgbzbC#D#Db9a1b9a1#i.4.4.4.4.4#ia1a1b9a1a1a1a1b9a1#ya1a1a1#y.S.4.Sa1a1b9a1b9a1a1#ya1b9a1a1#ya1a1a1a1a1a1a1a1a1a1b9a1avavbkbkbkbkbk.g.g.g.gb9a1#ya1a1b9a1a1b9a1a1b9a1b9a1.S.4.4.Sa1a1a1b9a1a1a1a1a1a1a1b9a1b9.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#V.8#o#obXbXaJbgbzbz#D#D#Db9b9a1bg#u.4.4.4.4#ia1#ya1a1a1b9a1#ya1a1a1b9a1a1#o.4.Sa1a1#ya1a1#ya1a1#ya1b9a1a1b9a1a1a1a1b9#ya1b9a1a1a1#ybJ.gavbk.g.g.S.S.S.Sa1a1a1a1#ya1b9#ya1a1#ya1a1a1#y#o.4.4.Sa1#ya1a1b9a1b9a1b9a1#ya1a1a1#o.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4#u.4.4.4#C.S#o#o#ebX.Xbgbgbz.u#D#Db9b9b9.j.O#u.4.4.4bXb9a1a1#ya1#ya1a1a1b9a1a1a1b9a9.R#V#ya1a1a1b9a1a1b9a1a1a1#ya1a1a1b9a1a1a1a1a1a1b9a1#ya1a1aE#u#u#u#u.4.4.4.4bgb9a1b9a1a1a1a1a1b9a1a1#ya1a1aJ#w.4.Sa1a1a1a1a1a1a1a1a1a1a1b9a1a1.j#w.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.S#o#o#ebX#ibgbgbz.6#D#D#Db9a1bm#Nad.4.4.4#Va1b9a1a1a1a1a1b9a1#ya1#ya1.6#N#N#ubgb9a1b9a1a1#ya1b9a1b9a1b9a1b9a1a1b9#ya1b9#ya1b9a1a1a1a1.S.4.4.4.4.4.4.4.Sa1#ya1a1b9a1a1b9a1a1b9a1a1b9#N#1#u.4#Db9#ya1a1b9#ya1b9a1b9a1a1.e#N#1.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u#u.t#o#e.O#ibgbgbzbz#D#Da1.6aJ#N#N#w.4.4.4.4.S.6#ya1#ya1b9a1a1a1a1a1bz#1#N#N#V#ua1#ya1a1b9a1a1a1a1b9.6.6.6.6a1a1a1a1a1a1a1a1a1b9a1#ya1a1.4.4.4.4.4.4.4.4.S.1b9a1#ya1a1a1#ya1a1b9a1#1#N#N.W.4#u#ia1b9a1a1a1b9a1b9a1a1b9aJ#N#N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.o.t#wam#i.Xbgbz.u.6.6#N#N#N#N#N#w.4.4.4.4.4#w#N#1a1#ya1a1b9a1b9#N#N#N#1#N.W.4bmaJa1#ya1b9a1#ya1.6#N#N#1#N#NaJ.jb9a1b9a1a1a1#ya1a1b9a1.4.4.4.4.4.4.4.4.4#N#N.6a1a1b9a1a1b9a1#N#N#N#N#N#V.4.4.tb9a1a1#ya1a1a1aJbmaJ#N#N#1#N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.o#x.t.O#iaJbgbg.6bC#D#N#N#N#N#1ad.4.4.4.4.4bc#Nbma1a1a1#ya1a1.j#N#N#N#N#N#u.4#N#Na1a1a1a1#ya1b9.6#1#N#N#N#N#N#N#N.6b9a1#ya1a1b9a1a1#y#o.4.4.4.4.4.4.4.4.G#N.6a1b9a1#ya1a1#y#1#N#N#1#N#V.4#u#Da1#ya1b9a1a1#y#N#1#N#1#N#N#N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u.4#u.W#o#iaJbgbzbz#D#D#N#N#N.G#V.4.4.4.4.4.4.4#Vbx#ya1a1b9a1.1#N#1#N#Nad#u.4.4#u.Ga1#ya1b9a1a1a1.6#1.O#w#w#w#w#N#N#1#Nbgb9a1b9a1a1a1b9a1#o.4.4.4.4.4.4.4.4#V.6#ya1a1b9a1b9a1#N#1#N.R.4#u#Db9b9a1b9b9a1a1aJ#N#N#1#N#N#1.G.W.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#iaEbgbz.6bC#D.G.4.4.4.4.4.4.4.4.4.4.4#Va1a1a1b9a1b9.j#N.O.4.4.4.4.4.4.4.4a1a1a1a1a1#ya1.6#N#w.4.4.4.4.4.oad.O#Na1a1a1b9a1#ya1b9.6.4.4.4.4.4.4.4.4.4#ia1a1a1#ya1a1a1#N#N.4.4.4bgb9a1a1#ya1a1a1bg#N#N#N#N#V.o#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#iaJbgbz.u.6#Dbg#u.4.4.4.4.4.4.4.4.4.4ama1b9a1a1#ya1bm#Nad.4.4.4.4.4.4.4.4b9#ya1b9a1a1b9.6#1#w.4.4.4.4.4.4.4.4adb9a1a1a1b9a1a1a1b9.t.4.4.4.4.4.4.4.4#ia1b9a1a1b9a1#y#1#N.4.4#ia1a1#ya1a1a1#yaJ#N#1#N#N#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4#u.4.4.4#i.Xbgbz.6#D#D.6.W.4.4.4.4.4.4.4.4.4.4#D#ya1b9a1a1#D#N#N#u.4.4.4.4.4.4.4.4a1a1b9a1a1a1a1.6#N#w.4.4.4.4.4.4.4.4.4.6#ya1#ya1a1b9a1b9bm.4.4.4.4.4.4.4.4#i#ya1b9a1a1b9a1#N#N.4#ia1#ya1a1a1a1a1aJ#N#N#N#1#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4#u#ibgbzbzbC#D#Db9.O.4.4.4.4.4.4.4.4.4#Vb9a1#ya1a1b9.j#N#N.4.4.4.4.4.4.4.4.4b9a1a1#yb9a1a1.6#1#w.4.4.4.4.4.4.4.4.4#oa1a1a1b9a1a1a1a1bg#V.4.4.4.4.4.4.4#ia1a1a1a1#ya1a1#N#N#ia1b9a1a1b9#yb9aJ#1#N#1#N#N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4#wbgbgbz.6#Db9b9.j#u.4.4.4.4.4.4.4.4ama1b9a1b9a1#y#1#N#1.4.4.4.4.4.4.4.4.4#ya1b9a1a1#ya1.6#N#w.4.4.4.4.4.4.4.4.4#ua1b9a1a1b9a1a1a1.6#w.4.4.4.4.4.4.4#ib9a1#ya1a1b9a1#N#Na1#ya1a1b9a1a1.6#N#N#N#N#N#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4", ".4.4.4.4.4.4#u.4.4.4.4#u.4.4.4#ibz.6#D#D#Db9a1b#.4.4.4.4.4.4.4.Sb9a1b9#ya1a1.j#N#N.G.4.4.4.4.4.4.4.4.4a1b9a1a1b9a1a1.6#N#w.4.4.4.4.4.4.4.4.4.4#ia1a1a1a1b9#ya1#y#N#V.4.4.4.4.4.4#ia1#yb9a1a1a1#y.6a1a1b9a1a1b9a1a1#N#N#N#N#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.Sbz.u#D.eb9b9a1.j#u.4.4.4.4.4.4#ia1#ya1a1b9a1#1#N#N.t.4.4.4.4.4.4.4.4.4b9a1a1a1a1#ya1.6#1#w.4.4.4.4.4.4.4.4.4.4#ia1b9a1a1a1a1a1a1#N.t.4.4.4.4.4.4#ia1a1a1a1#ya1a1a1b9#ya1#ya1a1b9a1aJ#1#N#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.6#D#D#D.1b9a1b9.t.4.4.4.4.4.4b9a1a1a1a1a1.6#N#N#1.4.4.4.4.4.4.4.4.4.4#ya1a1b9#yb9a1.6#N#w.4.4.4.4.4.4.4.4.4.4#ib9a1#ya1#ya1b9a1#N#w.4.4.4.4.4.4#ib9a1a1b9a1b9a1#ya1a1a1a1a1#ya1a1a1aJad.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4#i#D#Db9b9b9b9a1#1.4.4.4.4.4.Sa1#ya1b9a1a1bg#N#N.G.4.4.4.4.4.4.4.4.4.4a1b9a1a1a1a1a1.6#N.R.4.4.4.4.4.4.4.4.4.4#ia1a1a1b9a1b9a1a1#N.G.4.4.4.4.4.4#ia1a1b9a1a1a1a1a1b9b9a1b9a1a1b9a1b9a1.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#x#D#D#D#Db9a1a1bz#u.4.4.4.4#ia1a1b9a1a1b9#N#1#N.t.4.4.4.4.4.4.4.4.4.4a1#ya1a1b9a1a1.6#N#w.4.4.4.4.4.4.4.4.4.4#ia1#ya1a1b9a1#ya1#N#N.4.4.4.4.4.4#i#ya1a1a1b9a1b9a1#ya1#ya1b9a1a1b9a1b9#D#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#D#Db9b9b9b9a1.1ad.4.4.4.4b9a1a1a1#ya1.6#N#N#N#u.4.4.4.4.4.4.4.4.4.4b9a1b9a1a1b9a1#D#N#w.4.4.4.4.4.4.4.4.4.4#ia1a1b9a1a1#ya1a1#N#N.4.4.4.4.4.4#ia1a1a1a1a1a1#ya1a1b9a1a1a1#ya1a1a1a1b9bg.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#i#D#Db9a1a1b9b9#1.4.4.4.Sa1a1b9a1a1#yaJ#1#N#w.4.4.4.4.4.4.4.4.4.4.4b9a1a1a1b9a1b9.6#1#w.4.4.4.4.4.4.4.4.4.4b9a1b9a1a1a1a1a1.6#N#N.4.4.4.4.4.4#ia1#ya1a1a1b9a1a1b9.6b9a1b9a1a1b9a1#ya1#y#o.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4#Db9#Da1a1b9a1.ead.4.4a1#ya1a1a1a1.6#N#1#N.4.4.4.4.4.4.4.4.4.4.4.4#ya1a1b9#yb9a1.6#N#w.4.4.4.4.4.4.4.4.4.Sb9a1a1a1a1b9a1a1.j#N#N.4.4.4.4.4.4#ia1b9b9a1a1#ya1b9#1#N#1aJa1a1#ya1b9a1b9a1b9bX.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#eb9b9b9a1b9a1b9bm.4.Sa1a1b9a1b9a1bm#N#N#w.4.4.4.4.4.4.4.4.4.4.4.4a1b9a1a1a1a1a1.6#N#w.4.4.4.4.4.4.4.4.4bga1b9a1b9a1a1#yb9bm#N#N.4.4.4.4.4.4#ia1a1a1a1b9a1a1#1#N#N#N#N.jb9a1a1a1a1a1b9a1b9#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#V#Db9a1b9a1a1a1bz#u#ia1b9a1a1#ya1#N#N#N#V.4.4.4.4.4.4.4.4.4.4.4.4b9a1a1b9a1#ya1.6#1#w.4.4.4.4.4.4.4.4.4b9a1#ya1a1b9a1a1b9#N#1#w.4.4.4.4.4.4#i#ya1b9a1a1a1b9#N#N#N#Nad#1.6b9a1b9a1#ya1a1a1bz.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.6b9b9a1#ya1a1bxadb9a1a1#ya1a1a1#1#N#1.4.4.4.4.4.4.4.4.4.4.4.4.4b9a1a1a1a1a1b9.6#N.R.4.4.4.4.4.4.4.4.4a1a1a1b9a1a1a1b9.6#N#N#w.4.4.4.4.4.4#ia1a1a1a1a1a1a1#N#N.O.o.4#V#Na1b9a1a1a1b9a1#ya1.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4#e.1b9a1a1a1b9#y#1#ya1b9a1a1a1#y#N#1.t.4.4.4.4.4.4.4.4.4.4.4.4.4a1a1b9#ya1a1a1.6#N#w.4.4.4.4.4.4.4.4#ob9a1b9a1a1#ya1a1bm#N#N.t.4.4.4.4.4.4#ia1b9a1#ya1b9#y#1#N.4.4.4.4#Vbma1b9a1b9a1b9a1a1.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#Vb9b9b9a1b9a1a1bzb9a1a1b9a1b9b9#N#N.o.4.4.4.4.4.4.4.4.4.4.4.4.4b9a1a1a1a1a1a1.6#1#w.4.4.4.4.4.4.4#ea1a1a1a1a1b9a1a1#D#N#N#1#u.4.4.4.4.4.4#ia1a1a1b9a1a1a1#N#N.4.4.4.4.4.tbza1#ya1a1a1#ya1.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4bgb9a1b9a1b9a1b9a1b9a1#ya1a1.j#N.O.4.4.4.4.4.4.4.4.4.4.4.4.4.4#ya1b9#ya1#ya1.6#N#w.4.4.4.4.4#Vbga1a1a1b9#ya1a1a1b9aq#N#1.G.4.4.4.4.4.4.4#ib9a1b9a1a1#ya1#N#N.4.4.4.4.4.4.Ga1a1b9a1b9a1a1bg.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#ub9b9a1b9a1a1b9a1#ya1b9a1#D#N#N#u.4.4.4.4.4.4.4.4.4.4.4#ua1b9b9a1a1a1a1a1a1#ya1a1b9a1a1a1a1a1#ya1a1a1#ya1a1a1#yb9#N#N#N#u.4.4.4.4#o#Db9a1a1#ya1a1a1a1#ya1b9#u.4.4.4.4.4.4a1b9a1a1a1#ya1a1a1a1#y.6#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4a1b9a1b9a1b9a1b9a1a1b9a1.j#1.O.4.4.4.4.4.4.4.4.4.4.4.4bga1#ya1a1#yb9a1a1b9a1a1b9a1#yb9a1b9a1a1b9a1a1b9a1b9a1b9#1#1#N.G.4.4.4.4#ob9b9a1#ya1a1a1#yb9a1a1a1b9#D.4.4.4.4.4.4aJ#ya1b9a1a1a1#ya1a1b9a1bC.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4b9b9b9b9a1a1#ya1a1a1a1#y#1#Nad.4.4.4.4.4.4.4.4.4.4.4#V#yb9a1a1b9a1a1a1a1a1b9a1#ya1a1a1a1b9a1b9a1a1a1a1a1b9b9#1#N#N#N#u.4.4.4.4#Da1b9a1a1a1b9b9a1a1b9a1#ya1b9.S.4.4.4.4.4#Vb9a1a1b9a1b9a1b9a1b9a1a1.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4b9b9a1a1#ya1a1a1#yb9a1#D#N#N#u.4.4.4.4.4.4.4.4.4.4.4.Sa1#ya1b9a1a1#yb9a1a1a1a1a1b9a1a1#ya1a1a1a1a1a1b9a1b9#1#N#N#Nbc.4.4.4.4.4b9#ya1a1b9a1#ya1a1b9a1a1a1b9b9.S.4.4.4.4.4.4aJb9a1#ya1a1a1a1#ya1a1b9.S.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4.4.4.4.4.4#u.4.4.4.4.4#i.ea1b9a1a1b9a1a1a1b9.j#1#N.4.4.4.4.4.4.4.4.4.4.4.4.Sa1a1a1a1a1b9a1a1#ya1b9#ya1a1b9a1a1b9a1#ya1b9a1b9.6#N#N#N#N.O.4.4.4.4.4.4a1a1b9a1b9a1a1#ya1a1b9a1b9a1a1bX.4.4.4.4.4.4#Cb9a1a1a1#yb9a1a1a1#ya1bm.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#Vb9a1b9a1b9a1b9a1a1a1#1#N#N.4.4.4.4.4.4.4.4.4.4.4.4#ub9b9a1a1a1a1a1#ya1a1a1a1b9a1a1a1b9a1a1b9a1a1.6#1#N#N#1#N#1#u.4.4.4.4.4.4bgb9a1a1a1b9a1a1b9a1a1#ya1a1a1aq.O.4.4.4.4.4.4aJb9a1b9a1a1b9a1b9a1a1#1.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#1aJaJaJaJaJaJbm#N#N#1.G.4.4.4.4.4.4.4.4.4.4.4.4.4.4aJaJaJaJaJaJaJaJaJaJaJaJbgaJaJbg#N#1#N#N#1#N#N#1#N#N.O#u.4.4.4.4.4.4.4.4.4bmaJaJaJaJaJaJaJaJaJaJaJ#1#N#N#V.4.4.4.4.4.4adaJaJ.jaJ.jaJaJ#N#N#1.4.4.4#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#w#N#N#1#N#N#N#N#N#N#N.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4#N#1#N#N#1#N#1#1#N#1#N#1#N#N#1#N#N#N#N#N#N#1#N#N#Nad.4.4.4.4.4.4.4.4.4.4.4#N#N#1#N#N#N#1#N#N#1#N#1#N#N#N#V.4.4.4.4.4.4#u#N#N#N#N#N#N#N#1#N#N.4.4.4#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#N#N#N#N#N#N#N#N#N#N#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4#N#N#N#N#N#N#N#N#N#N#N#N#N#1#N#N#1#N#N#N#N#N#N#w#u.4.4.4.4.4.4.4.4.4.4.4.4.G#N#N#N#N#N#N#N#N#N#N#N#N#N#1.o.4.4.4.4.4.4.4ad#N#N#N#N#1#N#N#N#N.4.4.4#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4#u.4.4.4.4.4.4.4#w#1#N#N#1#N#1#N#1#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#V#N#N#N#1#N#N#N#N#1#N#N#N#N#N#N#N#1#N#1b##V#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.O#N#1#N#N#N#1#N#N#1#N#N#N#V.4.4.4.4.4.4.4.4#u.G#N#N#N#N#N#N#N#1.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#V#V#V#V#V#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#V#V#V#V#V#V#V#V#V#V#V#V#V.W#V#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u#V#V#V#V#V#V#V#V#V.W.4.4.4.4.4.4.4.4.4.4.4.4.o#V.W#V#V.W#V.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4aAaA#N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4a5...4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.ta5a5.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.t#Na5a5ad.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4..a5.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.Gazaqazaz.T.T.O#3alaA.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.ta5a5#N.4#1a5baa5.t.4.4ba...4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.GaA...R.4.4.4.4.4.4.4.4.4.4.4.ta5a5a5a5a5az.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.Gbaa5...G.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.ta5.4.4.4.4.4.4.4.4.4.4.4.4.4.4a5a5a5.ta5a5a5.t.4.4.4..a5.4.4.4.4.4#N#N.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4#u.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#1#1.Q.MaAaz#3az.4.T.T.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.ta5..#1.4#Nal..alad.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4ax#w.4.4.4.4.4.4.4.4.4.4.4.taA..#3aAa5al.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4...R.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.R#h.4.4.4.4.4.4.4.4.4.4.4.4.4.4a5.Hbaad.H...Mad.4.4.4.4.4.4.4.4.4.4a5a5.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#N.4.4#3bc.4azaz.4.Ta5#1.H.H#1.4.4.4.4#1.H.H#w.4.4.4.4.4.4.4.4.4.4.4.4.H.4.4.4az.H.4.4#NaAa5#N.4.4.4.4.4#Nalax#3aq.4.4.T.T.O.4.t.T.t.4.4.oaz#3ax#3.o.4.4.4.4.4ax.R.4.4.4.4.4.4.4.4.4.4.4.4.4ax.R.4.4.4al.4.4.4#ua5alaz#u.4.Wazaz.G.4.O.T.T.T.4.4.Q#h.H#3.R.4.4.4.4.4ax.G.4.4.4.4.4azal..aq.4.4#NaAaA#N.Hal.O.4.4az.T#3#3.Oal#3#w.4.4bc.Mbi.M#1.4.t.T.T#N#3#hal.4.4.4.t.Q#h.R.R.t.4.4.4.4.4.4.4.4.4.4.4.4aA.4.GaxaA.4.4.4aAaAaA.t.4.4.4.4.R.M#3.G.R.o.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.G.4.4baad.4.Qa5.4azalal#1.G.H.4.4.4.T#3.G.Ralbc.4.4.4.4.4.4.4.4.4.4.4#N.4.4.4.Haz.4.4#Na5alaA.4.4.4.4.Oax.Q.R.Q.H.4.4az.Maz.4.Wal.R.4.4.t.H.T.Ralba.4.4.4.4.4.H#w.4.4.4.4.4.4.4.4.4.4.4.4.4.H#w.4.4.4.H.W.4.oba.T.Ga5aA.o.W.Q.M.G.4.G.M.M.T.4.T.M.O.Ra5.H#w.4.4.4.4.H.R.4.4.4.4alal#N.Rax#3.4bd#3ax.H.R#1.H.G.4azal.Rba.M.Gaz.T.4bcal#Nad#1al.T.t.T.Haxba.R.T.4.4.4.Tal.H.H#h.T.4.4.4.4.4.4.4.4.4.4.4.4a5.RaxaA.4.4.4.4.TaAax.R.4.4.4.4axaxaxax...R.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4ad.4.4aAad.4.G.Q.4.Qba.o.4.4az.4.4bc.M.t.4.4.T.T.4.4.4.4.4.4.4.4.4.4.4.o.R.4.tax.t.4.4.4.4.T.T.4.4.4.4.T.T.4.4.4#1.4.4.4.Qaz.4.4albc.4.4.4.o.t.R#1.H.4.4.4.4.4al.R.4.4.4.4.4.4.4.4.4.4.4.4.4.H.R.4.4.4albc.4.Qa5.4.4#ua5.R.4.4.O.4.4.4.M.G.4.4al.W.4.4.4aAa5.4.4.4.4.H#w.4.4.4.G.H#u.4.4.W.H.O.4.R.H.G.4.4.Gal.4.4#3.4.Q.T.4bc#3.4#3bd.4.4.4.G.M.4.4.Haz.4.4#u#w.4.4.4#wal.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4al.Hal.4.4.4.4.4.4.4.H.R.4.4.4.4.4aAaA.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.T.t.4.4.4.4.Q.Q.4.4.4.Q.4.4aq.M.Q.Q.Qaz#3.4.4.4.4.4.4.4.4.4.4.4.4ba.4.T#3.4.4.4.4.4az.T.4.4.4.4bcalaAazaz.G.4.4.4.Q#1.4.4.Mbc.4.4#u#3alalalal.4.4.4.4.4.Mbc.4.4.4.4.4.4.4.4.4.4.4.4.4.M#w.4.4.4.Mbc.4ba.T#Nbdb#az#N.4.4.o.R.4.GaA.4.4.4#3.Q.Q.Q.Q.T.M.4.4.4.4.Mbc.4.4.4azaz.4.4.4.4azaz.4#wal.4.4.4.4#3ad.4ba.4#1#N.4ada5.4baaq#1#1.Q.Q.M.4.4albc.4.4.4bc.4.4.4bc.M.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.Ha5al.T.4.4.4.4.4.4al#w.4.4.4.4.4.T.T.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.Q.t.4.4#u.4#Nbd.4.4.4#1.4.4.RaA.o.4.4.4bc.4.4.4.4.4.4#u.4.4.4.4.4alaAal.4.4.4.4.4.4#1.Q.4.4.4.4.Gaz.4.4.4.4bF.4.4.O#1.4.4aAad.4.4baad.4.o#1ba.4.4.4.4.4a5bF.4.4#u.4.4.4#u.4.4.4.4.4.4a5ad.4.4#u.Q.4.4#1bd.4.4.4#u.W.4.4.4az#N.T#u.4.4.4.T.o.4.4.4.4bc.4.4.4.4a5ad.4.4.4adbaad.4.4ad#3ad.4bcba.Q.4.4#NaA.4.4.T.4.G.G.4.taz.4azbc.4.4.4.4.W.4.4baad.4.4.4ad.4.4.4adba.4.4#u.o.4.4.4.4.4.4.4.4.4.4.4.Q.4.4.TaA.4.4.4.4.4.Mbc.4.4.4.4.4az.T.4.4.t.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4ad.R#N.G.G#V.4.G.Q.Q#N.4bd.Q.O.4.4.Q#1.GbF#1az.t.4#u.4.4.4.4.4.4.4.4.4bd#3.Q.4.4.4.4#1#1.Taz#N#N#w.4adaA#1bcbc#N#u.4.4.o.Q.R.Raz#Nbc.4#N.T.Gaza5aA#N#V.4bc.Gaz#1.O.O#V.4.4.4.4.4.4.4.4#V.O.T#1#N.O.T#u.4.4.oa9.GbFbcbd.G#u.4.4.G.Q.R.4.4.4.4#1#1.R.W.G.Qaz.4bc.G.O.T#1.O#V.4.4#NaA#NadaA#N.4.4ada5aA#N#1.T.W.4.G.Qad.G#Na8.W#1adbc.Q.G.W.R#Naz.W#Na5aq.R.W#1.Q#w.4.4#u.T#N#1baaz.4.4.4.4.4.4.4.4.4.4.Q.T#1.4.Wba.Q#1.R#1#1ba.T#1.Q.4.4.4.Gal.G#1.H.G.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4a8adbc.R.R.o.4.G.G.G.G.4.G.G.G.4.4.obc.G.Qbc#u.4.4.4.4#u.4.4.4.4.4.4.4#V#1.W.4.4.4.4#Nbd.Obd.G.Gbc.4.G#N.R#1az.G.4.4.4.4adb#.G.G.Gbc.4.4.Gaz.G.W.G.G#V.4ad.G.G.G.G.G.o.4#u.4.4.4.4#u.4.o.G.G.G.G.Gad.4.4.4.4.oadaFad.W.4.4.4.4.obc#u.4.4.4.4#uad.G#1.Gad#u.4ad.G.G.G.G.G.o.4.4.4ad#Nazbc.4.4.4.t.T.o.G.G.o.4.4.R#w.t.W.R.t.o.R.t.4.tbc#1#N.R.o.o.Obdb#bc#V.O.Oad.4.4.4.t#N.O.R#u.4.4.4.4.4.4.4.4.4.4#Nbd#N.4.4.Gbdb#.R#N#N#1#N#1#1.4.4.4.4#Nbabaad.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.o#w.QbF.o.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.G#N#1#N.W.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4#u.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4", ".4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4#u.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4" };vdk-2.4.0/testvdk/fuzzy.png0000644000000000000000000004547407441127243011333 PNG  IHDR^^ңngAMA abKGD pHYs  ~tIME1z IDATxTGsgzsЍnəٔIH5F*/\rZ {ؚ0' gsNeK<}xz/p8v.//>wi6X,>L>d24Βd>r bprd2q~?_||>p8>WZ-f3^l6{G2l\]] \]]arS(y0Fnh4h42??Ob T[n^ƍ|7r9^/KKK}NÇ<}۷oJp84M!j5hZn޼Gml6Ft:vZF0\.htuF#n7^hDR(t:z=fP.i6LLLPVq ~%G(b{{P(V%HrBt:dǃh$˱>vM֭[B!(|nKPhvFA8`0`Z ˱B:fuut:Gt[n199ɫWX^^&LHNlfIT`0ȉuɄf{{Áhdffd2I,S,{.R*(svv4TJ~JBRa0v18ZB7|`@Q(p8NR1ٌc<c0hZhZ, nZFەryyI0$aQ/0MOOS*pt:* :__oFQn<`I \.c4|277GTbtp$ N'V3 n+<zt~^d2I0xh4&&&x9KKKuz=VzN&p`Zjh4<ш .7n`<?l\^^Vl6jv ez=z=l6333C8d2I x<$ frC`@,T*{njaXjJ%H$f"Z9!шv!SSSZVB@(f t:޽VrtE6XT*j1Øf.fVWWfD"zX,t:jh4Sn7H$B rp8E LMMqqq!'Zje<C~-|X,F:&xHRx8<oR*faaV+5133C٤Ku\ V+fW^~r9"L&۷i6199V`0@'O^399J~xK?~L p矓Nt:8N$ CNNN2yܼycGGGm|Ӊfp8( β'uT*1;;h4'? ^VNcrr&}ɓ'a6,//f)v޼y×_~hX,+4Ϟ=rzTU&&&ZvJ~!?盗ϓ'OhurzbT*D888j`0Zb6)z=2VL&C4eggH$l&͆#)JL&<OSl6FFO>SD"VVVZloofy tIfiiIl6KVciirjd2QxnݣjK1Z ̝;w8??'RVZJѠc0z<`0hDc6`0h\\\9==X,vT*,--H$qzzl֭[|>eQb4aZ72Xft:f`6h4X,ZF7HHx<~1|WF2jFJ%V+L#vww1Lt:F#nsxBAFu"WWWL&VܸqkZ-ᐯ{bHX$ nMMMquub033`0S?<<"tJP`{{ՊtJ>==E/Tx<SVP ħ~J<𐕕|u<L7PS* 333yz=:V^geeR~G}''',,,nIR|4MyyVh4ʋ/ln>xnB~O +޽+l6b2d*+ 8FZ@ b!dH&R)\__#6?uBv7o2 x9LOOcd+ܿ_t:4 gggE>sp:q2 :ݎVerF666g&IT*Enݺ_|h$p8z=^3JwܑFj1F#VWWj#:шd2Ibii0 TU^/ZL&v[ʦ^{GR!Ll67X,ϙA2 pݜ255E.#  0͘L&sssm/jD`4FR)z=r!KKKz=v;LNNRV}qqfx<~-1z@ @*R Y^^jPKe 9m8}VVV8;;d2H$zhZ:L&aN@dii <׋ngbbB@2hV%'HS(p:$ ^zEcjj Cv;ne =phD(B1;;K^LX,FӡKd2v1{||L^g<Kvx^}NNNns}}͛7h4FRp8fw133C ncXiZ>~p(=nc6`4q~~rh5 & @ʉjjD"bj0LMMtFx__2==C\d27`4ҤիWh4$& /3z$X,bZl,,,0O>pH8?|&HNj|l6~j-c^' rphd2FSSS3zrH<<|E"ɓ'|t:2yu:l!e4vs||UA.//;6~!zAZQ(X,F@;;;R)Z-\*N,@aRjovS499d<h4 P|hEѐvrrR)FӑwxxH^gyyP($z1fV+h4 Q.rJ%X\\H)bzη~KBP` p}h0/p\T*666(Az=ZM`|>Y*b4 6|d_bnc4Y^^ "Hk R|L& \|>OшFAt:NNGx`0@puuE!NcrO>%H$ܺu=^/. K&a2j;x<vjJ*l6F6b`Ze`Pjnp=^|I6L&y!GGGTU$ᅢ V+;,AX@h4_4tR(0Ll6v`uڒ%^aggh4fh40 LLL«WƍܻwOxFA$EZvnd2255ngrrMףP(3|i4 f)z=~S"e^W&ǃvnnNjXLM#ny-NS6HܸqB@Rӟ Q h YXX`zz !o߾䄭-^/E.?~_ @6` f*lb0o~#K&G{GXFY* WWWDQa:bjj 'd2Q.d22~ݟoJ%N'+++x{4 cD"R(>:TGzd2+"d2q=2F$Fp8L>>c0pqq!'r8 ^N#ϳ%ښ:uy1O> Ȅd6&HHX.%]^^,4dH$"/pm0}Gz^VERlkdIQ(z<|PjjUsZ-vN#z^`ETUj K~_F@ Xy<|Bx^!SSS)R"*%ωFz=L49. ^O6evvV8\U:%zex-e޾}[N"sp8L:lryyp8bNr PHS*VZ:o޼!8??۲*Yh)2L&=HD^5 Fl6 vwwyG2.LiWB!z=,.. IӜQi6b1t:m+zzP(D00H@$I!}/_r;TVYXX c6t:Fakk >&xt\.&&&ߟDyqq۷ CRNf^r1Fd29>>fzzZpbիWq1WWWdY\.z]UθqeYf0Dd2q||L,J0P(ȇfDz &''E;Y(R)E.ħ~*x4Ņu嫯p*H|-?T"'%x_}n[ԔkF4 2^D"ܹsGt\.L'i.R h/ǏH$DxDʗH$}'误K"C xZM^E׿fii I"NIJ&: B{?m_~_IUy{Û7o0 rn3q86`0x/@(Tr8WDJfaaM*"ɠiZ,..~kkٖ+ CoB)5f)%Հn7R>C{\^^ QcZSnZ NGVk jY`0i+*O>mj133CIslZ}&''E*HPhDVhp8r\.1! K1)zTh4Hܽ{zɉ+++?0v5f9rG ͦ`WWW)U988fsl6 'p~~"{{{wv!_˦tz=6^':e$]*8==}t C"DŽB!yi& *&шdniccx<Dl6׸\.RJH$bh&&jJ(bvv~O(bffF6SZ:N|>fSp%Q[.#suu"CT/j:E?==6fv~~.3UY_idTڑz.$o`eejNq^j8::"ǩ25n~_ z 8(ZMWܛf&''9>>l6c˥fkVKV/y:*hrD1˜p80 C!QmaadGmA...x)R\.dR [V':HRh4Dgbdd2B)Yꊏ>l6p8TtjP@t:M8&P(h6"V_A@@`0(۷oNd2\.qsh4E<11!Sx (ɤ`QE/`TӧOY\\$ A!Z;whT*2' $z-W'J}`0v?Ft0Lh4áTU1 p-t:k666(Jz1{_|?'kVVVpݴZ-{.//H$b1ABoܸNFy}9p7opppp %\.^͛71'Itf>SjU)w*FפR)>3rBl6G}$%H!y| x% `ߩTwUP(`Z ~-Led>Wlҳ+՛hdbbBlVxx=<<.2=>>d2VVVv)t:Jo޼ ^WhnW_mt:QDG½n7~T*}j8!Ij2 Rl6nZ~iyyY@;Uh2d21(2;;KVc8ʊq6tNSPXffIruzwegg99>MԔԱ-z=J255Eѐ Rq t\4MA*ݻ'h4dbwwW%~9&U2 fF%HPw}G:?m$K&''988Y2}V4E333J%9== u~~h$< :F#GxF#nHWWWّv~~o߾[Ţjv!'jK=\% "jZ-YtGR7nppp~3f3j'Olfi]ՈD"Gv4 ܸq^/j.*20a9y*d2h4vwwRTW'mllX/..䖪\.R\U"ϟ?L>-E `RLFB%^x!<%R׹`uu@ Z} #Qh4dH$DQ, '''LLLȹ&+okkKp*V۷Ş X]] gkk(bnS<`0xWjs<w^G8Fv355%8ŅRҒ^[x<l iZ S;: ò^__ELzVK4~ t:z];w8??%Ge)u<S(H$e*crr-L&^X,&2mLZZFߗk۷o 7_|A<j ebj4M.:@`P|Ӫȕ.p^ׯ D7~ZMF]5J*\&a0FXVA.:F+vvvD'BX899aiiR$vI0d0P;T|,//{_h4Օ d2U"xX!>}Uyh4N₷obXXZZ5s=OkaaAX)jq݂/--9~HG:gϞzeSԤ(aXpH?y|#K>N7nT*X,n7rYzN0$;S&ɟɦB # 2 quuEVcccW^vq:2"UU666xhvMXdrrzNRlJVy3*D()LF4t]n7f۷o399I:[vxx^b7bzP$JO RBJ3\̫WxmPU!jI+J+Vzeљvn6/5rqq!uijjǏjzuYK6Mz.T*Ǐ;4 `P(Ąd Sn^'/Z__KL$o咗,nJ$͛\\\jrtt {-V7nyqM1LLLH$jLLLppp@P.YMB^ՊhݟnNOO ّpqqA4l6Q333~fff䗾{.r|>/,=o߾_fgg7oDlcHRX,DŻFY(l۪gkkK...DnΪm r%gɤL@Tl6y)R.fտ/7hZ8NZvUxD٤0|hBxF_|!P(H<[V޾}+5UEQz=1CaU`!RIQŻseooh4``mmMFEn{vv&x<VM*NP(DV`0^TΝ;LOO#BzS1`/3s2dbbBLefSW*.Kŧ* NNNvΘM\TzQZDfQ.ŕ877'ACNDXd{{[rt:Dh4(N &)ٌb<}Thդ{_~%.V+QMc8!;lmm#1Zs w6[V8Z&z/^p=2DB%*L1?KKKI^*h?૯ht:$ >|HbHG:F2;;+`0`ii~l&N333#\2 AB$Q*N#Qj4Ѩ$Auy9pVR۷ŬH$]^^LCQ8ų@@J%~#+*N)l,O ;l6iۘf&ݣP(hUj~8b<stt$y FC$&L V,H8]C,>Ze<,--q}}-evs% ?~fwwWT|L xkL&gggq֤,~^~\.3==-c{lmm1??O.n355\]]1;;+>8xtt"b%AM@Kle0Fm*{rmTVe<\.3 B}j"VKX/&JV]sD"2 et:^7op-`PKI[R, y|zz*y-JU{xx(!DjU]DJv+ p8͛<\,),,,GW 5*SyF21Ul9R\.3&XVJEUD?>D9&''EEjh4E0 G0x1/_t:i0ע}b1[ggg̜L&EB/n7~-^W*;A;\N^J[R2L&OSvn7=lҧ P#BXt:E!JwU)z]JҎP0Xrb!3??5d0ķ4E$>oRTFs{^a=2AN'aUQ@Dj56ׯ_cX^^ӧ JqANNNR՘ *`2zt]\.6gϞ _7ϩ,,,nW645޽{mďx%233C ˱lEF۷osvvF`vv#&G _?ŋx^~ "V9b1jx#Ih4ʤ "'r0bMmJԚd JMS^WQ`0fY[[cP`uu]s/yzzʣG$h4$Y Lpm cw QBޒɤDrqqǏiTuYR2ݿ~/)I*P99T_ WjWK2L`Pudx4Zkt:`0bN ,..[gff񇇇,,,Hbד빾qg`0LM_t:~Sm*Ha!sssڠ fl&HH$ % *h4J\xX, nݺE"C gffFآx̋/xe }ƿID-~MVFCD"`4ZE>cQYU*!ѫL&?#޾}+iwJ'<yuuHa^2{?zr۷o%ZKŦܸqsL\jqt:vyxcPPeݿkS)CC&H$Dr-Cj**sb_^^:::d2y)Ct:DQ~?GGG3C3PΎ~j%͊:@E(3"@ jS9wޕ'EjZt\.'b#)pA(2͛׿`0ȃV|gvbuW p\yAϞ=h4*\k.jΗ_~):-LJ`"Q. vwwe0X^^@45*jy8Vj ?l*RѪIBQoJ)l[WB9Cd8 5-D"5 , ?r)tB].x\윊)RvS2;?T9RIu LX+8Y*7o奐Ef+IT$ncccszzZ!N'"ePa VhDg8;;c{{[ eVyc".lzJbazzZ1)ɪUdR<ȋ Z[['6Ɉ~O2[wl)F"Zf3pF#^nR`ҁW*x8^c0$`<K/~ }VW izλj$DM}^z%V  ) sZ\\O?F|R$(sssƪoz[RV)H'''FKh4Bp+| 筭-IRloͦ sV@@TjӧOq:)ĄZ7oޤpvv&˗/q[[[qdIYYY 677'ns"Ƴ|>%*$\.%)HhN9;;ˋ/$!D)˥nXYYI%pE![?OfMOODP{oo*ZF%Qe b:^/QeQ؊FaooOI }1Ʃ?0xQ u.--I gV1ƭ[$JW8fff=Tx<& Ujkl2?Bprr_~%N+P_bS=T%IR|G|7eccCDJGMX$VV H3?믿֭[|wܽ{WtʥZj 6LbWJT*᷿p rPIu>>\@ ܂hdooKfp˅dR@\G'Uu.Mi}?TpU:^VMck4ݴ3vU_@} n:N/3FS5h$Q&PQ9g]f2?93LhoofŚџ酤ql֑R瘘ښUn޼܌uy+y4}ѨXfO A-k N$z$pF_bmmMaj '''-H ۨT*9W`zF_~1,//K v+hxz0vkBph" L&ݎP(qmTrHp8Z&8˗/1<~hjj(@ C&]]]:s"H' S܀E444t <xzUHUD===D",%=== h4˗JGD1?/n\]]akk ~_ r+Z F5jJ(ijj jSSSX,H&d2"jj PǘU09Fx8I&?-J%,Vzj*#.ΌlF P*ժ6y%Q޾?UU4<~}}}z[Xgb  R(MFo[[=z)x^fggfH$,ơ]uho8FX>O&.|Hl ~VUn5iz Nzl_YYۋjT*G|<G4ETRI޽{s'sΖ`6 riϬ?d2-CPPlF"Åvp׋Be X+.vnb:0r- uuubH7/Y{zz3L&6771<<IR%灧4Fv8g/,>6 L){<޾}+l` 씰@ X,&CKK'v;15{_بGww740<<}|yhz"O U*Լ^/vvvdfS2`ccCƃL2;;;~1 xE |!k> l6ݻrjZGU*(R9{{{|GVSg,@R(J4s՟hggN| ^WhvröSg`ݑPW 7x&& +++G8Ɲ;wtX,6ڰ"('-Ӊ#l6XVB!F(J0h)lRQ <1oАFfXEXVET*ܻw ZFu~;::ٔs~J`7`rP99G:BqYi}]n[ d2H8!ZYF&d&#[7荍 x<2I x&&''xBE27H\T Ŕ^|Uuq2Ԭ[<)JØGZ~w[16t:,ŋJ".Q*0>>@ ?Co7ic:qχKcg[<:;;哿KQXcccA6{#1%&?Nrb x$IENDB`vdk-2.4.0/testvdk/testvdkrc0000644000000000000000000000117110047524575011361 # # VDK 2.0.x - default rc file # module_path "/usr/lib/gtk-2.0/2.2.0/engines" style "tooltip" { bg[NORMAL] = {1.0, 1.0, 0.80} fg[NORMAL] = {0.54, 0.12, 0.12 } } style "list-combo-style" { GtkComboBox::appears-as-list = 1 } # common default, remove comment to enable #widget_class "*GtkWidget*" style "default" #widget_class "*GtkWindow*" style "default" # tip background, remove comment to enable # works well only with "default" theme, other themes # could override it. widget "gtk-tooltips*" style "tooltip" # force VDKComboEntry dropdown list to appear as list widget "*.list-combo" style "list-combo-style" vdk-2.4.0/testvdk/vitrurian.png0000644000000000000000000051627307237603551012173 PNG  IHDR,OgAMA abKGD pHYs  ~tIME9x IDATx\Ys$Ivop532kdltOL _YyyTȮ*2Y U3D"!@`qEs985 PV&J+lUFkY 8A`( u]"B=eY Z$VXk1ƀRTeIʣ&Di%[\^^b4YkQ c(Bm4eYFkÿPZjL`u"Ydـ0PJ}=C$X=~NKUU$qBQ C(mJn@k_UYpAz"I..˗ CNNϘB)68Gmk8!)9~?, Pwoyg?޾?PI^pfa8#珙ﹾb^b:۷|`?/)WE'y??:gZQ5Y6 l{)c֢L(x-NÏ?Hꊳ3={Fc\r{{5O\^' 9WUֆ49O1 x1YՕݖ~OErssC ߓ9Yc!5lGNNN?+O>%垽 Ðgϟ(u]s||hlmՒ|ΣGHh1$IX,up0d0͸|IFq>1IE^R(X.L&~Fm 5ư\,9>>ID㘯54hCGLS[Fּx,HӔN!I7CTg/8~>1n il[N:84_CUT P>~(kHlm+!B꺉'ڿ8]M3bkGGN]Q 2DN-ѲhN@)AcֿRԬwր"IR0 p>kyJiv z>&g\01dB)ϟIq`8oF#0]A`k)YakI͆lFa=}FGڲm!0 _Wmzf38I9'8<E[-Xks;H *ky#Z"5 :Qe~nK+MkB->b^{ur1' #65E3M|s0vl :޽}b`2,JN"bO\_gltz= 햲}qGQK8N=RyNhmȆ{nt:#J%ht:]R5ӆnOpH]l+ϝ1͈0p_%Qbtx|#$niUV %9 ֥Gq,p4dX`L@$RZ (-ue gRKLS]1/XaAD-GcL@ŌǓv# jwy|h4" ;fkxwopUe CYiyS5ݎ#Ģ(y~n8 m7ceI]IX59 ~mʊ0 %*WEiFv7cv JOݵUܛO5g%t$ႂ h9ۺ?\dϫXqrrBۥ(\\\vRáO`"G+gU U5YR`ʲDikJΫJA_rуoB|&G(e *g@JT<ijn}F V#$c65łÓS^=Is󜺮OgL&=N-Z+T2gۧ EQrttt6#"Sj)3FK0$ˆt~1/=lp8f4H # (1&`aid:颵"wLXk%V}Nߣٍ1v ]J.:uUQ%EQH9art|s4r_Z|Aס* ( GPJ" d$IBU O;V89>FYyw|ge喵& Ʉ|_ã#NN)ˊ >|9Ʉf\Ϳ3/ ZPY$qBUWm $,KnYl,K,`4򻗼x0l6~p8Sc$I~߾C^spn+mč"p%i՞wWNO:I$Ja?%59vmFK2DhOU%y]5j8ًϨ%N~W>[TU)aQ`0x꼊a`c4YDl(D_'c8ert|LŌts@Kw[DJ A i:dseɿlV4G]ɦZS5u]sxtL6`Mm EIa@w4:" y 'g"(XpЌ'uy.:@&HjH/_KZݫXˆ~Oj%w#L`-UQXlN\]^R[KQ Gc.aeEQ0Ͱo߾avxzat='{ $In."">}B\bE ;4}-c E!#^~_T :C6yAQV%lZ;h1h9i! +(tzojIlA^kx 0lk_\>{JU- :(ʜ:M !鶄J<`J{"-Y$iP͖^_JFI\b s0 N:_5(&jW%I ו (!Am78yt m Iʍ,Ku5l6JSk#eߧ+9~ZSWWa%(ʚf/~+V{N`0g<{(XϾ`s蜋wȲy^ yt~ΫW?PVn40 |OM,K(D\,q8xuӧOlLX,dY~'sJi>RWr9| UYK$f\4%c/bxnW k-EQ~uzCQ|w}F޽#NcN?//I;)tonnX-WyA6`r0op?Yo8;=8oEu)1rMK~x^8xwJP([ِlQ5?}/ NONPZq{tJY{u|ц/pfqz~h(}BnXVhD^yZRJ 0+o1ʴ$|Ī@GeU֑Md٠A(V6Gj:1c[NHijD`A(0 n}HvOO( v A߁u j _x(g7㳾VbԢ,ah$FS%՚bA˟r17_S%_9?nX3rpF-q IIacs~4PiEުv&t.m4<u=IS/(˒hf!|g{}3!A2ar0ib_|X `HdYFe\2 hD%WEhk-MBèH8(V8+JUvq! Ai{s'1:Ztd DҦTh z%5dV<| nW߾0g'ǧmx 2J HQ  C80U]]oH℣c4AiM|W{(YY%QY34^G>, 7?_W+AA0l8aŲ(!ۏ GY&cz>v+~|կ#!N[:( s.GZ:'~4Bc8O&yMכ rx2, >܈7}N6 GJBkݖLl꺒;" #4enXo=/ V/}0[^E錪Hk ֜aHU׿'b 2ͼk|wbs>|=:p6cR%aalTUl:붘`<ndx%!)q&LZUZgIIE#{OPJ+!i!nmQmk|SQ!N;|O猧lYb[8f\=oTptrFU,s@]lpnO&{X+ʢ$|OP5CV9Z65mM&d!G$T$O`tRwo9;٣3?Ƙc₺l6sFbzx(sI AϽJ(|.Z֫5w;JLIZG_Պ,pˎgVY.?N't6`6k*֧%AʯvBQUU뜯$N#657B5Ֆo@f nOA@G>s8J{߰aCCC2 z+QxZ16( 4@\CU G,fy&`:LE )шA6hE&}E~#9kRJiCmkO7dkyw^UUSVBy(VZ8-'SVjPӇ[`%NS-87߈ua( ~{9J)4e6;dvtVw(#EY;^|9pEah)+,K>o)?W(at0C 2)FiYx g,DIҪmϿ'F1!O=r h}wZ6t{ܔUUQepַnwb,v1^GdASE6ٺZ8>>͛7L}%6,Z\mc d\?NQk>fK(8¨CU]vRt$1IlhDۡJ4M[iyUۚF|>>(9<:$/sIΨhhI~h,RG@UV LHr ͭ>;J^LUJ)$4Te(LMֵZ%v -mopFK^5=bk,l i&Ae[  a^הe*\7WWsp0c<`vcQ%^ʳ/n" jJS1 #Pjsk-nݭurqTivl76>)Xx)#Ͽ˿Qnl7[V#Gdz@I)@wEY*~!*:''TU pSʲjƒ ڗ!\AЖ6_in6#^XQcY"*_Yon~1ggm˗/vBGڶѐ(n(}?,xO)n Tun<bAE,WKXxbٙOXa\-Y־'`6X,X,\]]EgggIvvvR=`ߓ$}Yw{z1E!.~cD kb* Vn#Ik4!Ē(%MoֆiEEt'ĶF{7j~C1*(?+ GzFqZL(~,!^5G'>#8.MZO獑Zn>~ɓ!M_"]U8 dg+!G7oސ$ ϟ=披+:~~gIjYP%ı'{=VkY4{#I5264\="/r>\~`v8Nz*i ﹻc\0vQ$<_J@8sK888@!{QfݝtCVJUfݚcw|eQLyUeEv/:EbZ'1A[i?8UkFo ukqPJ:Ε$I:70 a2r8!C@G>8v8kqU٬&"Z)P.(e܎pY '^=Z)|y /$XgNP*# ٖpJt5NSCDvb߳EY5ki9$Q5>۠`}m|ٙEO&/Ӗ_jn~OJ({=72>9`a+dad"JuUKWv;6 eUsnooq+ʪ$MR*ϩ>{pȻwȲ5~UR/H7bUZͿ~Cl.?~D5a0R(I%9 eYgkoavu[w$EEđ(ZL;a.gUF=c-=i+-so@Q9U!ļWBƲoiNKôSʪB! #PZ)J #q*- ΫJŜfC#N;hmH"9:;K0H|& |CRxÜl~+&S>v+dY.J";{֍"A#$vYw)m|m_G ,Զj0\~hZm^CW|4xN,Y+RҦ56MMRZ_vҖp{4vt* PZӖ_| q{uZ`W_} _Hӄ~מ#ЦL&l6:шtJQt{ݶG]MM EQHŜǏ ~&}ÁgXWGW㲒 *K xb?'on&᫰0 F6ЕB9וzA &l>,I^93*ڵ*d EunFh-3o>hc!8~7圏7y)r%-5iy AqA`d*no|oL4Phი"]fl4!UN:VI&Rz' bl]ck eYnYVt]$!Y(\}K8dqOl+FrOE5aS:QVW-Zc&$oPi^xٸk!i@%lHc1Bw+Amw7czX`pal۲L6E{AdPggg-!>gr0`_/ €k@8M}gz0, ? lˊn/Ah"l(+ e"d=9\-b$6m-=iǏ:ˠ =Gh2ߘK̪͠MY qAЃ~d1N~O o7[PJ.޼`6c4xbuYew;wwL Y[K(0Z{jyśQ֨~Di |+ԕ|7B,gYzCd" {cQuюPJ mT=u9Xfzx 8jfhU A{l8|&7NnE}rƄ}t:=|g&9,E.Kv]k̈MM:]"M99?"tEitNNq1;:ftp@]UV+N)GghL9:9m cNNe<`:qDYHxbf~Gz=1`@:eJ֔LF<0\еt,V0VfRNeEj8ߧEDgp L6[MBغb۱lHN;O` ޏHȆCӿba`ۛV99; '͵4DC;C!ZƇ1;>='gݯuE'2c4n{kOPJ19g^jbB3OS!bSW5O$UpQeU '*j*+Alrmsr#2b5?_\%z%I3xK̵$>FHtMïjG $FɶsTC5cgd UeIR<ϥ/K5jY U㔑"1/O6umͣ'ENǜ?DQaϪG}S8,, S]۬8'gbMB:}ۛFŞNTt&D4T(r_P9o&[И탕A$w^f7%J$IR(· :i` P! Mu^3 hZmL}sZd6L4m@~h+) XLom “eYR'&i ƴ {p_:V*޽}GQ~󚃃1py.sɘ8Nmwl4J{ysjIo.߿g Zg|^H+z_ܸ} ɋH6jz#9<6&lUrkU;aqCNVheZ4'72ɳ `b㪒uQ73dE%AIA36P[==͂0@e?=/'>g BHSa :M06[-Y1 # p~gKzQ~"V(454b|zjN*"Y *f Lw 6eR[pu#)%B`jLwȃ;Dkθh6>׾I|>)liF6evx Vړ%kΦD i7sx1  MkHtс7³ %{ΧY-$>$8/E5>)E{ŪJeYo*6]i1FT[-UM:UYZ ix&,.~Xc/]ƢQanM^2fRo );-5 rJyVH35cA\zbPG1'9O?Va@R(a{vO>B0=FF TQS ic@!溤JbE#RF#BBU;PELDႡ Qepq$4l7ZT S7U"iLD.8c-6K$=x9C^l[] -L7Ye/'LxC ;&HtEsRm]ٸ6uKUKV49щC9lcɦm߫e`7 fbY]A w8_<SqX]sES #>}Q,=[%ɝKA %>cJAR'PS IDAT}?0ʲgABrMJzSd0/ v$Kt]\>gN7nĖ[ݔpMW,1gmۚex ]F˦)fj -Rp8lzbu"l{- 2PBqup7ɂCq,U_[0"1!hP BErS&t-ENx!C֔*INd)DTx8Wt bUǓ95nߣ?y ?]5{МR7>ߣp`S_)ocGObz\ٜSŁ%= ]L/HHRT[H&:IO ($c?rdQjX%]0Fmbs 4^s s8pd^/Zdm&8FƣP&L-$dm**pl9`M:Y%sX]/)`Aov-!3VMQD!=*߭`0GY%4 G4"wM\H[RXX, W$JDr)Taw3I5"^*'c..ЎE$g wr͝!7X%ccX`>S= >J b36'L 5T~GEN]UR"+s~9#DŽ~Èrr] (**GULJ $)VB9ػY:QnJf!eq" If GR̤Q^aZeIn3euC#'&Y KSJ2{~H5U <|㍫Q[_єUS>4R4h' hłU;` ?3~rab|O8/f)whMWgʈ R7=G׌3,θCw!捴Bj Bgr^DQ#{<G_z#8 M-%G3s2DKԛhDq\8WV  1Ï>i-N,rt,zӓ+F >x-fv-K9˳U2'Cz`p%#U;EChg1fzġG 啌8VĻՉOFA&&Ƒ%Rdў̊m%I[R")Tu!wĖ:.ƅJ̫m> jjMGSFarP jޠn'.A5sZLG9ŽdxĴP%KX )alkuF"iHĂp|ZWn*\ uZTfH\~ >-$izt*U '=O_v,s"ЗtCwY C9rV V76B;VR&{@@Ic$0%ajBZ." B8F T(4/78/\"‚˳3qdE#ĩ4Qm|M^e \2gL!I9TV)K_vVk`bٖnH qz܈m.>m"=%e&lB@#,P$ ̳̎ < (s51im/&j5kF=ߓNU:o{۴Ȕ "9P%P]M_QN 2R:lp 6犄3eCSrK`[eV(UZ UOK9J]HЅ!2; EK3'\Uo~P k-*<$;Ҋ|ΜiI EOQn?LN<`5Yղ\ $u_5uNBFᚂ= {f  9s9%t%BhNSdQPJ=Gy5Ɲ"" kC,ˁmRN!+V?J*b1m<٨U?WڭbIZ~d2<\N><"FWBAi31TM/6w45S8U%rt;ו8 x|`K1͸" zjB7 gffYˑjVSD ಳ:OSC*J3,9H/kCҽ֣"0.MxO8r 89P`t=Fqh"a$FhlJ-'2ȱI5픣# R.lgL5A'sde(^gpm/.$DZ,hE22Uãя(Ӏx|nDh[I`{!մ/$ISBut#UUC`8R)?kaY؟)\/1{ Fm PHR ...8ut].>)UDH: KqJ)(bN]\y%fBJB*)}v@b9ekM@SG l/5S^xZ"@~Xvs1"Q`2ѣokh|B 77ҮDL$5MgUX\ڗ\,T"qal&ȽlE*J=-SuڲPm42wE]bҧjԓ`~ʉq у8FuABHV)Gϒ]ϥ"x݃D;q|  x %wt!;K'Jڐ^6ڴ׬?Ae&,,0mt2E/<6mRʏ0A! flS)V%,'&vN;V'(l$9'iZOJ9^44VÞtJȊ**B1nWiC=gxrDnϞ=ÿ˿˗~>]N*/ H禁bk%zq$Y- buXiBT+Cv8b"uBO#{d!/S70L#D|FP2|1*& @Q6LM[.)QP =tPˌٹNi,jb{WU'+ذapKFbAZF /UAEaz"BwHRH؈I('f홣 粲Eg5kuDMHZMjZ7;Ѯa7)G? vi)=8AI//,ۢ ?Abh?݆NϮYёE Jt ȴ^1XR8& Zf ^s)WީHsx?S:Deʕ W-E0vcTIP/=3,W."<:NVSd6Y_#.ES'*^? "8ThdM)?E@0Vś7oNυ[B7ө|-ղ [#|ߥrv%#s&m|qV=␩jXX9ؿ\2/R:iSy1J¾#(&W K'/0Jrʩ\ "kv}?O*HKg?8Bշ0ϥtƳD-vhaBv #:!U259gd)g6"My/s_[Tg˪2z|O:}hSScjq[~zyU;-{CKwd|=2Q`AcN x: =Cc,cZO`z)͂acH]G9!9ͱ|vsG8ywgp8mt-T) yN4k.@!GʀD``Jo{%8l^'z*G~JTTȈ"}`KU>t*%:J I$ jH**Gܽ~۷oї_b}H ĔX5.D!J T=B(D%K )2r"֏]uuR1pVhT;dEnJp[0'ݘ9gt1d&E"7 QO9;@،ˠ>~G.MirfgxԲ;uZiӊǧ}:_"4i/8s^aˠ]\y'KV\ppsku3|R&,9tm}][}0&ZX XpcۂX )ҥQghq]2BAJ #KS# %B.@vPzʆql0~*оC"%Dko AMSն$[FMU "?~~?,ۗuc "jC8I9:RFdNg%NYf4+pSr< aTMQc屒 žW+sĮ;ۤdN@ CyzbvuB& >hNM ZTo1ݼxσ?o[Y~Ph)#ٿj{dm|6G|l9:B;O4i :ϲD濸)!٬CjtPA@K ?Pd]yɒ> _4ɿLhwsdե)`Utcqs=j'y2٘ yuf@8,SQIMoķB]8$-MS2QE"JEtu}f捥*dhMc) Y߻/;dA8д9Ji5 6I+l)& KAg 3=Wn/nZzR,Aq&H4SzzbY1Al6cg^iIރVIsh}k1_PM6##$ܑ3"bTxQKGer>sL ExJ(9={E?Ny;U]__7770HUX㰤z=4 iu 4"Yx\&Ҹc9Z̪TUj'!@)b|rr6i)ũ8pD^b8Mq-T.`2p"S~K'tS*XQg $r$A<ڮ.ѶM o-{ORUXsQT-ױ?Z[x={<~jЙ6Z+zROSDb\s@@?}jnW??q>RNU(N1F4md*y&d. ~Ş2EN suR b"ߧeg# Qyb?Z/ʕZ!7< khOmR}/q^\|mA,^ ^^"2E T V"FT2ss_.Z?bNUdrGh12N;!r*? Ug$>i0.N@p`_cCHZjX"M'p\4r:Y[C=|K* BE`L |R@ 4]Sd,Rsp54EO?իW8?;ŅOh|XQTi2/BH/%pvqł½{lxWUr60yY< Йwc:N3~@.m.4!J 0SW3[eU<#ˤNYexJ=8<<ﱾ@+a`\>} @  ԾFtͺ"+{p¯ssuv`MXHtkT]LL)0!mJ3Ҫ.v 32/|to#:':țHt5xOֆH/G^2佷{ȝsR=r.BJКOr\Lk*G'z:^c*iSͽ8 fz{5ШeW:Md5=wʪZ 8bkE۔tSi#pkN^OErSѨcI{hU ؅s7 lӧo߼gPry [: SԥqꙀa6\{#1N²nHc 9% rf a49֩TE4dNaD{ M56}2ʼn|NdE\KɍNFm~%&_?BhVK`%;Td.Ő,qvu/~{;`8xx݃IB;5#Ԋ״48r c ayٸ:qa\)ABelxۚ:a`J+q,pbU8m$# "\>y/pT2rbuxK@̰cPH E~j\Sn9kJğevYZ\YsV-ET(0n''N)1MZ{$U[;NJ)^'- i|>0 &cRW~RBG lգHe'Fdb_%y &?C?`c\ bK)ʙ"=T-ӍhI#ߋ ;uӏq@n=ff ;쑭/ܓVԘZsWW/{ϟc;> 7.mrU M'h,뮠kghrrr'1b\i[.44tDіw9=L^b1"WȖ2V^ O[#5Jjk껤=yQATp8Ѵ-Vr#pBzJJCl6-l4, VN`X`ٗlBI !Ò4+x0]E܇lreGA6)8aqOMijbDcoM׋܋DQ*~r!rN><!'5j;♋8.d#i8*1"mЇ 3A$"ys; >@hxZIHGy8:KOV;FU25.//v--.//k(91iY%O9XoP0ډEbĸg)SZBS!(Psd:2ȁY:DY J), {( %BH0Jpd)H(ۊF&n˕DR]ᛆq=d[IOcT`܉\)hMH8efz$-eI9RNu|3/PRq<DY =x*@\p5&ĩ aJ TNFb8FmiƸA!n $D,m[.+"[OF08/[t`C)9V+41}5Jlhfo*ݜPVix =:UGIp5TMRJ<2r8 _ۀfݬy6縹zj2ɇ j:*S-U>;5UT|G?ǛR$DVyIxӒ}(z[)70-sD>M8KnZb.A~:B#x U/{C{ΦʪT@(l$ȹ`_{sH(%]; V2eAkfֿVKnҧ71 I%r f0'^PRq%m̱@ !Jʧs 4Z:9&Nѽ롓笁BmrV#5B r-q3W\9g*}$״U̐fuBh][HR5_U){TJu9Q}"P|1&AdkCuI cW|xtz/CL{rJJ tb2$7WQL&pi=zm;91 |S #^8YU~R\#摆2qtZiê@@Mg iY|70= .s>NwIdn&aO^WȒV9'L~VdfZgN2/lGfc-Jʫ4#?ry];x<GpeM\e:HS:4Sϣ&[N@S WK3J v{W+6X$@bŋ88~KFjGl6<03$G&O,)兦< $Qœpa1Mт5nC&g o߽-zRdpdEQ=nS֭jZŵ| e&11F À19!dq&X \dML,ogcdK1,z+-Ǒmwu]M]CN߼pqA61P$ r$Q,S<_ߠ&QKj[ :D~qK 2IԢϰueK.iY8F+Q_}|:HF+]vM0/)hE`e`r' SQAfszbnbP2>ں^[bԧJ)T=R1V"ܚ~o*ЖVExBPsw)Z`B@s8JZkVVh%SCr,dL}b5g,Tx˫Ksx>ct]gGSfqh:2ERhs2F v Be6ѨJB?cCv|PiF. I%ӓ"a)O,jǪsXV'up>9o¢q86Vq@1_I=sdb˿ ~4k-gVaPJPXat"tS,i%#JHuD\◞+{9rB!jSdSѫcB*T?u_!Raj&VbK)qq~;<9.// -. QZwB7 M=d*Q{)-;O"bVчxENi`WRŒ.Η$ ZO_QRRWv}>ximUFM5u'2&ȣ/ 1J avv.Gظ)JI$sQc͋Ar YBѱdŞiE dcJ2$)ȕuk>4ҍu dj G8nRJf8G;F]`;uZ%HV$Cky3cdwP?rڗjc> 1O.n S jPI)aF\HH)x-WJ c]4MF Xn񺨎DS}}_VPk6-J('8f(GO; oNǃ$Cű?!"ŖS[8 mw1yxjb39uPka섍n4u9k{㊴t02<#|ȫip*MzUk. yh%mlw[nyw1蚎cd IhLhZ̬msk,KpRC='C&4޴kx|8[QixT{1׮sr{{n'<'l[|3+ {0#.//EаEY)o݂/8Mq6%]ܢj]΅+S,-BJˈ~HZ2&P1!Rƻw0f(9okl[cX аf#4-pmpwl3Rb+׆s|d/|rRH^n'bQAPe8VgAh‹0 TX| z6X.38~Ka"Lt6Kqpeyjt-m]{ ԡxxŷ/pw;| srhM+ ÀoupP)X J|ͬ~3>8Fz,QsBBD_ Psf'n}Z9Y5&'OEod>ADxl;,k`<WڶeTXZ)#g>27~pDhVJG@8x1ڮûw&XpV/_D۴_~hm'෿-fRJq~vGk8;;գ+?$35ryt9F7o_s=ux9|Jj6Ϛ@8vbm1e{qw꺩C %%16$`T v>MJ̈O/bF~F IDATUĨwwu]LEKSJx<`~zƧϟcߣ?Ͽ0w=^3|׿|6fatGl7x5[q~~Qiб&hT|0Ρ}jq95mٸq@DX.UڃDg0U/sGjM@hE#|Q܃':Ǿqww 1i6>_ͯQPx>s|Gpaa禋#4?-E}[5rKcD"$~n0`1_`6n :ꔠTAp*ZCJr}m"deǓ!'O"ۛ(;> ? x5½Qp #JhL$2RtC1v\w"H:h")1X6>_)Q"lFI}*T˹(,3C$%E's(f1G<8x~7Xߣ~g?hՇ~@48#jzqZZ-? ?׿k co)49n.Tˮ!_iQֱaZ=dBo(A^U*U A*9=5 BIfJٖ[V} maRJx>`᧟~~!X,{<}o߾o2^q~v3~g|SѠ?U`GOŀ_-E!8iϲ*+ba"C0Eʱ(G@NrX6p'D@dJFqnϋprLX,x0戲S"6XSp n߼Ű?`,7z1fN轚ɤ G(T$(3Ź6$) x"p/=}E:ByuҌ#i@_ROx%FJ5DV0eǣv ggcc9/X.mwn7x55_㧟+GW+{s`^:qyqw7 Mt-&kᤊ4%TQZ¦^Pδ}:\{s7rjG=M(eL1菜{f3{|;'+demU'D (*0Ea2'}mpͦC@YGB)9OiD׵hV|Zj_cjK]a^{,+ϱ>?G'&d)WHl߽ЭW♤E>(Z &bsLm|c%Kʯx 69yۛ]]"=TpQ?0t)]ʻblT*C?I9lUC8?;6\\\Xz7pqu2EԬc ~ogxtvstM~G ?gq}Ϟ=C6oz7ުwZRW]S r\\5U5E.jXў80- \E*TNFLX{9~ZJo\]^5_y_xs<})'lx l6ǿ駟݌Mcq_'뽶$,}issBfF@ ]^=y"'/U@T "#3{ka.=<|hЙ&=g-V IJ:a], FY?kFyxY 1 W TŬ07v-5Pm8TD6Пc=ċ|SĻ=Xxb00>q:Eۃmp\Y k$ ћ_,fa@|m{%ţJw'Bc|H26YP@$c$(-5Ќ7dS@wqf}^wv#X{($'^S?|lj}<Q!&Z>!LQcU>L9aY a#n$V83?2~Oy~,s{gl3c;nPJo?h:Ϳ}˲ga4!2z3E^8_ei6U#Kt'Iv3-q\4\sy?6z!XZ@%hYiJvpP)ƭ^ny4[-zPBUUvlk$zYgX֫&wq}c[]8B%"EQ` ͆ڌVa^<%)DrI4u2[Bzt_* g# :tUHRbtXHIPzagP2D, X} %-{SX [D8rVE7%__EUIqi0ztnc_"Vb6amKxsi plMZHkp&Ir`>GJ*T89)qZlW6e6=VR~ﱤMYǟ_n~$If$N'`n|6e[~FiIq~_ >|`BՆR V'x$*Gs^G3|30beX֤rg]8䱙 =1+vyh񬰨8yڅUI*=Κ#fEXG1R$Q1ԫBBhp|lAӅmgl;폆,A8D^`h8sdG$ {}~wU@w:yS08؍ub|J! ۭm@Zx^[C RҶh=rG `;Ԏ6EQ( *I) h4 p4BADL3[$1 }?@ث=H?M}Q,"nnh a|t8+\1 }#IqAb&uь"qcKSHYK`fyaH-b4yF[?>-8yK9(jh 'sE/wz6FX" Cؖ;<>>"lƸ~ ?W_b MS\FxaǴL0훷FE@|(Yj%[X2}V,El "D-`m;uzFcnNnW&9i>@?#,[oSuHJAˑH& a4u~ oZ) *KFҝ;Jl^3@0 dTEECq Ov ! p{EA~ǧ'BbZI\@BUUH$rn @EGCY/_c2Gv9ue4>n>`Y#"\^^%mJ3̶m=IW^/4c<yX8͚<3tܫFJ) >!8l_{0@VH?Pwm!֧ ,CRZmG3JR F%zhD>3S]o~7vY:]x6vSdV3,gs>ggZkȮ5Ka !'4 &rU!oWg%:UUfi IXUdR=)OݥT%8TjB!HHKؕD! 6V (i2 qt:\^^"c1pyqfi p^ƾZa\+VaYZ;>`<nӆ'<2#$OyQYplCe$<ÇRl\R2@ŏeY , |_c6<Q۲`E&񞮀Gi x_UZÛAs|*~X|p4bkzy{WjIETeeix#i:ƺ >4oLKU{+@([l6$ˋK?9 $hgNToǷX,<C|  <{ N 2H=z24ݡy8?;= "x}(Hg,3: }FaiM{;SvQ87b)sˆr 2lH=6U3HȨ?# ҧ]-: ŋx5>^GEPUhFDۅxEfMUU0 EX6hFd\a#,Aj}TyΝ6osHXp<_We\k)!2!@)OK'LJ-=U(kv]8)И^q.e9mF(j0 2t]DM(4Mxo^#jg\a8! Cs褝Fa $(l63/1ea̽QvC$[Щ5i)BCєu( w|!e3vݢSj(UMq1Z&2랱(sG|/M(CPoޞk(o>b\u]>CբŀYN&sX,p]`Yɬ3<<>>3u|c+ 9p_<7ycMuN//vxbxrͥ  ˂P'o67YX{G9K*p<^"RXC>>cTe*M\ϱQ W_g KMg\kŁ~UT=:Lk! dP6ˀ.؎Рgdr;\nŠ?Geq\*I{gx p||۩5eWï-fD]|,63,z@=wB :i y5|..,n5oru=xe*C%&^ ͅ3{ڦCa8⋿;#-ʪ9?O/buq̐6 FkL'89="IwYU1,YNz1+ey[-asc,68X\%3N̕WD'EaeVUAncyP4Mg9y4c$N1R VbIʮ oV4>9"PޑGz낕96 _GZM1N ",= L €@ۅe[ja^c>x%ڭyllvll1.g 53sX C7k,WK}hB`,xLeeYdȩID%ҮT$pn4TiOqA .-[ :f]s4ԁ/9c@ceFK?`+va00J!jϱ1AE(yi|@ xa/@a& VCZ`;*!!B(,σ O۶u:(#dV[.>?t\+hL0( ,JRD IAFa:OQ'%v9!Vfnó/>޽})$:.Gx fǧ :<vO]jj@/7EL'%l0ta!;M3j&4N'<V 8c "~iJs М}:p<۶혬Icuc R1...pyqi)x 52Lb0J)#tfz7p@ÁяZixaMV&fyfFQl,::zTl-“'oB@ ).SZKZd^dI Oli[pEE޸P!< `TEcX6e8{*:A JfyyӟѠ=x$]bnkFUVzv $ ]љ#ErTFϵYox 0͠PT'cpCX>+ a0O|gqKZW%Pm^}b3L#-2PM.QDQF`iMY }/? ^~L'Ǐnon0!$=I v0L0?@n6X.wW/ȧ~s1p}}ME'"z f`_8>=P "T, $8d^~.3w_,F8B"/sC( r=Ai>F4fw UYNꊜBmcÅ={g5 UC{۱܈Hya#D#$ lp8ջ+ $aAHdќK0.0}FT=71.`zD=d X( hX%aa<>$2/~+S'G7&- &=yw߾Cw0DہplE#HwGH60nF^ A`uk`Y.{,1z@،tC!c5)+=kP゜(£5c.Ũz[񖶬P CLǣ&O?( 4[-EG>"rpV;|o1)QX5ʪ>k+f3L Q |QD·Hߡ nkjΔ],%IbȊfȳt t_sDA[Y\jz ۶(aFRGwssz W_&K?yAa:/A$|>7.PNOz~j;,Kyh( Yk|χ븆f)Ä:c10 AYa4o߾h4B y gYAӝ)aijpò,aeO)o[at+/1mNJ I m듞nHĀꖅF5ER OxˈeY J۶Hi!hD8vrv ,FEĐC=")–,E҂jR<ђB3yuiv:$I=Yv7BHKAZ'*/7,qM5>URoQ9n4^)%4 {]YGlk=NOϱnxFdwwųRQlptt4M+1xf4M'1>;NbNXތ :oz_A-ϑUwGbgz:\fEAϡeY}"&iB8.8/_D߇9Y L)}~a*-S/?;4=[Ȁqk08\l5Y( ҭ T䉴!=: EC.|7-*CZ>1[?3c3ݒ5+/ xK^Ce z,ZCr<FX2-4\oߤΈ-0_?t+ 0~*k"clKlVK&gg!,[r\傂Z@(.2%-u" q~apYTlVԣ$ KzI(zA+J:db8]Uqn1|/ÔxCy/etǑS@)GxzTcOBr|A@06Gg"cZmm+l_:TCr~^$ۢ?^q'''|vIVߢ[s/όx(`4C!*YW_H"BMJ׶MS,td8RQH ^e,ɿJԆxO^P<7p菏Y.1LfS{ 2/'`K"yn&9_Y; Diw?@A"l4UePFNvtQBrXV[GHI=~(ԑc݇x%V%ʢxx9!u׺B7S&l{BVy1s2R"jڎmH&Ӣ*I w+W+q\/l RIS|= eFJL؈R6P%qgUƭSQJFL#L9@g4,{ghokSZ_W뙥qw͈yFqJ B 86U;JwGDbdCEf uÃB'վSJN1=dYRȇ<wFR(Tw{UAX\E:8qzvF$#$xK+z8.|?@<qGYTHSTBZ~GL^T'Y8>:d'Ib@mOԬ졀¼"ƹͮL5X,x||8|F]@蓤)$HQY0t{{7@/_8hD .my|޲(q3n -h\STmm3 eED}F5g gKZvN}4K8װ.zol3?? "*P&O70/,L5򄪬]/!(/K3x.pi J,8qx--iӑX kUȲsHFEqpA` 2LdgiB3إ4DXR?mxOclk:86~O*28_"/t ău(ɥ,)OҶXf&B^x5*8.}FDݻ31v-ڝ.<Ǐu/Qf88.%Q*n:;Q*4 ncݢq-$52=(%DX.nNX.Xp=*ƭV ~x)\ $AԌ>5gT/޲ z+{O/jN9c+@Sx4Eⰻ{or7OqǏ8::2ƉI_ngȶlA=BP7G,P֛5uZ8m#޸VUz̐DŽ%H ۶4%-o  `$`+w) Ъoenc#63BnLǤPԹ1w1eUC}F03Pۧy!~6H,s)tCLg0l2ҁZ#f \(8"Y;2 AO֘g|V+ckZfhixnSԋ,ːV6,PH@ЫqaI8ZZpkt.oDK~y|#qaL*4* +2VeצTa\GW]q\(,Q[XRtCML.!@pZwV/>(QhT+ ST&w0:>FAc"Dn(AHLS2eY]/?hZH4wŞE`2YU`>aZa80_, D'IHO%x8CmoUYAiZ[oaFURA"<_he*1B@ CE&Tck>)*䪨1mAŋI EfwAw_c%Gl^(`;eg3o6!zZ6zwwٴ Iն)KJi\s80Ko8Rg.Hgx|xqCߡ=ޤQᖖnEUh ?u!#TKWK}QHԆ^/f3 #x'' Nl;<>>s]~~Bf)Z5I\Fx:'˳$ f,p84 t.Ppa cl0({{!n˿ެ10t(~@"/Ј#PbSj\:>ƻwx^fTٳg8991N빚gC9ʬ˪D䄵Yi~0qX2eI/zMHa:+&op Z^ʥvUj Mڬfie?ӧJTxp5G)2ixaja@ȴՆ4Ew}73tkAT;促0 (#/bXWm,X<6u3eUQ'I^#MS=ys Q :.mޘ+s@#oCrn`0¶fX{AtdBh~"؇!NNa6^ nx dMYWynk~Y-mpExWǟDqZ,1N!.:IFNFl@Ɩr,$B ^Pº pGU~RJ4&i "<I,+ZU(:.n7ŗ_~I:=0bt[RJtt|[v;1Lz.T9YV[U85D!))`Y!8]'KSxڒKD04Fey2.gB'uT)Ѷ90tZԸ4TUײ e@4A)%,,I#89.}N||wVZ@s(!jD}|{4E&%k!uJeYb\F#J?~$~-R> (/r؅>س>x443 $hzI)y5Zp{{KY\M!zvs=DQDehxD#^ygnǥ *k̎$_L'1tlǸڎmook Z/ih+VXB) !z!-@f6,n7 65 "~lFHgٟk;E&v{!CGT@7+M)98v$e(4WH:},!5lOfTyAP$12)!gOQ9n>\ͫWmGct.>\ N0{QPX.Whٶf/?( ..8N8&<}bWb:.Z6:.xl ƹ<^(vN'mab\5{>9l9=֛5lӧh4BÝ?ILSr}eI)5WWWƐDقt:&X( x#((s\]]A%:ݎ͝,Q0ve\m'%mɅ(_fw lXHq(KznhژL'R>|DՁFr2>7EA4M WU<9 `?~XXBHvf;lRفX_oQSJo"\XnmEخ7|^_nȌ/o6kv]l>e#KS,urm#jP&t]Qz+Ep(j0=HiIot)e6tT:7ۈJ) }ODžX(s5qk3{ښduU{-Bqg& \,mP}[yAI%T1,x|^U&V_<ض}{{8}swV#%ZDXA8B$9E\.pJ\`8S&2IP3d $Ȩ}w<.~}߹a~7ܺkx;Ad[Q9.qbg}`8bww׮^:/5Ai Fav>cX`^q+3gqpc ,}YNnC=n+]_k>+MI+7n1#_ՊCc{g,ǥK$eeeAn͙(kf"{4 XBn jTXP2t{]{}E,%wh4Mɦ >g^ϟ'' U$Mx<>Y]v Y! B cF#Axߍ5R)s36Idd`wwEQn JǙ7%js Ʊʗh,S컘k9T.G&i=3.Bc6Lh8yF0+o8[Eq־=Mf׮^ŕ_F`e8bSjRr6\)ֹӨUuҵ$ pi,ɥHGA(U!Cs$m궻OakkgΞ&{qxp;8=`)><8twWh`hiWO-ݯtڨGs28 dQ8>:F,`Lׯcmm?0uCY[,v.R]*+lmmv BmwRVf:bfE8<Dz<͛Ascum4r֧2vwo!/80p.y˗p{wEQ"/slm`i VVE!g68d VQ>ʒ` hivRZ*PEKad틮V"*y{uSOa:S [2W)ed@䣴0 jwkΛP.L:2fY r z)=tc{{[ yh# #ex1N۲y&vwo#"c0PXc"/m,0%pj܋Uk<( @A/1!|Atܤ"yk-S;kKϝ3*wi^N 2jAϞb@'k^c, lln軅-Ir yast!W`b'J;O9Or$ q2c&-aƥt; t ^}I,h Zdh-N9#x}sUI5Y؀<##FCQ~0 ,xd Z7&}ҠL]c:W\˗.j>0<>"n9u[ՔSpL& I RC?qL_~ EQ`g{| BW=cks sØ)Ξ9 k T&^DƣXB׽==++G9aXP A~:ȇح V#`CnWܦ<3`.ƣ185eYwSOcgga ^!vVwV<2rʲDۅ7c,0ͤ=+]r Nu@ w7 mN"!6t)ґ=! ȸ;0:{{u&18"C̝ CL@`mpUlll"cllnQHa@<kkbeeMd\ h)!/#( šXWWecc1fS;o|nZmh;+iYBwz=bW[7nb8`+W3n1^qMlnma0Х7׵%(\cHP d`爜EAi,ۘIˣXY!c2 "=xxHS 8XB|INTܼȓFBJg1st$Mp%>DuOq+>6g;h-lmn!/%0>`, B G*%UgX=8$IG1ŭ1ڝ6j UU}mu =9.|+M)Q}[xӛވ,(Go捛hT%.n֯ F(P;<ٖ1j Ѷ,Kw@xV$A?teCNFwVea0e Xi-Xd̅ڐc.>4ypjVȉ/Ik0UgϢCTpt&VVVaL݈I}(Kx~jٺ 4R )/\}(TY)nN3vAz:N$S \ ǝi]p=CUNf8<+ tTK8RwC˩G]ewaP lt[;!sUU #z5QXd+IӁTudAD ]DLv[rZz d4a˗^v}eeeQb<!]$it ʓ 6,(J,X-EcZnۄH{~pxwZ ۪4(pwx[7oc4`0 #ynK>c,o` n9uyǏbOe~ǁOUIq*qI|D&BU. MSܾ}.& &a% bh"17qlsxh۷dʥ[KPb,`D]6̿˳sGt:q&aA.?K& 85w%ΉA)%^?R[mF# ][[#w}1{kQD.亲4cHHQV%ʢĭp|tݯl;s}cUcq{E3m@;Qċ/H#O*ޞ;Lk A-lCM;̼؁oQ#,VA8ƮR͘FLMvR왳HeU &[uQϝGFm,v6OkܺyW\{YYu:D" EY˜eCElV Pʗ7ٴfl.9Bq ,3=Ut CitAMT-d2ofͶaas{;q|vy- IDATr]J[s .ԌqT}TQR|/# <VVVqjgEYH݋p1Ncn/2f7ٻ]p!q-qό|,i0W1<bcsCh2Bqg,[sȏ1j*#A0s`XZϻv#C5!U 9<7c<೬PUs# <hUY܅sgpu'8ܧ0 e3u]c1Z8R(=9#w)9秛%O߸4u| !)}ggã3g+Kqh$za (:dSch4`e@ %n֍5@H?miC=T$Ĕ_ N\t- O5& }<0$Bܡ{oBfs]8} pWt`6AϜuN[Dz,"=F!˂ ]d)tjBjS9)Ihy>4,"ISDa jR%Dkqy#S#JT  =uWqMaN Υ,+a$p&g{>]E֖5y}o*hu/b܋BQ!1/"_T( .ؓm%$+{d]@ny"Y|EqO.q2I\ (^Gclmoao_bԎS,.>s׮_CFSo $wa\,4ybRp- NEÂOcnݺ,o͖tOVyRkx#8EJlfNJUVH a(/i4 /}'ct L*w  { AWa|#fSܸ~Vd_sgϡ2p*f>nceuձos0Mkg)|1bG6FyjC#LdPW Ųvv^MxAe8:8d2AZVAB#;b8Ɇd6p=w<^/" Bll!NmcUE3Æ[[f4@umx)Qܘ{>!O(HjF0$=_\X+z7,QΞ=gb>s=/c, 0Bfv1uqx@Vܢ,?gS, & pU5&1yQςl\Ŋ3+g1^\nfLmX__ke&$+ҥd8zX_3P*F<}1ͦ}el65?n(o/tP45C];{ &nUk4Ily>$e]!M}h_c:#ISiE@jHp#O'>ksT+tյu=w 4ĠOK%i83/XֲyJA6IVVV!`mU,52ڜR4R( `OI޸SL|[0qYammL,hm 8U2M7*&A \@gcp6aPaҮ;e 9ZBc t|*GHX̱H`똠é3gtPbe(K/^ NTenkhw; e2>-;|VN>)ҋ/bx|TVM'yϹ(5JYY kt:]ĭyF }r-;8|<+88/'>b"Fx4t5!PhBJ/E(G0ARզpčqhBe 6?IQVWWiptFtx;rȋSD׃85$ VHgXB@kU Kbchuŗ/[43śt*M^m(F#2Hݮm9 JjEʻ$C:@Xs.d2A$dȦ5|幇u&ll "ycj)9MS*:5( ;;coon\]nFL/Rj+{n 8O0,(;>=Ե%0?-1Xc ZlB/oӰ!2?;5bOy]4QfԉM+i9ݛ Y,Ki(PV0 ],5=JumZzi+(M,n| w!ĎY))tPr1-hTE ǨG*C^Pd@I5MS ˱fH0 i|Lb"RBQc!UY =8Y{ۈoQ hkrYVBykT wRGnޖ'qQQ;X@GUט|,E̓kڸ $x+_g6sYs #;mb(_Yx `) %QepD-l=xy{gYb#=t]LgSܸyyQ*qX$I/yUtE*heU42qojZٳRDVb6LD'=6$YG%*R"f;| KAWm/wR\IL؃Qtn)l zi&`Bx2*՛ p4 486uMyș(|NDOP,vJȐJŲ{tV?!0>5 ۘY_9J\QcShǥ_ʟo~|?%7Q|2\cmo}{9>S;%9<3퀯V+&8&(/rIjK_ub%(6$E}-Ry!#|WVD-P8Xl<%c8U @5J˾[koY{XX)ʲ1=) 0ΨCr4ތ3԰,1+e8nAkL`<ZluY"IXȘ+HE)Zos/&S!{>P z0sD(?ë5/շN5O"K>>6s/9(c1| {K By 1`kk7sю|(&.s\_cCS\q^7o8šCΦ$ 4q3()IUW1ܾ nA^XdY&2-O^y̲᜞pZktǶ&lFqK;\H&5jɧ@x[E3 05"+ sbBc9 iH6ʅgΚn5utټ}muabyyN?'jn/2;@_@ ܖ(P|(=JըMŕ) @ 3P'(1嗁Ea+PYSBhʇF%((P0=O㱟~O*D2FzN>Ư;Ol=3)t,-*ğ[^4qߗ1N|6O`0@QT8Šsr%0q'e=:X U_8]5L{nd6`^>#(O ,ThQ-|``痶}BG-[4GQDq* Ƨ&2>ZBw[qgX,&*Tݵr$Tű,CK7ozvn#D3}o">eYM Z.:eT1 f6RDrK] j̖8239Z*EGEu^ּ+o86s90*ix{mtUG|A{Õ58.~|~x|I@k&4 O|XX:NasԮw"׈iCe)cLc4Pm*@c4]-ph'ޟ u~x$$Ry> wC^88Xgx%a%, NKx:bopky닻㔲fq"^C-SOaé5UY?'V J7y. gq`0fkcyя(%w> CJ]k2`uuUHhtYQ9 P/$.pv'uop"FQ A7٥ ,J[aj3 C,K'R9ܞgܦx*l>j ?O=ǟT 1XWk@W1BtTPw5GӦD{ "❿s-O;%jL3!Iόd~9VFejԞAщs[ !f8>I+znܸA&﫢+WqiLNaʸc ucܕui"yK8&6 Џo~ӷIh/r9̳p+8!!*B Bxr CU5qeYw>|/|7"aB4~8w{{~7v?BQعDoO~sDžf& 90& zx썏{/SO=x$[;ָkhE-^i8v)⑱632y?u-{DF2( 7~.:0Zxiyc-,붬k7 U(naz /(_47\QceaQà4J7?_C~?8Wq@Y8{.jI5o"V2ܦ+r8+g۞x >>,Ç'Ƈyh!5yP㻿ܪ[䶄8E $w_Wq_G6:0w>)㑷aXLyZ1N9Qyf6A` ( : P}N_?? ?\ TK`]h߀V [an2m!Q39 kPxG4޾J#|Vl1=q<{ G;;_b?@XC2u#P?ozP $z&.oaס5b(,q~pC+DT TUg@Kȑg9mpja )12 p?0L؛|1G]88}4yK,Xgxd'~=jhAHZKgLWE^`eC>#4ԩSX,+چ&I*ou,.ѐ`0{yIۊ̤rC>R+#DB_ 5ݜ' C]Ę=ƧbĄʪpZ k*Y{]E| ɯ#c~gIH7Fg7^;l(JQq~`qnN#AKDx=Tus v 6W {*' nm^/I<dyqL-qlZp1ÓO7]C̦3Q(. o@kod\M$=Km,f-"K^P'H/}.Pܱp QWre{c]Eu%=6<$Md[y q5rUI!N"=Ȧ47:IC埏=vRr/ɕ4%MD"#",yW IDATe[zM4Y Tk MxKy+f&Uw2s̽H/ ,{pv7f ~/;nK#ʪ֣O|r`1sEv=b)zbT_Sy-@ijl %Nl1zRƳDu ]aUuxӟ|QdM%]M.p])] VWC}9aDD6ӟ#O@$5ZEPcgTVZ<ߗX1(,t]J}m̐"EcxoG& Gν4 Em\p~Μ>C$QVoȔNɴ^MHMX/)yU j Eu9lؗ1L{ E}ω=#YbeH3??g(cq,d(I) !,x-1cԼ%:yԍ-* = Y8{ͶZ-4٭w>c2 +M.6ԄXC|(XX 5"=!|A'%E~?>(PQktc{PB"&¯Od)<0)x{}s(Q>Aue*9_|뽦e,<}n!P>^&cWd}$X$ N 9bvM7h@"xıin`Slmm 5@8@'6򺜷ukkޒ)ټ,io"`) 4R5݇n68ѡq'- dS6ZQpp$/ X1ߋm˪l9ϸ;5%m r kKE;8CZH7]Cc؛bx6,80S` %>8|0qW\nl|@[Yj}rg~`_7=dە?X,0 ݨEQ'W-sNxˌ|+zY]KEQ`<KWBv@dew*+"Lz<=H;=&6Jjs(@koO_scg^DHl|> GOcMƼZ"܌:nGie ^Hnq?~a P *jly߻Chr%Bm@<ϱHh8BJA wRIh"9T?王8]6v8I) e30 PgiUUs,UMW›Q(cA.-ujd$-&wyeR9_E^ȶ_1 aY|1㸲/:. ^'@˒ ˒]XdMJ cyx 8J,v7-# _L2[k!heyO^c&ʞ b^dqW8o8CS3;cE#R$9l H|xR0Ǹ} a079RK@WEXzK{'DxچUe%xb@NUUj1; 6kBFb{k1r!8/o&0EǑ&!!@nFRJ%~Xg2gKEPRHyQk@(&+Ib̉9!de oTK%A;|e9<^9e?[ߧ X+MR@ 6@`wϴ3 ɁS<6[|;*' .m-7m&s, ڷNU٭.};bW\w$L|^k{u3@B$2:ENYX:)_zK4uU90(3ڻw\"XOwO9J^O9r`A!R*kSW1?I),tŒ~.UdM&fz@(Brϳ3eKgR|2اd[I` {'5FaAFW% *V aʈ(+RVMp LJ6iVU aǮ aJk.ےlNdy-:~y$ja9Y=sa!!~ .ρ9Paae|>S{8ufUF:t:nE$<=!}:P(cy#I@Kux0i}_5.e;ɻL{}^P*´XeiRfWzJF#(r bu[A1 ^Ɗdϭh4J\.7膑L#_[4`4a_oHw5)v6vϱW*<ŘZ+VQ4 iOW4e3~csbBsq=2It$Iep^8ڍ luUQcdl4ngoaz4杖B܊19ө`+tKqj(Y 0O0Nf(rYJ%ۢ-"<ϑ&)4`unWjQ`1sDž=ø`?K9N Y+ѰN,a4zq# )m,["I6KTF27u[}6dP}>-Kk-y(ѹYR'Bcby[j$<ܥXk|:$ژBl!il_c?{Uò,7ѧs,T ٟO~Yh4wrQ8{ ¨_Lj܂rxkO-s@[Cog3GS"o'c}M>rGWy5PvMϚ[ AJSz@&}"X(P~ ?^Tk+D_h(ߐEQH9o3;6p9 }Dq @M`xT"I|pP #GD0fMͥkgV?,d|BN7%C6>/E0nEnO0 BR:*UPCFK~WE%ByYd(\'1]Q|rZeYc@qQ*6v;dVՔDC`ntoVk!Lnc!#Rxۏv2g.3]QiMmCB2<薸 ۀ.Y w\y`R* o|!.ޘ,Zlm%T Y̑uG_rQ8ځ;q" e+',| es|cjx&Φ*8ȅqLn[[߀uD1L`-cp= ٣("NPKy66}\PS;I0,( f|WNy]VVFXVҤ]q\z@dYސr䱽*)G! 6ViRy6Fnf׉j(Zkƕ+Wq:I5⸅ ]KJ3"EJfP?ʲpkK@&]iכ@*p +ȏ=VY'v@/ I0E{uz,qnhfCD]k%W -z{/./!DxC |A7ԫsLa&|}?W< bp_lO,DNEdY.$²(K Mȥ(J,9w.D,;y068=__, hD1 ii,箑e>˅Ca2)Ol\\,.˝0vU55|JQPFf>U+~W~w=z'尫f#LO|F׶tyuܒ缶Xx[&EZ~GPd=⽥?=V|6O<(%QKKY|WZ?63\8~g  2GMP;?_BaξW[-&7mpVK-}Гu((d^f2u{=ڦV5:ݎp:sijt+WgAq-; 618ڭ݊(vdF*++3#"co<8g5v}|dUEgZ%]'О*ߟt=XXt}[Ӣ(A4MQy#Z0$<>891Iw|+g1^|,+B_=c8gBbL1B`=RNl2% [,68Z)lu!Bi}s+!JYUU!KSXT3 zŞM#o ^y>-F! Z\?UN:>БҒD)ΟCYNZuw^R9c$M hrU rC5xjpWeTu:ͭWBba^sDZ "wY<(9 g+q`T^hk>S-pE΁UO`m k} Bx\3B$K`YxF dGʀ$vmgX]jAG.(yp9e,4p$Yil\ܐ.lǨcΓ~2( Y#_,ZbRHlj6!v@i>u8o3ATVn89Z_SC` m̳fYJV }+z u|3՛wLA1*vY8oTkR~e \iXU" cо4.òNfl l.f|ۿuת:G^Vu|w6.KMw}^C6zFɩs8|ӥxE6<6 IDATKﺮ1N_=>ݦ\`D4u!<x-/-<{Ii?$pݵ1?Oe/pׯH*x0Ag!#gdy#{]<\𑏦iU(`++P hZ;IGZktMcvЛIVtd6\/C6d2鞆R7Љ|f @&( !=IWl)MkQ=:ns^ݻw#2\8ҵ*y)Tg;-b:huVضS"Qx`iEZ1d:*yV^LsbF9d4f|I=O< VS[, 5Fⴽ'7`ݞ-غ6Ȣzykwٚg#2 %J),_'J/OsHEMG^oCk[x7 OW]s#os8Ɠ[#|llQ4twc4 ,m<ͦD;ƓeȩRnZG iZpKE̊OS7~nt$Y'Y'@Ɇ0i"1Q/ `l8$) MӠ@\Z86ؿ?b*o.SH xE={`a.mn`0@ȝp}Ս8t%DE(}k~Npь㳫7aϾ)nrU0&lwAurwp'oJϔgʎ"Y gSA~'qD)&]YX -𶷽 7C#BB^}ԏO0~li׮P;*łbE-Nb<`Y@) (-ZUJ<6*|[SDq$8#+7N#IT⒣/ÿxE^fl1Mݹy\w-ػgم$PU5;'3AU {d4;Bm7%8Y0>m~<X,X0J^yv|3I3Df"cPb q~a)샚F ugY3 x= Ύ]u{Q2[uf)4.k܌>;( ((t]ϋ4I`wCEam?/5j5vff ]};4F)+5$qGJ׭asx? JڈEp(POpCo.qBN1ͱ@_?܁tej  ;xn,֗nlma4`c} MmK-Hx_sJT.RT?1G+Osi~/? e"/@nE( zst;((ftF5ϻ{/݋‚+I|О2 ;@и!O@9ns{gU00LI`#E?;|hi ˍi077'/I /q(k!,D á#&JciBUKE!bRGyF@`gp)FwFY=cQ/"6uw̩"iMGpgIJ)Q mrotٕ 26SyuV8A:ĕQbD)b/a鳘vPRc똮QAgP8prT2} e*vO~#I*;_<Fn`gvhh$Th?'xnB+A9UԴM?Ecٟ24^5u{0ڠt\N$y'ځV9l,Kj2IDE^J.C'uʲqiΨ Ás$'>MlJ0t792*Xca`V8ڗds/á/cOLnZܘ[j:xk> 2Բ,,X\Co#qJ*^7-MO”S(2;b~kiGxY{+~+WPBdV5"g{A>ߝ6Ơn8ڇÈwv(2x[%auF֧ ]B` d:2*MS\Q!@.ٳ@؁>1 n%CS@ KnQnlA$;z{26Fb)WY%VYYJ!Koޫq:V'"A#p'p8DgFbv81܋6D$p/ \($t叝8lǺ(J Mȭ[[ͱ鳫~ayPku-'m}7ޙU#hd*Xr,?犭6G jlx;LP^O3I4ITg*IO.ϴfLß\ͺ~߿7QSSCÏ(Sf^]9` 8N lM,݆P!)d.4IWYW?Ji ~XY7>"%SV#*us`YLW&9V]|/X621{JSvݮ/ `k4$qYU%1~`c, ̅e1x+q*..]0UaBz'0eb%w?v(^ ߁œ6P퍨 = 'i:JN.8m1Ӄ?Ҿx 7@[Wcieѽ0Zy`O`dmpC ȋ\r"YkX[_^s/bwЊw˱Tb `WZyFA( U_ڥet-n1dAKG9wWؘk =,G5N)ג/zto*J)(œƔ9L N*J1/3=+!ʒ+Nbɪ2O^.k|I$eUF'ܚރRLlnNvi ԇlcjÚ4F1 )}a!kuH}TGD'^;ںS;6(H (g ٣880JNM_`"\Q9B¨sFʻE%v,$o-I̗=<d ;ے9 $ DQ"9ɨj9@79A8t;pMdae[JRR8qN:+BcQX^ZNZޜ.Z`&ƾ{Fx'ȉ/y)ÿ+5R@ N:ֺÙ5?k݅d3 |6MC-V73چr}eQaW* I5}㊣G17ד\yɍx]sF^ I)tƓ4M]#8wtP q{1A̍#S)5GSMZn^S^7.KȼI"m/D!r Dhƕ3SbU>#OL"E0m9ЉDXxoTx2m2I݄᪬āA^~Ӛ 9x4x2`0qabvX}y^^z,` 﫶3 ^"aSL&wO|w|vd(Bmkr C\qhn8\k pm] Ix?r%Ϗ]VFhHp❰ai>Jc bkGEt"ҁL&nq_j3sq )5"d*S!d|VndwdLiL"i e*n ƸnҮE^-iZ0ĝXJ)"l%-9qUXVh>GEQ *ymlॵI/Ed=8Y9r/0&#mfP@R ~ 'Dw4Y2S 庿ݮ#^.Y<řZqZ*H`c%x/]CAJ,fl ]`;gٰ6༑R wGijFriԈچ7! 谗WF&>Ld|b%CFL8Og~~e19=;`te`Y A,9m8p.^믿^DQXV=_O}{1OAel,0?MϻY`8ŮV,"w9;6/݂}RA~Nv!A9up$Ǎ5kdBS6 3^e@{CGRFgi& `4LD-`kkO2}6TFhZcg-<&J@dɫB4+ T<] +vjeQb?خ~oדֳHiu?u/#5Ei>0c8/RqLD2$Nډqㅼ7b$m".RUL(e'df0nǏCAaqqi+R§a4w_hXSm8b8pb捭 D%RI*x }fĭIz w9RAiA?6QXz׈qs|{I\8xF3'D$Gtd `'"lPI0@L6MBI9\lD}FYLeO=jdbt@p"/ Z6l΅:_bwC11x-{/o-L<ǃYBP<5>qy|])nkpȜ"LšB뛧_w^p܁h ieϝ_~MυNC1MاeQ8fn Gd';T<'1w-bnnN>/Kx:^I\'ƈeQЃe-'%v-Uסi VWW@9Bi&).[uG7 ~ Lg+Zͭ^ ,W:Em˝Hׅεlt-׻ҞV2RMkc65aC˓r72g2}:5l8zy>#]VP#X6v2)E!w:#o.J$㵥) E0ˢ 5Rf" ,eDR}޾65=oW_@TBm<풑.…U^/Yk_G2JV0s2lv+ Ttďn̎M:]3 V ;C|^!l`4ŋQ%;Tt pm|$_`6O|/q?w?>bFcmRh/a/sa<_! * $b'4]b& URtJ^W3u╕tƓ yȲ V*e*Q˘@qb0d3] hE?0?`V^ t|F?Ž^ RqKb풙q>1xZ;@XJ_R\ 5Yj ]XvIJY'n=%Ɉ($ @.'=[*-$ ~q's63;YE..m (2@;AD%ay#ekD>n¦g ?JJ5xbi#($J {,= mEI3eq( 6)o`(.<~7oVn,({(7*3q %Ͽg?*d Fߐk# xPZ:֝ xp4up8tlL)`ĕ.@q#нXXbJ*g. RF5 kK8~*®Th6T :cE{"Y( GxvM]R=_+ IX>{arLcDTJU 7Gq(`W0CXpt4gOR 2it;ȧ `2"i:Q!{I4J pa[qCy$}#fRM-g7l DNnz(&'F6YVc@xc̬Fnj6I,@LIΕ.<_oƅ>̜λ{yAɰµuKpfCG.%m,IA7bt ]]LG%T3c$ ^T4:!^'HVG1v- hd0GVKl8ii NP@m¡r,K;eH6c9)<[]Q[kniUK/^O@!AP6shXp?Le&e1ߟ6$v-`g.0#̊tPUY>J ]d-BτnLg\QH}HJg *Xq䢮E%iE2|g{b4鯾>2S. mٶ Ǝ'-8\װ`}<~T){cL "+{f JΌMONE^ק4߿o;d\kPf:ˢDɰ#%6ΞH0#5N'S&C7W9|'Nr@Nˎ&ak]9Lܤfnr%_;uF^W s{ss ^7X$Nb#lm b|R:zhE3%QSva(Rh(FxNם8zI et, A!o&!+e^=T?9>`* ^A .βL]n4KEq0#.&Ȁa"Srx×tA:r>/bɯ⚣qs. qg jE:3`K a dt]w]],ˠsZm9169I)' Q. 0bV x82?gϞʼn'p+ł.|.toA4Q3,3yke11Y;h={˻qq<.\Wŷ<[$s2.l)\՞RY3Q8wذb0mcrhYSp= 103i!?e*ɢwYؙ!!k/$Y:_u~ϳ|xN-.tmd8Gf!&Y /U$E: c"e MJP:˲P]X?osi'd׍_;clbs|߸?co|k %S]Y/d G]vNwnL#仏|9 ƛ+ïʀ".RJ9ؓ##J[0&x_{iӟ峓 L#n`E%FݙL(Mܜ?ek GCZ%s; *-oOW|;?\@\ص5㎯ɇQĉsxuqho Y;2/rTN8Ôn WȦx߾}8u|A|X޽[_r+Ξ=ݻwke8;va6>wy553Շni2Tn\\6mԄPh>4DFˌ :jtwHGEY B|\J&B_Hčc,;F.L kYocm$t]\JWpd7A4K% FUNHy>u=q։$oaY"n 15=?W| %Տ"v*EGGˎmtxOMOi|ٯ`ĝ {R3 O*HO犙 '"g hkР0#*!I*((ld#C-Fƣ1 g2HE,CMx2]Fn: ! (p_Ú);g1X}).?|Y1؛뉝8i00=2\~mҨ/%8{bg kX;p:թ .$g(% 3U9F:`4Iu#xȰ5H ?~Dvk(4~n" >E=#Ȫvn<υ qFQ4cvlc%ۚ6&QN8T\Z[U zV !9Y_{lȜYS5z) O|m/y!ُ$DJ?1ډ;xًϕ )&1xdX`8v[XUàMf45h$6eUTَ[# PݮyfqX$ 0k( T?ZF#lnnbk{ y2XSʷ1>r7h  *R"O{ VF쨪+1o:˃$Id(Y}]N0:|p? y'?ZsWe%;QEYX2iP< ڒgn-lmma8˶S7ɘO Б`0фvvXy/<Vk4MW nGd]|J;ˊj`&Í0]2T F[qT(F4mne2ȶaJK9tbV[1Lҭ 5M݈LK)om W}\@.hu2(1>^BAQ5Hy)u}9\U)_*eIE^K릖n]UU.k*+H.mM1Q8sYx<61 8xZ\\Ӆ OnRX+ [Y `>7!yiZkԪJ4SvX;ғ_q0C)QkUc,X&2&e=>y(&hLLNbf$YU*ɳidhd1TOҐݾ,6ϊD+EI>F^@fOB"t iC"( 7RI8;K9vw1w%V9@Y'ڵKCF H'՘F\+' :ōu4Ke*7G5J⇟1K=])?aLjcc1U/{nyMz͌ ^\haIM>yv)m5/}'갔 f,p9mK /]3'JN N6+mB)S,%Xk( )HC8YzsHeYa8<~X1W8ž={0ן &A&IK\niL'`6/G=\25TX6q]îX.+Y<8!x}xaufizGQJ=7aR:NßƢ(d⸬JuSyJd^O`Va:P Wo}°4lO;U| ~wMy_2>WO1U;XZH7\W{&@HlaiuP&Ɍc84b3i`anM8d<`4>kq.q38z(++e[?M%Ԑp7;y!X3s M15G݃?uDyNMbөM|GJ:3.'7KƗHG|/qpÕO;Akr+8A܏!~T4gEh4͌Xk%\'%)x0t vz^utF#ѤQZyN@~A4 >wrX4%|yL!)~LiBf`IRq?Ԩ!k۳Kr ȗV2Y``'ӶZJܞVýlsM*|0rԙ߂ R&fˢtp/W; hѝ Ռ̤6 ;,3V' .QӸMUiM%h)08iT\?_s]"~@=)QlwcyWܶ>Yflo3L&}Q좙 khl`g5V,<" pa\~e(B1⠖G+pqI+;p7O IDAT98%;N71ؚ'߸3ؙ@J<`c`|5Eau9K_||"%ۤQ2%{Y0pV?r:lZk] ;ԕASQ;rm_{/*vZt ؐK(#%4Ccs$DmLI 3=7jY1LD&ĝ1a!Q;R0B0 bָR'Z  46 1Ƶהf q5nԂy&e)#%9`Դ"2AjD-e4RcW=L$JC|\[mmmsE> eZbOp!?~| li wc2G1>Xxs_<6·ӄqsJ'Ҏyצ TM=RDI]wt3 e0D.(p޷71M̤)Lc0wJ)7"Ǔgh47("13g0כ-OE]FxӍ7bm}pI\QyEsX.h1gΣ߱8+B(Z?G]ոSw@`r*CQCD! KNgn*~) ܜ8,NopzUA3ʵŞe"vPǃ8n{P 7#HveבLQ #!BannFrkd=z µ0R$GӑÜrgD1Nzx(Z+,.-b:q\,PH)۶ӇSyku25 gS&)L=i-n;JΓg1^k^2RBD5,Ǧi43Mwv=VDS.X.zXSHov{Q A;HP[W=xU w48@ɞ|/I EʺS ؿ?8Bw-r >؞{p9:7/e\{͵Od>]^M]nފ["O1[ڛrr/='MmZX*[cwqrr|k8t2ltS| |' AS950M eZfYAmsXQN6qxu RBm{1w *=@1u F$yo,-.V&! 9|D blkueqgg+} ܦi/"6 G] TSLϠ.q+.HOsۊc1TV0zhӁ]/j&&L!?NDqϨo3̲tb9I-uVB- F&#I1l`Hw<3߱f$ʭܹ[r:y~xz)S|ZSzHEiznmc4e2/YXJ4Q.U[ 0[0v: ȊjgJSwb^B% X+c /VmH[$a?Y3n˱ (.YHq8t恧S,+ԅ'MHIJIӈ4 k]T.XE-1gϭg<{flױbUld!:2дCƢV8Zk'qzR;@q+XXXl2frLf3j5==1_W]%-j,,s/L5ZIꋧi.Y`0_}`dϳnݺ Y pj˜m݉n[6m5|44`5n:-K '!mJQ7_  N8 L2*/"B0쀌#˧c&$g@Rv k>-J+)@l===,-.螌!?5-r$'NNBXjjQ`Q pb#z6mڐ,cH9t:ɚ"\N[yf;1)Բm_)IG(!& kK aۛ)^.GP^hZC$)Z|MϪb=ctXR%7zz<0$/K#p/-*SI $F_14Y&tDzՙq/8?=̰I։u%a],Ʋ]]: e8nqrtQw< 5>ߤ5$aF 㸴nʡ 7jEA5.bFFFUk6 3 ~2zg\<#RF,n6tt찒ay1==ųƽ72u],oGTeY,Mm${g sӪ~o[K'y4MMBGiG,DR|!_~[) aneU?SLMp]l[_4NvF}B#x# ^dPIT3lhe)Oڪ!$GAxDYU˅mͼ⨜0io9=BlƵ]3x u]hnu!A]$~t\! uEaLCFS9nb-g?+9>mSVR,7G>񊀅*$E(W8>.ʍ>ߤ]4$c#leM"-Rn?55Ŏw0f-NnNwkO+޾^Ap+x~pX93=뙙\.Q. х^4'BYv]nTMG\ չTfӪN/іNe@ОOOO/8sf1zV(|cs=PiX"+^1I^uz|yX]\UH5,4;*4pnNQ s Y3Ǖ;vuB7"n<Eo>2Xe \s9׮7T$9݌d hbk]:VwemI"D _!6V[O|]z"]ޚmyFe} Ĕ͢' ) 8 `q9W|}^Iequl SQi‘c\{6svl .xL,8%φ&{/.SS|7'UlӞ|ł OhD#)Dukק$jati9Wx 3l]tRĆ6-B˵G1 ,=Cc,OSv @F7S\68, ၨm:Z~2H4;;c^<^öm^#+,?}wuWl4؆kmz&y(H6vR6=ιm#gf)s=z{{^pT+i*}ؙFw<*OWNRuIǕA恓8/i9ɰ$o}*m&Ik^P#lUҨjGS;Iw!ǰ*VkjU>H7q1M{V%?2fheԎ_[UxCFal<<զC8t%hL711>4eqqnUqF c t;=>> :)Ӳס\.3JS[m ~R j-Q;g^K\hڄk HP>⹧i,_$ZyE3c1Ƅ[(OM4x g&[N1 X_d:}h|)cL4m$tűOG_nz3IJ8,7sͺ<֤K,{yNY鵿lGo,ꋧ8pƝ{`+d뚃X< _>Kcq׾MKɽe.3`@9(4%oF7]璷;?B?5Gދx&$ b&+2@:$\SgkpǬ$%h&!foκI打ƤIFدt9 ~cd|tÓx&y)`yRP,wײ24Ud8oF67pBr'm(q5 Pi9q(L a;[p\6eߣRڮ6fgfYaIl7편ntjbdRfj]s-cU~||~' jLċt~"ejj vرlǎ$Ocq?'̪_bjcWw]+ Vbh:\hج>@_s om dz`T4WƘ?a/Fy.3ҵ΃TާJ=?>3l_dt:ػbZ,ѪN4ۦMxыx1b b ػM*Ye' ;y]f V$0Va -W׎,mu\z V%dzxmvQ4@PNj{8K O*x4ba7٫Ϝ,P XV%`t5Ip(xep_kr2nBfl9BVҎQj6ctuw^TIuj䄎 [d0Iu{7c]<,WvrpٸihF^Raa%lIeN}}ݡ2=z/؂6lZFP][ kAo|8=>\ .0Jb B 77OlY'_dil?8}&M[nalljj:??'ZG:{|zfl0FMFuYZ\Z02$M}U,7 pUkMx-.S[As茀/|l"@ bM A۶ٻ<~ƛD Oqm7r8&wRspf"_`Y8VH5rӥ)6MR-C⍓p-dZp7t{ue[XQƎRטgeyukaY0AhHRs-2VOND5,(KJ%MjᨈG;zv_՜^@*.&dy۶)84XD˵$ZRĥ-UJog/T 9=drrnǎe&viL0| >o]"EԀ'ad _OGwWEaYzE:%I';^g1{a>pӍWP϶%S"T.G9zrF;7q7*_Vٍ+MqR1J-gI'{]۶Ys|jwe[SEJ%Ǐ+|56CGs uhVi.\9ǚ~Ϋ 1]`qQlemۦT*)H(:eWRVSw܃C>* 8CKtWHQZ8AE4+\1~e[.96n6դU D$O6妫-Z/ L Ut2< aH=A(4B^o,*YxÌvm,s.a _2)!73V &Vcy- fO=…㋟8C=]YPV)ZҡW(c6V8XfSL`֧`e6wFŊiO?GgR9]}r޶c<:yl<4IjRHT$cT`;82fhkXΒ닧*\ݤ`k脲` ۲-;%%>x ku!0Uker'|PE^.Ӈ{LK==dz]K=vY2\{ֶm[<}-Oo' eUa0g ۱W56 * F*SSEqLkIzItKZCƎ<; 3+Nb 5Q!()nST pgHھB$XwI42C ۉ*7tnd.t DaD'R6 Ht-= ]ŝׯzWr-ay#kx-Xe}]ؾyXj҂ϩ+ gb/ϗ) &}uQ,{"sS'fN3y=wS2Aw`Iɗ&)y Ipfr5bE}yZp}=ɯ|'uR4 zkwmqtctMXEX2IT&9'g= 5>(!CuVGI U7tB^8D5Jvܛrz-+lҴaEaFN&4IMA/P\Xk72qA :e9Xe;Ƒ#zځFj#Y8%2IJS8iT,j3xxՌyo*sϝsLj( :MS޾I1T:?q4#9lǣ:wAnj~f+%X۲ӀR< iԴi;zz f**jJ- AR;Oznu .}[h4ؘBmۦlr|~dyn7X_k`\. GJ Mֲ6]\jgΜѾZi`$i"p3Ps`8ZO$( I^kXA'7eCBKMΦH{Ƿ*@tpJ-)#xǣVe^bHo#Ceq5lPr@Ȉ* ł &{/m{mYv+ _}7ynyu?NƧme`6Fɥ" EYQIbLR& ϖ8k%>"F5cODT6ީT8 XvlppY6mDP$JlΑR\03ClqfmN8*@~mmc(Y*WM ,.+RЭsGV85o}znhvJ̸!RqV;NZ%큧=*-+̟-7]?!m1e*2ZunҶBRbHF!~o~:ac؇߅;N?b6RL UA_fR5)I s*K D;B^#_H 'z,zukR,G!dnl6:6O9fn'=ɝ\i'ٲEm<㯾?㕸jg^iō2rshIA\Gkq?p`8pz~-Fd0]>vBkOIsfk>aY;/W3 Zm+\&kbP{5hD1Cl6cܾGc``ViJ#&q2V8qyts{|b&og')mq MB@o<;cFG GJ- d$]$QibdxrWm'L EK8'$aRr~N[4^cju#((N(x`*v/1۶i]±sA+˴Z-6mdra[_q6]@mSU*wcsOhV6Eg>`R:/i?_ej!d7德ocy] \NHFaEZf &ՏX{s/~W]?'5GpRLe{`H4w&D+y][ fjĶmz4T$Q-T]C4 ޚA%, *oZbf\ȯGG\wZ9qAQ #$ ;6\"7/ ,LbEC=aѨWgsB6m|.*뾵EJuqvu=!BrGoŗ6ڗcy.[\Ż4n1g&[g"oe)"`Z]T2DRDFԭ%zjL$}Oo1)I' uq~7A^I^B/U)CCCTz0dqj/&''i6 /)J&U'Nb)@_7 _&l.'_=F`֬v[)[5"l;RWy>ųG*L|\_Ok';6w"V:%(.W>o3/uaH^|+ؑ1tٓԑ}7d+GpF(87/D(ee1=Xꧫg|>mF=zK1m'U%\'BrĺArgO0rU`6BVJ!MT9Jy{2;; rx`=r-|W ]jƥR*331^J9C#S./Nh,f)$׿ĺS2^I2[jJ9Ӻ2qy&O*I^.pdܡ|\sm^ԫ}M[:8řOa9G̝z7{frIO 6Lu8e09,|GbḺxh?yf;rXO0ƞ2ϟhhp`YnN4{?twsQ?E . 2&*8r8qz{ߴK/(Md]Ç{x[& Yq8t.'U? x\ņUl;h-ri8rcוH BڿfyE2 Cv>ߩJayeQR'IB#lPV CC ?"MR?A gd>o}(Ԝ9Ef(Ya#>@~~t#x-fJ珸b8\/N-szNTY: kڳGsR*++:PCZ˧Gv9p* W,NS;٧n@ĪmD"e預H-,{Or6V>5uQ̥q@\&h,P=Be0;wl˟#}x ,vvײݬX,^>sLS참|n튐ơي;^E gCY^@kX>KWi,w^ʕv-eTk*ԉ/Ɓq;č{vpv&YǯͰt>ǔNȿf˸A?zM;˵E̖\^-melq]T َXA넭GUb쒦k䡒vH*]:Xh4& Cj:&& X&&sRKw*V(3yoOW]=1!&qڶX4 l-3z3<[^-~mŋ.05kX2Ec"Z|ť:չc̟֑go[ĬYz&)k{ MȬ&a1GX|1l?9e IDATwZ6m`k$b8asY{<;fNr[288H\{fyA3X&~ l7كO9q&O:]=+wvlZzpBiրuX _%l{xW]EM YuDL $QB4ϲ+oi&eN^n]M4U*!^S5h\w CJ",,K^:+֩/buY_ސB; F6|DT-Kjeq Xˋ(Xv1&?@O)S=ZZg>?LW&q&qLjs^@o} `)'lZ t>xqF,'.}ުa78.<(䆫V5O&I%&^׿w4ceA 'W*H8+ˤqHX`i9r;ݬ[%v,&>X/k5y˂%lJ`UqO?Jo} ͽd04,P\ݦij*N?wjyFFF2+e:G_I"uA;-flA єN8lEoO/f0  XmjX(_1\ }'stA:0#фoY/qhUW7mzNpJD0lݤ"@RO,|) o~ӭ?ܶmnڶmbDٹ9Xij휗7߲O a8bYy@h,{ٽs#OfxͰ;x.E;{?~ dk٠560~5-QӶ 9uz_ͷxykހ9"BW^lBi7vsՅEx/5z͕|#AO_4Džz$qa3Ȅ:YwݍOUJOSynĿ弶.THnk㽾RJc/gnHHm87x9}tLR>LL(f,$D#B\\`(ͤ8sl~63ۑ Ю]]4( M02 =S~{ضb E w.v~70y=I=\řsLᢾD-^Vnqy8ak7\=wE̾ Z=ˑ%|m|g,vs9ZUDw:e֮Ԏ4rq̿w/q^F MX;xknl^ RlUضҭ}O[|~Vߛٳ!|?0|MyoUMPGـLFe&044DP4t( gEUrCB8X𭯩rlb``fElE  <==-m~jum>]]]G>#Cfg>Kc22̮IcE:_-eGMW>u ;S~$Rq\L^.df.pILg L=s˓9~$4uշn:.8($J4VAhM>|x?s >v! šy5/\#&'';vh~Vl&] &Fިs9]1$d!+kPBƮ5U(Vz{iT.\bHwW7b^2,o̰yfd- .Ve$i>wt?CQ ɑ+xEK;a3tJmH|Ĺ&S>]#+t\{c~SPe֗+_3AE?V; #ÌVEn4ض"Llx'Iѓ؎t'dhh/~srVtD{ c+XIpa _~]vk.2c[#EoQ qrЋa.HDܓ%Eee q(ȡ Y϶m۳, "#} cۚ8IYϮ 7CdCb<=ƹXdXi'2:,^v^@,wf3s=#~<9T0u"6Z,7nr)aLTsy|gӦM *RR$9汐/zqaXCtcgm= h(ijkRضMA@P`s ພ3:Yɺ/uz n&gf) Eb'$M2(.1nِAt'u &j󪍋ʎm#ڱln<) ytw^,hGQ{.k.0IQq@ZҨዥ) ,%ڶE|`%۲EGJe!IkSq!eهBr"޲,8.̷\ׄ(yz$i͸de[Dէ'HD%m3쟛rE$=mK~/s'x4&W6^#3{ _7#6x_k+=<~ _TIBd73s)27RֹNR3ꋌ>^  $Ջf ^<}X^^ djN<WbT,Qb0JR+/ٌ B,M>Õ\=0Kœ‡"m9<͔ʔ,KP@ə,#&r>i ֥FTR@(^chK?BDҭ3츎h9A %Rf\,vmc۴=IEN#lNLtaCVK0兔E)|g{.x#v^ Vb);4̋%90ĕK,b3˜+";lYZ{ܞr,K܆qpal'rveȟ=x鸎E˫KIVḚdZRe&'I,6̴&qA,5<3%r0Ku=O Z5ey& {wkL;&4JYw&j [nޜ@߯uPP/RLAh6hD mt;] >ݬWxC+$I"5Yq2xKQH,l6Cķ2',V{ WF<"]˗"`|/8::zX][t2\iiciqI QxKm'1ec12t;06h[X[]:`8@3RP6mngnǯ&8,PLm""1 1eammi\Z?,+Tk(IP%g5e/W׌!rØ$/rIbY % 2XwFmʃ$d-r\^;aXY@AHܪRt2 - "U1)%yKT՜iMQ\t-,.-Aɽ4I_ޚǤ QPPUWfٖxZ^P' 60,K}8GLa Y8zivc8@2ųgP%:i*%J~eQ%(?Q IDATQ%"q;κ6S3J-'yx.nPU"R4N. ϩeClX6-+LNFf"k0qCi4CUU-, fhZͧnn)Q{a%U[2SF4 4ϢnӠqB/NW^;$[w_cuuywe ]'vP <|{w`пBFC\\(?B 6AW/ oCW/} x~0;'d`}c;o>_֗X\7/fFTϟ}Wߠ(KWg8|% ȱ= y%{UU!j4@Awo>w#WOdC(յ](p~z ѣ#c2mz^~y.NL`5?t 5G`LPn- 2nreѲ$*\hxCFW8~ }+ywDk6;ؾQ-l>7ޚy66icc!68`aq4F;x?Doq-(wlv}Y7%LL:E@~>A{^=_S~#|_!"ܹOFWxՇ8;=iyxl?O#x)~w_[P%6>oqx%^| stC2s,-o7d}~{6<|o|҅,,`Sx~-,.m .?xfGtR`keL?w۶Yfc;Bg`R 5ޭ"Ҷ8sA)d^h4BeXXX@5Lx6dB?ԫqhk0HT y2qnȖAi85&Nݳzw٘Br~`fw#] .8>DQGf{wWp 7g:e*Km KNHX4v|͝\/d|< ~?X^'ᵼo2;A`:~1ŚVVV`6&!8ׇW44[TbG\"Bl# 6)+4WCx}Zk JMJ~ (Aj@(A;.\ͼIڭ3Olv_*yT!uY1TR l 5v7عHvqZ֌z&GXYA(QNg%og)VoC|lF Tw䟻|OQq5qR !w1GO_fP00Bl FA!)I*LAa49\4g2th9**(<w]4x7.Kp)1=e!Nb⩈IAk6"7s\a4,y~W~o˳xt{+XZBO):ekt0穀Fg/qz|pcc>}|H_?d<AA}")я?7׸o"If8>>0 | &`p_(ry-yRN,GҸ}40݇H'LJ(P}fFh4db.>Wxx6 }҄"Ѣ¼Fqc669jQu}MGA} s 21υe0Qp]8,vn<U,d%$] +>ߞ[c-}8EYж:xϺHҙM'Us=L&7p]B^+{0jA;;;D Q XZBNwǯEflhLktPR⳿pvz;OPWYVc?.0b|7w ,e7L +]ŋ8<|_s*8W'ibm}cQH1NPJO~&UY f?RpO7 t& Cp]WG(6#,.-5<6WFM<}1eY FYBk$W'xMXC@iIR 8hQ1_1 Zcye]υ n[x??!fd{bkTLR4L)$"&l֣aM6ߢzV[ߣ`0ѫ#D[R\%)eIY|BT dٳ 7dWv`.8px'˓SW=geAn;怶Z-\]_i ΁0陋 ӫ:#Ή.5*Eb&xx=,-mٔ5p;>,-m lʓKh6 luE0^p$ [K]\_K51":@B^/Ǐc}ZE\9Eqv{ xM~Bhk^fL? *a7<)]!IR|GAnJ)ܽ8zO%?}}??s/aE69Δ8d)XϹb59ʲ=PUVa"sx<qb<(UX B0`!fx𐠃_&b&9H-a}.49:GQ -]j'P뼿9Aoa݅lnxy [;n/Ԕ:Z<@bF:)q]WHX`~]g^uI*i<ciyI*ShۂMy)yqG VNDxVK˔ఴĒKr!P-D**3RX0י٧l5Iqb9fS*;ao̶l y#S;OX\3\[a6dNwdNE.^AH).&mllJkwgyC x1,!MxwVp4^Bg\b46ޥ6x2`пBGFK˩8Ԉmlm`ptGgrV\}|w("L%zelGՓ?Kqu/! DBß2:Wu[1\a}!F %]ZC(loR\tK˓Ƃrbg1WqssVp{Au00 sEIg=?m\ɥ${^͖"Ƭy%@-dCY+"=h{VKq)?f%. *IT /T*XdBBnMe\C$os-Dݻ×v C xd8!ODW\9[e$q=)%I/>Goa]&/y^=8x+mMC~,I$`Mllރ8Ėmg{- ĭb ۾(2{Oq۸:_VͲLV>,E`<O>0W_h ^C|Jˋc>z0o~Gx&P~PVDZ'Owi qw p\?gя7=7p_~ >|?ECd=RP* |xJTWJtQwzʀۻpg i矣߿D5&166baq QAؖ]Γ}aD2ޅʪHG6J&?,jT,c+nl|R w_i 7Uԟ]bCW,\/|hL<5KfNjagϞl >ᬱVcWWX^Z:)>{}Xiz8䕤J1 w ׷g (+pY?Oxyv O|(d͜` s=Xt27_!]R09!'*,,.ne<ejawwnmcg{GEY ,,.H`5ޅޗ'7<(V 8>>ޞDSM{U%UotaӨ &-4M4,OY73>Ҧ֚5m%$+S 2f6/˃/{pPp%]qiؐfgYBR _5w%+ZXs5M,JMAb6JKNj$AeGW4%|Y:qEA`4[0Q5˲DE\ffoWUYIB@!zt y04Bn:DvֈMBnDZv tY!rnQFc; Zo6ХF#j7GfN#[AatVD]ѳ+ IyJYVTHJ@GnUec0w=gd 5.N̬} II|0PԠJr6cmmfEj(i- 6:Z[-Kl hnȉg2e"*m&{Ax{ s2J9`YE+̑1"//RJ\C, U=tj[29rZC̛aGe)d1gb,n@qYOrXx ݕE۲(%ZH}GBeg12f! XRi,KE(̱k2&m*jEIZ/5Ȏ38FQHG%)*el؀E a!Mbs#qe +$U1s<&t^s},ݻӳSt:!SPGk45M\Ǖ \5aQ R$3jMt5_r^p@.ӅHŒnl6d]؝1Y9 kkm2dwNg#Ea$qʼnBѴ5<׃Zk=VU%\ )>z-DX$nV5g3\ shSBÐ ip04MSm[0rel[X*sV@{Vq! 2Y,`V ^ޓq3}rɁ; 5P +`t& 2K*H Ư${ IDATu\E'MR Zu7 h´%,/݈"!o€.GGGhZ>Ga$ I ˻U8FUY @Upke-B^pyY кڨ)V,f1Mw+ 8>95 PPPbOt Ϋ6HRڵ]ћ%JVD)(].9Sz81X,St]#qE(: <_0,NLz2J5V$y]pQ` @lUxi/S@4o\O*(f|Otj)˒f,ے4 ~ah VQ٠hCd_rç,UIBʏmuȞgn h]<ΗO`EP|anW*qBB-5B :E) 2x!:0 2,յChEd4icmmMS2$i6pzz'~ qΦsJ5`:MNcy (,yQ4hJQrlRw&r 8hα(&<@53 g8r4w<3K-B!`aZGؼ_JYp5ke5]EEUR kXSkɞԿkhN%<[x3\ceeYT89J`H`XطF? 9%I"R fc$\= ne9r˲DPUU,JnUeA$Nq}};{wI5yXd2vD/?աgtʠXZtJ*9z n Ruzv t yh;m~+L'SF4 g1 z 9yaaA.(|9 (rJ@3hZlLqW7!/5Bǧ@VPsIkgy+a(\pow!LИZU[[5"Ⱦдɏ'~Dx, 8t #/h-`.B@Nbyy//a$%,BӤQV\h6F!^aww 1+˳*`aj 7Y4<[e)*MAhd1d9K9_b<ˑDXh\<1NAhcz=fBd^wAZe!Gkce"g۸[ϠǫW^/S'*6|z(V%8KbyXV-r()Y@k-3'\PAl9a`m8(qr|`ccT4# !ڀqFex3òlf8X)`^&K eYcmC @~}әN70qrzB #%f3bϐ$11Kǣ18&c Y|1`9]#BvDI,X%ʢ,1Oz6L質 ӥu ] Lk \Aɇ/p p$ T*rތmB7 ̝9pR<@ Lybɨ,SlF"Hrʌ[D3T&y&='|3,GY2?x ƭP*gi :R'3_GL4͒`f.[١ ,Nkϯ(\(I7abwwV\nX_)m!tkQ:&wV*<ґ2Tg&ڶ-T i˗̖5%m9: hDSJu, 3"x4M4Mܽ{Wu2BBhDvs>e~\%JQ*?؈(h4bi=,KQ,2XoP4MTUf}\,sx_VYJ8eA 7SX9*YI ̟1;4ɐ+*$r`*xDdS=n!yCP&s[;Bj3]WcٵZp)8JCt]jde&R,햮}8(9SW.@ iOX\^R]F=8:X'7T;L=5 퀁1dd-1g!Ze;0asM? #\߈ _1^ȪUQԘܲr{WaAnU}a@{8EWg|r+ HրZUݦ1h}}777888@BoAJq*\8S]?;/$`(;(=k8( ̗gfiު41-K~cqqQsiM1UxTU/P0QslG2}fN,HմE^ i8FF቙0&32vl^EprL_g1_UͦPaKC/N4&nWh5B|EYG cص RږhMH4YSgn ( Lgf`ny8)*U J}ҵf؆J{uy[re)>w3h4WxlP'Bu-G23\Y1? `1Ͱy\_s,,f)lyz$EBQL<דVB=O?/#XL q}rQd=kqb8H۱9* $3u\([=䊼@FH( U!cD{+Z!J?%:U1<|9@PF0 qyyIa4j Ձ,ˑeU[ 'jD!@דS \5N+ЮcC5?v$28RdzB$Qda9B-F18F4|0 sAGW* ȓTr]1d} 'ԾA/6*`2 I vQaEшf§#Uۮr˽NdjZZUZR2o>Gbuum s-;^β,1p=ณⳮk.kj9~?3j>|,%)GEI0<%~p {⣏>§|>@*)TTٙ/b-kYh45opUC_`mn*l551 /0=L*6WiFApW*2ץ@YXe+tx49Icx\r­0,̈́^D cmDZ|iaD[ɐB2Eej@V Y sZsvA,ׂ X]]œOoW_ݻ(E<.]Fnx`[4NPs0U>WZ.6YAJVC䪏Iqgݒ8,By\yLyGY5hý lm,(IB 18ɸeY41$ :z 6@QBk5Ȅmhq`a'<Ÿb-eQ`n4oN:.<ǯ\gggXX\_$2$eYb2pq'1QvϿzv@لrv71/^S㕨(1Op||Lp Ruk+r 71##F7ΆɞTMKg[9A`2`29o6lIZkL'SYF=Qz|$Xt;Z8ʔ M%2Y?cP_$t+{<3$cQU>4`L `,'bKFe{H҄dh o źYeFVfRdHx' OaxOLD+gg򺙼*Ys)xR)g2`O^为(W#NGFfV"M6+'O CxfU%'TP"+=3nDcjH) g 6阯ѐwW]SOzHrI{;?2[l `,7H!pý M5 9q- "*n6e]^Рtd.%/Ux @|C3 պNm- _0<,HcƪdȒa |>gU5%~|gN}ln3YxEQAHڞovf8J ,m&YDmKttUWb\Imb^c8FJK+; FYvW5*gㆬ[&6{4rh5Ƃc#,(>x4i'''x  j;+Sœ@ӳ{jȜaYr~':T1Eюn) bG#Y.FӷoHb+8CEQ0Ήq*b``Z7;a߸:6f4")K(KSD yA>jl:bۿ዇|޽წ=2Iheo,е(QZ#MU_~D0<ϟlw!Rx8>oZl J I+kT5;$0ϡU*{xQXM|fB3FùVb` qAMP}1>1<iPXhG0>GJ]Dq󱀌q 7٘ITapz:!(B9xhQQ}t.y;ռц2c+ 5n Eɳ\ MM/?i9ZvVhk+?/V3e-enMpvvc̦.T-;LƔJv.ƓTwww ~2|Xf;45f9l܌R0r]4wZVyYɤ OU. X̣X#d Q*EҜΦNrؤ.#5 0n][<RhKg.y.^ϐS:3|<Y-]iӦmZ;(*Vk4mxc8p@WE7Z5e¤6JkLREE&QVi`:`\Xqt| \=㸐8ƎcE||x$l/>,βGn%r];ϕoUWEU5 ɇԉHea o(Tăk0HV5Ѻ3zu-?B8==O>PBa@:bIA“H٬z1ARYjRqhc,a1^DAlja*RCdy,[?z^Ffd$T$ YQg Rfk`V? IDATpgl)u]tf,0d]PX#mjR Cۺbq42; UU UW]f{lkjO(&{qh3}OxϬϢ2z])/d2a8ݦ)M(Emm`, /)L(!njCεHП0W>*JqPD=6AԱ ZJI \Ks0`L'HR"Y-By!Cui)Õ /n6<' ׸V vaAzeՓED\Ep39aC]WWW4x0u-Zw2z_2k$8$ZA\/X ote!kdUv\|07|3a2(c3tɻ"M[d1j<Sv~4ocS$PnBk $E).@AmZYhcSx<&GX8\T wm^r HҔ>N /m}x-W |K3!xZ+XkZ#U$h( }@V i)s\.1OUn@,5\`F$ƙP< \]]2řA|#^ o)yc?(_t-۞}ݕEs3"LHv#9YS'p+6/XV8<<,z/2p=GC\HZ0kC m"WQz1VD+!:lTl7cRGZZk!-lB5nKع}2ɇRцA#whCaNw$*T5xq|~WlW!Ƶ9eUh|lV&7~$ Zl@: ,e? `uβ6c. M]W5`6PUPIJGgi:^QYИ޷ċp?c4I vV]2i *6rM7 & t6$@TB.4܍7gsE> M-vvvHlYE1._A?|FV֫u44#`X{?ҀNd;Ԏ$ n<K>F@PAA{"Bc0 p גsCGvq>2tth`YUX/;i{JLۊOͻ.wP2u@W, 䛸&G%縺‡3ߡҘ<++b!!&I,aoxj dߤI ?#BK,ʪDې 9սh=(A6Z!f݁8짭Я]b ݓ-<(o8i; 1dD_[6iC4%LlC9ekl6bw 4\s;dEt/ؙO3f} "r|Z(آFݸ?UiP62𮁊61ڈ( Hńq*Xt/;:4iJ@<WHCB +fnV> 9H*+xtW1l66 4Htp>ȡc)޿fs"el\_‡]QgD(F~JͲ ^Ÿg|:oFno8rX2/N.[M:>4! dC/0D% J)QWe,P<,PV%6x~ eUJ.Ɠ1^J)gsAm{iF`11zTH*S)10i!Rs:fmYbоgC"1^:"魘Ni%3,EI|9~2O_+@GQuQ8Lc@&89>[TP@b䡲S"l"b+_մ4Eրl!H!,.(&U&fvAK}6lg1+Y"kd<*4u/5qWؑh nx%o2-˂ +`:b:`'9#PƠ,kl6&|BX`8F$-ʭs. 1b 6$A!Pl:ˏbcc#"#] - eUB9U]r"eGFгs(Kʢ tږCNUpWWx6Rqtc٣1]z)46v>믿G}ϟ?G>@Ml&I؁ԍ10*Z.\t{bUi%a#`c5o2lGGGi-| 0r(]`\isKۀh ~<KrD-WF+@at%?JG>wa tFj%ۭ a'&6vk,\QCAa^;;;n} e_d֟Kp]R9p< Cg o߿w@Uf:ZhQ &ȳ)a>@kɤعXe9ʢY'7MMR PJa-`-U&V: :{?ۧly/klQn8呤Hm-JnJ6 u1 :`<%[  ,`ɏmZj c FHv$)UT/&'[CgB 2^[ŅLx&xJبzE֍L AˢK6c=N 3+$z C Ge`<X#1\A%6A*aޠ,K\\^`o_.Ȍ@"uKWB)2h˪unf9 W,3PZ ( ܠ( ?։ug"fImlxWI/4e#Jq߿o*`]X7HD"$)0?t2aſ#RXk P0Z& E~8C"!Zc[mW/X͇oe`9'ZOt"5:Qj,V4pm$I9q{{.,뭼 #l9@Ajc_2Dj&{CǶ;Ye<&}"hݱD(<,QNONaLfnj@* 9kiFJlf[EA#Fp#6I6WEϤs (#q\Qۤ0>]|B:訓2kXЁ!ɸ Ihp !FPuLLi@,(આ{.g;޿ `GB'RҶl %2Xd2ӴHKx^ԝxO c4I"7N4`@x5ڶ? %<B)Ix`|*,]moŸ t9RlqJQM?npHYĥuyEpXX,bH,#0=)+{iA.6+H7Nvi=ڈB<| Uyp*j݇7XMbk)d= Gǰ64IB϶nj } D`H{ZA\oXW ԦhSNrǘZt;kyNZd"ǩ!x `"UynNl"E@RV.}C.l1< nv#nPh{2ҢMƭWQ) cǷA w:޾{Z;^f E{M̌1DQkdM+iGMsuu$E,iq_ kq~vnj|Ot1 sB^H߇D.77Ll5|ݒ|0;҅R75K\\^ 깍^WTYEa WD $i{Tu%I.W,-R_Tr40и&IXv"qf^ybiH iu"cKĹ~Megb;tuV%nbċ fMŋa(d+0!li)/$I鱕:*u$<k:7 bAtɬGM/7;%Hn_`2H+彗I/G|...k<|.al Xn73e"`V/x1i̴*R(֫5<"QkcmKUJaoO*61EF_`LJ:jYmlLO?I~D\‡߶HE-EUioi/̄א׋W9\__Ǐ8::S])$#yh< ?o(Pl O'S\\K֏a|0 pGGó+\CKAZ$"!/1Lg [d:u-]Qia^!-WHcz2R{C+Fclhn>?G|}i),EڤH wS0c$"CuYPJ) rZ,gݯWۣUl=[邈~>I_dMd !L)Uh#yU-8*p1:"D/9q'kLѶm[jQ=4R)2pѯ!j"Т,h%"10 4H5x23-VaEYc YXi;(:J 7u,τPKMݠAnb[$) R4olP֫5iZSfSI%M=64si{+1ڶ%,rJj4&Sa=B?CC@6-C4¿ ABfGFb|Hwpp QƓ|nBRpq.:l|afA 4u hx:%:b;ojw֠,KMBL-}Qb`P|g\\}ƋWNf{V/>e<NaR?2`ѰKvږrpibQ5|uCr Z RJA]}sNw:VZpLޣL\q-H/'|]MdYEOKՍ60̆;Oyb1WU:ejYDP`0jҥ6ef$I?#CytS7d2ŝ|A>:>kM@4\G>CDiB3 @p1W(P!@ZPVEtı3[;ϱ ?|D-0O$+Ymr ku.DCiG"q"p{{#k7cqB*I \ԷMIjq8XRN bk~R e/JbD10mPlhGd3VJBE/edԏv k_ pW75Rʡ"Jxt#vn U] ˋFa!¾DnCLDŭU?~woQ75^|)zs]{UC!N2<,i0tq&QB 1gcFJSTu٤ܲ,Z$o[x8:>O3<$ٸ VUP| 4.n˅C[1EYīn(Eb, IU@|/ѼKv[ g#tadG$IpD9i$e /aW_}x"3bS*@7WZRxM wMu| hתZ.oAE0ݣ%RE>6A2XIfV:X>gܨo{`̜Ei-/`c(oT! QaM7@A] Ϻ^J+Y($]0Db<<>Nox%F0ww{'Hk"L[/|mCzŗ ᫯Xjb[Xrϟ?s Kpb@IfTy'$Jɔ53.>m7[4h>UfQkɂD`h8Xx,zvs jwL|y2!ĕ6~ɓ=1P4!0k [1*QMжZ&@XziNd2AV78<8@U&sfszβ,>La|$ũ\}5]扲+{o]JNv #v9b *z[5OuT1+@˜ҥhy[X}Ia Fu` QPr}P*z n Nv9QD*++΂IHNlF:9>pwwhn[d4xSfh^<ǫ^!:WX\__c:ӧO10nBε0"x/O4.~^fB",pITq TɴjLM#jw+9W܊c@=tӊXsV״X?*oe-f56yr1xX=8y?̭oBMM8KM*Z+r8=}[LSc-0Z77Ob[9{fZ, ,K|D,xh)1V#g4X }'\<)tp6GJ,c/Jo1 qT9)]`P9B MSv5k:f_fdF4bW OAbeAZ>W- o$ N̲ !gV#k-a~ >})nx{g0bY\. >lb\-|\m[G)NOO\.]+mdcu 7!H ,U)+#c{-] ,% }Ҵ h$ Ug4nYGQ8O-G i  Ob]/\Kf+&P.ޓvWp"f״GÑig:Z+kMb64Y)XX܎G‡YZy(ppxP5!;˫KX,K3lJ)iAs8;?֩pE[f=ѭ8XpI%A\U1yJќDV)w#qc^(|uAO\]^l>ߗ"^Iğ:ٖ_vkyT9V$r5o^Zk3߉-fptNdbZeeY V3_(~gI"htk,@hQP̸20XbO&qa-+It g(y#qMFQd]㢶W&#~}?1ph >w\UYǚLΰLg 9q,Te4%\ӢieuC0-, ukh`9ۭ{`E7#pU㝗,&rRJ ܧr#B\ԼCHi!E!`a 9;G]۶%5d'w;H o߾5NOOq||,7# Zin14KI6)jZ~]]_[f3ܪQyV%(XM XYJ >mN$l5)1}R5^nϊDO5-TѴ@y+<;U1JTgL^P$ 4o|3, 4M(GGG899h4&7b}L'V!#->e6}'6G+(qJ63;,Ca@?b p ZOc2F EKQ8`Eӧ~<(8;Yr{IǭfR',:Y&hkFm,#)p0$vőrZ+~A̸m"33di/_?~ūWsil*VNeo0Lж-q~~ka6竟r囑,'+\I%15NL@ij_*RmJwԎU&f$jIp4HDir- `XMkqI믿__C4x\ 3@6.C\zSmfh!@2G%!4ik$4KQWT27fq{''8{8pxtɘ|_?/^|6m;"p@ Yض- FfW588Bş JmKq}\UP*(Z"#d/eY: 179Z`heĴjVK4MN. KSy,\1̷h۴|ˍ%/߷p;yZykTeAe*eQu,@CJbn{ӄ qszzJXʛ/o|g.㸀N e8|nopv~€ 1*pk]D%BVHyM}&.m0` :~?ZI`r0 ϗ_hHi]#$l)?S x-Vxk|Rn؛00Lnh/11+Z-amd⤏m+\]_W_a8,,Ix< ٦2L! $D6It#{dy.}Ǻ@XK^xrgL{|jvqrrڑ%1}iGM`0hvM$d6ƠJ H64Zc ftQ:ЄֵrXzq^F/.(KTW5)Kj_ Ҟ*j"AHEQ$k0t,[a*K;θ{>A`f9GUP,CshY2 \FųP-b1?pJ:f0]2JPz7T9 gMgGYr Cslk8:>B$X,䐚N\2ʊ~\UIAIw}@A$7KXODdu*DxX'tS{9rKQ`C㛏1ഄi*'9< (&Zix ` K(,f,ŗ ݁_5 zɧyc b%.,̲L|2'Ju%0RYW=j&@bԥb.!}h,+hWh2-dgď?>j*\|j³g12,D1hiKvEhL5(:ZdyZE2 jFO؞H6];??GW+4h@sfYDIo궁ch"U3x-lɄ*=b۵P C V U7HF(y-+),]كpY}0׵ol8K(N1P$ڵTE--Zi D~ {&<:jh_<NV6sՊ]"Vwl~P|=1aG+K$˜4jXN@a+lg`p#70`6η 1:?FDEΦ,ee[($F۶!n9<'h rtW[|} yvv/_U 0\\\`2`0iXnHlb kx{{{#<]c k"H ۶EiO确Tۦ hMINASaTemkdS|t;Fc?aOzM,!VW;C%b„BG$'G؎ "|uS2ra$W&yyeQ"rFRګ1odU#AObvChޠ H`a\wO*uu.5:_hяd[t} qE7TYЎ`,RP*7_~s?}={&U)W=(^|i``Y̤&0 `NiJēHΟ}/lWњ"r,C]7ЊyrpŒ y,ZQHgī^\\c ew&YVl68<:D;szd=cgvL 2$V N0yBʐl%(RXPyPkiќwXW/_pԼo꺡Mh-lij(j~Yp3V;"ϔ#Q^fW . LNNHEYq{1\$0(s'rI@:oъC[$.|۴ rK#*%tFC-4DNHy]_k ׻\$"_aBZO&[@ണ X Y")a <8zoei4f4 GkNД WH90Fe u-#T3`.K Mzh]Y=n1Sz  =9$Utğ^w,o,]n;h [-Dh4d2yriCb^l,e6YziIoTz3!m`LLKO m[ːP788\^]'?ܣmZxŶ@6N;qH šfqח/4|%6`ggŶCXg,v+˗/q{{ x<ul,:Zq{s/_: Xf<,h,P$46"bYo<$M$S/%h !RQTLy <Įm!g8Cjɒ-\YnҺdgc$, /H`dSu`;YyW.ؖ%(T%b ׯ~۟~ϧXߜO뾊$}v؊ &1f f OBwO0F(~ZFgym7 Gʓ.S@ũ-rgCĽ&[Wr S 5J) != %ٴtL{>Ɩitn:,WI|.qq(wA VV,')EKny gЫQBZ"(Dt䯲(4XB㻘Bml/!)nUIL \( R3(mE60^qcaaa}JaY=is[0ͨџ de _\,J( q%(LoPl41qxx(AY sz;N9p+ÃCՅfȕ-jx`WxDΩs {҃)Bհ\J#YDEM&ӄde υ1>N1Q5tV@4yAQT |c>ё=vNdGX\ZTl&:nF"8eN:]wUՆg3jaQ%ЈM RJ8F{H \_" wkKq}pp41VK+h;XCΖxs{_9M EfS؉唥Kr^_¡Ӳ,܁ey]"%@U.6תp)s!)Gadk~ߑA ΑV;aaO6d~! oiajS8Z0 QtJb8b2 "4M N \EQbpSSf:L:Xhs@L.$XV(lK,W}榶xǽcܻwaV0ƠlV1IljVF]4@E>E/˖ĄK{FtEug&l^Ejꇯ,p4r,kb:,K!}lmm9q~ܸ~C7H\n$Z(}BaK/4Z䐸H%ŋ]p#01aeMLr<c2"8^ZXF (2IyƓU5^ +lV}kVF|upe(aaTY Bϥ)+9=d`P" Pl s}~,Di8 A$" 4 YPNuRN! /BeMRKi62sPPś ?̉_~7( mʑ*P1A RdY}dKHo,<RNLSUAntZiÄj%6 X_[Gz>f m's6Ɂ&q]>,Ȗ&8\2)?h%p^ZZZas2(ߗgdpt|%@TQ3kkkx嗱b0h>hd:A Q³/1Nz(Q>T^'Uaassˋh6UʔSd.*Dn YgB<2BZ)s2u+KqӞkJT4*ޠh+!B:ixN1V9KKKPn*Hr(˩Y~x`f w'#d4U~H:{/I Oz5z I!H5=ydVE*4 @u^$?_$תD!DZȰ ruP˪8鄅0P"C)o zNgN1ƣ ݪ(Aw~Xɲ GjL"IJL]n#<X[]s|UD^fk-#vۻ mϜ>#UB"yteu#u;V-srT;1$&J6/`= R abiyU5@gn\d‘;B( (K]8 st=cs}V%( =k@HDw#cZH.B,/a^rpET"i,)C3+ VQ,yp3NU:CcyVL0Dt\Gu7uxϠ$jɁ Q5b᳟Ҕ do8i%ۆ7@jc96e5&G8:n\B( .0♸xԜGQq0y2/Qb2KYd( vvNZ}(r7Ɲ N˥gbpמ{Fǔt1y!S0E׏5P}R2]A XY#4jJ禁T J@5 Yi[TD?\3Q$ S/gJ-!/ ĴHAZC *T( eb9V2 ~Q'r3hKi<%1f>ц/xvC R V<`6@E, [WoZxm%#c4Md#9C:eٯ8gCUul5a70̈́0lڸKbrw`c-$ i8:>uPdX\w6$712 :t"kx$I"*@4LJ> C𬱘fH~E!`>:@c2ζ._'j,9;i'I"$0<߇焿y胛9O39^Dbs=7RH ,QϙrH%ȳ\[08gD^O}pZ nT\4㹁B[ȫAveuᑞs4#a G 9Qn%"1dd2h<Ғf /VVӇ~>,'h7Ld:q-X~0'|)̪< bIhr [mj+JRsQs1vwwq]tcqqG8<VVV4?S(!@R A5 ikR8-jxŁ75ʲD gI1U"Eb]b? e\/pZhpkC&`]Y^ `:*DA٭eZAs re4:|(BXͮ=9uHd,p OƹsHK.gΜ۷Ç?a N.xx,8^=aNz9MZZZ™3g0g8>>vdKiZ AŲ$E:e uՏc"$\/@8ɘWYU~T(t @*(R.8-v]UE0*'4*>WP6MSN]{R;r&k0  `J N ߇5 V[7sFKX>tnZx{ KKg%Z :8E{٥-sIuQ%(ki4~WQJ-+io 9x,=y͓83Xrd =}XZgE|XhKm'HRjeY$>zQZZZZҡ;PAәPj5qpS ۚb\ƻAy\I聒&)v4^~u%wku˘9+/Z%e)B|{ayy< N4u]&tȕTpx3M.SEQ`8 kL'VrYt ("ë;ݯA޽n4Mqtxx׮pp .NǰWI(Ueqa4Vk*bj8tw,A3Aix" ;""̿2( \y>W:!$5F )49d '$c6ieI-es%9D@@.FS17(iA$5M\7 ȋ dRs,h4B J8a#3f kTבκV#uCFJ`;#,'J2xN/ Gž8ez~H F/p3ª `f3{ևc2L7iVXԍ7tžZTCEVR0qaġ#NbvwwR)qttvgܹsHwEnׯ_n ^eYՆvȍUqu|߇zΎ;7O<=V gj(DJ<)+y$IH3 re^rƣ1fޒX]]Eە7G,ĸ5[Mku 8>>F6~;X^^.(BWdܚ)l[Zm%.t%CEecR+,2GQG{*ٲdMQIgq8a%Ga-+]^'?xS%t$9/rlr' y.,, I"SR5;$b! zJf~cȲhSh: ,`|Sm'D[ІQa% #B_},V4`Ƀn0T PEVyNB,$<ϵb(ΐȪ±l4UB7oMK|214Y_8޼!"PA%}5hZɑm+bY}年 IsecJEŋKDSGI=,//csch6RMg8<:T{yieYb8@CR+"\)$ƓǨX[]d2c>&9J55 0BC8om4MR^L%d:29uVKLKgXoh*S A+PKRt]Wt:GX]`wHs ]'ڪV@CJe=1#t7WIq֞t-.g 0*uL6P8S1w?Ma*4#_|F)sMZXdR0d4DZ>L'h؆:E,&4* IDAT{~isjKUm_ Py~+ѕ\,ſVzMn yj74re)'d5ٽ TML'1ࠌJ)0q&Sfq*Ω6mY je=910+ *l~,p(ӣ01;~gc&)Px8rBn<̈ݼغC-/$5MR%~4} ~N/E̱(I@*!3[m GGXZ^l4yhwںf+ET6aڭjqy2T!(x*'.1ƜpV P:YB ΋*Y{X'_J;{N|1Vr/Ex1B2$ %g]<-Շ̾`&.,J^. bM\ LX dK},Ν;'v3Ni eKG*P &M(Mg0@G] B2T>~EX@9О#y.]aS<#m[ pXfd,D+Mqgg@~z9(CL[VY9wzKT/Zgï 'Cv|+}S4K+/%Tl&(2M*V/i*s18yc=?lI[.N6D~ oL19x>~pwpzgL)&* *}cN!yy7߹XXKX_[( qj(q ݁Q>v?xx~4 VfT=S:7.C['H{z/~MaŶF]h` TiVHMÖmw0=19SkU αx<}Kx-<P/Tlzhͪ!/G΅ nNڕpފ&2DsYZM{sF\:vR3 5*erZVP/sN Y ʭ;24ƈC^T{^BzʞROI5(\y9J$.p ߩ'O.tHR3EK%)RpQ5]l o~eD_ΟƲs8Ҭ=4,K12QttʛЖYi8._eYݖg0@C.<=Ӏ;Tj褓e}3!Yz^MLZAl^%$.VyjyVM@e#\;acFSoiSB*7;<4R4N1QTy35܊Po>@ \t_7Z+arQvBq !xn7Wp$yFYZt;Ғ?c?70O1kW X_޿ry__{\zpmK/uwOk3/W_1,,. xua4KogKoE4=j.p w_F)>_ӵK߆_͋mKjVCVlYiu8,Ŕܔ[SJKڪ4x~*Z]pұe>E/7GEіZ$N2LOUc\ai_6̩ṟkKBwnb)]:$) Y7V|nF;x'#*65||u{ ~~ᣢ[xGp4~ÏOpjgOI?^}>c܌18}jW:G@w_~ ;cȲa`<5*<?pWr/_6?k7EK#r|w_67h4K( I7Ƈ9'?tQ-]zcm~Ob}mQ)Øn=/|#8}j}Dz ?r w7.JB$.{!<DQ?ƭ`PbwzYl/a<+/ O=sϿ ~3{?vAi |7/?1W%o^ln;Jyᛯ> Xx{Us}Ylm""ܽ{k >$ƿя<[ӺA|q?t @yUż%d㕕y^AnzW9~aI:рxLC;zyyYkYOy.1f}% aQĞtbQB ,K K %&+ ~VM,%Y `,E=C͓ J @N0B m ✘&)}q D9^^C<Hz_Z\|ţOk8nWţBX]]"}{CӏGhwX_ 0Yuq%DE" CL&3lm8+ Ȓi~mc0Fn/3F|g{ċyɋg13( Y+KܼJV8[Z\|yN\-w&1LfDnDLb\|L5\rKSJp5eoo<qn,0N0ZQ@NoW(Hu5a`ƛ@O~ixKO?1L1}HR(Xfmrm`4^QiO=qۛk?nޱn /0ۢgQoKoZvV%qϓ(]4jVZ-YIRO>:&~O~=w9uF㉬|gu`8ٔthwG:<myPB/gaV&~7WnhyyȏЋӑzQV)68 @=[* n렁xE*{qJTIE La4Bsgi|,dt5JR?]L~GAhqAґNX}^# Ixsg8>7nLKDۖy2 8GNZraZ- \CH4x"Ҍ&x<Ã#l- ܽc<=ĩu*ItxGWV5DwCYXZZ}iecksR{[҄^?'1O'&>Ds ?o|SK5l| xUs贛sƩS0o;_z@ ڏw^~w? cg_~M?r^qܞԨ,\ Μ9X c_z\t|?eX<ŋJA 5f$X\Zk?ys'x&ifNpuՒP8k6['=v(z R U$vK] ua|/=y!S,/fLmɶ^: ѕc:j6lI^&FD6tǨׅRr-ঘap(_/?E/};J4>>>ƛog};e@ ܽN5 |W^bWx<ƹmnOvyNܽ{OV엗63 ^(!C;3d0N*)L΅d:;0~<Ɲ;wiq;w9TɖODUPp8rґt0RYqbK%']Hʺ`Gi*ƵUttC,Kܺ} f{{h5[Ə1` ݽe?x[Ixc ׇPC6Ia7n ",.,"/I h4g9 E5a2 V:y;-\Xʪ1?]Q"/r4 L}ijVK5tsL'bı,燰,ˑV4e3OUuE6#N{dsDBtFV96yC- P78.&Z)EQTs3 [~s`iÊτzpm`,6ꍺR(:j^gq Ym..>~Q5|t:2j ɮSҖzǩӧߋTVtvV[Fz)mCِyWD)DEQ0cJ*qQ8M_Xѡ':8h:> \t <?cX^( ⒕s'*-zsv AmX$N$OUtk WxnsJ20KVpXWn'6[S'0E;|;Ҫ}2'-RhnB3V**J`Ȑs" ς4XHws6_4 rj7?Ò|lnnG1vN ERY遐f):.ݮj rxx"h4'lUfmZeX6*"q8O(Ghgj_gbK9Ҋ`Q$(sm;=͋&E4qxt3gΨXY؊~$]1^n,gڔV=vZ@!h#$ʹ;fSiaձ'9]^ţ=*h!Ϝu3ϸ\X)|peY'އބz]i" WϚ>~Y.@}L VMYM)1QacsC6r*.ǽ677&)-u$EWPo5.tg];*NBTfyOD*{ԥkC$rbӉW:;سZQU& 9-mГcaqAm 4۷2!Sst{nssU0 4TiĿXi_M`<k@jARJSRLFT}nx3r bYbGĒA;V Νꄰ'bf퇖e%+'W ]e8*-7~0Ta%%p:yt]ŗ.loh$N0tu$o{&5p 0N1gp677 fw PDiXZZD8:>1NHoAwi@ZMm@_ƓKScg9n޺G9[ZܻXvSO/O6V`K?iIl95XuUBQzy:1@'}li+*, agßA>A+l0JlnvJlUYYZVh,{L+NNc4m}](#)܋(֓#"m%)d$0%rH9\D99:>RJEzFbmؙ%* IJ,uT<VWf ba¶1b͖@Nm2n\WwH)y 'El^'IBkk*}ᤖv$u>j+ʁp0;bE@<8",,,xr0XOC=ͦc2(wb|\&Hǽc,/-B0LajvaV1&~֛B=̲Lbޭ#r%"/`JJ\輮/&^mN=SuDQLk&~y^Odfմ60yȭ*I>f89p2?'M]s9dSjR{K T\VA-4\[ kcxRNsLTN54t!rVS~Z.ԐqB3$N$X*B: xhgs×G+$4+g@️ p4SO=mmC,d/ŚZq1>P} p)5y9k>STXZohwSe*X8&vukxwbz;_z""ŹW;r yьx,`r0u6WaK m*|i19O+!u=-(t:2/Ǫ'ìf[H;|,n2j3‰au-{\~U)M%}P6VVVl4n1fo*(tn41{=xq%noo#MS:u wn*~aXkrtg976p-h5[ʲ FYCg/8IpydiSN! Ca:b4bwN>~vwqxp)>ڝ: ī}aʨCqoC~n]S`{gW\tE_WײD#3!dzg L3c LcӍʬ^܌[% H.*#nD4Cc*vmT}pRJ_3&hU%-H%陵CB=֝FA77F3@bpSe'ꠝ1F6^^m+s^PI/7Nq*ޣi=)/欫HttCHXTPP8l@&+PVe?1=%"&f/p)G}54*m-CQ( 壳SdGySUW5,xh<Zdp8`KIefh[!v]U/ Wegm/_qvK66Y&d|},0NWWJeb2/[W+#ݻwkb:x{u6XkۇXgӵTi,WK}xo6z{o81~wnF>q +؈?L',j6.qix8&jXaUQ4.q~@گ&b\8Nd*9@_5^}6+c:wZrTӤei3ɘ3 QJL3e<+2NC $G1ZVAb3YB/r'6n'7|Y 24<1OSl'e8]kb:p])j`tю)%$ޅ?D <,~fآ^@\3.oCo-:选,NyFu!9"=]G @>4H8h)HVfȕ_ݥrvDV3Cj_+.:#oU-X {t4ԥ PZ+FʁYƷҙ$Az~ IyЌLϰ1 Xw)ëK%#Wkk]N,pB' nBgQ-\vDϋɥ.qiC ;+m)I`;f~Lr%Z` 9޿/At>ӗ_M:t ߬m4BzVĉ0jSy*v<#_Yin|sF\%}B`^UUUjiL$j+b~7e0L@wPweyC>mU.%4 /LSÀ4jo4iwP83ȔYYy$`-UϛJ83ҺV=s%`JnpDUW(uoPNa HQ7MVl6Ey*u85> drg%&@C |- hBjI[B$?xW1nRIENDB`vdk-2.4.0/testvdk/stop.png0000644000000000000000000000254307613770771011132 PNG  IHDRw=bKGDIDATxڍ[lUE}vϥ^(X(\,FhVL%Q /j"yИ/hLx( +D4 QPZ.=Z=3ˇ[[NVg2̚_R y#s< 4&Tѓ &Tx.Z\c@W]7;z`N Sgߌ3+qw_ħg+Jujc|e{~]#6?LeS*Z!tBhba{]CEˣ@n||`Ը:ɷ.s ǦO`'?V#gyBQqyT_~0)| @)(lXOz0\fFo[.\ {trrT)кj颥@bFJ~fbxSٓ5fc5Ha_cs;uߜ uKG^\uBiiKw"h:^lo~v}{}+;֒jj᷃_bDqgX~KWB_/ (]O# 8ly}h+G%;Uǯ]=,yY̙@1C`#x(x >j+(Ş7_c]`mdOVʈH>hi 4^cc!0Zł?76]9iFN@T:}Tl88' ρ^2ue-k"{RqŒ պu:ݻ', .Z+g`@n Gv6LPzes}=d`P)QZr09r)Dq4f_[zo ;)I"B%# :Xo:˄R뮝6 '\ GtU:6"tg r J?@! 2' ]™.7<:/@"t " ®tYٱȏ:'Jxws ;-hE+KbP x8I? @0p8)ĕk+Д#hM"%G첶D2ֶǭšIENDB`vdk-2.4.0/testvdk/tokens.db0000644000000000000000000000022107233526653011234 include define ifdef endif else delete return break continue true false bool unsigned register protected public private VDKSyntaxEditor vdk-2.4.0/example/0000777000000000000000000000000010052401037007437 5vdk-2.4.0/example/childtask/0000777000000000000000000000000010052401037011405 5vdk-2.4.0/example/childtask/vdkchildtask.cc0000644000000000000000000001356307362650724014336 #include #include #include "vdkchildtask.h" #include #define VERBOSE 1 VDKPid::VDKPid (pid_t pid, VDKChildTask *task): pid (pid), task (task) { } /* */ DEFINE_SIGNAL_LIST (VDKChildTask, VDKObject); PIDLIST VDKChildTask::PidList = PIDLIST(); /* */ VDKChildTask::VDKChildTask (VDKForm* owner): VDKObject (owner) { /* even if isn't really a widget we add it to gc and signals handling */ owner->Objects().add(this); Parent(owner); /* allocates empty data_buffer */ data_buffer = NULL; /* */ struct sigaction sac; sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = VDKChildTask::reaper; sigaction(SIGCHLD, &sac, NULL); for(int i = 0; i < NSIG; i++) { if(i != SIGQUIT && i != SIGKILL && i != SIGTERM && i != SIGCHLD && i != SIGSTOP && i != SIGCONT && i != SIGTSTP) { sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = VDKChildTask::plumber; sigaction(i, &sac, NULL); } } Pid (-1); Xmit (-1); } /* */ VDKChildTask::~VDKChildTask () { if (pid > 0) { kill (pid, SIGTERM); VDKPid* vdkpid = NULL; VDKPid _pid(pid); if( (vdkpid = VDKChildTask::PidList.find (_pid)) != NULL) { int ndx = VDKChildTask::PidList.at (*vdkpid); if (ndx >= 0) { #if VERBOSE printf ("\nchild dies - pid:%d - removed at:%d", vdkpid->pid, ndx); fflush (stdout); #endif vdkpid->task->SignalEmit (CHILD_TASK_DIED_SIGNAL); vdkpid->task->SignalEmit ("child_task_died"); vdkpid->task->Pid (-1); vdkpid->task->Xmit (-1); VDKChildTask::PidList.unlink (ndx); } } } if (data_buffer) delete[] data_buffer; } /* */ void VDKChildTask::plumber(int sig) { #if VERBOSE printf ("\nOtherwise unhandled Unix Signal:%d ",sig); fflush (stdout); #endif } void VDKChildTask::reaper(int) { int sts; int local_pid; VDKPid* vdkpid = NULL; local_pid = waitpid(-1, &sts, WNOHANG); #if VERBOSE printf ("\nreaper () - pid:%d", local_pid); fflush (stdout); #endif VDKPid _pid(local_pid); if( (vdkpid = VDKChildTask::PidList.find (_pid)) != NULL) { int ndx = VDKChildTask::PidList.at (_pid); if (ndx >= 0) { #if VERBOSE printf ("\nchild dies - pid:%d - status:%d - removed at:%d", vdkpid->pid, sts, ndx); fflush (stdout); #endif vdkpid->task->SignalEmit (CHILD_TASK_DIED_SIGNAL); vdkpid->task->SignalEmit ("child_task_died"); vdkpid->task->Pid (-1); vdkpid->task->Xmit (-1); VDKChildTask::PidList.unlink (ndx); } } } pid_t VDKChildTask::StartChild(char* args[], bool duplex) { int inpipe[2], outpipe[2]; if (Pid () >= 0) { #if VERBOSE printf ("\nStartChild () aborted child running"); fflush (stdout); #endif return -1; } else { #if VERBOSE printf ("\nStartChild ()"); fflush (stdout); #endif } if(access (args[0], X_OK) == 0) { sigset_t mask,omask; // We don't want to get any signals while setting up the task lists sigemptyset(&mask); sigaddset(&mask,SIGCHLD); sigprocmask(SIG_BLOCK,&mask,&omask); if (duplex) pipe(inpipe); pipe(outpipe); pid = fork(); switch(pid) { // Child case 0: if (duplex) dup2(inpipe[0], 0); else close (0); dup2(outpipe[1], 1); dup2(outpipe[1], 2); execvp(args[0], args); break; case -1: break; default: // Parent close(outpipe[1]); // Important! Close my end here if (duplex) { close(inpipe[0]); // Important! Close my end here xmit = inpipe[1]; } // Set pipes none blocking, so we can read big buffers // in the callback without having to use FIONREAD // to make sure the callback doesn't block. /* int md; if((md = fcntl(outpipe[0], F_GETFL)) != -1) fcntl(outpipe[0], F_SETFL, O_NONBLOCK | md ); */ VDKInputChannel *inpch = new VDKInputChannel(Owner (),outpipe[0]); inpch->Parent (this); SignalConnect (inpch, "input_signal", &VDKChildTask::DoIO, false); #if VERBOSE printf ("\npid =%d", pid); fflush (stdout); #endif VDKPid vdkpid (pid, this); if (!VDKChildTask::PidList.find (vdkpid)) { VDKChildTask::PidList.add (vdkpid); #if VERBOSE printf ("\nadded pid =%d", pid); fflush (stdout); #endif } break; } sigprocmask(SIG_UNBLOCK ,&mask ,NULL); } else { ; #if VERBOSE char x[256]; sprintf(x, "Can't execute \"%s\"", (args[0]) ? args[0] : "????"); puts (x); fflush (stdout); return -1; #endif } #if VERBOSE printf("\nReturning pid %x\n", Pid()); fflush (stdout); #endif return Pid (); } /* */ bool VDKChildTask::DoIO (VDKObject *obj) { const int DATA_BUFFER_SIZE = 1024; VDKInputChannel *ip = dynamic_cast(obj); if (!ip) return true; int res; // char * buf = GetData (); if (data_buffer) delete[] data_buffer; data_buffer = new char[DATA_BUFFER_SIZE]; res = read (ip->getfd(), data_buffer, DATA_BUFFER_SIZE); if(res > 0) { data_buffer[res] = '\0'; SignalEmit (CHILD_TASK_DATA_SIGNAL); SignalEmit ("child_task_data"); } else if(res == 0) { close(ip->getfd()); ip->Destroy(); } return true; } /* */ bool VDKChildTask::SendData(char* data) { char *txt; char *t; bool result = false; if(xmit < 0) return result; else { txt = new char[strlen (data+1)]; strcpy(txt,data); t = txt+strlen(txt); write(xmit, txt, (t - txt)); result = true; } delete[] txt; return result; } vdk-2.4.0/example/childtask/vdkchildtask.h0000644000000000000000000000270707362651632014175 // #ifndef _vdkchildtask_h // put your code below here #define _vdkchildtask_h #include #include #include #include #define _GNU_SOURCE #include #include #include #include #include #define CHILD_TASK_DATA_SIGNAL (user_signal-1023) #define CHILD_TASK_DIED_SIGNAL (user_signal-1022) class VDKChildTask; class VDKPid { public: pid_t pid; VDKChildTask* task; VDKPid (pid_t pid = (pid_t) -1, VDKChildTask* task = NULL); ~VDKPid () {} bool operator == (VDKPid& p) { return (pid == p.pid); } bool operator < (VDKPid& p) { return (pid < p.pid); } }; typedef VDKValueList PIDLIST; typedef VDKValueListIterator PidListIterator; class VDKChildTask: public VDKObject { private: char* data_buffer; static void reaper(int); static void plumber(int); pid_t pid; int xmit; static PIDLIST PidList; protected: bool DoIO (VDKObject*); public: VDKChildTask (VDKForm* owner); virtual ~VDKChildTask (); pid_t StartChild (char* args[], bool duplex = false); char* GetData () { return data_buffer; } bool SendData (char* buffer); // hopefully converted into properties inline int Pid() {return pid;} inline void Pid(int p) {pid = p;} inline int Xmit() {return pid;} inline void Xmit(int x) {xmit = x;} DECLARE_SIGNAL_LIST (VDKChildTask); }; // #endif vdk-2.4.0/example/hello/0000777000000000000000000000000010052401037010542 5vdk-2.4.0/example/hello/Makefile0000644000000000000000000000123507206652754012144 # Visual Development Kit # by Motta mario # version 2.0 # hello program CFLAGS = -Wall -g CC = g++ #------------- # hello #------------- all: hello hello2 hello: hello.o $(CC) -o hello hello.o `vdk-config-2 --libs` hello.o: hello.cc $(CC) $(CFLAGS) `vdk-config-2 --cflags` -c hello.cc hello2: hello2.o $(CC) -o hello2 hello2.o `vdk-config-2 --libs` hello2.o: hello2.cc $(CC) $(CFLAGS) `vdk-config-2 --cflags` -c hello2.cc hello3: hello3.o $(CC) -o hello3 hello3.o `vdk-config-2 --libs` #hello3.o: hello3.cc # $(CC) $(CFLAGS) `vdk-config-2 --cflags` -c hello3.cc clean: -rm -f hello hello2 hello3 -rm -f *.o -rm -f *~ core vdk-2.4.0/example/hello/hello.cc0000644000000000000000000000245507362647377012133 #include #include "kill.xpm" class MyForm: public VDKForm { VDKCustomButton* helloButton; VDKCustomButton* closeButton; VDKLabel* label; public: MyForm(VDKApplication* app, gchar* title): VDKForm(app,title) {} ~MyForm() {} void Setup() { VDKBox* box = new VDKBox(this); box->Add(helloButton = new VDKCustomButton(this,"Hello")); helloButton->SetTip("Says \"hello\""); box->Add(closeButton = new VDKCustomButton(this,(const char*) kill_xpm ,"DISMISS")); closeButton->SetTip("Closes hello application"); box->Add(label = new VDKLabel(this," ")); Add(box); SetSize(200,100); } bool SayHello(VDKObject*) { label->Caption="Hello world !"; return true; } bool Quit(VDKObject*) { Close(); return true; } DECLARE_SIGNAL_MAP(MyForm); }; DEFINE_SIGNAL_MAP(MyForm,VDKForm) ON_SIGNAL(helloButton,clicked_signal,SayHello), ON_SIGNAL(closeButton,clicked_signal,Quit) END_SIGNAL_MAP class MyApp: public VDKApplication { public: MyApp(int* argc, char** argv): VDKApplication(argc,argv) {} ~MyApp() {} void Setup() { MainForm = new MyForm(this,"hello world"); MainForm->Setup(); MainForm->Show(); } }; int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/hello/hello2.cc0000644000000000000000000001036107362647401012174 #include #include "kill.xpm" extern char * folder_xpm[]; /////////////////////////////////////////// void ExternClicked(GtkWidget*, gpointer gp) { VDKObject* sender = (VDKObject*) gp; printf("\nExternClicked(%p)",sender); fflush(stdout); } ///////////////////////////////////// class MyButton: public VDKCustomButton { public: MyButton(VDKForm* owner, char* label, char* tip): VDKCustomButton(owner,label) { if(tip) SetTip(tip); printf("\nMyButton::SignalConnect() to slot:%d", SignalConnect("clicked",&MyButton::Clicked)); fflush(stdout); } bool Clicked(VDKObject* sender) { printf("\nMyButton::Clicked(%p)",sender); fflush(stdout); // jump to parent level return false; } virtual ~MyButton() {} DECLARE_SIGNAL_LIST(MyButton); }; DEFINE_SIGNAL_LIST(MyButton,VDKCustomButton); /////////////////////////////////////////// class MyCanvas: public VDKCanvas { public: MyCanvas(VDKForm* owner, int w, int h): VDKCanvas(owner,w,h) { printf("\nMyCanvas::EventConnect() to slot:%d", EventConnect("button_press_event",&MyCanvas::MouseClick)); fflush(stdout); } virtual ~MyCanvas() {} bool MouseClick(VDKObject* sender, GdkEvent* event) { printf("\nMyCanvas::MouseClick() :%p, type:%d",sender,event->type); fflush(stdout); // jump to parent level return false; } DECLARE_EVENT_LIST(MyCanvas); }; DEFINE_EVENT_LIST(MyCanvas,VDKCanvas); ///////////////////////////////////// class MyForm: public VDKForm { protected: static void StaticClicked(GtkWidget*, gpointer gp) { VDKObject* sender = (VDKObject*) gp; printf("\nMyForm::StaticClicked(%p)",sender); fflush(stdout); } bool Clicked(VDKObject* sender) { printf("\nMyForm::Clicked(%p)",sender); fflush(stdout); return true; } MyButton* helloButton; VDKCustomButton* closeButton; VDKLabel* label; MyCanvas* canvas; public: MyForm(VDKApplication* app, gchar* title): VDKForm(app,title) {} ~MyForm() {} void Setup() { VDKBox *box = new VDKBox(this); // canvas = new MyCanvas(this,200,100); canvas->NormalBackground = clIvory; box->Add(canvas); box->Add(helloButton = new MyButton( this, "Hello", "Says \"hello\"")); box->Add(closeButton = new VDKCustomButton(this,(const char*) kill_xpm ,"DISMISS")); closeButton->SetTip("Closes hello application"); box->Add(label = new VDKLabel(this," ")); Add(box); //SetSize(200,100); // signal connecting SignalConnect(closeButton,"clicked" ,&MyForm::Quit); // printf("\nMyForm::SignalConnect() to slot:%d", SignalConnect(helloButton,"clicked" ,&MyForm::Clicked)); fflush(stdout); // SignalConnect(helloButton,"clicked" ,&MyForm::SayHello); // connection with static or "C" callbacks unhandled gtk_signal_connect(GTK_OBJECT(helloButton->Widget()), "clicked" , GTK_SIGNAL_FUNC(MyForm::StaticClicked), (gpointer) helloButton); gtk_signal_connect(GTK_OBJECT(helloButton->Widget()), "clicked" , GTK_SIGNAL_FUNC(ExternClicked), (gpointer) helloButton); // event connecting printf("\nMyForm::EventConnect(button_press) to slot:%d", EventConnect(canvas,"button_press_event",&MyForm::MouseClick)); fflush(stdout); } bool SayHello(VDKObject* sender) { label->Caption="Hello world !"; return true; } bool Quit(VDKObject* sender) { Close(); return true; } bool MouseClick(VDKObject* sender, GdkEvent* event) { printf("\nMyForm::MouseClick():%p,type:%d",sender,event->type); fflush(stdout); return true; } DECLARE_SIGNAL_LIST(MyForm); DECLARE_EVENT_LIST(MyForm); }; DEFINE_SIGNAL_LIST(MyForm,VDKForm); DEFINE_EVENT_LIST(MyForm,VDKForm); /////////////////////////////////// class MyApp: public VDKApplication { public: MyApp(int* argc, char** argv): VDKApplication(argc,argv) {} ~MyApp() {} void Setup() { MainForm = new MyForm(this,"Hello world 2"); MainForm->Setup(); MainForm->Show(); } }; ///////////////////////////////// int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/hello/hello3.cc0000644000000000000000000000252307206652757012205 #include #include "kill.xpm" class MyForm: public VDKForm { VDKPixmapToggleButton* helloButton; VDKLabelButton* closeButton; VDKLabel* label; public: MyForm(VDKApplication* app, gchar* title): VDKForm(app,title) {} ~MyForm() {} void Setup() { VDKBox* box = new VDKBox(this); box->Add(helloButton = new VDKPixmapToggleButton(this, kill_xpm, "Test Me", "haloah", GTK_POS_LEFT, 10)); box->Add(closeButton = new VDKLabelButton(this, "Closes hello application")); box->Add(label = new VDKLabel(this,"Test 3")); Add(box); SetSize(200,100); } bool SayHello(VDKObject*) { if (helloButton->Checked) label->Caption="Hello world !"; else label->Caption="Not Hello world!"; return true; } bool Quit(VDKObject*) { Close(); return true; } DECLARE_SIGNAL_MAP(MyForm); }; DEFINE_SIGNAL_MAP(MyForm,VDKForm) ON_SIGNAL(helloButton,toggled_signal,SayHello), ON_SIGNAL(closeButton,clicked_signal,Quit) END_SIGNAL_MAP class MyApp: public VDKApplication { public: MyApp(int* argc, char** argv): VDKApplication(argc,argv) {} ~MyApp() {} void Setup() { MainForm = new MyForm(this,"Hello world 3"); MainForm->Setup(); MainForm->Show(); } }; int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/hello/kill.xpm0000644000000000000000000000474307206652757012177 /* XPM */ static char * kill_xpm[] = { "32 32 64 1", " c None", ". c #FFFFFBEEFFFF", "X c #FFFFDB6CD75C", "o c #FFFFC30BBEFB", "O c #FFFFD34CCF3C", "+ c #F7DEAAAAA699", "@ c #EFBEBAEAA699", "# c red", "$ c #F7DEA2899E79", "% c #F7DEA2898E38", "& c #FFFF79E779E7", "* c #FFFF92489658", "= c #EFBE9A698617", "- c #FFFF8A288E38", "; c #FFFFCB2BCF3C", ": c #FFFFBAEABEFB", "> c #EFBE924879E7", ", c #FFFF18611861", "< c #8E3851444103", "1 c #FFFF51445144", "2 c #FFFF61856185", "3 c #E79D924871C6", "4 c #FFFF38E338E3", "5 c #D75C18611861", "6 c #71C6451430C2", "7 c #DF7D8A2869A6", "8 c #E79D00000000", "9 c #AEBA00000000", "0 c #C71B00000000", "q c #9E7900000000", "w c #EFBEC30BB6DA", "e c #861700000000", "r c #69A638E328A2", "t c #BEFB861769A6", "y c #DF7D82075965", "u c #71C600000000", "i c #618538E32081", "p c #D75C79E75144", "a c #D75C2CB228A2", "s c #B6DA0C30B6DA", "d c #CF3C69A64103", "f c #CF3C69A638E3", "g c #D75C71C65144", "h c #618530C21861", "j c #C71B618538E3", "k c #CF3C71C64924", "l c #AEBA10401040", "z c #C71B618530C2", "x c #BEFB596528A2", "c c #596528A21040", "v c #9E79451428A2", "b c #DF7D79E75965", "n c #B6DA59652081", "m c #596530C21040", "M c #B6DA51441861", "N c #410320810820", "B c #AEBA51441861", "V c #596528A20820", "C c #AEBA51441040", "Z c #A69949241040", "A c #A69949240820", "S c #492420810000", "D c #8E383CF30820", "F c #71C634D30000", " .. ", " .Xo. ", " .O++@. ", " ##### .O$$$%@. ", " #&$**##.O$%%%==@. ", " #-;;:;$##%%====>>##### ", " ,+X$-*:-#<=>>>>##1&$&2# ", " #-:122::2#>333#4-XXo-&4# ", " #145,2:;4677,&XXX-24,1#8 ", " 88888#-+#6,&oX-4,#88908 ", " .90808#&4#2--2#88000q9 ", " .w7699q0,11-&48809qqeert ", " .w777yr998&*-2#09ueueiii7. ", " .w7yyyppr981&4a9qeqsiiidfft. ", " .@yypppggg814##21#hiiffffjjjt. ", ".@pppggggk,-*,9l5220ffjjjjzzzxt.", " # # Modified by Mario Motta to port on vdk series 2 # 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., 675 Mass Ave, Cambridge, MA 02139, USA. # CFLAGS = -Wall -O2 -g -DVDK2=1 CXX = g++ LDFLAGS = -g LIBS = `vdk-config-2 --libs` VDK_CFLAGS = `vdk-config-2 --cflags` all: iodemo0 iodemo1 iodemo1a iodemo1b iodemo2 helper0 helper1 helper0: helper0.o $(CC) -O2 -o $@ $+ helper1: helper1.o $(CC) -O2 -o $@ $+ iodemo0: iodemo0.o $(CXX) $(CFLAGS) -o $@ $+ $(LIBS) iodemo0.o: iodemo0.cc iodemo0.h $(CXX) $(CFLAGS) $(VDK_CFLAGS) -c $< iodemo1: iodemo1.o $(CXX) $(CFLAGS) -o $@ $+ $(LIBS) iodemo1.o: iodemo1.cc iodemo0.h $(CXX) $(CFLAGS) $(VDK_CFLAGS) -c $< iodemo1a.o: iodemo1a.cc iodemo0.h $(CXX) $(CFLAGS) $(VDK_CFLAGS) -c $< iodemo1b.o: iodemo1b.cc iodemo0.h $(CXX) $(CFLAGS) $(VDK_CFLAGS) -c $< iodemo1a: iodemo1a.o $(CXX) $(CFLAGS) -o $@ $+ $(LIBS) iodemo1b: iodemo1b.o $(CXX) $(CFLAGS) -o $@ $+ $(LIBS) iodemo2.o: iodemo2.cc iodemo2.h Socket.h $(CXX) $(CFLAGS) $(VDK_CFLAGS) -c $< iodemo2: iodemo2.o $(CXX) $(CFLAGS) -o $@ $+ $(LIBS) clean: -rm -f iodemo0 iodemo1 iodemo1a iodemo1b iodemo2 helper0 helper1 -rm -f *.o -rm -f *~ core '#*#' vdk-2.4.0/example/iotut/helper0.c0000644000000000000000000000236707362644011012245 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include int main(int ac, char **av) { char foo[1024]; int n; while((n = read(0, foo, sizeof(foo))) > 0) { char buff[1024]; sprintf (buff, "%d: %.*s", n-1, n, foo); write(1, buff, strlen(buff)); if(strncasecmp(foo, "quit\n", 5) == 0) break; } exit(0); } vdk-2.4.0/example/iotut/iodemo-inet.pl0000755000000000000000000000242407362644011013305 #!/usr/bin/perl -w use strict; use IO::Socket; use IO::Select; use IO::Handle; sub showsock($$) { my ($s,$flg) = @_; my $res = ''; if($flg & 1) { $res .= $s->sockhost . ',' . $s->sockport; } if($flg == 3) { $res .= " to "; } if($flg & 2) { $res .= $s->peerhost . ',' . $s->peerport; } $res; } my ($lsn, $flag, $fh, $buf, $sel, @ready); $SIG{INT} = sub {print "Close on SIGINT\n"; $lsn->close(); exit()}; sub cleansock($) { my $fh = $_[0]; $sel->remove($fh); $fh->close(); } my $port = shift || 'iodemo'; $lsn = new IO::Socket::INET(Listen => 1, LocalPort => $port, Proto => 'tcp', Reuse => 1, Type => SOCK_STREAM) or die "bind $!"; $sel = new IO::Select or die "select $!"; $sel->add($lsn); print "Listening on ", showsock ($lsn, 1),"\n"; while(@ready = $sel->can_read) { foreach $fh (@ready) { if($fh == $lsn) { my $ns = $fh->accept; $sel->add($ns); print "\nConnect ", showsock ($ns, 3), "\n"; } else { if($fh->recv($buf, 256, 0), $buf) { print "From ", showsock ($fh, 2), " : ", $buf; $fh->send((length($buf)-1)." :> ".$buf, 0); } else { print "Close by ", showsock ($fh, 2), "\n"; cleansock($fh); } } } } vdk-2.4.0/example/iotut/iodemo0.cc0000644000000000000000000001475507362644011012411 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // Example to show VDKInputChannel, multiple input streams, // user defined VDKsignals, interaction with Unix signals etc #define _GNU_SOURCE #include #include #include #include #include #include #include #include "iodemo0.h" DEFINE_SIGNAL_MAP(MyForm,VDKForm) ON_SIGNAL(inp1,INPUT_SIGNAL,DoIO), ON_SIGNAL(text, realize_signal,runcmd), ON_SIGNAL(entry, activate_signal,sendstuff), ON_SIGNAL(timer,timer_tick_signal,Quit), ON_SIGNAL(quit,clicked_signal,Quit) END_SIGNAL_MAP DEFINE_SIGNAL_LIST(MyForm,VDKForm); void MyForm::ShowInfanticide() { SignalEmit("KillSignal"); Pid(0); } bool MyForm::sendstuff(VDKObject* obj) { char txt[1024]; char *t; strcpy(txt, entry->GetText()); t = txt+strlen(txt); *t++ = '\n'; if(xmit != -1) { write(xmit, txt, (t - txt)); } entry->SetText(""); return true; } bool MyForm::CanClose(void) { return Stop(0); } bool MyForm::Stop (VDKObject *obj) { if(pid) { kill(pid, SIGTERM); } return true; } bool MyForm::DoIO (VDKObject *obj) { VDKInputChannel *ip = static_cast(obj); int res; char buf[1024]; res = read (ip->getfd(), buf, sizeof(buf)); if(res > 0) { text->TextInsert(buf, res); } else if(res == 0) { close(ip->getfd()); ShowInfanticide(); ip->Destroy(); } return true; } bool MyForm::runcmd(VDKObject *obj) { MyApp *a = static_cast(Application()); int inpipe[2], outpipe[2]; if(access (a->args[0], X_OK) == 0) { pipe(inpipe); pipe(outpipe); pid = fork(); switch(pid) { // Child case 0: dup2(inpipe[0], 0); dup2(outpipe[1], 1); dup2(outpipe[1], 2); execvp(a->args[0], a->args); break; case -1: break; default: // Parent close(outpipe[1]); // Important! Close my end here close(inpipe[0]); // Important! Close my end here xmit = inpipe[1]; // Set pipes none blocking, so we can read big buffers // in the callback without having to use FIONREAD // to make sure the callback doesn't block. inp1 = new VDKInputChannel(this,outpipe[0]); text->Clear(); break; } } else { char x[256]; sprintf(x, "Can't execute your program \"%s\"", (a->args[0]) ? a->args[0] : "????"); text->TextInsert(x); SignalEmit("KillSignal"); } return true; } bool MyForm:: Quit(VDKObject*o) { if(pid) { kill(pid, SIGTERM); } Application()->Terminate(); return true; } void MyForm::Setup(void) { VDKBox* vbox1 = new VDKBox(this, v_box); VDKFrame* frame1 = new VDKFrame(this, "You type here"); VDKFrame* frame2 = new VDKFrame(this, "Forked friend"); // Just to show user signals .... SignalConnect("KillSignal",&MyForm::Mourn, false); VDKBox* hbox1 = new VDKBox(this, h_box); vbox1->Add(frame1); vbox1->Add(frame2); vbox1->Add(hbox1,c_justify, 0, 0); hbox1->Add((quit = new VDKLabelButton(this,"Quit")), c_justify, 1, 0); entry = new VDKEntry(this, 0); #if VDK2 entry->Font = new VDKFont(this,"courier 12"); #else entry->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); #endif frame1->Add(entry); text = new VDKText(this, 0); #if VDK2 text->Font = new VDKFont(this,"courier 12"); #else text->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); #endif frame2->Add(text); Add(vbox1); SetSize(500,-1); entry->GrabFocus(); #if VDK2 runcmd(text); #endif } bool MyForm::Mourn(VDKObject *) { if(timer == 0) { timer = new VDKTimer(this, 30*1000); } text->TextInsert("\nPress Quit to exit(or wait 30 seconds)\n"); return true; } // This is a static member so we can access class members // Somewhat contrived example // In this case, we don't get SIGPIPE (at least not with glibc2.1, but // we should be ready to handle it void MyApp::plumber(int sig) { cerr << "Otherwise unhandled Unix Signal " << sig << endl; } void MyApp::reaper(int) { int sts; int pid; pid = waitpid(-1, &sts, WNOHANG); if(pid == ((MyForm*)MyApp::me->MainForm)->Pid()) { cerr << "-- child dies, pid was " << pid << ", status " << sts << endl; ((MyForm*)MyApp::me->MainForm)->Pid(0); } } void MyApp::Setup() { if(*args == NULL) { cerr << "No command to run" << endl; } MainForm = new MyForm(this,"Running Command ..."); MyApp::me = this; struct sigaction sac; sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::reaper; sigaction(SIGCHLD, &sac, NULL); for(int i = 0; i < NSIG; i++) { if(i != SIGQUIT && i != SIGKILL && i != SIGTERM && i != SIGCHLD && i != SIGSTOP && i != SIGCONT && i != SIGTSTP) { sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::plumber; sigaction(i, &sac, NULL); } } MainForm->Setup(); MainForm->Show(); } MyApp *MyApp::me; int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/iotut/iodemo1.cc0000644000000000000000000001376307362644011012410 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // Example to show VDKInputChannel, multiple input streams, // user defined VDKsignals, interaction with Unix signals etc #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include "iodemo0.h" DEFINE_SIGNAL_MAP(MyForm,VDKForm) ON_SIGNAL(inp1,INPUT_SIGNAL,DoIO), ON_SIGNAL(text, realize_signal,runcmd), ON_SIGNAL(entry, activate_signal,sendstuff), ON_SIGNAL(timer,timer_tick_signal,Quit), ON_SIGNAL(quit,clicked_signal,Quit) END_SIGNAL_MAP DEFINE_SIGNAL_LIST(MyForm,VDKForm); bool MyForm::sendstuff(VDKObject* obj) { char txt[1024]; char *t; strcpy(txt, entry->GetText()); t = txt+strlen(txt); *t++ = '\n'; *t = 0; if(xmit != -1) { write(xmit, txt, (t - txt)); } entry->SetText(""); return true; } bool MyForm::CanClose(void) { return Stop(0); } bool MyForm::Stop (VDKObject *obj) { if(pid) { kill(pid, SIGTERM); } return true; } bool MyForm::DoIO (VDKObject *obj) { VDKInputChannel *ip = static_cast(obj); int res; char buf[1024]; res = read (ip->getfd(), buf, sizeof(buf)); if(res > 0) { text->TextInsert(buf, res); } if(res == 0) { close(ip->getfd()); ShowInfanticide(); ip->Destroy(); } return true; } bool MyForm::runcmd(VDKObject *obj) { MyApp *a = static_cast(Application()); int sock[2]; if(access (a->args[0], X_OK) == 0) { socketpair(AF_FILE, SOCK_STREAM, 0, sock); pid = fork(); switch(pid) { // Child case 0: close(sock[0]); dup2(sock[1], 0); dup2(sock[1], 1); dup2(sock[1], 2); execvp(a->args[0], a->args); _exit(0); break; case -1: break; default: // Parent close(sock[1]); xmit = sock[0]; inp1 = new VDKInputChannel(this,sock[0]); text->Clear(); break; } } else { char x[256]; sprintf(x, "Can't execute your program \"%s\"", (a->args[0]) ? a->args[0] : "????"); text->TextInsert(x); SignalEmit("KillSignal"); } return true; } bool MyForm:: Quit(VDKObject*o) { if(pid) { kill(pid, SIGTERM); } Application()->Terminate(); return true; } void MyForm::Setup(void) { VDKBox* vbox1 = new VDKBox(this, v_box); VDKFrame* frame1 = new VDKFrame(this, "You type here"); VDKFrame* frame2 = new VDKFrame(this, "Your forked friend"); // Just to show user signals .... SignalConnect("KillSignal",&MyForm::Mourn, false); VDKBox* hbox1 = new VDKBox(this, h_box); vbox1->Add(frame1); vbox1->Add(frame2); vbox1->Add(hbox1,c_justify, 0, 0); hbox1->Add((quit = new VDKLabelButton(this,"Quit")), c_justify, 1, 0); entry = new VDKEntry(this, 0); entry->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame1->Add(entry); text = new VDKText(this, 0); text->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame2->Add(text); Add(vbox1); SetSize(500,-1); entry->GrabFocus(); } void MyForm::ShowInfanticide() { SignalEmit("KillSignal"); Pid(0); } bool MyForm::Mourn(VDKObject *) { if(timer == 0) { timer = new VDKTimer(this, 30*1000); } text->TextInsert("\nPress Quit to exit(or wait 30 seconds)\n"); return true; } // This is a static member so we can access class members Somewhat // contrived example In this case, we don't get SIGPIPE but we should // be ready to handle it void MyApp::plumber(int sig) { cerr << "Otherwise unhandled Unix Signal " << sig << endl; } void MyApp::reaper(int) { int sts; int pid; pid = waitpid(-1, &sts, WNOHANG); if(pid == ((MyForm*)MyApp::me->MainForm)->Pid()) { cerr << "-- child dies, pid was " << pid << ", status " << sts << endl; } } void MyApp::Setup() { if(*args == NULL) { cerr << "No command to run" << endl; } MainForm = new MyForm(this,"Running Command ..."); MyApp::me = this; struct sigaction sac; sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::reaper; sigaction(SIGCHLD, &sac, NULL); for(int i = 0; i < NSIG; i++) { if(i != SIGQUIT && i != SIGKILL && i != SIGTERM && i != SIGCHLD && i != SIGSTOP && i != SIGCONT && i != SIGTSTP) { sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::plumber; sigaction(i, &sac, NULL); } } MainForm->Setup(); MainForm->Show(); } MyApp *MyApp::me; int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/iotut/iodemo1b.cc0000644000000000000000000001431407362644011012543 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // Example to show VDKInputChannel, multiple input streams, // user defined VDKsignals, interaction with Unix signals etc #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include "iodemo1b.h" DEFINE_SIGNAL_MAP(MyForm,VDKForm) ON_SIGNAL(text, realize_signal,runcmd), ON_SIGNAL(entry, activate_signal,sendstuff), ON_SIGNAL(timer,timer_tick_signal,Quit), ON_SIGNAL(quit,clicked_signal,Quit) END_SIGNAL_MAP DEFINE_SIGNAL_LIST(MyForm,VDKForm); bool MyForm::sendstuff(VDKObject* obj) { char txt[1024]; char *t; strcpy(txt, entry->GetText()); t = txt+strlen(txt); *t++ = '\n'; *t = 0; if(xmit != -1) { write(xmit, txt, (t - txt)); } entry->SetText(""); return true; } bool MyForm::CanClose(void) { return Stop(0); } bool MyForm::Stop (VDKObject *obj) { if(pid) { kill(pid, SIGTERM); } return true; } bool MyForm::DoIO (VDKObject *obj) { VDKInputChannel *ip = static_cast(obj); int res; char buf[1024]; res = read (ip->getfd(), buf, sizeof(buf)); if(res > 0) { text->TextInsert(buf, res); } else if (res == 0) { close(ip->getfd()); ShowInfanticide(); ip->Destroy(); } return true; } bool MyForm::runcmd(VDKObject *obj) { MyApp *a = static_cast(Application()); int sock[2]; VDKInputChannel *inp; if(access (a->args[0], X_OK) == 0) { socketpair(AF_FILE, SOCK_DGRAM, 0, sock); pid = fork(); switch(pid) { // Child case 0: close(sock[0]); dup2(sock[1], 0); dup2(sock[1], 1); dup2(sock[1], 2); execvp(a->args[0], a->args); _exit(0); break; case -1: break; default: // Parent close(sock[1]); xmit = sock[0]; inp = new VDKInputChannel(this,sock[0], GDK_INPUT_READ); SignalConnect(inp, "input_signal", &MyForm::DoIO, 0); text->Clear(); break; } } else { char x[256]; sprintf(x, "Can't execute your program \"%s\"", (a->args[0]) ? a->args[0] : "????"); text->TextInsert(x); SignalEmit("KillSignal"); } return true; } bool MyForm:: Quit(VDKObject*o) { if(pid) { kill(pid, SIGTERM); } Application()->Terminate(); return true; } void MyForm::Setup(void) { VDKBox* vbox1 = new VDKBox(this, v_box); VDKFrame* frame1 = new VDKFrame(this, "You type here"); VDKFrame* frame2 = new VDKFrame(this, "Your forked friend"); // Just to show user signals .... SignalConnect("KillSignal",&MyForm::Mourn, false); VDKBox* hbox1 = new VDKBox(this, h_box); vbox1->Add(frame1); vbox1->Add(frame2); vbox1->Add(hbox1,c_justify, 0, 0); hbox1->Add((quit = new VDKLabelButton(this,"Quit")), c_justify, 1, 0); entry = new VDKEntry(this, 0); entry->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame1->Add(entry); text = new VDKText(this, 0); text->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame2->Add(text); Add(vbox1); SetSize(500,-1); entry->GrabFocus(); } void MyForm::ShowInfanticide() { SignalEmit("KillSignal"); Pid(0); } bool MyForm::Mourn(VDKObject *) { if(timer == 0) { timer = new VDKTimer(this, 30*1000); } text->TextInsert("\nPress Quit to exit(or wait 30 seconds)\n"); return true; } // This is a static member so we can access class members Somewhat // contrived example In this case, we don't get SIGPIPE but we should // be ready to handle it void MyApp::plumber(int s) { if(s == SIGUSR1) { cerr << "Exiting on SIGUSR1" << endl; ((MyForm*)MyApp::me->MainForm)->ShowInfanticide(); } else cerr << "Caught signal " << s << endl; } void MyApp::reaper(int) { int sts; int pid; pid = waitpid(-1, &sts, WNOHANG); if(pid == ((MyForm*)MyApp::me->MainForm)->Pid()) { cerr << "-- child dies, pid was " << pid << ", status " << sts << endl; } } void MyApp::Setup() { if(*args == NULL) { cerr << "No command to run" << endl; } MainForm = new MyForm(this,"Running Command ..."); MyApp::me = this; struct sigaction sac; sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::reaper; sigaction(SIGCHLD, &sac, NULL); for(int i = 0; i < NSIG; i++) { if(i != SIGQUIT && i != SIGKILL && i != SIGTERM && i != SIGCHLD && i != SIGSTOP && i != SIGCONT && i != SIGTSTP) { sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::plumber; sigaction(i, &sac, NULL); } } MainForm->Setup(); MainForm->Show(); } MyApp *MyApp::me; int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/iotut/iodemo2.cc0000644000000000000000000001121007362644011012372 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // Example to show VDKInputChannel, multiple input streams, // user defined VDKsignals, interaction with Unix signals etc #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include "Socket.h" #include "iodemo2.h" #define MYIOSIGNAL (user_signal+42) DEFINE_SIGNAL_MAP(MyForm,VDKForm) ON_SIGNAL(inp1,INPUT_SIGNAL,DoIO), ON_SIGNAL(text, realize_signal,runcmd), ON_SIGNAL(entry, activate_signal,sendstuff), ON_SIGNAL(timer,timer_tick_signal,Quit), ON_SIGNAL(quit,clicked_signal,Quit) END_SIGNAL_MAP DEFINE_SIGNAL_LIST(MyForm,VDKForm); bool MyForm::sendstuff(VDKObject* obj) { char txt[1024]; char *t; strcpy(txt, entry->GetText()); t = txt+strlen(txt); *t++ = '\n'; *t = 0; sock->Send(txt, (t - txt)); entry->SetText(""); return true; } bool MyForm::CanClose(void) { return Stop(0); } bool MyForm::Stop (VDKObject *obj) { return true; } bool MyForm::DoIO (VDKObject *obj) { VDKInputChannel *ip = static_cast(obj); int res; char buf[1024]; res = sock->Recv (buf, sizeof(buf)); if(res > 0) { text->TextInsert(buf, res); } else { sock->Close(); ShowInfanticide(); ip->Destroy(); } return true; } void MyForm::ShowInfanticide() { SignalEmit("KillSignal"); } bool MyForm::runcmd(VDKObject *obj) { MyApp *a = static_cast(Application()); sock = new Socket(a->args[0], a->args[1]); if(sock->getfd() == -1) { perror("socket"); exit(1); } if(sock->Connect() == -1) { perror("connect"); exit(1); } inp1 = new VDKInputChannel(this, sock->getfd(), GDK_INPUT_READ); text->Clear(); return true; } bool MyForm:: Quit(VDKObject*o) { Application()->Terminate(); return true; } void MyForm::Setup(void) { VDKBox* vbox1 = new VDKBox(this, v_box); VDKFrame* frame1 = new VDKFrame(this, "You type here"); VDKFrame* frame2 = new VDKFrame(this, "Networked friend"); // Just to show user signals .... SignalConnect("KillSignal",&MyForm::Mourn, false); VDKBox* hbox1 = new VDKBox(this, h_box); vbox1->Add(frame1); vbox1->Add(frame2); vbox1->Add(hbox1,c_justify, 0, 0); hbox1->Add((quit = new VDKLabelButton(this,"Quit")), c_justify, 1, 0); entry = new VDKEntry(this, 0); entry->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame1->Add(entry); text = new VDKText(this, 0); text->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame2->Add(text); Add(vbox1); SetSize(500,-1); entry->GrabFocus(); } bool MyForm::Mourn(VDKObject *) { if(timer == 0) { timer = new VDKTimer(this, 30*1000); } text->TextInsert("\nPress Quit to exit(or wait 30 seconds)\n"); return true; } // This is a static member so we can access class members // Somewhat contrived example void MyApp::plumber(int) { cerr << "Broken pipe ... " << endl; } void MyApp::Setup() { if(*(args) == 0 || *(args+1) == 0) { cerr << "Usage iodemo2 tcp|udp host:port|file"; exit(0); } MainForm = new MyForm(this,"iodemo2 ..."); MyApp::me = this; struct sigaction *sac = new struct sigaction; sigemptyset(&(sac->sa_mask)); sac->sa_flags=0; sac->sa_handler = MyApp::plumber; sigaction(SIGPIPE, sac, NULL); MainForm->Setup(); MainForm->Show(); } MyApp *MyApp::me; int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/iotut/Socket.h0000644000000000000000000001157507362644011012144 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include class Socket { private: int fd; int slen; int domain; int type; bool slave; struct sockaddr *name; public: Socket(int f) { } Socket(char *typnam, char *fnam) { slave = 0; name = NULL; domain = (strchr(fnam, ':')) ? AF_INET : AF_UNIX; type = strcmp (typnam,"tcp") ? SOCK_DGRAM : SOCK_STREAM; if((fd = socket(domain, type, 0)) != -1) { if(domain == AF_UNIX) { name = (struct sockaddr*) new struct sockaddr_un; ((struct sockaddr_un*)name)->sun_family=AF_UNIX; strcpy (((struct sockaddr_un*)name)->sun_path, fnam); slen = SUN_LEN(((struct sockaddr_un*)name)); } else { char *p; if((p = strchr(fnam, ':'))) { short port; char hnam[256]; struct hostent *h; port = (short) strtol(p+1, 0, 10); if(p == fnam) { gethostname(hnam, sizeof (hnam)); } else { int n; n = p-fnam; strncpy(hnam, fnam, n); *(hnam+n) = 0; } if ((h = gethostbyname (hnam)) != NULL) { if(port == 0) { struct servent *s; s = getservbyname(p+1, typnam); if(s) { port = ntohs(s->s_port); } } name = (struct sockaddr*) new struct sockaddr_in; ((struct sockaddr_in*)name)->sin_family = h->h_addrtype; ((struct sockaddr_in*)name)->sin_port = htons(port); ((struct sockaddr_in*)name)->sin_addr = *((struct in_addr *) h->h_addr); slen = sizeof(struct sockaddr_in); } else { close(fd); fd = -1; } } } } } int Connect() { int res = connect (fd, name, slen); if(res == 0) slave = 1; return res; } int RecvFrom(char *buf, int len, int flags, struct sockaddr *addr = 0, socklen_t *fromlen = 0) { if(addr && fromlen) { *fromlen = sizeof(struct sockaddr); } return recvfrom(fd, buf, len, flags, addr, fromlen); } int Recv(char *buf, int len, int flags=0) { return RecvFrom (buf, len, flags); } int SendTo(char *buf, int len, int flags, struct sockaddr *addr = 0, socklen_t tolen = 0) { if(addr) { if(domain == AF_UNIX) { tolen = SUN_LEN(((struct sockaddr_un*)name)); } else { tolen = sizeof(struct sockaddr_in); } } else tolen = 0; return sendto (fd, buf, len, flags, addr, tolen); } int Send(char *buf, int len, int flags=0) { return SendTo(buf, len, flags); } void Close() { close(fd); fd = -1; if(!slave && domain == AF_UNIX) { unlink(((struct sockaddr_un*)name)->sun_path); } } ~Socket() { if(fd != -1) Close(); delete name; } inline bool isslave(void) { return slave;} inline int getfd (void) { return fd; } }; vdk-2.4.0/example/iotut/helper1.c0000644000000000000000000000245107362644011012240 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include #include #include int main(int ac, char **av) { char foo[1024]; int n; while((n = read(0, foo, sizeof(foo))) > 0) { char buff[1024]; sprintf (buff, "%d: %.*s", n-1, n, foo); write(1, buff, strlen(buff)); if(strncasecmp(foo, "quit\n", 5) == 0) break; } kill(getppid(), SIGUSR1); exit(0); } vdk-2.4.0/example/iotut/iodemo-unix.pl0000755000000000000000000000165407362644011013335 #!/usr/bin/perl -w use strict; use IO::Socket; use IO::Select; use IO::Handle; my $rendezvous = shift or die "No socket name"; my ($lsn, $flag, $fh, $buf, $sel, @ready); $SIG{INT} = sub { print "Close on SIGINT\n"; $lsn->close(); unlink $rendezvous; exit() }; sub cleansock($) { my $fh = $_[0]; $sel->remove($fh); $fh->close(); } $lsn = new IO::Socket::UNIX(Listen => 1, Local => $rendezvous, Proto => 'tcp', Type => SOCK_STREAM) or die "bind $!"; $sel = new IO::Select or die "select $!"; $sel->add($lsn); print "Listening\n"; while(@ready = $sel->can_read) { foreach $fh (@ready) { if($fh == $lsn) { my $ns = $fh->accept; $sel->add($ns); print "\nConnect\n"; } else { if($fh->recv($buf, 256, 0), $buf) { $fh->send((length($buf)-1)." -> ".$buf, 0); } else { print "Closed\n"; cleansock($fh); } } } } vdk-2.4.0/example/iotut/iodemo0.h0000644000000000000000000000407307362644520012250 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include "vdk/vdkinchannel.h" #if VDK2 #define VDKLabelButton VDKCustomButton #define VDKText VDKTextView #endif class MyApp: public VDKApplication { protected: static void reaper(int); static void plumber(int); static MyApp *me; public: char **args; MyApp(int* argc, char** argv): VDKApplication(argc,argv), args(argv+1) {} ~MyApp() {} void Setup(); }; class MyForm: public VDKForm { private: VDKLabelButton *quit; VDKText *text; VDKEntry *entry; VDKTimer *timer; pid_t pid; int xmit; bool Quit(VDKObject*); bool runcmd (VDKObject*); bool DoIO (VDKObject*); bool Stop (VDKObject*); bool CanClose(void); bool Mourn(VDKObject*); bool sendstuff(VDKObject*); public: MyForm(VDKApplication* app, gchar* title): VDKForm(app,title), timer(0), pid(0), xmit(-1) , inp1(0){} ~MyForm() { } void Setup(void); inline int Pid() {return pid;} inline void Pid(int p) {pid=p;} inline VDKText * Text() {return text;} void ShowInfanticide(); VDKInputChannel *inp1; DECLARE_SIGNAL_MAP(MyForm); DECLARE_SIGNAL_LIST(MyForm); }; vdk-2.4.0/example/iotut/iodemo1a.cc0000644000000000000000000001412707362644011012544 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ // Example to show VDKInputChannel, multiple input streams, // user defined VDKsignals, interaction with Unix signals etc #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include "iodemo0.h" #define MY_IO_SIG (user_signal+42) DEFINE_SIGNAL_MAP(MyForm,VDKForm) ON_SIGNAL(inp1,INPUT_SIGNAL, DoIO), ON_SIGNAL(text, realize_signal,runcmd), ON_SIGNAL(entry, activate_signal,sendstuff), ON_SIGNAL(timer,timer_tick_signal,Quit), ON_SIGNAL(quit,clicked_signal,Quit) END_SIGNAL_MAP DEFINE_SIGNAL_LIST(MyForm,VDKForm); bool MyForm::sendstuff(VDKObject* obj) { char txt[1024]; char *t; strcpy(txt, entry->GetText()); t = txt+strlen(txt); *t++ = '\n'; *t = 0; if(xmit != -1) { write(xmit, txt, (t - txt)); } entry->SetText(""); return true; } bool MyForm::CanClose(void) { return Stop(0); } bool MyForm::Stop (VDKObject *obj) { if(pid) { kill(pid, SIGTERM); } return true; } bool MyForm::DoIO (VDKObject *obj) { VDKInputChannel *ip = static_cast(obj); int res; char buf[1024]; res = read (ip->getfd(), buf, sizeof(buf)); if(res > 0) { text->TextInsert(buf, res); } if(res == 0 /*|| strncasecmp(buf, "4: quit\n", 5) == 0*/) { close(ip->getfd()); ShowInfanticide(); ip->Destroy(); } return true; } bool MyForm::runcmd(VDKObject *obj) { MyApp *a = static_cast(Application()); int sock[2]; if(access (a->args[0], X_OK) == 0) { socketpair(AF_FILE, SOCK_DGRAM, 0, sock); pid = fork(); switch(pid) { // Child case 0: close(sock[0]); dup2(sock[1], 0); dup2(sock[1], 1); dup2(sock[1], 2); execvp(a->args[0], a->args); _exit(0); break; case -1: break; default: // Parent close(sock[1]); xmit = sock[0]; inp1 = new VDKInputChannel(this,sock[0], GDK_INPUT_READ); text->Clear(); break; } } else { char x[256]; sprintf(x, "Can't execute your program \"%s\"", (a->args[0]) ? a->args[0] : "????"); text->TextInsert(x); SignalEmit("KillSignal"); } return true; } bool MyForm:: Quit(VDKObject*o) { if(pid) { kill(pid, SIGTERM); } Application()->Terminate(); return true; } void MyForm::Setup(void) { VDKBox* vbox1 = new VDKBox(this, v_box); VDKFrame* frame1 = new VDKFrame(this, "You type here"); VDKFrame* frame2 = new VDKFrame(this, "Your forked friend"); // Just to show user signals .... SignalConnect("KillSignal",&MyForm::Mourn, false); VDKBox* hbox1 = new VDKBox(this, h_box); vbox1->Add(frame1); vbox1->Add(frame2); vbox1->Add(hbox1,c_justify, 0, 0); hbox1->Add((quit = new VDKLabelButton(this,"Quit")), c_justify, 1, 0); entry = new VDKEntry(this, 0); entry->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame1->Add(entry); text = new VDKText(this, 0); text->Font = new VDKFont(this, "-*-lucidatypewriter-medium-r-normal-*-*-120-*-*-*-*-iso8859-1"); frame2->Add(text); Add(vbox1); SetSize(500,-1); entry->GrabFocus(); } void MyForm::ShowInfanticide() { SignalEmit("KillSignal"); Pid(0); } bool MyForm::Mourn(VDKObject *) { if(timer == 0) { timer = new VDKTimer(this, 30*1000); } text->TextInsert("\nPress Quit to exit(or wait 30 seconds)\n"); return true; } // This is a static member so we can access class members Somewhat // contrived example In this case, we don't get SIGPIPE but we should // be ready to handle it void MyApp::plumber(int sig) { cerr << "Otherwise unhandled Unix Signal " << sig << endl; } void MyApp::reaper(int) { int sts; int pid; pid = waitpid(-1, &sts, WNOHANG); if(pid == ((MyForm*)MyApp::me->MainForm)->Pid()) { cerr << "-- child dies, pid was " << pid << ", status " << sts << endl; } } void MyApp::Setup() { if(*args == NULL) { cerr << "No command to run" << endl; } MainForm = new MyForm(this,"Running Command ..."); MyApp::me = this; struct sigaction sac; sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::reaper; sigaction(SIGCHLD, &sac, NULL); for(int i = 0; i < NSIG; i++) { if(i != SIGQUIT && i != SIGKILL && i != SIGTERM && i != SIGCHLD && i != SIGSTOP && i != SIGCONT && i != SIGTSTP) { sigemptyset(&(sac.sa_mask)); sac.sa_flags=0; sac.sa_handler = MyApp::plumber; sigaction(i, &sac, NULL); } } MainForm->Setup(); MainForm->Show(); } MyApp *MyApp::me; int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } vdk-2.4.0/example/iotut/iodemo1b.h0000644000000000000000000000403307362644574012420 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include "vdk/vdkinchannel.h" #ifdef VDK2 #define VDKLabelButton VDKCustomButton #define VDKText VDKTextView #endif class MyApp: public VDKApplication { protected: static void reaper(int); static void plumber(int); static MyApp *me; public: char **args; MyApp(int* argc, char** argv): VDKApplication(argc,argv), args(argv+1) {} ~MyApp() {} void Setup(); }; class MyForm: public VDKForm { private: VDKLabelButton *quit; VDKText *text; VDKEntry *entry; VDKTimer *timer; pid_t pid; int xmit; bool Quit(VDKObject*); bool runcmd (VDKObject*); bool DoIO (VDKObject*); bool Stop (VDKObject*); bool CanClose(void); bool Mourn(VDKObject*); bool sendstuff(VDKObject*); public: MyForm(VDKApplication* app, gchar* title): VDKForm(app,title), timer(0), pid(0), xmit(-1) {} ~MyForm() { } void Setup(void); inline int Pid() {return pid;} inline void Pid(int p) {pid=p;} inline VDKText * Text() {return text;} void ShowInfanticide(); DECLARE_SIGNAL_MAP(MyForm); DECLARE_SIGNAL_LIST(MyForm); }; vdk-2.4.0/example/iotut/iodemo2.h0000644000000000000000000000374007362644614012256 /* * Copyright (C) 1999 Jonathan R. Hudson * Developed by Jonathan R. Hudson * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ #include #include #include #include "vdk/vdkinchannel.h" class MyApp: public VDKApplication { protected: static void plumber(int); static MyApp *me; public: char **args; MyApp(int* argc, char** argv): VDKApplication(argc,argv), args(argv+1) {} ~MyApp() {} void Setup(); }; #define IO_NONE 0 #define IO_STDOUT 1 #ifdef VDK2 #define VDKLabelButton VDKCustomButton #define VDKText VDKTextView #endif class MyForm: public VDKForm { private: VDKLabelButton *quit; VDKText *text; VDKEntry *entry; VDKTimer *timer; bool Quit(VDKObject*); bool runcmd (VDKObject*); bool DoIO (VDKObject*); bool Stop (VDKObject*); bool CanClose(void); bool Mourn(VDKObject*); bool sendstuff(VDKObject*); public: MyForm(VDKApplication* app, gchar* title): VDKForm(app,title), timer(0), inp1(0){} ~MyForm() { } void Setup(void); inline VDKText * Text() {return text;} void ShowInfanticide(); VDKInputChannel *inp1; Socket *sock; DECLARE_SIGNAL_MAP(MyForm); DECLARE_SIGNAL_LIST(MyForm); }; vdk-2.4.0/example/template/0000777000000000000000000000000010052401037011252 5vdk-2.4.0/example/template/Makefile0000644000000000000000000000116007362645464012654 ############################### # Makefile for building ./ttest ############################### ####### Compiler, tools and options CC = g++ CFLAGS = -Wall -O2 INCPATH = -I./ `vdk-config-2 --cflags` LINK = g++ LIBS = `vdk-config-2 --libs` ####### Files HEADERS = ttest.h SOURCES = ttest.cc OBJECTS = ttest.o TARGET = ./ttest ####### Implicit rules .SUFFIXES: .cc .cc.o: $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< ####### Build rules all: $(TARGET) $(TARGET): $(OBJECTS) $(LINK) -o $(TARGET) $(OBJECTS) $(LIBS) clean: -rm -f $(OBJECTS) $(TARGET) -rm -f *~ core ####### Compile ttest.o: ttest.cc\ ttest.h vdk-2.4.0/example/template/ttest.cc0000644000000000000000000001057107362645713012671 /* file: ttest.cc */ #include "ttest.h" #include #include #include #define LUNG 5000 static int V[LUNG]; static char buff[128]; typedef VDKBtree intbt; typedef VDKValueList intlist; //////////////////////////////////////// DEFINE_SIGNAL_LIST(BTreeWindow,VDKForm); /////////////////////////////////// int main (int argc, char *argv[]) { MyApp app(&argc, argv); app.Run(); return 0; } ////////////////////////////////// /* */ void BTreeWindow::Setup() { text = new VDKTextView(this); text->Font = new VDKFont(this,"Courier Medium 12"); Add(text); sprintf(buff,"Tests with %d nodes",LUNG); VDKBox* hbox = new VDKBox(this,h_box); hbox->Add(start = new VDKCustomButton(this,buff)); hbox->Add(showsource = new VDKCustomButton(this,"Show source")); hbox->Add(quit = new VDKCustomButton(this,"Quit")); Add(hbox,l_justify,false,false,false); SetUsize(VDKPoint(450,400)); SignalConnect(start,"clicked",&BTreeWindow::Start); SignalConnect(showsource,"clicked",&BTreeWindow::ShowSource); SignalConnect(quit,"clicked",&BTreeWindow::Quit); } /* */ bool BTreeWindow::ShowSource(VDKObject*) { text->Clear(); text->LoadFromFile("ttest.cc"); return true; } /* */ bool BTreeWindow::Start(VDKObject*) { intbt btree; intlist list; // random initialize vector int t; text->Clear(); srand(time(NULL)); text->TextInsert("\n** TEST BEGINS **"); sprintf(buff,"\nRandom initializing %d nodes",LUNG); text->TextInsert(buff); for (t=0;tTextInsert(buff); for (t=0;tTextInsert(buff); // add items to list sprintf(buff,"\nadding %d sorted items to list...",LUNG); text->TextInsert(buff); for (t=0;tTextInsert(buff); // makes an heap using vector text->TextInsert("\nmaking an heap & sorting..."); VDKHeap heap(V,LUNG); heap.Sort(); text->TextInsert("\n\tdone."); // checks tree vs heap // if all tree nodes match heap nodes text->TextInsert("\nchecking tree vs heap..."); // make a btree iterator // iterator begins from lowest key intbt::Iterator iter(btree,BtMinKey); for(t=0; (t < heap.size()) && iter;t++,iter++) { if( (iter.current() != heap[t])) { text->TextInsert("\nbad tree construct"); break; } } // if loop was broken before match not found if(tTextInsert("\n\tbtree test break before end"); else text->TextInsert("\n\tdone, btree and heap match"); // checks list vs heap text->TextInsert("\nchecking list vs heap..."); // makes a list iterator // iterator begins from list head VDKValueListIterator liter(list); for(t=0; (t < heap.size()) && liter;t++,liter++) { if(liter.current() != heap[t] ) { text->TextInsert("\n\tbad list construct"); break; } } if(t < heap.size()) text->TextInsert("\n\tlist test break before end"); else text->TextInsert("\n\tdone, list and heap match"); // test search on Btree text->TextInsert("\nSearch test on btree:"); for(t=0; t < heap.size() ;t++) { if(! btree.find(heap[t]) ) break; } if(t < heap.size()) text->TextInsert("\n\ttest break before end"); else text->TextInsert("\n\tdone, test ok"); // tests search on List text->TextInsert("\nSearch test on list:"); for(t=0; t < heap.size();t++) { if(! list.find(heap[t]) ) break; } if(t < heap.size()) text->TextInsert("\n\ttest break before end"); else text->TextInsert("\n\tdone, test ok"); // removes all keys from Btree text->TextInsert("\nRemoving all nodes from btree:"); for(t=0; t < heap.size();t++) btree.unlink(heap[t]); // should be 0 sprintf(buff,"\n\ttree size:%d",btree.size()); text->TextInsert(buff); // removes all keys from list text->TextInsert("\nRemoving all items from list:"); for(t=0; t < heap.size();t++) { // finds heap[t] ordinal position into list int pos = list.at(heap[t]); // if at() fails returns -1 if(pos >= 0) list.unlink(pos); } sprintf(buff,"\n\tlist size:%d",list.size()); text->TextInsert(buff); text->TextInsert("\n** TEST END **"); return true; } vdk-2.4.0/example/template/ttest.h0000644000000000000000000000133207362645516012527 /* file: ttest.h List, Heap and Btree template classes test */ #include /* */ class BTreeWindow: public VDKForm { VDKTextView *text; VDKCustomButton *start,*quit,*showsource; public: BTreeWindow(VDKApplication* owner): VDKForm(owner,"Sorted lists,Btrees and Heaps example") {} ~BTreeWindow() { } void Setup(); bool Start(VDKObject*); bool Quit(VDKObject*) { Close(); return true;} bool ShowSource(VDKObject*); DECLARE_SIGNAL_LIST(BTreeWindow); }; /* */ class MyApp: public VDKApplication { public: MyApp(int* argc, char** argv): VDKApplication(argc,argv) {} ~MyApp() {} void Setup() { MainForm = new BTreeWindow(this); MainForm->Setup(); MainForm->Show(); } }; vdk-2.4.0/example/Makefile.in0000644000000000000000000003343110052331516011430 # Makefile.in generated by automake 1.7.8 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ GNOMEDEFINE = @GNOMEDEFINE@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GNOME_VDK = @GNOME_VDK@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_VDK_AGE = @LT_VDK_AGE@ LT_VDK_CURRENT = @LT_VDK_CURRENT@ LT_VDK_RELEASE = @LT_VDK_RELEASE@ LT_VDK_REVISION = @LT_VDK_REVISION@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIGCDEFINE = @SIGCDEFINE@ SIGC_CFLAGS = @SIGC_CFLAGS@ SIGC_LIBS = @SIGC_LIBS@ STRIP = @STRIP@ TAG_SIGC = @TAG_SIGC@ TESTSIGCVDK = @TESTSIGCVDK@ TESTVDK = @TESTVDK@ VDK_RELEASE_DATE = @VDK_RELEASE_DATE@ VDK_VERSION = @VDK_VERSION@ VDK_VERSION_MAJOR = @VDK_VERSION_MAJOR@ VDK_VERSION_MICRO = @VDK_VERSION_MICRO@ VDK_VERSION_MINOR = @VDK_VERSION_MINOR@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ SUBDIRS = . EXTRA_DIST = \ hello/Makefile \ hello/hello.cc \ hello/hello2.cc \ hello/hello3.cc \ hello/kill.xpm \ template/Makefile \ template/ttest.cc \ template/ttest.h\ iotut/Makefile\ iotut/helper0.c\ iotut/iodemo-inet.pl*\ iotut/iodemo0.cc\ iotut/iodemo1.cc\ iotut/iodemo1b.cc\ iotut/iodemo2.cc\ iotut/Socket.h\ iotut/helper1.c\ iotut/iodemo-unix.pl*\ iotut/iodemo0.h\ iotut/iodemo1a.cc\ iotut/iodemo1b.h\ iotut/iodemo2.h\ childtask/vdkchildtask.cc\ childtask/vdkchildtask.h subdir = example ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = DIST_SOURCES = RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \ ps-recursive install-info-recursive uninstall-info-recursive \ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive DIST_COMMON = $(srcdir)/Makefile.in Makefile.am DIST_SUBDIRS = $(SUBDIRS) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu example/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: # 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): @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS 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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if (etags --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ else \ include_option=--include; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && \ tags="$$tags $$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; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) $(mkinstalldirs) $(distdir)/childtask $(distdir)/hello $(distdir)/iotut $(distdir)/template @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" \ distdir=../$(distdir)/$$subdir \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \ clean-generic clean-libtool clean-recursive ctags \ ctags-recursive distclean distclean-generic distclean-libtool \ distclean-recursive distclean-tags distdir dvi dvi-am \ dvi-recursive info info-am info-recursive install install-am \ install-data install-data-am install-data-recursive \ install-exec install-exec-am install-exec-recursive \ install-info install-info-am install-info-recursive install-man \ install-recursive install-strip installcheck installcheck-am \ installdirs installdirs-am installdirs-recursive \ maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am \ pdf-recursive ps ps-am ps-recursive tags tags-recursive \ uninstall uninstall-am uninstall-info-am \ uninstall-info-recursive uninstall-recursive # 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: vdk-2.4.0/example/Makefile.am0000644000000000000000000000077007435477071011441 SUBDIRS = . EXTRA_DIST = \ hello/Makefile \ hello/hello.cc \ hello/hello2.cc \ hello/hello3.cc \ hello/kill.xpm \ template/Makefile \ template/ttest.cc \ template/ttest.h\ iotut/Makefile\ iotut/helper0.c\ iotut/iodemo-inet.pl*\ iotut/iodemo0.cc\ iotut/iodemo1.cc\ iotut/iodemo1b.cc\ iotut/iodemo2.cc\ iotut/Socket.h\ iotut/helper1.c\ iotut/iodemo-unix.pl*\ iotut/iodemo0.h\ iotut/iodemo1a.cc\ iotut/iodemo1b.h\ iotut/iodemo2.h\ childtask/vdkchildtask.cc\ childtask/vdkchildtask.h vdk-2.4.0/sigcvdktest/0000777000000000000000000000000010052401037010336 5vdk-2.4.0/sigcvdktest/Makefile.in0000644000000000000000000003532610052331516012334 # Makefile.in generated by automake 1.7.8 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 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@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ 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 = : host_triplet = @host@ ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DOXYGEN = @DOXYGEN@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GENERATE_HTML = @GENERATE_HTML@ GENERATE_LATEX = @GENERATE_LATEX@ GENERATE_MAN = @GENERATE_MAN@ GNOMEDEFINE = @GNOMEDEFINE@ GNOME_CFLAGS = @GNOME_CFLAGS@ GNOME_LIBS = @GNOME_LIBS@ GNOME_VDK = @GNOME_VDK@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INCLUDES = -I$(top_srcdir)/include @INCLUDES@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_VDK_AGE = @LT_VDK_AGE@ LT_VDK_CURRENT = @LT_VDK_CURRENT@ LT_VDK_RELEASE = @LT_VDK_RELEASE@ LT_VDK_REVISION = @LT_VDK_REVISION@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIGCDEFINE = @SIGCDEFINE@ SIGC_CFLAGS = @SIGC_CFLAGS@ SIGC_LIBS = @SIGC_LIBS@ STRIP = @STRIP@ TAG_SIGC = @TAG_SIGC@ TESTSIGCVDK = @TESTSIGCVDK@ TESTVDK = @TESTVDK@ VDK_RELEASE_DATE = @VDK_RELEASE_DATE@ VDK_VERSION = @VDK_VERSION@ VDK_VERSION_MAJOR = @VDK_VERSION_MAJOR@ VDK_VERSION_MICRO = @VDK_VERSION_MICRO@ VDK_VERSION_MINOR = @VDK_VERSION_MINOR@ VERSION = @VERSION@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ noinst_PROGRAMS = @TESTSIGCVDK@ EXTRA_PROGRAMS = testsigcvdk props_test testsigcvdk_LDFLAGS = $(GTK_LIBS) $(SIGC_LIBS) testsigcvdk_LDADD = $(top_srcdir)/vdk/libvdk.la testsigcvdk_SOURCES = \ testclasses.h \ testclasses.cc \ testbase.cc\ eventtestbox.h\ eventtestbox.cc props_test_SOURCES = props_test.cc props_test_LDFLAGS = $(SIGC_LIBS) $(GTK_LIBS) props_test_LDADD = $(top_srcdir)/vdk/libvdk.la subdir = sigcvdktest ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = EXTRA_PROGRAMS = testsigcvdk$(EXEEXT) props_test$(EXEEXT) noinst_PROGRAMS = @TESTSIGCVDK@ PROGRAMS = $(noinst_PROGRAMS) am_props_test_OBJECTS = props_test.$(OBJEXT) props_test_OBJECTS = $(am_props_test_OBJECTS) props_test_DEPENDENCIES = $(top_srcdir)/vdk/libvdk.la am_testsigcvdk_OBJECTS = testclasses.$(OBJEXT) testbase.$(OBJEXT) \ eventtestbox.$(OBJEXT) testsigcvdk_OBJECTS = $(am_testsigcvdk_OBJECTS) testsigcvdk_DEPENDENCIES = $(top_srcdir)/vdk/libvdk.la DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/eventtestbox.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/props_test.Po ./$(DEPDIR)/testbase.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/testclasses.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ DIST_SOURCES = $(props_test_SOURCES) $(testsigcvdk_SOURCES) DIST_COMMON = $(srcdir)/Makefile.in Makefile.am SOURCES = $(props_test_SOURCES) $(testsigcvdk_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu sigcvdktest/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done props_test$(EXEEXT): $(props_test_OBJECTS) $(props_test_DEPENDENCIES) @rm -f props_test$(EXEEXT) $(CXXLINK) $(props_test_LDFLAGS) $(props_test_OBJECTS) $(props_test_LDADD) $(LIBS) testsigcvdk$(EXEEXT): $(testsigcvdk_OBJECTS) $(testsigcvdk_DEPENDENCIES) @rm -f testsigcvdk$(EXEEXT) $(CXXLINK) $(testsigcvdk_LDFLAGS) $(testsigcvdk_OBJECTS) $(testsigcvdk_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventtestbox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/props_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testbase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testclasses.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .cc.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` .cc.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCXX_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \ @am__fastdepCXX_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCXX_TRUE@ fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS 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; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ 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; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = .. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$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_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \ pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am clean: -rm *~ \# # 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: vdk-2.4.0/sigcvdktest/Makefile.am0000644000000000000000000000075207211015211012310 noinst_PROGRAMS= @TESTSIGCVDK@ EXTRA_PROGRAMS = testsigcvdk props_test INCLUDES = -I$(top_srcdir)/include @INCLUDES@ CXXFLAGS = @CXXFLAGS@ testsigcvdk_LDFLAGS = $(GTK_LIBS) $(SIGC_LIBS) testsigcvdk_LDADD = $(top_srcdir)/vdk/libvdk.la testsigcvdk_SOURCES = \ testclasses.h \ testclasses.cc \ testbase.cc\ eventtestbox.h\ eventtestbox.cc props_test_SOURCES=props_test.cc props_test_LDFLAGS=$(SIGC_LIBS) $(GTK_LIBS) props_test_LDADD= $(top_srcdir)/vdk/libvdk.la clean: -rm *~ \# vdk-2.4.0/sigcvdktest/props_test.cc0000644000000000000000000000313207315525443013002 #include #include class TestProp { public: TestProp(char* val) : prop1("property 1", this, 0), prop2("property 2", this, "Defaultvalue for property"), prop3("property 3", this, val) {} VDKReadWriteValueProp prop1; VDKReadWriteValueProp prop2; VDKReadWriteValueProp prop3; }; void report_prop1(int x){ cout << "Property changed to: " << x << endl; } void report_prop2(const char* str){ cout << "Property changed to: " << str << endl; } int main(int argc, char** argv) { <<<<<<< props_test.cc char* val=new char [sizeof("HALLO")]; strcpy(val,"HALLO"); TestProp obj(val); int works=obj.prop1.Value(); // char* wont_work=obj.prop2.Value(); char * back_door=obj.prop3.Value(); // back_door[0]='_'; cout << back_door << endl; ======= TestProp obj; #define TEST_CONST_CAST 0 #if TEST_CONST_CAST // If the following line works, something is wrong, // compiler should abort with '..lacks a cast'. char* back_door=obj.prop3.Value(); back_door[0]="_"; #endif >>>>>>> 1.4 cout << "Object initial state: " << endl << "Prop 1: " << obj.prop1.Value() << endl << "prop 2: " << obj.prop2.Value() << endl << "Prop 3: " << obj.prop3.Value() << endl; obj.prop1.OnValueChanged.connect(slot(report_prop1)); obj.prop2.OnValueChanged.connect(slot(report_prop2)); obj.prop1=1; obj.prop2="Changed Prop"; cout << "You should have changes made to the props"; return 1; } vdk-2.4.0/sigcvdktest/testclasses.h0000644000000000000000000000654407211015212012770 // -*- c++ -*- #ifndef _testclasses_h_ #define _testclasses_h_ #include /* -*- c++ -*- */ /** Each of these classes will watch a corresponding vdkobject. That means, it will subsrcibe for all of its signals, translate them to a string and finaly emit the OnMesg-Signal with this string. Overview: VDKObjectTest | + VDKAbstractButtonTest | + VDKCheckButtonTest | \ VDKToggleButtonTest | + VDKComboTest | + VDKCustomTest | + VDKCustomListTest | \ VDKCustomTreeTest | + VDKGrid ( currently not in vdk2-series ) + VDKNotebook + VDKSlider + VDKSpinButtonTest */ class VDKObjectTest : public SigC::Object { protected: char* _classname; public: VDKObjectTest(VDKObject*); VDKSignal1 OnMesg; private: void onkeypress_response(VDKObject* obj, char* key); void onkeyrelease_response(VDKObject* obj, char* key); }; /* class VDKAbstractButtonTest : public VDKObjectTest { public: VDKAbstractButtonTest(VDKAbstractButton*); private: void onbtnclicked_resp(VDKObject* obj); void onbtnpressed_resp(VDKObject* obj); void onbtnleave_resp(VDKObject*); }; class VDKCheckButtonTest : public VDKAbstractButtonTest { public: VDKCheckButtonTest(VDKCheckButton*); private: void onbtntog_resp(VDKObject*, bool); }; class VDKToggleButtonTest : public VDKAbstractButtonTest { public: VDKToggleButtonTest(VDKToggleButton*); private: void onbtntog_resp(VDKObject*, bool); }; */ class VDKSpinButtonTest : public VDKObjectTest { public: VDKSpinButtonTest(VDKSpinButton*); private: void onvaluechanged(VDKObject*, float); }; class VDKCustomTest : public VDKObjectTest { public: VDKCustomTest(VDKCustom*); private: void oncolumnclick(VDKObject*, int); }; class VDKCustomListTest : public VDKCustomTest { public: VDKCustomListTest(VDKCustomList*); private: void onrowselect(VDKObject*,int, int); void onrowunselect(VDKObject*,int, int); void onrowmove(VDKObject*,int,int); /* void onrowinsert(VDKObject*,int, const char**); */ /* void onrowremove(VDKObject*,int); */ }; class VDKCustomTreeTest : public VDKCustomTest { public: VDKCustomTreeTest(VDKCustomTree*); private: void onnodeselect(VDKObject*, VDKTreeNode, int); void onnodeunselect(VDKObject*, VDKTreeNode, int); void ontreemove(VDKObject*, VDKTreeNode, VDKTreeNode, VDKTreeNode); }; class VDKComboTest : public VDKObjectTest { public: VDKComboTest(VDKCombo*); private: void onitemactivate(VDKObject*,int item); void onitemselect(VDKObject*,int item); void onitemunselect(VDKObject*, int item); void onitemtextchanged(VDKObject*, int item, const char* text); }; class VDKSliderTest : public VDKObjectTest { public: VDKSliderTest(VDKSlider*); private: void onvaluechanged(VDKObject*, float value); }; /* class VDKGridTest : public VDKObjectTest { public: VDKGridTest(VDKGrid*); private: void oncellselect(VDKObject*, int, int); void oncellunselect(VDKObject*, int, int); void oncellchanged(VDKObject*, int, int); void onrowselect(VDKObject*, int); void oncolselect(VDKObject*, int); }; */ class VDKNotebookTest : public VDKObjectTest { public: VDKNotebookTest(VDKNotebook*); private: void onpageswitch(VDKObject*, int); }; #endif vdk-2.4.0/sigcvdktest/testclasses.cc0000644000000000000000000002677107337124607013154 #include extern "C" { # include # include } /* VDKObjectTest */ VDKObjectTest::VDKObjectTest(VDKObject* obj) { _classname="VDKObject"; obj->SetTip(_classname); } void VDKObjectTest::onkeypress_response(VDKObject* obj, char* key) { char mesg[256]; sprintf(mesg,"%s\t OnKeyPress: %s\n", _classname, key); OnMesg(obj, mesg); } void VDKObjectTest::onkeyrelease_response(VDKObject* obj, char* key) { char mesg[256]; sprintf(mesg,"%s\t OnKeyRelease: %s\n", _classname, key); OnMesg(obj, mesg); } // /* VDKAbstractButtonTest */ // VDKAbstractButtonTest::VDKAbstractButtonTest(VDKAbstractButton* obj) // : VDKObjectTest(obj) // { // _classname="VDKAbstractButton"; // obj->OnButtonPressed.connect(slot(*this, // &VDKAbstractButtonTest::onbtnpressed_resp)); // obj->OnButtonLeave.connect(slot(*this, // &VDKAbstractButtonTest::onbtnleave_resp)); // obj->OnButtonClicked.connect(slot(*this, // &VDKAbstractButtonTest::onbtnclicked_resp)); // obj->SetTip(_classname); // } // void // VDKAbstractButtonTest::onbtnclicked_resp(VDKObject* obj) // { // char mesg[256]; // sprintf(mesg,"%s\t OnButtonClicked\n", _classname); // OnMesg(obj, mesg); // } // void // VDKAbstractButtonTest::onbtnpressed_resp(VDKObject* obj) // { // char mesg[256]; // sprintf(mesg,"%s\t OnButtonPressed\n", _classname); // OnMesg(obj, mesg); // } // void // VDKAbstractButtonTest::onbtnleave_resp(VDKObject* obj) // { // char mesg[256]; // sprintf(mesg,"%s\t OnButtonLeave\n", _classname); // OnMesg(obj, mesg); // } // /* VDKCheckButtonTest */ // VDKCheckButtonTest::VDKCheckButtonTest(VDKCheckButton* obj) // : VDKAbstractButtonTest(obj) // { // _classname="VDKCheckButton"; // obj->OnButtonToggled.connect(slot(*this, // &VDKCheckButtonTest::onbtntog_resp)); // obj->SetTip(_classname); // } // void // VDKCheckButtonTest::onbtntog_resp(VDKObject* obj, bool state) // { // char mesg[256]; // if(state) // sprintf(mesg,"%s\t OnButtonToggled: true\n", _classname); // else // sprintf(mesg,"%s\t OnButtonToggled: false\n", _classname); // OnMesg(obj, mesg); // } // /* VDKToggleButtonTest */ // VDKToggleButtonTest::VDKToggleButtonTest(VDKToggleButton* obj) // : VDKAbstractButtonTest(obj) // { // _classname="VDKToggleButton"; // obj->OnButtonToggled.connect(slot(*this, // &VDKToggleButtonTest::onbtntog_resp)); // obj->SetTip(_classname); // } // void // VDKToggleButtonTest::onbtntog_resp(VDKObject* obj, bool state) // { // char mesg[256]; // if(state) // sprintf(mesg ,"%s\t OnButtonToggled: true\n", _classname); // else // sprintf(mesg ,"%s\t OnButtonToggled: false\n", _classname); // OnMesg(obj, mesg); // } /* VDKSpinButtonTest */ VDKSpinButtonTest::VDKSpinButtonTest(VDKSpinButton* obj) : VDKObjectTest(obj) { _classname="VDKSpinButton"; obj->OnSpinValueChanged.connect(slot(*this, &VDKSpinButtonTest::onvaluechanged)); obj->SetTip(_classname); } void VDKSpinButtonTest::onvaluechanged(VDKObject* obj, float val) { char mesg[256]; sprintf(mesg,"%s\t OnSpinValueChanged %f\n", _classname, val); OnMesg(obj, mesg); } /* VDKCustomTest */ VDKCustomTest::VDKCustomTest(VDKCustom* obj) : VDKObjectTest(obj) { _classname="VDKCustom"; obj->OnColumnClick.connect(slot(*this, &VDKCustomTest::oncolumnclick)); obj->SetTip(_classname); } void VDKCustomTest::oncolumnclick(VDKObject* obj, int col) { char mesg[256]; sprintf(mesg, "%s\t OnColumnClicked %i\n", _classname, col); OnMesg(obj, mesg); } /* VDKCustomListTest */ VDKCustomListTest::VDKCustomListTest(VDKCustomList* obj) : VDKCustomTest(obj) { _classname="VDKCustomList"; char* r1[4]={"Dies","ist","der", "Text"}; char* r2[4]={"This","is","the","text"}; char* r3[4]={"Tri","Tra","Tru","Lala"}; obj->AddRow(r1); obj->AddRow(r2); obj->AddRow(r3); obj->OnRowSelect.connect(slot(*this, &VDKCustomListTest::onrowselect)); obj->OnRowUnselect.connect(slot(*this, &VDKCustomListTest::onrowunselect)); // obj->OnRowRemove.connect(slot(*this, // &VDKCustomListTest::onrowremove)); // obj->OnRowInsert.connect(slot(*this, // &VDKCustomListTest::onrowinsert)); obj->OnRowMove.connect(slot(*this, &VDKCustomListTest::onrowmove)); obj->SetTip(_classname); } void VDKCustomListTest::onrowselect(VDKObject* obj, int row, int col) { char mesg[256]; sprintf(mesg,"%s\t OnRowSelect: Row=%i, Column=%i\n", _classname, row, col); OnMesg(obj,mesg); } void VDKCustomListTest::onrowunselect(VDKObject* obj, int row, int col) { char mesg[256]; sprintf(mesg,"%s\t OnRowUnselect: Row=%i, Column=%i\n", _classname, row, col); OnMesg(obj, mesg); } // void // VDKCustomListTest::onrowremove(VDKObject* obj, int row) // { // char mesg[256]; // sprintf(mesg,"%s\t OnRowRemove: Row=%i\n", // _classname, row); // OnMesg(obj, mesg); // } // void // VDKCustomListTest::onrowinsert(VDKObject* obj, int row, const char** titles) // { // char mesg[256]; // sprintf(mesg,"%s\t OnRowInsert: Row:%i\n", // Noch nicht fertig // _classname, row); // OnMesg(obj, mesg); // } void VDKCustomListTest::onrowmove(VDKObject* obj, int from, int to) { char mesg[256]; sprintf(mesg,"%s\t OnRowMove: From: %i To; %i\n", _classname, from, to); OnMesg(obj, mesg); } /* VDKCustomTreeTest */ VDKCustomTreeTest::VDKCustomTreeTest(VDKCustomTree* obj) : VDKCustomTest(obj) { _classname="VDKCustomTreeTest"; char* nname1[1]={"Node 1"}; char* nname2[1]={"Node 2"}; char* nname3[1]={"Node 3"}; char* nname4[1]={"Node 4"}; char* nname5[1]={"Node 5"}; char* nname1_1[1]={"Node 1.1"}; char* nname2_1[1]={"Node 2.1"}; char* nname3_1[1]={"Node 3.1"}; char* nname3_2[1]={"Node 3.1.1"}; obj->AddNode(nname1_1,obj->AddNode(nname1,NULL)); obj->AddNode(nname2_1,obj->AddNode(nname2,NULL)); obj->AddNode(nname3_2, obj->AddNode(nname3_1, obj->AddNode(nname3, NULL))); // is_lisp? ;) obj->AddNode(nname4,NULL); obj->AddNode(nname5,NULL); obj->OnNodeSelect.connect(slot(*this, &VDKCustomTreeTest::onnodeselect)); obj->OnNodeUnselect.connect(slot(*this, &VDKCustomTreeTest::onnodeunselect)); obj->OnTreeMove.connect(slot(*this, &VDKCustomTreeTest::ontreemove)); obj->SetTip(_classname); } void VDKCustomTreeTest::onnodeselect(VDKObject* obj, VDKTreeNode node, int col) { char mesg[256]; sprintf(mesg, "%s\t OnNodeSelect: Node: %s, Col: %i\n", _classname, reinterpret_cast(obj)->Key(node), col); OnMesg(obj, mesg); } void VDKCustomTreeTest::onnodeunselect(VDKObject* obj, VDKTreeNode node, int col) { char mesg[256]; sprintf(mesg, "%s\t OnNodeUnselect: Node: %s, Col: %i\n", _classname, reinterpret_cast(obj)->Key(node), col); OnMesg(obj, mesg); } void VDKCustomTreeTest::ontreemove(VDKObject* obj, VDKTreeNode node, VDKTreeNode parent, VDKTreeNode sibling) { char mesg[256]; sprintf(mesg, "%s\t OnTreeMove:\n", _classname); OnMesg(obj, mesg); } /* VDKComboTest */ VDKComboTest::VDKComboTest(VDKCombo* obj) : VDKObjectTest(obj) { _classname="VDKCombo"; StringList sl = obj->PopdownStrings; sl.add(VDKString("Item 0")); sl.add(VDKString("Item 1")); sl.add(VDKString("Item 2")); sl.add(VDKString("Item 3")); sl.add(VDKString("Item 4")); sl.add(VDKString("Item 5")); obj->PopdownStrings=sl; obj->OnItemSelect.connect(slot(*this, &VDKComboTest::onitemselect)); obj->OnItemUnselect.connect(slot(*this, &VDKComboTest::onitemunselect)); obj->OnItemActivate.connect(slot(*this, &VDKComboTest::onitemactivate)); obj->OnItemTextChanged.connect(slot(*this, &VDKComboTest::onitemtextchanged)); obj->SetTip(_classname); } void VDKComboTest::onitemselect(VDKObject* obj, int item) { char mesg[256]; // gtk-signale abkoppeln im Destruktor!!! if(item >= 0){ sprintf(mesg,"%s \n\t OnItemSelect: %i (%s)\n", _classname, item, (char*) (((VDKCombo*) obj)->GetPopdownStrings()[item])); OnMesg(obj, mesg); } } void VDKComboTest::onitemunselect(VDKObject* obj, int item) { char mesg[256]; if(item >= 0){ sprintf(mesg,"%s \n\t OnItemUnselect: %i (%s)\n", _classname, item, (char*)(((VDKCombo*) obj)->GetPopdownStrings()[item])); OnMesg(obj, mesg); } } void VDKComboTest::onitemactivate(VDKObject* obj, int item) { char mesg[256]; if(item >= 0){ sprintf(mesg,"%s \n\t OnItemActviate: %i (%s)\n", _classname, item, (char*) (((VDKCombo*) obj)->GetPopdownStrings()[item])); OnMesg(obj, mesg); } } void VDKComboTest::onitemtextchanged(VDKObject* obj, int item, const char* text) { char mesg[256]; sprintf(mesg, "%s \n\t OnItemTextChanged : %i, %s\n", _classname, item, text); OnMesg(obj, mesg); } /* VDKSliderTest */ VDKSliderTest::VDKSliderTest(VDKSlider* obj) : VDKObjectTest(obj) { _classname="VDKSlider"; obj->OnSliderValueChanged.connect(slot(*this, &VDKSliderTest::onvaluechanged)); obj->SetTip(_classname); } void VDKSliderTest::onvaluechanged(VDKObject* obj, float val) { char mesg[256]; sprintf(mesg,"%s\t OnValueChanged: %f\n", _classname, val); OnMesg(obj, mesg); } /* VDKGridTest */ /* VDKGridTest::VDKGridTest(VDKGrid* obj) : VDKObjectTest(obj) { _classname="VDKGrid"; obj->OnCellSelect.connect(slot(*this, &VDKGridTest::oncellselect)); obj->OnCellUnselect.connect(slot(*this, &VDKGridTest::oncellunselect)); obj->OnCellChanged.connect(slot(*this, &VDKGridTest::oncellchanged)); obj->OnRowSelect.connect(slot(*this, &VDKGridTest::onrowselect)); obj->OnColSelect.connect(slot(*this, &VDKGridTest::oncolselect)); obj->SetTip(_classname); } void VDKGridTest::oncellselect(VDKObject* obj, int r, int c){ char mesg[256]; sprintf(mesg,"%s\t OnCellSelect: (%i,%i)\n", _classname, r, c); OnMesg(obj,mesg); } void VDKGridTest::oncellunselect(VDKObject* obj, int r, int c){ char mesg[256]; sprintf(mesg,"%s\t OnCellUnelect: (%i,%i)\n", _classname, r, c); OnMesg(obj,mesg); } void VDKGridTest::oncellchanged(VDKObject* obj, int r, int c){ char mesg[256]; sprintf(mesg,"%s\t OnCellChanged: (%i,%i)\n", _classname, r, c); OnMesg(obj,mesg); } void VDKGridTest::onrowselect(VDKObject* obj, int v){ char mesg[256]; sprintf(mesg,"%s\t OnRowSelect: (%i)\n", _classname, v); OnMesg(obj,mesg); } void VDKGridTest::oncolselect(VDKObject* obj, int v){ char mesg[256]; sprintf(mesg,"%s\t OnColSelect: (%i)\n", _classname, v); OnMesg(obj,mesg); } */ /* VDKNotebookTest */ VDKNotebookTest::VDKNotebookTest(VDKNotebook* obj) : VDKObjectTest(obj) { _classname="VDKNotebook"; obj->OnPageSwitch.connect(slot(*this, &VDKNotebookTest::onpageswitch)); obj->SetTip(_classname); } void VDKNotebookTest::onpageswitch(VDKObject* obj, int pnum){ char mesg[256]; sprintf(mesg,"%s\t OnPageSwitch: %i\n", _classname, pnum); OnMesg(obj,mesg); } vdk-2.4.0/sigcvdktest/testbase.cc0000644000000000000000000000771007337124607012421 #include #include #include #include class TestForm : public VDKForm { private: void mesg_handler(VDKObject*, const char*); VDKBox* hbox1; VDKBox* hbox2; VDKBox* hbox3; // VDKToggleButton* tbtn; // VDKToggleButtonTest* tbtntest; // VDKCheckButton* cbtn; // VDKCheckButtonTest* cbtntest; VDKSpinButton* spbtn; VDKSpinButtonTest* spbtntest; VDKCustomList* clist; VDKCustomListTest* clisttest; VDKCustomTree* ctree; VDKCustomTreeTest* ctreetest; VDKCombo* combo; VDKComboTest* combotest; VDKSlider* slider; VDKSliderTest* slidertest; /* VDKGrid* grid; VDKGridTest* gridtest; */ VDKNotebook* notebook; VDKNotebookTest* notebooktest; EventTestBox* eventbox; public: TestForm(VDKApplication* app) : VDKForm(app) {} ~TestForm() { // delete tbtntest; // delete cbtntest; delete spbtntest; delete clisttest; delete ctreetest; delete combotest; delete slidertest; } void Setup(); }; class TestApp : public VDKApplication { public: TestApp(int* argc, char** argv) : VDKApplication(argc, argv) {} ~TestApp(){}; void Setup() { MainForm=new TestForm(this); MainForm->Setup(); MainForm->Show(); } }; void TestForm::Setup() { SetTitle("VDK test for sigc++-extension"); hbox1=new VDKBox(this, h_box); hbox2=new VDKBox(this, h_box); hbox3=new VDKBox(this, h_box); Add(hbox1); Add(hbox2); Add(hbox3); // tbtn=new VDKToggleButton(this); // tbtntest=new VDKToggleButtonTest(tbtn); // hbox1->Add(tbtn); // tbtntest->OnMesg.connect(slot(*this, // &TestForm::mesg_handler)); // cbtn=new VDKCheckButton(this); // cbtntest=new VDKCheckButtonTest(cbtn); // hbox1->Add(cbtn); // cbtntest->OnMesg.connect(slot(*this, // &TestForm::mesg_handler)); spbtn=new VDKSpinButton(this, 5, 0, 10, 1,0); spbtntest=new VDKSpinButtonTest(spbtn); hbox1->Add(spbtn); spbtntest->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); notebook=new VDKNotebook(this); notebooktest=new VDKNotebookTest(notebook); hbox2->Add(notebook); notebooktest->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); char* titles[4]={"1. word", "2. word", "3. word", "4. word"}; clist=new VDKCustomList(this, 4, titles); clisttest=new VDKCustomListTest(clist); notebook->AddPage(clist,"VDKCustomList"); clisttest->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); char* titles2[1]={"VDKCustomTree"}; ctree=new VDKCustomTree(this,1,titles2); ctreetest=new VDKCustomTreeTest(ctree); notebook->AddPage(ctree,"VDKCustomTree"); ctreetest->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); combo=new VDKCombo(this); combotest=new VDKComboTest(combo); hbox1->Add(combo); combotest->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); slider=new VDKSlider(this, 5, 0, 10, 1); slidertest=new VDKSliderTest(slider); hbox1->Add(slider); slidertest->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); /* grid=new VDKGrid(this,10,10,true); gridtest=new VDKGridTest(grid); VDKScrolled* gridcontainer_h=new VDKScrolled(this, h_box); notebook->AddPage(gridcontainer_h,"VDKGrid"); gridcontainer_h->AddWithViewport(grid); gridtest->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); */ eventbox=new EventTestBox(this); Add(eventbox); eventbox->OnMesg.connect(slot(*this, &TestForm::mesg_handler)); } void TestForm::mesg_handler(VDKObject* obj, const char* mesg) { std::cout << mesg ; } int main(int argc, char** argv) { TestApp app(&argc, argv); std::cout << "VDKObject" << sizeof(VDKObject) << std::endl; app.Run(); return 0; } vdk-2.4.0/sigcvdktest/eventtestbox.h0000644000000000000000000000462107211015212013157 /* -*- c++ -*- */ #ifndef _eventtestbox_h_ #define _eventtestbox_h_ #include /* Widget for monitoring events This widget consists of three elements: A pane receiving the events, an array of indicators, showing what event occured and an array of checkbuttons to specify what events looking for. */ class EventTestBox : public VDKBox { private: VDKRgb _bp_color; VDKRgb _br_color; VDKRgb _kp_color; VDKRgb _kr_color; VDKRgb _mk_color; VDKRgb _mp_color; VDKRgb _rp_color; VDKRgb _cl_color; VDKCanvas* _event_area; VDKEntry* _any_entry; VDKCheckButton* _mk_btn; VDKCheckButton* _mp_btn; VDKCheckButton* _any_btn; VDKCheckButton* _kp_btn; VDKCheckButton* _kr_btn; VDKCheckButton* _bp_btn; VDKCheckButton* _br_btn; VDKCheckButton* _rp_btn; VDKCheckButton* _cl_btn; VDKCustomButton* _clear_btn; VDKCustomButton* _setup_btn; Connection _kp_con; Connection _kr_con; Connection _bp_con; Connection _br_con; Connection _mk_con; Connection _mp_con; Connection _any_con; Connection _rp_con; Connection _cl2_con; Connection _cl3_con; bool _any_flag; bool _bp_flag; bool _br_flag; bool _kp_flag; bool _kr_flag; bool _mk_flag; bool _mp_flag; bool _rp_flag; bool _cl_flag; void any_handler(VDKObject*, const GdkEvent*); void mk_handler(VDKObject*, const VDKMouseEvent&); void mp_handler(VDKObject*, const VDKMouseEvent&); void kp_handler(VDKObject*, const VDKKeyEvent&); void kr_handler(VDKObject*, const VDKKeyEvent&); void bp_handler(VDKObject*, const VDKMouseEvent&); void br_handler(VDKObject*, const VDKMouseEvent&); void rp_handler(VDKObject*, const VDKPaintEvent&); void cl2_handler(VDKObject*, const VDKMouseEvent&); void cl3_handler(VDKObject*, const VDKMouseEvent&); void any_connect(bool mode); void kp_connect(bool mode); void kr_connect(bool mode); void bp_connect(bool mode); void br_connect(bool mode); void mp_connect(bool mode); void mk_connect(bool mode); void rp_connect(bool mode); void cl_connect(bool mode); VDKObject* _cw; public: EventTestBox(VDKForm*); void Setup(); VDKSignal1 OnMesg; }; // class MouseSetupDlg : public VDKForm // { // }; #endif /* _eventtestbox_h_ */ vdk-2.4.0/sigcvdktest/eventtestbox.cc0000644000000000000000000002762707211015212013330 #include #include EventTestBox::EventTestBox(VDKForm* pw) : VDKBox(pw, v_box), _bp_color(clBlue), _br_color(clYellow), _kp_color(clYellow), _kr_color(clGreen), _mk_color(clGreen), _mp_color(clRed), _rp_color(clBlack), _cl_color(clBlue), _any_flag(false), _bp_flag(false), _br_flag(false), _kp_flag(false), _kr_flag(false), _mk_flag(false), _mp_flag(false), _rp_flag(false), _cl_flag(false) {} void EventTestBox::Setup() { _event_area=new VDKCanvas(Owner(),200,200); _event_area->NormalBackground=clWhite; _event_area->Foreground=clBlack; _event_area->Enable(true); _event_area->Font=new VDKFont("*-courier-*-14-*"); VDKLabel* label=new VDKLabel(Owner(), "RawEvent :"); _any_entry=new VDKEntry(Owner()); _any_entry->SetEditable(false); _any_btn=new VDKCheckButton(Owner(), "Raw Events"); _mk_btn=new VDKCheckButton(Owner(), "Button Motion"); _mp_btn=new VDKCheckButton(Owner(), "Pointer Motion"); _kp_btn=new VDKCheckButton(Owner(), "Key Press"); _kr_btn=new VDKCheckButton(Owner(), "Key Release"); _bp_btn=new VDKCheckButton(Owner(), "Button Press"); _br_btn=new VDKCheckButton(Owner(), "Button Release"); _rp_btn=new VDKCheckButton(Owner(), "Paint Event"); _cl_btn=new VDKCheckButton(Owner(), "2x(3x)-Clicks"); _clear_btn=new VDKCustomButton(Owner(), "Clear"); _setup_btn=new VDKCustomButton(Owner(), "Setup"); VDKBox* hbox1=new VDKBox(Owner(), h_box); VDKEventBox* hbox2=new VDKEventBox(Owner(), h_box); VDKBox* hbox3=new VDKBox(Owner(), h_box); VDKBox* hbox4=new VDKBox(Owner(), h_box); hbox1->Add(label); hbox1->Add(_any_entry); hbox1->Add(_clear_btn); hbox1->Add(_setup_btn); hbox2->Add(_event_area); hbox3->Add(_any_btn); hbox3->Add(_kp_btn); hbox3->Add(_kr_btn); hbox3->Add(_rp_btn); hbox4->Add(_mk_btn); hbox4->Add(_mp_btn); hbox4->Add(_bp_btn); hbox4->Add(_br_btn); hbox4->Add(_cl_btn); Add(hbox1); Add(hbox2); Add(hbox3); Add(hbox4); _cw=_event_area; // Vernetzung _clear_btn->OnButtonPressed.connect(slot(*_event_area, &VDKCanvas::Clear)); _any_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::any_connect)); _kp_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::kp_connect)); _kr_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::kr_connect)); _mk_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::mk_connect)); _mp_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::mp_connect)); _bp_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::bp_connect)); _br_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::br_connect)); _rp_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::rp_connect)); _cl_btn->OnButtonToggled.connect(slot(*this, &EventTestBox::cl_connect)); // Let's it take effect _any_btn->SetChecked(true); _kp_btn->SetChecked(true); _kr_btn->SetChecked(true); _mk_btn->SetChecked(true); _mp_btn->SetChecked(true); _br_btn->SetChecked(true); _bp_btn->SetChecked(true); _rp_btn->SetChecked(true); _cl_btn->SetChecked(true); _setup_btn->SetTip("Not implemented yet"); _clear_btn->SetTip("Clear event indicating drawing-area"); _any_btn->SetTip("Turn receiving of Raw-Events on/off"); _mk_btn->SetTip("Motion events with any modifier was pressed"); _mp_btn->SetTip("Any Motion-Event"); _kp_btn->SetTip("Key-Press Events"); _kr_btn->SetTip("Key-Release Events"); _rp_btn->SetTip("Paint-Events To test cover a region of paintarea" "and then uncover it"); _cl_btn->SetTip("Make Double- and Tertinary-Clicks visible"); } void EventTestBox::any_handler(VDKObject* obj, const GdkEvent* eve) { char* signame; switch(eve->type){ case GDK_NOTHING: signame="GDK_NOTHING"; break; case GDK_DELETE: signame="GDK_DELETE"; break; case GDK_DESTROY: signame="GDK_DESTROY"; break; case GDK_EXPOSE: signame="GDK_EXPOSE"; break; case GDK_MOTION_NOTIFY: signame="GDK_MOTION_NOTIFY"; break; case GDK_BUTTON_PRESS: signame="GDK_BUTTON_PRESS"; break; case GDK_2BUTTON_PRESS: signame="GDK_2BUTTON_PRESS"; break; case GDK_3BUTTON_PRESS: signame="GDK_3BUTTON_PRESS"; break; case GDK_BUTTON_RELEASE: signame="GDK_BUTTON_RELEASE"; break; case GDK_KEY_PRESS: signame="GDK_KEY_PRESS"; break; case GDK_KEY_RELEASE: signame="GDK_KEY_RELEASE"; break; case GDK_ENTER_NOTIFY: signame="GDK_ENTER_NOTIFY"; break; case GDK_LEAVE_NOTIFY: signame="GDK_LEAVE_NOTIFY"; break; case GDK_FOCUS_CHANGE: signame="GDK_FOCUS_CHANGE"; break; case GDK_CONFIGURE: signame="GDK_CONFIGURE"; break; case GDK_MAP: signame="GDK_MAP"; break; case GDK_UNMAP: signame="GDK_UNMAP"; break; case GDK_PROPERTY_NOTIFY: signame="GDK_PROPERTY_NOTIFY"; break; case GDK_SELECTION_CLEAR: signame="GDK_SELECTION_CLEAR"; break; case GDK_SELECTION_REQUEST: signame="GDK_SELECTION_REQUEST"; break; case GDK_SELECTION_NOTIFY: signame="GDK_SELECTION_NOTIFY"; break; case GDK_PROXIMITY_IN: signame="GDK_PROXIMITY_IN"; break; case GDK_PROXIMITY_OUT: signame="GDK_PROXIMITY_OUT"; break; case GDK_DRAG_ENTER: signame="GDK_DRAG_ENTER"; break; case GDK_DRAG_LEAVE: signame="GDK_DRAG_LEAVE"; break; case GDK_DRAG_MOTION: signame="GDK_DRAG_MOTION"; break; case GDK_DRAG_STATUS: signame="GDK_DRAG_STATUS"; break; case GDK_DROP_START: signame="GDK_DROP_START"; break; case GDK_DROP_FINISHED: signame="GDK_DROP_FINISHED"; break; case GDK_CLIENT_EVENT: signame="GDK_CLIENT_EVENT"; break; case GDK_VISIBILITY_NOTIFY: signame="GDK_VISIBILITY_NOTIFY"; break; case GDK_NO_EXPOSE: signame="GDK_NO_EXPOSE"; break; default: signame="Error: Unknown Eventtype"; } _any_entry->SetText(signame); } void EventTestBox::any_connect(bool mode) { if(mode && !_any_flag){ _any_con=_cw->OnRawEvent.connect(slot(*this, &EventTestBox::any_handler)); _any_flag=true; } else if( !mode && _any_flag){ _cw->OnRawEvent.disconnect(_any_con); _any_flag=false; } } void EventTestBox::kp_connect(bool mode) { if(mode && !_kp_flag){ _kp_con=Owner()->OnKeyEvent.connect(slot(*this, &EventTestBox::kp_handler), KE_PRESS); _kp_flag=true; } else if(!mode && _kp_flag){ Owner()->OnKeyEvent.disconnect(_kp_con); _kp_flag=false; } } void EventTestBox::kr_connect(bool mode) { if(mode && !_kr_flag){ _kr_con=Owner()->OnKeyEvent.connect(slot(*this, &EventTestBox::kr_handler), KE_RELEASE); _kr_flag=true; } else if(!mode && _kr_flag){ Owner()->OnKeyEvent.disconnect(_kr_con); _kr_flag=false; } } void EventTestBox::mp_connect(bool mode) { if(mode && !_mp_flag){ _mp_con=_cw->OnPointerEvent.connect(slot(*this, &EventTestBox::mp_handler), PE_ALL); _mp_flag=true; } else if(!mode && _mp_flag){ _cw->OnPointerEvent.disconnect(_mp_con); _mp_flag=false; } } void EventTestBox::mk_connect(bool mode) { if(mode && !_mk_flag){ _mk_con=_cw->OnPointerEvent.connect(slot(*this, &EventTestBox::mk_handler), PE_PRESSED); _mk_flag=true; } else if( !mode && _mk_flag) { _cw->OnPointerEvent.disconnect(_mk_con); _mk_flag=false; } } void EventTestBox::bp_connect(bool mode) { if(mode && !_bp_flag){ _bp_con=_cw->OnButtonEvent.connect(slot(*this, &EventTestBox::bp_handler), BE_PRESS); _bp_flag=true; } else if( !mode && _bp_flag) { _cw->OnButtonEvent.disconnect(_bp_con); _bp_flag=false; } } void EventTestBox::br_connect(bool mode) { if(mode && !_br_flag){ _br_con=_cw->OnButtonEvent.connect(slot(*this, &EventTestBox::br_handler), BE_RELEASE); _br_flag=true; } else if( !mode && _br_flag) { _cw->OnButtonEvent.disconnect(_br_con); _br_flag=false; } } void EventTestBox::rp_connect(bool mode) { if(mode && !_rp_flag){ _rp_con=_cw->OnPaintEvent.connect(slot(*this, &EventTestBox::rp_handler)); _br_flag=true; } else if( !mode && _rp_flag) { _cw->OnPaintEvent.disconnect(_br_con); _br_flag=false; } } void EventTestBox::cl_connect(bool mode) { if(mode && !_cl_flag){ cout << "Establish CL_Connections" << endl; _cl2_con=_cw->OnButtonEvent.connect(slot(*this, &EventTestBox::cl2_handler), BE_CLICK2); _cl3_con=_cw->OnButtonEvent.connect(slot(*this, &EventTestBox::cl3_handler), BE_CLICK3); _cl_flag=true; } else if( !mode && _cl_flag) { _cw->OnPaintEvent.disconnect(_cl2_con); _cw->OnPaintEvent.disconnect(_cl3_con); _cl_flag=false; } } void EventTestBox::kp_handler(VDKObject* obj, const VDKKeyEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_kp_color; _event_area->DrawText(30,30, eve.String(),1); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::kr_handler(VDKObject* obj, const VDKKeyEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_kr_color; _event_area->DrawText(30,30, eve.String(),1); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::mp_handler(VDKObject* obj, const VDKMouseEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_mp_color; _event_area->DrawPoint(eve.Position().X(), eve.Position().Y()); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::mk_handler(VDKObject* obj, const VDKMouseEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_mk_color; _event_area->DrawPoint(eve.Position().X()-1, eve.Position().Y()-1); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::bp_handler(VDKObject* obj, const VDKMouseEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_bp_color; _event_area->DrawRect(1, eve.Position().X()-2, eve.Position().Y()-2, 5,5); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::br_handler(VDKObject* obj, const VDKMouseEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_br_color; _event_area->DrawRect(1, eve.Position().X()-2, eve.Position().Y()-2, 5,5); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::rp_handler(VDKObject* obj, const VDKPaintEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_rp_color; _event_area->DrawRect(0, eve.Area().Origin().X(), eve.Area().Origin().Y(), eve.Area().W(), eve.Area().H()); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::cl2_handler(VDKObject* obj, const VDKMouseEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_cl_color; cout << "CL2_Handler called" << endl; _event_area->DrawRect(0, eve.Position().X()-5, eve.Position().Y()-5, 10,10); _event_area->Redraw(); _event_area->Foreground=col; } void EventTestBox::cl3_handler(VDKObject* obj, const VDKMouseEvent& eve) { VDKRgb col=_event_area->Foreground; _event_area->Foreground=_cl_color; cout << "CL3_Handler called " << endl; _event_area->DrawRect(0, eve.Position().X()-10, eve.Position().Y()-10, 20,20); _event_area->Redraw(); _event_area->Foreground=col; }

q c #001544", ",q c #02133F", "'q c #02113A", ")q c #031138", "!q c #060F36", "~q c #081035", "{q c #0A1236", "]q c #0A1437", "^q c #0A1739", "/q c #0D1C3D", "(q c #101F3E", "_q c #101E39", ":q c #0D1931", "r c #061033", ",r c #071031", "'r c #07102F", ")r c #06112F", "!r c #05132E", "~r c #07152F", "{r c #09182F", "]r c #0A172A", "^r c #081424", "/r c #07111B", "(r c #091018", "_r c #091114", ":r c #0A1614", "s c #001963", ",s c #06195E", "'s c #122164", ")s c #131E5C", "!s c #041146", "~s c #081A48", "{s c #081B43", "]s c #0A1A3E", "^s c #0A183B", "/s c #0B1636", "(s c #091430", "_s c #07132D", ":s c #05112B", "t c #4480B6", ",t c #6DA9D7", "'t c #80BDD7", ")t c #84BED7", "!t c #4E82BB", "~t c #002F6F", "{t c #002068", "]t c #001D6B", "^t c #052272", "/t c #0E2575", "(t c #0B1C6A", "_t c #0A1863", ":t c #0F1960", "u c #6FAFD7", ",u c #74C2D7", "'u c #6EBFD7", ")u c #74C3D7", "!u c #81C1D7", "~u c #87C0D7", "{u c #4B7DBC", "]u c #0F3983", "^u c #012677", "/u c #03257C", "(u c #05237D", "_u c #06217C", ":u c #061F7B", "v c #6FC0D7", ",v c #6C9FD7", "'v c #0D3982", ")v c #0F3387", "!v c #00217A", "~v c #03227F", "{v c #031F80", "]v c #051F7E", "^v c #07207C", "/v c #071F79", "(v c #071C75", "_v c #061C71", ":v c #04206A", "w c #6EABD7", ",w c #2C5FA1", "'w c #00206E", ")w c #05297F", "!w c #03257F", "~w c #022080", "{w c #032181", "]w c #05227E", "^w c #08237C", "/w c #09237A", "(w c #082076", "_w c #061F71", ":w c #06226C", "x c #57A4D2", ",x c #58A2D3", "'x c #67B8D7", ")x c #6FB2D7", "!x c #3E7AB8", "~x c #002D74", "{x c #083382", "]x c #02277F", "^x c #062784", "/x c #032483", "(x c #062484", "_x c #072681", ":x c #09277F", "y c #4891BC", ",y c #4189B9", "'y c #3E87BE", ")y c #3D89BD", "!y c #3C8ABA", "~y c #3A8BB6", "{y c #3D8EBB", "]y c #3788B3", "^y c #3887B2", "/y c #4392BD", "(y c #4695C0", "_y c #2877A2", ":y c #2B7AA5", "z c #5C95B4", ",z c #6098B6", "'z c #659BB8", ")z c #6A9FB9", "!z c #74A2BB", "~z c #75A5BD", "{z c #74A8BF", "]z c #73ABC1", "^z c #74AFC2", "/z c #76B2C4", "(z c #79B5C6", "_z c #7CB8C8", ":z c #79BCCA", "A c #091916", ",A c #16312C", "'A c #133C36", ")A c #12473F", "!A c #16574F", "~A c #1A615B", "{A c #115653", "]A c #115352", "^A c #16575B", "/A c #21616A", "(A c #276771", "_A c #276572", ":A c #266473", "B c #4C91CC", ",B c #003E7E", "'B c #0C458C", ")B c #002F7C", "!B c #032D81", "~B c #052D85", "{B c #082F8C", "]B c #062D8C", "^B c #052C8B", "/B c #022986", "(B c #012883", "_B c #022780", ":B c #03277F", "C c #71BCD2", ",C c #82CAD4", "'C c #84C6D5", ")C c #82BCD0", "!C c #8ABDD0", "~C c #A1C7D7", "{C c #B9D5D7", "]C c #99C3D7", "^C c #8DBFD7", "/C c #87CDD7", "(C c #8DD2D7", "_C c #90D2D7", ":C c #8FD1D7", "D c #08433F", ",D c #0D4748", "'D c #175155", ")D c #1B545D", "!D c #18525D", "~D c #17515C", "{D c #18545C", "]D c #1D5A5F", "^D c #206062", "/D c #256668", "(D c #28696B", "_D c #2A6B6F", ":D c #2E6F73", "E c #3C779F", ",E c #1A5479", "'E c #1C567B", ")E c #2E6D90", "!E c #4182A8", "~E c #468EB6", "{E c #4498C4", "]E c #3D94BF", "^E c #449BC6", "/E c #4C9FCB", "(E c #064980", "_E c #003A76", ":E c #02397A", "F c #458DB8", ",F c #3E86B8", "'F c #448DBB", ")F c #4995BD", "!F c #4A96BF", "~F c #4896C1", "{F c #4A9BC3", "]F c #55A7C4", "^F c #61B0C6", "/F c #67B0C8", "(F c #69AFCA", "_F c #6AB3CC", ":F c #6AB4CE", "G c #00112D", ",G c #060803", "'G c #070000", ")G c #1C0D00", "!G c #8D7750", "~G c #C8BB82", "{G c #C8C178", "]G c #C8B55E", "^G c #C8B155", "/G c #C8A542", "(G c #C19C32", "_G c #A98223", ":G c #906924", "H c #579BC0", ",H c #5DA3C7", "'H c #7ABBD7", ")H c #91D3D7", "!H c #9BD5D7", "~H c #96D1D7", "{H c #91CCD7", "]H c #99D2D7", "^H c #A2D3D7", "/H c #8BAAC6", "(H c #425870", "_H c #00142D", ":H c #000D23", "I c #65838E", ",I c #84AFBF", "'I c #7BB8CD", ")I c #74B7D1", "!I c #78BBD6", "~I c #74B7D4", "{I c #5DA0BD", "]I c #41829E", "^I c #286A82", "/I c #16576B", "(I c #054755", "_I c #094C54", ":I c #165759", "J c #003466", ",J c #023668", "'J c #043868", ")J c #053969", "!J c #073B6B", "~J c #0D3F70", "{J c #003061", "]J c #003162", "^J c #053768", "/J c #023465", "(J c #013364", "_J c #0F4476", ":J c #1C4F7A", "K c #357169", ",K c #376864", "'K c #628684", ")K c #BED3D4", "!K c #7D8C87", "~K c #04150F", "{K c #00130D", "]K c #0C1F19", "^K c #02150F", "/K c #071812", "(K c #616D69", "_K c #41677A", ":K c #27546B", "L c #103B66", ",L c #13375B", "'L c #001431", ")L c #1A344D", "!L c #18344C", "~L c #143652", "{L c #0E395B", "]L c #20547C", "^L c #1D5A89", "/L c #20679D", "(L c #266BA2", "_L c #1E639A", ":L c #02457C", "M c #616C68", ",M c #456476", "'M c #315A70", ")M c #1C4B67", "!M c #043A5C", "~M c #114F74", "{M c #0B4C76", "]M c #044875", "^M c #004473", "/M c #034776", "(M c #0E5080", "_M c #1C5C8A", ":M c #216592", "N c #01286B", ",N c #02276B", "'N c #07286D", ")N c #072559", "!N c #001018", "~N c #000617", "{N c #050716", "]N c #120500", "^N c #725F3E", "/N c #C8D097", "(N c #C8C777", "_N c #C8C567", ":N c #C8C55D", "O c #87D0D7", ",O c #75B4D7", "'O c #1F5E87", ")O c #1A5A80", "!O c #205F82", "~O c #165372", "{O c #0F4865", "]O c #669FBA", "^O c #89C2D7", "/O c #77B3CD", "(O c #76B3D0", "_O c #73B4D2", ":O c #88C1D7", "P c #654707", ",P c #68522B", "'P c #161010", ")P c #181411", "!P c #161510", "~P c #15150D", "{P c #11120A", "]P c #080D07", "^P c #0A100E", "/P c #405357", "(P c #456B6E", "_P c #305D62", ":P c #28555B", "